diff --git a/DEPS b/DEPS index d720c40cc..7a367ba26 100644 --- a/DEPS +++ b/DEPS
@@ -297,15 +297,15 @@ # 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': 'de7a810734f3323b0830f8bd8ed76c35603b85f5', + 'skia_revision': 'a77024ee45e98c59af5bcd63c09e18997491b556', # 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': '5039a98e2164f946e3b86435fb7160ddc0a9bbef', + 'v8_revision': '9b4769535998b6e3864b7154363159dc50541066', # 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': '2089943b951dc268ecb2faeb67c744df21ef3a73', + 'angle_revision': '0f5770deabf20bfa7622cc70d4f7eed5a9e02af1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -376,7 +376,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'be22ffa7215a61951ef00fe885a0ae0d3631a827', + 'devtools_frontend_revision': 'ac83fd0b0031794f90b571efcff3b783be2a1066', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -412,7 +412,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'fa4a7291f2f6083b72a09cb4d944e68c109f8e2b', + 'dawn_revision': 'dadb934e19784bdc64c00e545b1da00654e6cac7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -436,11 +436,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libavif # and whatever else without interference from each other. - 'libavif_revision': 'dd2d67c5f976038354c0406a253e26dd2abc4632', + 'libavif_revision': 'd22d4de94120bced8cd473539c5da86f626510a7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling nearby # and whatever else without interference from each other. - 'nearby_revision': '123a2cfd1853b28f7cf9986ad10a866d33a1beee', + 'nearby_revision': 'e5c24b8b8ac4b093ccf741d1af8e3ecd896a1eda', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling securemessage # and whatever else without interference from each other. @@ -480,7 +480,7 @@ # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '6cc58d640cfe272f079b07da2e03781796c6a6aa', + 'libcxx_revision': '5df82514bc009b7fa3d4964ee1fdaf975646d44c', # GN CIPD package version. 'gn_version': 'git_revision:0bcd37bd2b83f1a9ee17088037ebdfe6eab6d31a', @@ -1156,7 +1156,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'd391be8a4325cc57f37dc77c6c24248b409af0f4', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '2db7368ba02c054a465d1511d6f68240581f9c60', 'condition': 'checkout_chromeos', }, @@ -1174,7 +1174,7 @@ # For Linux and Chromium OS. 'src/third_party/cros_system_api': { - 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '3befa16e0af013bceb5c37a7d7e72e1a610a3206', + 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '1771b7788497cf8573347ee90abd7346fd428d15', 'condition': 'checkout_linux', }, @@ -1573,7 +1573,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '14874308ba40333592fcb406f8870c16af2ed951', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'd7a3c46d86229bfcb6064bcf2b10be528bbcdf07', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1732,7 +1732,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '8a9afc652513fae1a913f3db1648e5adc54239b1', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'ab6233708cfeb18ffb94013371e4f7f748786a7e', + Var('webrtc_git') + '/src.git' + '@' + 'f4f22872d0d919ad716ae6bd4cd731b79c70936e', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1805,7 +1805,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@68a199d434a2e5001238efad978743194f3b496d', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@02a7f1d33d15c99c96c370036e4c6dd77b787cb9', 'condition': 'checkout_src_internal', }, @@ -1857,7 +1857,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'RKov5xJycWx1T0hd_TqQsJ58G2Y4DWCqQMhaNZjr2gIC', + 'version': '5aiSSTONnl1PqtAdZEgAZNfRqUSl2nAlWxjfH-DGOKwC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/WATCHLISTS b/WATCHLISTS index 25cc593..8b1468e8 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -2710,7 +2710,9 @@ 'hansberry+watch-multidevice@chromium.org', 'jonmann+watch-multidevice@chromium.org'], 'multipaste': ['andrewxu+watch-multipaste@google.com', + 'ckincaid+watch-multipaste@google.com', 'dmblack+watch-multipaste@google.com', + 'multipaste-eng+reviews@google.com', 'newcomer+watch-multipaste@google.com'], 'nacl': ['native-client-reviews@googlegroups.com'], 'native_client_sdk': ['binji+watch@chromium.org',
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java index 8e5258e..e4dc44e 100644 --- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java +++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -167,8 +167,6 @@ AutofillFeatures.AUTOFILL_ENABLE_SUPPORT_FOR_MORE_STRUCTURE_IN_ADDRESSES, "Enables support for address with a rich structure including separate street " + "names and house numberse."), - Flag.baseFeature(AutofillFeatures.AUTOFILL_FIX_FILLABLE_FIELD_TYPES, - "Fix how it is determined if a field type is fillable with Autofill"), Flag.baseFeature(AutofillFeatures.AUTOFILL_ENABLE_AUGMENTED_PHONE_COUNTRY_CODE, "Enables support for phone code number fields with additional text."), Flag.baseFeature(AutofillFeatures.AUTOFILL_ENFORCE_DELAYS_IN_STRIKE_DATABASE,
diff --git a/android_webview/java/src/org/chromium/android_webview/common/services/ServiceHelper.java b/android_webview/java/src/org/chromium/android_webview/common/services/ServiceHelper.java index 99f66af..a0cdfc7 100644 --- a/android_webview/java/src/org/chromium/android_webview/common/services/ServiceHelper.java +++ b/android_webview/java/src/org/chromium/android_webview/common/services/ServiceHelper.java
@@ -25,8 +25,7 @@ public static boolean bindService( Context context, Intent intent, ServiceConnection serviceConnection, int flags) { try { - boolean serviceBindingSuccess = - context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); + boolean serviceBindingSuccess = context.bindService(intent, serviceConnection, flags); if (!serviceBindingSuccess) { context.unbindService(serviceConnection); }
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index a1798a04..b6671e35f 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -2311,6 +2311,7 @@ "//chromeos/metrics", "//chromeos/services/bluetooth_config/public/cpp", "//chromeos/services/bluetooth_config/public/mojom", + "//chromeos/services/hotspot_config/public/mojom", "//chromeos/services/libassistant/public/cpp:structs", "//chromeos/services/libassistant/public/mojom", "//chromeos/services/network_config/public/cpp",
diff --git a/ash/app_list/app_list_bubble_presenter.cc b/ash/app_list/app_list_bubble_presenter.cc index e35288a..bc47312 100644 --- a/ash/app_list/app_list_bubble_presenter.cc +++ b/ash/app_list/app_list_bubble_presenter.cc
@@ -260,6 +260,7 @@ aura::client::GetFocusClient(bubble_widget_->GetNativeWindow()) ->RemoveObserver(this); } + // The widget bounds sometimes depend on the height of the apps grid, so set // the bounds after creating and setting the contents. This may cause the // bubble to change displays. @@ -274,6 +275,9 @@ aura::client::GetFocusClient(bubble_widget_->GetNativeWindow()) ->AddObserver(this); + shelf_observer_.Reset(); + shelf_observer_.Observe(shelf); + bubble_widget_->Show(); // The page must be set before triggering the show animation so the correct // animations are triggered. @@ -330,6 +334,10 @@ // Clean up assistant if it is showing. controller_->ScheduleCloseAssistant(); + + shelf_observer_.Reset(); + if (bubble_view_) + bubble_view_->SetDragAndDropHostOfCurrentAppList(nullptr); } aura::Window* AppListBubblePresenter::GetWindow() const { @@ -433,6 +441,12 @@ bubble_widget_->SetBounds(ComputeBubbleBounds(root_window, bubble_view_)); } +void AppListBubblePresenter::OnShelfShuttingDown() { + shelf_observer_.Reset(); + if (bubble_view_) + bubble_view_->SetDragAndDropHostOfCurrentAppList(nullptr); +} + void AppListBubblePresenter::OnPressOutsideBubble() { // Presses outside the bubble could be activating a shelf item. Record the // app list state prior to dismissal.
diff --git a/ash/app_list/app_list_bubble_presenter.h b/ash/app_list/app_list_bubble_presenter.h index dc046bf..d6f0dd7 100644 --- a/ash/app_list/app_list_bubble_presenter.h +++ b/ash/app_list/app_list_bubble_presenter.h
@@ -12,7 +12,10 @@ #include "ash/ash_export.h" #include "ash/public/cpp/app_list/app_list_types.h" #include "ash/public/cpp/shelf_types.h" +#include "ash/shelf/shelf.h" +#include "ash/shelf/shelf_observer.h" #include "base/memory/weak_ptr.h" +#include "base/scoped_observation.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/aura/client/focus_change_observer.h" #include "ui/display/display_observer.h" @@ -35,7 +38,8 @@ class ASH_EXPORT AppListBubblePresenter : public views::WidgetObserver, public aura::client::FocusChangeObserver, - public display::DisplayObserver { + public display::DisplayObserver, + public ShelfObserver { public: explicit AppListBubblePresenter(AppListControllerImpl* controller); AppListBubblePresenter(const AppListBubblePresenter&) = delete; @@ -92,6 +96,9 @@ void OnDisplayMetricsChanged(const display::Display& display, uint32_t changed_metrics) override; + // ShelfObserver: + void OnShelfShuttingDown() override; + views::Widget* bubble_widget_for_test() { return bubble_widget_; } AppListBubbleView* bubble_view_for_test() { return bubble_view_; } @@ -133,6 +140,8 @@ // Observes display configuration changes. display::ScopedDisplayObserver display_observer_{this}; + base::ScopedObservation<Shelf, ShelfObserver> shelf_observer_{this}; + base::WeakPtrFactory<AppListBubblePresenter> weak_factory_{this}; };
diff --git a/ash/app_list/app_list_presenter_impl.cc b/ash/app_list/app_list_presenter_impl.cc index f84aa1a..cb393e94 100644 --- a/ash/app_list/app_list_presenter_impl.cc +++ b/ash/app_list/app_list_presenter_impl.cc
@@ -202,7 +202,7 @@ // to remove this observation (given that shelf background changes should not // affect appearance of a closing app list view). shelf_observer_.Reset(); - shelf_observer_.Observe(shelf->shelf_layout_manager()); + shelf_observer_.Observe(shelf); // By setting us as a drag-and-drop recipient, the app list knows that we can // handle items. Do this on every show because |view_| can be reused after a @@ -305,8 +305,12 @@ base::Time::Now() - last_open_time_.value()); last_open_source_.reset(); last_open_time_.reset(); + if (!view_->GetWidget()->GetNativeWindow()->is_destroying()) view_->SetState(AppListViewState::kClosed); + + view_->SetDragAndDropHostOfCurrentAppList(nullptr); + base::RecordAction(base::UserMetricsAction("Launcher_Dismiss")); } @@ -714,11 +718,13 @@ SnapAppListBoundsToDisplayEdge(); } -void AppListPresenterImpl::WillDeleteShelfLayoutManager() { +void AppListPresenterImpl::OnShelfShuttingDown() { shelf_observer_.Reset(); + if (view_) + view_->SetDragAndDropHostOfCurrentAppList(nullptr); } -void AppListPresenterImpl::OnBackgroundUpdated( +void AppListPresenterImpl::OnBackgroundTypeChanged( ShelfBackgroundType background_type, AnimationChangeType change_type) { view_->SetShelfHasRoundedCorners(
diff --git a/ash/app_list/app_list_presenter_impl.h b/ash/app_list/app_list_presenter_impl.h index 708216a2..3a31117 100644 --- a/ash/app_list/app_list_presenter_impl.h +++ b/ash/app_list/app_list_presenter_impl.h
@@ -15,8 +15,8 @@ #include "ash/public/cpp/pagination/pagination_model_observer.h" #include "ash/public/cpp/shelf_types.h" #include "ash/public/cpp/shell_window_ids.h" -#include "ash/shelf/shelf_layout_manager.h" -#include "ash/shelf/shelf_layout_manager_observer.h" +#include "ash/shelf/shelf.h" +#include "ash/shelf/shelf_observer.h" #include "base/callback.h" #include "base/compiler_specific.h" #include "base/scoped_observation.h" @@ -46,7 +46,7 @@ public ui::ImplicitAnimationObserver, public views::WidgetObserver, public display::DisplayObserver, - public ShelfLayoutManagerObserver { + public ShelfObserver { public: static constexpr std::array<int, 7> kIdsOfContainersThatWontHideAppList = { kShellWindowId_AppListContainer, @@ -205,10 +205,10 @@ void OnDisplayMetricsChanged(const display::Display& display, uint32_t changed_metrics) override; - // ShelfLayoutManagerObserver overrides: - void WillDeleteShelfLayoutManager() override; - void OnBackgroundUpdated(ShelfBackgroundType background_type, - AnimationChangeType change_type) override; + // ShelfObserver overrides: + void OnShelfShuttingDown() override; + void OnBackgroundTypeChanged(ShelfBackgroundType background_type, + AnimationChangeType change_type) override; // Registers a callback that is run when the next frame successfully makes it // to the screen. @@ -232,8 +232,7 @@ display::ScopedDisplayObserver display_observer_{this}; // An observer that notifies AppListView when the shelf state has changed. - base::ScopedObservation<ShelfLayoutManager, ShelfLayoutManagerObserver> - shelf_observer_{this}; + base::ScopedObservation<Shelf, ShelfObserver> shelf_observer_{this}; // The target visibility of the AppListView, true if the target visibility is // shown.
diff --git a/ash/app_list/views/app_list_bubble_apps_page.cc b/ash/app_list/views/app_list_bubble_apps_page.cc index 1c56f0f..078d854 100644 --- a/ash/app_list/views/app_list_bubble_apps_page.cc +++ b/ash/app_list/views/app_list_bubble_apps_page.cc
@@ -360,6 +360,7 @@ void AppListBubbleAppsPage::PrepareForHideLauncher() { // Remove the gradient mask from the scroll view to improve performance. gradient_helper_.reset(); + scrollable_apps_grid_view_->EndDrag(/*cancel=*/true); } void AppListBubbleAppsPage::AnimateShowPage() {
diff --git a/ash/app_list/views/app_list_bubble_view.cc b/ash/app_list/views/app_list_bubble_view.cc index 43f4d40..1f5ce4de 100644 --- a/ash/app_list/views/app_list_bubble_view.cc +++ b/ash/app_list/views/app_list_bubble_view.cc
@@ -229,7 +229,6 @@ void AppListBubbleView::SetDragAndDropHostOfCurrentAppList( ApplicationDragAndDropHost* drag_and_drop_host) { - DCHECK(drag_and_drop_host); apps_page_->scrollable_apps_grid_view()->SetDragAndDropHostOfCurrentAppList( drag_and_drop_host); folder_view_->items_grid_view()->SetDragAndDropHostOfCurrentAppList(
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc index a96abb65..da8c2fd 100644 --- a/ash/app_list/views/apps_grid_view.cc +++ b/ash/app_list/views/apps_grid_view.cc
@@ -968,7 +968,12 @@ void AppsGridView::SetDragAndDropHostOfCurrentAppList( ApplicationDragAndDropHost* drag_and_drop_host) { + if (drag_and_drop_host_ == drag_and_drop_host) + return; drag_and_drop_host_ = drag_and_drop_host; + forward_events_to_drag_and_drop_host_ = false; + if (host_drag_start_timer_.IsRunning()) + host_drag_start_timer_.AbandonAndStop(); } bool AppsGridView::IsAnimatingView(AppListItemView* view) { @@ -3192,6 +3197,8 @@ } void AppsGridView::OnHostDragStartTimerFired() { + DCHECK(drag_and_drop_host_); + gfx::Point last_drag_point_in_screen = last_drag_point_; views::View::ConvertPointToScreen(this, &last_drag_point_in_screen); if (drag_and_drop_host_->StartDrag(drag_view_->item()->id(),
diff --git a/ash/app_list/views/apps_grid_view_unittest.cc b/ash/app_list/views/apps_grid_view_unittest.cc index d0953aa2..56275062 100644 --- a/ash/app_list/views/apps_grid_view_unittest.cc +++ b/ash/app_list/views/apps_grid_view_unittest.cc
@@ -81,6 +81,7 @@ #include "ui/views/controls/menu/menu_item_view.h" #include "ui/views/controls/menu/submenu_view.h" #include "ui/views/controls/textfield/textfield.h" +#include "ui/views/widget/widget_observer.h" namespace ash { namespace test { @@ -258,7 +259,7 @@ // Subclasses should set `is_rtl_`, `create_as_tablet_mode_`, etc. in their // constructors to indicate which mode to test. -class AppsGridViewTest : public AshTestBase { +class AppsGridViewTest : public AshTestBase, views::WidgetObserver { public: AppsGridViewTest() = default; AppsGridViewTest(const AppsGridViewTest&) = delete; @@ -346,9 +347,18 @@ test_api_ = std::make_unique<AppsGridViewTestApi>(apps_grid_view_); ui::PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest( true); + + // When root window where app list was last shown gets removed, the app list + // view hierarchy gets reset (and rebuilt on next show). If a test removes a + // display where app list is shown, all view pointers cached will become + // invalid - add a app list widget observer to clean up the state if the app + // list view gets removed before the test end. + apps_grid_view_->GetWidget()->AddObserver(this); } void TearDown() override { + if (apps_grid_view_) + apps_grid_view_->GetWidget()->RemoveObserver(this); page_flip_waiter_.reset(); ui::PresentationTimeRecorder::SetReportPresentationTimeImmediatelyForTest( false); @@ -356,6 +366,18 @@ AshTestBase::TearDown(); } + // views::WidgetObserver: + void OnWidgetDestroying(views::Widget* widget) override { + apps_grid_view_ = nullptr; + paged_apps_grid_view_ = nullptr; + app_list_folder_view_ = nullptr; + search_box_view_ = nullptr; + suggestions_container_ = nullptr; + expand_arrow_view_ = nullptr; + test_api_.reset(); + page_flip_waiter_.reset(); + } + protected: void AnimateFolderViewPageFlip(int target_page) { // Folders are only paged without productivity launcher enabled. @@ -4478,6 +4500,118 @@ EXPECT_TRUE(ShelfModel::Get()->items().empty()); } +TEST_P(AppsGridViewDragTest, RemoveDisplayWhileDraggingItemOntoShelf) { + UpdateDisplay("1024x768,1024x768"); + model_->PopulateApps(3); + + // Show the app list on the secondary display. + GetAppListTestHelper()->Dismiss(); + GetAppListTestHelper()->ShowAndRunLoop(GetSecondaryDisplay().id()); + if (!is_productivity_launcher_enabled_) { + GetAppListTestHelper()->GetAppListView()->SetState( + AppListViewState::kFullscreenAllApps); + } + + AppListItemView* const item_view = GetItemViewInTopLevelGrid(1); + + auto* generator = GetEventGenerator(); + generator->MoveMouseTo(item_view->GetBoundsInScreen().CenterPoint()); + generator->PressLeftButton(); + item_view->FireMouseDragTimerForTest(); + generator->MoveMouseBy(10, 10); + EXPECT_EQ(1, GetHapticTickEventsCount()); + + // Verify that item drag has started. + ASSERT_TRUE(apps_grid_view_->drag_item()); + ASSERT_TRUE(apps_grid_view_->IsDragging()); + ASSERT_EQ(item_view->item(), apps_grid_view_->drag_item()); + + Shelf* const secondary_shelf = + Shell::GetRootWindowControllerWithDisplayId(GetSecondaryDisplay().id()) + ->shelf(); + + // Shelf should start handling the drag if it moves within its bounds. + ShelfView* shelf_view = secondary_shelf->GetShelfViewForTesting(); + generator->MoveMouseTo(shelf_view->GetBoundsInScreen().left_center()); + ASSERT_TRUE(apps_grid_view_->FireDragToShelfTimerForTest()); + + EXPECT_EQ("Item 1", shelf_view->drag_and_drop_shelf_id().app_id); + + // Enable animations to catch potential crashes during display removal. + ui::ScopedAnimationDurationScaleMode non_zero_duration_mode( + ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); + + // Remove display while drag is over the shelf bounds, verify that the shelf + // model does not change. + UpdateDisplay("1024x768"); + EXPECT_FALSE(ShelfModel::Get()->IsAppPinned("Item 1")); + EXPECT_TRUE(ShelfModel::Get()->items().empty()); +} + +TEST_P(AppsGridViewDragTest, RemoveDisplayWhileDraggingFolderItemOntoShelf) { + UpdateDisplay("1024x768,1024x768"); + + // Creates a folder item - the folder size was chosen arbitrarily. + model_->CreateAndPopulateFolderWithApps(5); + // Add more apps to the root apps grid. + model_->PopulateApps(2); + + // Show the app list on the secondary display. + GetAppListTestHelper()->Dismiss(); + GetAppListTestHelper()->ShowAndRunLoop(GetSecondaryDisplay().id()); + if (!is_productivity_launcher_enabled_) { + GetAppListTestHelper()->GetAppListView()->SetState( + AppListViewState::kFullscreenAllApps); + } + + // Open the folder. + test_api_->PressItemAt(0); + + AppListItemView* const item_view = + GetItemViewInAppsGridAt(1, folder_apps_grid_view()); + + auto* generator = GetEventGenerator(); + generator->MoveMouseTo(item_view->GetBoundsInScreen().CenterPoint()); + generator->PressLeftButton(); + item_view->FireMouseDragTimerForTest(); + generator->MoveMouseBy(10, 10); + EXPECT_EQ(1, GetHapticTickEventsCount()); + + // Verify app list item drag has started. + ASSERT_TRUE(folder_apps_grid_view()->drag_item()); + ASSERT_TRUE(folder_apps_grid_view()->IsDragging()); + ASSERT_EQ(item_view->item(), folder_apps_grid_view()->drag_item()); + + generator->MoveMouseTo( + app_list_folder_view()->GetBoundsInScreen().right_center() + + gfx::Vector2d(20, 0)); + + // Fire the reparent timer that should be started when an item is dragged out + // of folder bounds. + ASSERT_TRUE(folder_apps_grid_view()->FireFolderItemReparentTimerForTest()); + + Shelf* const secondary_shelf = + Shell::GetRootWindowControllerWithDisplayId(GetSecondaryDisplay().id()) + ->shelf(); + + // Shelf should start handling the drag if it moves within its bounds. + ShelfView* shelf_view = secondary_shelf->GetShelfViewForTesting(); + generator->MoveMouseTo(shelf_view->GetBoundsInScreen().left_center()); + ASSERT_TRUE(folder_apps_grid_view()->FireDragToShelfTimerForTest()); + + EXPECT_EQ("Item 1", shelf_view->drag_and_drop_shelf_id().app_id); + + // Enable animations to catch potential crashes during display removal. + ui::ScopedAnimationDurationScaleMode non_zero_duration_mode( + ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); + + // Remove display while drag is over the shelf bounds, verify that the shelf + // model does not change. + UpdateDisplay("1024x768"); + EXPECT_FALSE(ShelfModel::Get()->IsAppPinned("Item 1")); + EXPECT_TRUE(ShelfModel::Get()->items().empty()); +} + TEST_P(AppsGridViewTabletTest, Basic) { base::HistogramTester histogram_tester;
diff --git a/ash/components/arc/mojom/accessibility_helper.mojom b/ash/components/arc/mojom/accessibility_helper.mojom index aa13075..4717411 100644 --- a/ash/components/arc/mojom/accessibility_helper.mojom +++ b/ash/components/arc/mojom/accessibility_helper.mojom
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Next MinVersion: 24 +// Next MinVersion: 25 module arc.mojom; @@ -169,10 +169,11 @@ [Extensible] enum AccessibilityIntListProperty { CHILD_NODE_IDS, - CUSTOM_ACTION_IDS, - STANDARD_ACTION_IDS + CUSTOM_ACTION_IDS_DEPRECATED, + STANDARD_ACTION_IDS_DEPRECATED }; +// Deprecated // These fields are taken from List<String> instance members of // AccessibilityNodeInfo. [Extensible] @@ -287,6 +288,14 @@ TYPE_SYSTEM, }; +// AccessibilityActionInAndroid is a struct to send information of +// available AccessibilityAction in Android to Chrome. +// https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.AccessibilityAction.html +struct AccessibilityActionInAndroid { + int32 id; + string? label; +}; + // AccessibilityNodeInfoData is a struct to contain info of // AccessibilityNodeInfo in Android. struct AccessibilityNodeInfoData { @@ -298,7 +307,7 @@ [MinVersion=1] map<AccessibilityIntListProperty, array<int32>>? int_list_properties; [MinVersion=3] map<AccessibilityStringListProperty, array<string>>? - string_list_properties; + string_list_properties; // Deprecated [MinVersion=5] map<AccessibilityStringProperty, array<SpanEntry>>? spannable_string_properties; [MinVersion=5] AccessibilityCollectionInfoData? collection_info; @@ -306,6 +315,8 @@ [MinVersion=5] AccessibilityRangeInfoData? range_info; [MinVersion=12] int32 window_id; [MinVersion=20] bool is_virtual_node; + [MinVersion=24] array<AccessibilityActionInAndroid>? standard_actions; + [MinVersion=24] array<AccessibilityActionInAndroid>? custom_actions; }; // AccessibilityWindowInfoData is a struct to contain info about @@ -418,9 +429,8 @@ map<AccessibilityEventIntListProperty, array<int32>>? int_list_properties; }; -// AccessibilityActionData is a struct to contain info of AccessibilityAction in -// Android. -// https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.AccessibilityAction.html +// AccessibilityActionData is a struct to send action information when Chrome +// invokes an action. struct AccessibilityActionData { int32 node_id;
diff --git a/ash/public/cpp/desk_template.cc b/ash/public/cpp/desk_template.cc index 175f5f9..96a6902 100644 --- a/ash/public/cpp/desk_template.cc +++ b/ash/public/cpp/desk_template.cc
@@ -34,12 +34,12 @@ } // namespace -DeskTemplate::DeskTemplate(const std::string& uuid, +DeskTemplate::DeskTemplate(base::GUID uuid, DeskTemplateSource source, const std::string& name, const base::Time created_time, DeskTemplateType type) - : uuid_(base::GUID::ParseCaseInsensitive(uuid)), + : uuid_(std::move(uuid)), source_(source), type_(type), created_time_(created_time), @@ -71,8 +71,7 @@ std::unique_ptr<DeskTemplate> DeskTemplate::Clone() const { std::unique_ptr<DeskTemplate> desk_template = std::make_unique<DeskTemplate>( - uuid_.AsLowercaseString(), source_, base::UTF16ToUTF8(template_name_), - created_time_, type_); + uuid_, source_, base::UTF16ToUTF8(template_name_), created_time_, type_); if (WasUpdatedSinceCreation()) desk_template->set_updated_time(updated_time_); if (desk_restore_data_)
diff --git a/ash/public/cpp/desk_template.h b/ash/public/cpp/desk_template.h index f9e34ef..eb55828 100644 --- a/ash/public/cpp/desk_template.h +++ b/ash/public/cpp/desk_template.h
@@ -48,7 +48,7 @@ public: // This constructor is used to instantiate DeskTemplate with a specific // source. - DeskTemplate(const std::string& uuid, + DeskTemplate(base::GUID uuid, DeskTemplateSource source, const std::string& name, const base::Time created_time,
diff --git a/ash/shelf/shelf.cc b/ash/shelf/shelf.cc index a382323..7b038ab3 100644 --- a/ash/shelf/shelf.cc +++ b/ash/shelf/shelf.cc
@@ -448,6 +448,9 @@ } void Shelf::ShutdownShelfWidget() { + for (auto& observer : observers_) + observer.OnShelfShuttingDown(); + // Remove observers prior to destroying child widgets, this prevents // activation changes from triggering during shutdown, see // https://crbug.com/1307898.
diff --git a/ash/shelf/shelf_observer.h b/ash/shelf/shelf_observer.h index b16305b..b2136753 100644 --- a/ash/shelf/shelf_observer.h +++ b/ash/shelf/shelf_observer.h
@@ -15,6 +15,9 @@ // Used to observe changes to the shelf. class ASH_EXPORT ShelfObserver { public: + // Called when the shelf shutdown starts. + virtual void OnShelfShuttingDown() {} + // Invoked when background type is changed. virtual void OnBackgroundTypeChanged(ShelfBackgroundType background_type, AnimationChangeType change_type) {}
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_am.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_am.xtb index fb0d6ed02..76b5d4e 100644 --- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_am.xtb +++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_am.xtb
@@ -185,7 +185,7 @@ <translation id="7500368597227394048">ሰረዝ</translation> <translation id="7611271430932669992">ትኩረቱን ወደ ብቅ-ባዮች እና መገናኛዎች ይውሰዱ</translation> <translation id="7635348532214572995">በመተግበሪያው ፍርግርግ ዙሪያ የመተግበሪያ አዶን አንቀሳቅስ</translation> -<translation id="766326951329901120">ይዘትን ከቅንጥብ ሰሌዳው ላይ እንደ ዝርግ ጽሑፍ ለጥፍ</translation> +<translation id="766326951329901120">ይዘትን ከቅንጥብ ሰሌዳው ላይ እንደ ዝርግ ጽሁፍ ለጥፍ</translation> <translation id="7673453620027697230">የመስኮት ቅጽበታዊ ገጽ እይታን ያንሱ/ይቅረጹ</translation> <translation id="7703010453515335249">ቅንፍ ግራ</translation> <translation id="7724603315864178912">ቁረጥ</translation>
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb index 5e4c603..a240158d 100644 --- a/ash/strings/ash_strings_af.xtb +++ b/ash/strings/ash_strings_af.xtb
@@ -49,10 +49,12 @@ <translation id="1201402288615127009">Volgende</translation> <translation id="1210557957257435379">skermopname</translation> <translation id="121097972571826261">Vorentoe per woord</translation> +<translation id="1217633719248931900">Gaan na program</translation> <translation id="1218444235442067213"><ph name="APP_NAME" />, Play Winkel-program</translation> <translation id="1225748608451425081">Jou Chromebook is gesluit weens 'n bekende probleem. Jy sal kan aanmeld ná: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Hou op kies</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> is gekoppel.</translation> +<translation id="1240638468526743569">’n Program</translation> <translation id="1246890715821376239">Ongesteunde programme</translation> <translation id="1247372569136754018">Mikrofoon (intern)</translation> <translation id="1247519845643687288">Onlangse programme</translation> @@ -446,6 +448,7 @@ <translation id="3593039967545720377">Kry jou knipbordgeskiedenis deur <ph name="SHORTCUT_KEY_NAME" /> + V te druk om jou knipbord te bekyk. Kopieer 'n item om te begin.</translation> <translation id="3593646411856133110">Swiep op en hou om oop programme te sien</translation> <translation id="3595596368722241419">Battery is vol</translation> +<translation id="3596012367874587041">Programinstellings</translation> <translation id="3600061223661453002">Af</translation> <translation id="3604801046548457007">Lessenaar <ph name="DESK_TITILE" /> is geskep</translation> <translation id="3606978283550408104">Braille-skerm gekoppel.</translation> @@ -686,6 +689,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" />% batterykrag</translation> <translation id="4917385247580444890">Sterk</translation> <translation id="4918086044614829423">Aanvaar</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> gebruik tans jou kamera</translation> <translation id="4925542575807923399">Die administrateur vir hierdie rekening vereis dat hierdie rekening die eerste een moet wees waarby in 'n veelvuldige aanmeldsessie aangemeld word.</translation> <translation id="4938176435186993759">Versteek alle voorstelle</translation> <translation id="4945196315133970626">Skakel kennisgewings af</translation> @@ -915,6 +919,7 @@ <translation id="6220928844947387476">Jy kan jouself en jou skerm nou op dieselfde tyd opneem</translation> <translation id="622484624075952240">Af</translation> <translation id="6231419273573514727">Randtoestelwerkverrigting kan beperk wees</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> gebruik tans jou kamera en mikrofoon</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Gesluit op horisontaal</translation> <translation id="6259254695169772643">Gebruik jou stilus om te kies</translation> @@ -1133,6 +1138,7 @@ <translation id="7544300628205093162">Sleutelbord se agterlig is aan</translation> <translation id="7548434653388805669">Slaaptyd</translation> <translation id="7551643184018910560">Speld aan rak vas</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> gebruik tans jou mikrofoon</translation> <translation id="7561982940498449837">Maak kieslys toe</translation> <translation id="7564874036684306347">Om vensters na 'n ander werkskerm te skuif, kan lei tot onverwagte gedrag. Opeenvolgende kennisgewings, vensters en dialoë kan tussen werkskerms verdeel word.</translation> <translation id="7569509451529460200">Braille en ChromeVox is geaktiveer</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 79308a5f..cf9f8de 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -138,7 +138,7 @@ <translation id="1708345662127501511">ዴስክ፦ <ph name="DESK_NAME" /></translation> <translation id="1709762881904163296">የአውታረ መረብ ቅንብሮች</translation> <translation id="1715293566947629045">መገለጫን በማሰናከል ላይ። ጥቂት ደቂቃዎችን ይጠብቁ።</translation> -<translation id="1719094688023114093">የቀጥታ ስርጭት መግለጫ ጽሑፍ በርቷል።</translation> +<translation id="1719094688023114093">የቀጥታ ስርጭት መግለጫ ጽሁፍ በርቷል።</translation> <translation id="1720011244392820496">የWi-Fi ስምረትን ያብሩ</translation> <translation id="1733996486177697563">ጠቆር ያለ እና ነጣ ያለ ገጽታ ይቀያይሩ። ዴስክቶፕ ላይ ይንኩ እና ይያዙ፣ ከዚያም ልጣፍ እና ቅጥን ይምረጡ።</translation> <translation id="1736898441010944794">«<ph name="NAME" />» ለብሉቱዝ መሳሪያዎች ይታያል።</translation> @@ -184,7 +184,7 @@ <translation id="1962969542251276847">የማያ ገጽ ቁልፍ</translation> <translation id="1969011864782743497"><ph name="DEVICE_NAME" /> (USB)</translation> <translation id="1972950159383891558">ሠላም <ph name="USERNAME" /></translation> -<translation id="1978498689038657292">ጽሑፍ ግቤት</translation> +<translation id="1978498689038657292">ጽሁፍ ግቤት</translation> <translation id="1982717156487272186">ቀዳሚ ሳምንትን አሳይ</translation> <translation id="1989113344093894667">ይዘትን መቅረጽ አልተቻለም</translation> <translation id="1990046457226896323">የንግግር ፋይሎች ወርደዋል</translation> @@ -446,6 +446,7 @@ <translation id="3593039967545720377">የእርስዎን የቅንጥብ ሰሌዳ ለመመልከት <ph name="SHORTCUT_KEY_NAME" /> + Vን በመጫን የቅንጥብ ሰሌዳዎን ይድረሱ። ለመጀመር አንድ ንጥል ይቅዱ።</translation> <translation id="3593646411856133110">ክፍት መተግበሪያዎችን ለመመልከት ወደ ላይ በጣት ጠርገው ይያዙ</translation> <translation id="3595596368722241419">ባትሪ ሙሉ ነው</translation> +<translation id="3596012367874587041">የመተግበሪያ ቅንብሮች</translation> <translation id="3600061223661453002">ጠፍቷል</translation> <translation id="3604801046548457007">ዴስክ <ph name="DESK_TITILE" /> ተፈጥሯል</translation> <translation id="3606978283550408104">የብሬይል ማሳያ ተገናኝቷል።</translation> @@ -519,7 +520,7 @@ <translation id="3977512764614765090">በ <ph name="PERCENTAGE" />% ላይ ባትሪ እና ኃይል እየሞላ ነው።</translation> <translation id="3986082989454912832">መልስ</translation> <translation id="3995138139523574647">የUSB-C መሣሪያ (የቀኝ ጎን የኋላ ወደብ)</translation> -<translation id="40062176907008878">የእጅ ጽሑፍ</translation> +<translation id="40062176907008878">የእጅ ጽሁፍ</translation> <translation id="4017989525502048489">የሌዘር ጨረር</translation> <translation id="401993194061514265">ምልክት ማድረጊያ የለም። ማያገጽ መቅርጽን ድጋሚ ይክፈቱ።</translation> <translation id="4021716437419160885">ወደ ታች ይሸብልሉ</translation> @@ -587,7 +588,7 @@ <translation id="439598569299422042">ባለበት ቆሟል፣ <ph name="SIZE_INFO" /></translation> <translation id="440113666232554208">ማያገጽ መቅርጽ ማስቀመጥ አይቻልም</translation> <translation id="4405151984121254935">የተገናኘው የዳርቻ ዓይነት አይደገፍም</translation> -<translation id="4406883609789734330">የቀጥታ ስርጭት መግለጫ ጽሑፍ</translation> +<translation id="4406883609789734330">የቀጥታ ስርጭት መግለጫ ጽሁፍ</translation> <translation id="4412944820643904175"><ph name="FEATURE_NAME" /> ጠፍቷል</translation> <translation id="4421231901400348175">የማያ ገጽዎን ቁጥጥር በርቀት እርዳታ በኩል ለ<ph name="HELPER_NAME" /> በማጋራት ላይ።</translation> <translation id="4424159417645388645">ዴስክ 5</translation> @@ -1086,7 +1087,7 @@ <ph name="END_TIME" />፣ <ph name="TIME_ZONE" />፣ <ph name="EVENT_SUMMARY" />። ለተጨማሪ ዝርዝሮች በGoogle ቀን መቁጠሪያ ውስጥ ይምረጡ።</translation> -<translation id="7302889331339392448">የቀጥታ መግለጫ ጽሑፍ ጠፍቷል።</translation> +<translation id="7302889331339392448">የቀጥታ መግለጫ ጽሁፍ ጠፍቷል።</translation> <translation id="7303365578352795231">በሌላ መሣሪያ ላይ ምላሽ በመስጠት ላይ።</translation> <translation id="7305884605064981971">ኤጅ</translation> <translation id="7313193732017069507">ካሜራን ዘርጋ</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 2d39de6..a3a9384 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">يمكنك الوصول إلى سجلّ الحافظة عن طريق الضغط على المفتاح <ph name="SHORTCUT_KEY_NAME" /> + V لعرض الحافظة. ابدأ الآن بنسخ أحد العناصر للبدء.</translation> <translation id="3593646411856133110">يُرجى التمرير السريع إلى الأعلى للاطّلاع على التطبيقات المفتوحة.</translation> <translation id="3595596368722241419">البطارية ممتلئة</translation> +<translation id="3596012367874587041">إعدادات التطبيق</translation> <translation id="3600061223661453002">غير مفعَّلة</translation> <translation id="3604801046548457007">تم إنشاء سطح المكتب <ph name="DESK_TITILE" />.</translation> <translation id="3606978283550408104">تم توصيل شاشة برايل.</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb index c2053d32..ba3e6f8 100644 --- a/ash/strings/ash_strings_as.xtb +++ b/ash/strings/ash_strings_as.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">আপোনাৰ ক্লিপব’ৰ্ড চাবলৈ <ph name="SHORTCUT_KEY_NAME" /> + V টিপি নিজৰ ক্লিপব’ৰ্ডৰ ইতিহাস এক্সেছ কৰক। আৰম্ভ কৰিবলৈ এটা বস্তু প্ৰতিলিপি কৰক।</translation> <translation id="3593646411856133110">খোলা এপ্সমূহ চাবলৈ ওপৰলৈ ছোৱাইপ কৰি ধৰি ৰাখক</translation> <translation id="3595596368722241419">বেটাৰী চ্চাৰ্জ সম্পূৰ্ণ হৈছে</translation> +<translation id="3596012367874587041">এপৰ ছেটিং</translation> <translation id="3600061223661453002">অফ কৰক</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> ডেস্কখন সৃষ্টি কৰা হ’ল</translation> <translation id="3606978283550408104">ব্ৰেইল ডিছপ্লে’ সংযোগ কৰা হৈছে।</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb index c59185d6..b09d04c 100644 --- a/ash/strings/ash_strings_az.xtb +++ b/ash/strings/ash_strings_az.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Chromebook cihazınız məlum problemə görə kilidlənib. Bu müddətdən sonra daxil ola biləcəksiniz: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Seçməyi dayandırın</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> qoşulub.</translation> +<translation id="1240638468526743569">Tətbiq</translation> <translation id="1246890715821376239">Dəstəklənməyən tətbiqlər</translation> <translation id="1247372569136754018">Mikrofon (daxili)</translation> <translation id="1247519845643687288">Son tətbiqlər</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Mübadilə buferinə baxmaq üçün <ph name="SHORTCUT_KEY_NAME" /> + V düyməsinə basaraq mübadilə buferi tarixçəsinə giriş edin. Başlamaq üçün bir elementi kopyalayın.</translation> <translation id="3593646411856133110">Açıq tətbiqləri görmək üçün yuxarı çəkib saxlayın</translation> <translation id="3595596368722241419">Batareya doludur</translation> +<translation id="3596012367874587041">Tətbiq ayarları</translation> <translation id="3600061223661453002">Deaktiv</translation> <translation id="3604801046548457007">Masa <ph name="DESK_TITILE" /> yaradıldı</translation> <translation id="3606978283550408104">Brayl displeyi qoşuludur.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" />% batareya</translation> <translation id="4917385247580444890">Güclü</translation> <translation id="4918086044614829423">Qəbul edin</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> hazırda kameranızdan istifadə edir</translation> <translation id="4925542575807923399">Bu hesabın administratoru istəyir ki, çoxsaylı hesab girişi sessiyalarında bu hesaba giriş birinci edilsin.</translation> <translation id="4938176435186993759">Bütün təklifləri gizlədin</translation> <translation id="4945196315133970626">Bildirişləri deaktiv edin</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">İndi özünüzü və ekranınızı eyni vaxtda çəkə bilərsiniz</translation> <translation id="622484624075952240">Aşağı</translation> <translation id="6231419273573514727">Periferik cihaz performansı məhdud ola bilər</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> hazırda kameranızdan və mikrofonunuzdan istifadə edir</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Horizontal formada kilidləndi</translation> <translation id="6259254695169772643">Seçmək üçün fırçadan istifadə edin</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">Klaviatura arxa işığı yanır</translation> <translation id="7548434653388805669">Yatmaq vaxtı</translation> <translation id="7551643184018910560">Rəfə sancaqlayın</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> hazırda mikrofonunuzdan istifadə edir</translation> <translation id="7561982940498449837">Menyunu bağlayın</translation> <translation id="7564874036684306347">Pəncərənin digər masaüstünə köçürülməsi gözlənilməz nəticələr verə bilər. Növbəti bildirişlər, pəncərə və dialoqlar masaüstülər arasında bölüşdürülə bilər.</translation> <translation id="7569509451529460200">Brayl və ChromeVox aktiv edildi</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb index 826bb572..8806bbf 100644 --- a/ash/strings/ash_strings_be.xtb +++ b/ash/strings/ash_strings_be.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Каб праглядзець гісторыю буфера абмену, націсніце <ph name="SHORTCUT_KEY_NAME" /> + V Каб пачаць, скапіруйце элемент.</translation> <translation id="3593646411856133110">Каб убачыць адкрытыя праграмы, правядзіце пальцам уверх і ўтрымлівайце</translation> <translation id="3595596368722241419">Акумулятар поўнасцю зараджаны</translation> +<translation id="3596012367874587041">Налады праграмы</translation> <translation id="3600061223661453002">Выкл.</translation> <translation id="3604801046548457007">Стол <ph name="DESK_TITILE" /> створаны</translation> <translation id="3606978283550408104">Дысплэй Брайля падключаны.</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index e44f0bd..c0491488 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Можете да видите историята на буферната памет, като натиснете <ph name="SHORTCUT_KEY_NAME" /> + V. За да започнете, копирайте даден елемент.</translation> <translation id="3593646411856133110">Прекарайте пръст нагоре и задръжте, за да видите отворените приложения</translation> <translation id="3595596368722241419">Батерията е заредена</translation> +<translation id="3596012367874587041">Настройки за приложението</translation> <translation id="3600061223661453002">Изкл.</translation> <translation id="3604801046548457007">Работен кът <ph name="DESK_TITILE" /> е създаден</translation> <translation id="3606978283550408104">Брайловият дисплей е свързан.</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 4a8b29c..5251de52 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">কোনও পরিচিত সমস্যার কারণে আপনার Chromebook লক হয়ে গেছে। আপনি এতক্ষণ পর আবার সাইন-ইন করতে পারবেন: <ph name="TIME_LEFT" />।</translation> <translation id="1229194443904279055">বেছে নেওয়ার কাজটি থামান</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> ফিচারটি কানেক্ট করা আছে।</translation> +<translation id="1240638468526743569">একটি অ্যাপ</translation> <translation id="1246890715821376239">কাজ করে না এমন অ্যাপ</translation> <translation id="1247372569136754018">মাইক্রোফোন (অভ্যন্তরীণ)</translation> <translation id="1247519845643687288">সাম্প্রতিক অ্যাপ</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">ক্লিপবোর্ড ইতিহাস অ্যাক্সেস করতে এবং ক্লিপবোর্ড দেখতে <ph name="SHORTCUT_KEY_NAME" /> + V টিপুন। শুরু করতে আইটেম কপি করুন।</translation> <translation id="3593646411856133110">খুলে রাখা অ্যাপগুলি দেখার জন্য উপরের দিকে সোয়াইপ করে ধরে রাখুন</translation> <translation id="3595596368722241419">ব্যাটারি পুরো চার্জ</translation> +<translation id="3596012367874587041">অ্যাপ সেটিংস</translation> <translation id="3600061223661453002">বন্ধ আছে</translation> <translation id="3604801046548457007">ডেস্ক <ph name="DESK_TITILE" /> তৈরি করা হয়েছে</translation> <translation id="3606978283550408104">ব্রেইল প্রদর্শন সংযুক্ত হয়েছে৷</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240">ব্যাটারিতে <ph name="BATTERY_PERCENTAGE" />% চার্জ আছে</translation> <translation id="4917385247580444890">জোরালো</translation> <translation id="4918086044614829423">স্বীকার</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> এখন আপনার ক্যামেরা ব্যবহার করছে</translation> <translation id="4925542575807923399">এই অ্যাকাউন্টের অ্যাডমিনিস্ট্রেটর অ্যাকাউন্টটিকে একাধিক সাইন-ইন সেশনের প্রথম সাইন-ইন করে থাকা অ্যাকাউন্ট হিসেবে রাখতে চায়৷</translation> <translation id="4938176435186993759">সব সাজেশন লুকান</translation> <translation id="4945196315133970626">বিজ্ঞপ্তি বন্ধ করুন</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">আপনি এখন একই সময়ে নিজে এবং আপনার স্ক্রিন রেকর্ড করতে পারবেন</translation> <translation id="622484624075952240">নিচের</translation> <translation id="6231419273573514727">পেরিফেরাল পারফর্ম্যন্স সীমাবদ্ধ হতে পারে</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> এখন আপনার ক্যামেরা এবং মাইক্রোফোন ব্যবহার করছে</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">স্ক্রিনটি ল্যান্ডস্কেপ মোডে লক করা আছে</translation> <translation id="6259254695169772643">বেছে নিতে স্টাইলাস ব্যবহার করুন</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">কীবোর্ড ব্যাকলাইট চালু আছে</translation> <translation id="7548434653388805669">শুতে যাওয়ার সময় হয়েছে</translation> <translation id="7551643184018910560">শেল্ফে পিন করুন</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> এখন আপনার মাইক্রোফোন ব্যবহার করছে</translation> <translation id="7561982940498449837">মেনু বন্ধ করুন</translation> <translation id="7564874036684306347">কোনও উইন্ডো অন্য ডেস্কটপে সরানো হলে সেটির আচরণে অপ্রত্যাশিত পরিবর্তন হতে পারে। পরবর্তী বিজ্ঞপ্তি, উইন্ডো এবং ডায়ালগ দুটি ডেস্কটপ মিলিয়ে দেখানো হতে পারে।</translation> <translation id="7569509451529460200">ব্রেল এবং ChromeVox সক্ষম করেছেন</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index 6c9f80fb..97e5bc0 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">Pristupite historiji međumemorije pritiskom na <ph name="SHORTCUT_KEY_NAME" /> + V da vidite međumemoriju. Kopirajte stavku da započnete.</translation> <translation id="3593646411856133110">Prevucite prema gore i zadržite da vidite otvorene aplikacije</translation> <translation id="3595596368722241419">Baterija je puna</translation> +<translation id="3596012367874587041">Postavke aplikacije</translation> <translation id="3600061223661453002">Isključeno</translation> <translation id="3604801046548457007">Radna površina <ph name="DESK_TITILE" /> je kreirana</translation> <translation id="3606978283550408104">Brajev je redak povezan.</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 991e610c..2484213 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Accedeix a l'historial del porta-retalls prement <ph name="SHORTCUT_KEY_NAME" />+V. Copia un element per començar.</translation> <translation id="3593646411856133110">Llisca cap amunt i mantén premut per veure les aplicacions obertes</translation> <translation id="3595596368722241419">Bateria carregada.</translation> +<translation id="3596012367874587041">Configuració de l'aplicació</translation> <translation id="3600061223661453002">Desactivat</translation> <translation id="3604801046548457007">S'ha creat l'escriptori <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">S'ha connectat la pantalla Braille.</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index 44e9b1fe..0716f185 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Chromebook je zamknut kvůli známému problému. Budete se moci přihlásit po: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Ukončit výběr</translation> <translation id="1239161794459865856">Funkce <ph name="FEATURE_NAME" /> je připojena.</translation> +<translation id="1240638468526743569">Aplikace</translation> <translation id="1246890715821376239">Nepodporované aplikace</translation> <translation id="1247372569136754018">Mikrofon (interní)</translation> <translation id="1247519845643687288">Poslední aplikace</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Stisknutím kláves <ph name="SHORTCUT_KEY_NAME" /> + V zobrazíte schránku a najdete její historii. Začněte tím, že zkopírujete položku.</translation> <translation id="3593646411856133110">Přejetím nahoru a podržením zobrazíte otevřené aplikace</translation> <translation id="3595596368722241419">Baterie je nabitá</translation> +<translation id="3596012367874587041">Nastavení aplikace</translation> <translation id="3600061223661453002">Vypnuto</translation> <translation id="3604801046548457007">Byla vytvořena plocha <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Je připojen hmatový displej.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" /> % baterie</translation> <translation id="4917385247580444890">Silný</translation> <translation id="4918086044614829423">Přijmout</translation> +<translation id="4919841137949306064">Aplikace <ph name="APP_NAME" /> používá vaši kameru</translation> <translation id="4925542575807923399">Správce tohoto účtu vyžaduje, aby se tento účet v relaci multiprofilu přihlásil jako první.</translation> <translation id="4938176435186993759">Skrýt všechny návrhy</translation> <translation id="4945196315133970626">Vypnout oznámení</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">Nyní můžete nahrávat sebe a obrazovku současně</translation> <translation id="622484624075952240">Dolů</translation> <translation id="6231419273573514727">Výkon periferního zařízení může být omezen</translation> +<translation id="6232891689835436217">Aplikace <ph name="APP_NAME" /> používá vaši kameru a mikrofon</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Uzamknuto na šířku</translation> <translation id="6259254695169772643">K výběru použijte dotykové pero</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">Podsvícení klávesnice je zapnuté</translation> <translation id="7548434653388805669">Čas jít spát</translation> <translation id="7551643184018910560">Připnout k poličce</translation> +<translation id="7557816257942363084">Aplikace <ph name="APP_NAME" /> používá váš mikrofon</translation> <translation id="7561982940498449837">Zavřít nabídku</translation> <translation id="7564874036684306347">Přesunutí oken na jinou plochu může vést k neočekávanému chování. Následná oznámení, okna a dialogy mohou být rozděleny mezi plochy.</translation> <translation id="7569509451529460200">Jsou zapnuty funkce Braille a ChromeVox</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb index ef5dab11..e5d8956 100644 --- a/ash/strings/ash_strings_cy.xtb +++ b/ash/strings/ash_strings_cy.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Cael mynediad at hanes eich clipfwrdd drwy bwyso <ph name="SHORTCUT_KEY_NAME" /> + V i weld eich clipfwrdd. Copïwch eitem i gychwyn arni.</translation> <translation id="3593646411856133110">Sweipiwch i fyny a daliwch i weld apiau sydd ar agor</translation> <translation id="3595596368722241419">Mae'r batri yn llawn</translation> +<translation id="3596012367874587041">Gosodiadau ap</translation> <translation id="3600061223661453002">Diffodd</translation> <translation id="3604801046548457007">Mae'r ddesg <ph name="DESK_TITILE" /> wedi'i chreu</translation> <translation id="3606978283550408104">Wedi cysylltu sgrîn braille.</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index dacda2f..02e49377 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Tryk på <ph name="SHORTCUT_KEY_NAME" />+V for at gå til din udklipsholders historik. Kopiér et element for at komme i gang.</translation> <translation id="3593646411856133110">Stryg opad, og hold fingeren nede for at se åbne apps</translation> <translation id="3595596368722241419">Batteri helt opladet</translation> +<translation id="3596012367874587041">Appindstillinger</translation> <translation id="3600061223661453002">Fra</translation> <translation id="3604801046548457007">Skrivebord <ph name="DESK_TITILE" /> blev oprettet</translation> <translation id="3606978283550408104">Der er tilsluttet en brailleskærm.</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index d606b558..3e7f707 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Du kannst die Zwischenablage öffnen, indem du „<ph name="SHORTCUT_KEY_NAME" /> + V“ drückst. Kopiere ein Element, das du zwischenspeichern und einfügen möchtest.</translation> <translation id="3593646411856133110">Nach oben wischen und halten, um geöffnete Apps zu sehen</translation> <translation id="3595596368722241419">Akku voll</translation> +<translation id="3596012367874587041">App-Einstellungen</translation> <translation id="3600061223661453002">Aus</translation> <translation id="3604801046548457007">Desktop <ph name="DESK_TITILE" /> erstellt</translation> <translation id="3606978283550408104">Verbindung zur Braillezeile hergestellt</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 60aabf37..cad5c27 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Αποκτήστε πρόσβαση στο ιστορικό του πρόχειρου πατώντας <ph name="SHORTCUT_KEY_NAME" /> + V για να προβάλετε το πρόχειρο. Αντιγράψτε ένα στοιχείο για να ξεκινήσετε.</translation> <translation id="3593646411856133110">Σύρετε προς τα επάνω και κρατήστε το δάχτυλό σας για να δείτε τις ανοικτές εφαρμογές.</translation> <translation id="3595596368722241419">Μπαταρία πλήρης</translation> +<translation id="3596012367874587041">Ρυθμίσεις εφαρμογής</translation> <translation id="3600061223661453002">Ανενεργή</translation> <translation id="3604801046548457007">Δημιουργήθηκε επιφάνεια εργασίας <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Συνδέθηκε η οθόνη Braille.</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 02b4b35..ca53a16 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -49,6 +49,7 @@ <translation id="1201402288615127009">Next</translation> <translation id="1210557957257435379">screen recording</translation> <translation id="121097972571826261">Forward by word</translation> +<translation id="1217633719248931900">Go to app</translation> <translation id="1218444235442067213"><ph name="APP_NAME" />, Play Store app</translation> <translation id="1225748608451425081">Your Chromebook is locked due to a known issue. You will be able to sign in after: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Stop selecting</translation> @@ -447,6 +448,7 @@ <translation id="3593039967545720377">Access your clipboard history by pressing <ph name="SHORTCUT_KEY_NAME" /> + V to view your clipboard. Copy an item to get started.</translation> <translation id="3593646411856133110">Swipe up and hold to see open apps</translation> <translation id="3595596368722241419">Battery full</translation> +<translation id="3596012367874587041">App settings</translation> <translation id="3600061223661453002">Off</translation> <translation id="3604801046548457007">Desk <ph name="DESK_TITILE" /> created</translation> <translation id="3606978283550408104">Braille display connected.</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index a55eb3c..c7337bf 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Presiona <ph name="SHORTCUT_KEY_NAME" /> + V para acceder al historial del portapapeles. Copia un elemento para comenzar.</translation> <translation id="3593646411856133110">Desliza hacia arriba y mantén presionado para ver las apps abiertas</translation> <translation id="3595596368722241419">Batería completa</translation> +<translation id="3596012367874587041">Configuración de la app</translation> <translation id="3600061223661453002">No</translation> <translation id="3604801046548457007">Se creó el escritorio <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Dispositivo braille conectado</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 8ed891c4..b37c354c 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Pulsa <ph name="SHORTCUT_KEY_NAME" /> + V para ver el historial del portapapeles. Copia un elemento para empezar.</translation> <translation id="3593646411856133110">Desliza el dedo hacia arriba y no lo levantes para ver las aplicaciones abiertas</translation> <translation id="3595596368722241419">Batería al máximo</translation> +<translation id="3596012367874587041">Configuración de la aplicación</translation> <translation id="3600061223661453002">Desactivado</translation> <translation id="3604801046548457007">Se ha creado el escritorio <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">La pantalla braille está conectada.</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 852dae0..5bc9b311 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Uurige oma lõikelaua ajalugu, vajutades klahvikombinatsiooni <ph name="SHORTCUT_KEY_NAME" /> + V, et lõikelauda vaadata. Alustamiseks kopeerige üksus.</translation> <translation id="3593646411856133110">Avatud rakenduste nägemiseks pühkige üles ja hoidke sõrme ekraanil</translation> <translation id="3595596368722241419">Aku on täis</translation> +<translation id="3596012367874587041">Rakenduse seaded</translation> <translation id="3600061223661453002">Väljas</translation> <translation id="3604801046548457007">Töölaud <ph name="DESK_TITILE" /> on loodud</translation> <translation id="3606978283550408104">Punktkirja ekraanikuva on ühendatud.</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb index c15d966..ff3ff559e 100644 --- a/ash/strings/ash_strings_eu.xtb +++ b/ash/strings/ash_strings_eu.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Arbeleko historia atzitzeko, sakatu <ph name="SHORTCUT_KEY_NAME" /> + V. Hasteko, kopiatu elementu bat.</translation> <translation id="3593646411856133110">Pasatu hatza gora eta eduki sakatuta irekitako aplikazioak ikusteko</translation> <translation id="3595596368722241419">Bateria beteta dago</translation> +<translation id="3596012367874587041">Aplikazioen ezarpenak</translation> <translation id="3600061223661453002">Desaktibatu</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> lan-eremua sortu da</translation> <translation id="3606978283550408104">Braille-pantaila konektatu da.</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 565fdfc..ad30506 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Chromebook شما بهدلیل مشکل شناختهشدهای قفل شده است. پس از <ph name="TIME_LEFT" /> میتوانید به سیستم وارد شوید.</translation> <translation id="1229194443904279055">توقف انتخاب</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> متصل است.</translation> +<translation id="1240638468526743569">برنامهای</translation> <translation id="1246890715821376239">برنامههای پشتیبانینشده</translation> <translation id="1247372569136754018">میکروفون (داخلی)</translation> <translation id="1247519845643687288">برنامههای اخیر</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">برای دسترسی به سابقه بریدهدان، <ph name="SHORTCUT_KEY_NAME" /> + V را فشار دهید تا بریدهدان را مشاهده کنید. برای شروع کار، موردی را کپی کنید.</translation> <translation id="3593646411856133110">برای دیدن برنامههای باز، تند بهبالا بکشید و نگه دارید</translation> <translation id="3595596368722241419">باتری پر است</translation> +<translation id="3596012367874587041">تنظیمات برنامه</translation> <translation id="3600061223661453002">خاموش</translation> <translation id="3604801046548457007">میز <ph name="DESK_TITILE" /> ایجاد شد</translation> <translation id="3606978283550408104">نمایشگر بریل متصل شد.</translation> @@ -537,6 +539,7 @@ <translation id="4123259114412175274">برای باز کردن قفل Chromebook، از روشن بودن بلوتوث تلفن مطمئن شوید</translation> <translation id="4125970834901680537">جاریسازی برنامه در حالت رایانه لوحی ممکن نیست. در حالت رایانه کیفی دوباره امتحان کنید.</translation> <translation id="4129129681837227511">برای دیدن اعلانها در صفحه قفل، ابتدا قفل را باز کنید و تنظیمات را تغییر دهید</translation> +<translation id="4130035430755296270">برای گزینههای طرحبندی بیشتر، همچنان نشانگر را نگه دارید</translation> <translation id="4136724716305260864">روشن تا طلوع آفتاب</translation> <translation id="4146833061457621061">Play music (موسیقی پخش کن)</translation> <translation id="4165275524535002941">کابل از نمایشگر پشتیبانی نمیکند</translation> @@ -685,6 +688,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" />٪ باتری</translation> <translation id="4917385247580444890">قوی</translation> <translation id="4918086044614829423">میپذیرم</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> درحال استفاده از دوربین است</translation> <translation id="4925542575807923399">سرپرست این حساب لازم میداند که این حساب اولین حسابی باشد که در جلسه چندگانه ورود به سیستم وارد سیستم شده باشد.</translation> <translation id="4938176435186993759">پنهان کردن همه پیشنهادها</translation> <translation id="4945196315133970626">غیرفعال کردن اعلانها</translation> @@ -914,6 +918,7 @@ <translation id="6220928844947387476">اکنون میتوانید همزمان هم از خودتان و هم از صفحهنمایش فیلمبرداری کنید</translation> <translation id="622484624075952240">پیکان پایین</translation> <translation id="6231419273573514727">عملکرد لوازم جانبی ممکن است محدود باشند</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> درحال استفاده از دوربین و میکروفون است</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">قفل درحالت افقی</translation> <translation id="6259254695169772643">برای انتخاب از قلم استفاده کنید</translation> @@ -1132,6 +1137,7 @@ <translation id="7544300628205093162">نور پسزمینه صفحهکلید روشن شد</translation> <translation id="7548434653388805669">وقت خواب</translation> <translation id="7551643184018910560">سنجاق کردن به فقسه</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> درحال استفاده از میکروفون است</translation> <translation id="7561982940498449837">بستن منو</translation> <translation id="7564874036684306347">انتقال پنجرهها به میز کار دیگر میتواند به رفتار غیرمنتظره منجر شود. اعلانها، پنجرهها و کادرهای گفتگوی بعدی ممکن است بین میز کارها تقسیم شوند.</translation> <translation id="7569509451529460200">بریل و ChromeVox فعال هستند</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index bff82e0..fd126086 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Avaa leikepöytä painamalla <ph name="SHORTCUT_KEY_NAME" /> + V, jotta voit nähdä leikepöydän historian. Aloita kopioimalla kohde.</translation> <translation id="3593646411856133110">Näet avoimet sovellukset pyyhkäisemällä ylös ja painamalla pitkään</translation> <translation id="3595596368722241419">Akku täynnä</translation> +<translation id="3596012367874587041">Sovellusasetukset</translation> <translation id="3600061223661453002">Pois</translation> <translation id="3604801046548457007">Työpöytä <ph name="DESK_TITILE" /> luotu</translation> <translation id="3606978283550408104">Pistekirjoitusnäyttö on yhdistetty.</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index a600e76c1b..378b72e 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">I-access ang history ng iyong clipboard sa pamamagitan ng pagpindot sa <ph name="SHORTCUT_KEY_NAME" /> + V para tingnan ang clipboard mo. Kumopya ng item para magsimula.</translation> <translation id="3593646411856133110">Mag-swipe pataas at i-hold para makita ang mga nakabukas na app</translation> <translation id="3595596368722241419">Puno na ang baterya</translation> +<translation id="3596012367874587041">Mga setting ng app</translation> <translation id="3600061223661453002">I-off</translation> <translation id="3604801046548457007">Ginawa ang Desk <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Nagkonekta ng braille display.</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb index 0b424cd..58148fd7 100644 --- a/ash/strings/ash_strings_fr-CA.xtb +++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">Accédez à l'historique du presse-papiers en appuyant sur<ph name="SHORTCUT_KEY_NAME" />+V. Cette action affichera le presse-papiers. Copiez un élément pour commencer.</translation> <translation id="3593646411856133110">Balayez l'écran vers le haut et maintenez le doigt sur l'écran pour afficher les applications ouvertes</translation> <translation id="3595596368722241419">Batterie entièrement chargée</translation> +<translation id="3596012367874587041">Paramètres de l'application</translation> <translation id="3600061223661453002">Désactivé</translation> <translation id="3604801046548457007">Bureau <ph name="DESK_TITILE" /> créé</translation> <translation id="3606978283550408104">L'afficheur braille est connecté.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index 5bbb6ce..1f7474e 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Appuyez sur <ph name="SHORTCUT_KEY_NAME" />+V pour afficher le presse-papiers et son historique. Copiez un élément pour commencer.</translation> <translation id="3593646411856133110">Balayez l'écran vers le haut et appuyez de manière prolongée pour afficher les applications ouvertes</translation> <translation id="3595596368722241419">Batterie pleine</translation> +<translation id="3596012367874587041">Paramètres de l'appli</translation> <translation id="3600061223661453002">Désactivé</translation> <translation id="3604801046548457007">Bureau <ph name="DESK_TITILE" /> créé</translation> <translation id="3606978283550408104">La plage braille est connectée.</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb index 56b9c18e..e000db71 100644 --- a/ash/strings/ash_strings_gl.xtb +++ b/ash/strings/ash_strings_gl.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Para acceder ao historial do teu portapapeis, preme <ph name="SHORTCUT_KEY_NAME" /> + V. Copia un elemento para comezar.</translation> <translation id="3593646411856133110">Pasa o dedo cara arriba e mantén premida a pantalla para ver as aplicacións abertas</translation> <translation id="3595596368722241419">Batería completa</translation> +<translation id="3596012367874587041">Axustes da aplicación</translation> <translation id="3600061223661453002">Desactivado</translation> <translation id="3604801046548457007">Creouse o escritorio <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">A liña braille está conectada.</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index bccf446..6fc0968 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">તમારું ક્લિપબોર્ડ જોવા માટે <ph name="SHORTCUT_KEY_NAME" /> + V દબાવીને તમારા ક્લિપબોર્ડનો ઇતિહાસ ઍક્સેસ કરો. શરૂ કરવા માટે કોઈ આઇટમ કૉપિ કરો.</translation> <translation id="3593646411856133110">ખુલ્લી ઍપ જોવા માટે ઉપર સ્વાઇપ કરો અને હોલ્ડ કરો</translation> <translation id="3595596368722241419">બૅટરી પૂર્ણ ચાર્જ</translation> +<translation id="3596012367874587041">ઍપ સેટિંગ</translation> <translation id="3600061223661453002">બંધ છે</translation> <translation id="3604801046548457007">ડેસ્ક <ph name="DESK_TITILE" /> બનાવ્યું</translation> <translation id="3606978283550408104">બ્રેઇલ ડિસ્પ્લે કનેક્ટ થયું.</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index 3a70bc0..e56a517 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">आपका Chromebook, एक जानी-पहचानी समस्या की वजह से लॉक है. आप इतने समय बाद साइन इन कर पाएंगे: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">टेक्स्ट चुनना बंद करें</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> कनेक्ट हो गया है.</translation> +<translation id="1240638468526743569">कोई ऐप्लिकेशन</translation> <translation id="1246890715821376239">काम नहीं करने वाले ऐप्लिकेशन</translation> <translation id="1247372569136754018">माइक्रोफ़ोन (आंतरिक)</translation> <translation id="1247519845643687288">हाल ही में इस्तेमाल किए गए ऐप्लिकेशन</translation> @@ -445,6 +446,7 @@ <translation id="3593039967545720377">अपना क्लिपबोर्ड इतिहास देखने के लिए, <ph name="SHORTCUT_KEY_NAME" /> + V दबाएं. इसका इस्तेमाल शुरू करने के लिए, किसी आइटम को कॉपी करें.</translation> <translation id="3593646411856133110">खुले हुए ऐप्लिकेशन देखने के लिए, ऊपर की ओर स्वाइप करके रखें</translation> <translation id="3595596368722241419">बैटरी पूरी हो गई</translation> +<translation id="3596012367874587041">ऐप्लिकेशन की सेटिंग</translation> <translation id="3600061223661453002">बंद करें</translation> <translation id="3604801046548457007">डेस्क <ph name="DESK_TITILE" /> बनाया गया</translation> <translation id="3606978283550408104">ब्रेल डिसप्ले कनेक्ट हो गया.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" />% बैटरी</translation> <translation id="4917385247580444890">मज़बूत</translation> <translation id="4918086044614829423">स्वीकार करें</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" />, फ़िलहाल आपके कैमरे का इस्तेमाल कर रहा है</translation> <translation id="4925542575807923399">इस खाते के एडमिन के लिए यह ज़रूरी है कि किसी एक से ज़्यादा साइन-इन वाले सत्र में यह खाता पहला साइन इन खाता हो.</translation> <translation id="4938176435186993759">सभी सुझाव छिपाएं</translation> <translation id="4945196315133970626">सूचनाएं पाने की सुविधा बंद करें</translation> @@ -913,6 +916,7 @@ <translation id="6220928844947387476">अब, कैमरे और स्क्रीन दोनों पर दिख रही चीज़ों की रिकॉर्डिंग एक साथ की जा सकती है</translation> <translation id="622484624075952240">नीचे</translation> <translation id="6231419273573514727">हो सकता है कि सहायक डिवाइस पूरी तरह काम न करें</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" />, फ़िलहाल आपके कैमरे और माइक्रोफ़ोन का इस्तेमाल कर रहा है</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">क्षैतिज पर लॉक किया गया</translation> <translation id="6259254695169772643">चुनने के लिए अपने स्टाइलस का इस्तेमाल करें</translation> @@ -1131,6 +1135,7 @@ <translation id="7544300628205093162">कीबोर्ड की बैकलाइट चालू है</translation> <translation id="7548434653388805669">सोने का समय हो गया</translation> <translation id="7551643184018910560">अलमारी से पिन करें</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" />, फ़िलहाल आपके माइक्रोफ़ोन का इस्तेमाल कर रहा है</translation> <translation id="7561982940498449837">मेन्यू बंद करें</translation> <translation id="7564874036684306347">विंडो को किसी दूसरे डेस्कटॉप पर ले जाने से अनचाहा बर्ताव हो सकता है. इसके बाद की सूचनाएं, विंडो और संवाद डेस्कटॉप के बीच बंट सकती हैं.</translation> <translation id="7569509451529460200">ब्रेल और ChromeVox सक्षम हैं</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index 317e9c1..f85116e 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">Da biste pristupili povijesti međuspremnika i pregledali je, pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V. Kopirajte stavku da biste započeli.</translation> <translation id="3593646411856133110">Prijeđite prstom prema gore i držite da biste vidjeli otvorene aplikacije</translation> <translation id="3595596368722241419">Baterija je puna</translation> +<translation id="3596012367874587041">Postavke aplikacije</translation> <translation id="3600061223661453002">Isključi</translation> <translation id="3604801046548457007">Izrađena je radna površina <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Brajev je redak povezan.</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 8500502a..dc3aa4deb 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Nyomja le a(z) <ph name="SHORTCUT_KEY_NAME" /> + V billentyűkombinációt a vágólap előzményeinek megtekintéséhez. Kezdésként másoljon valamit a vágólapra.</translation> <translation id="3593646411856133110">Felfelé csúsztatva és nyomva tartva megjelenik a többi alkalmazás</translation> <translation id="3595596368722241419">Akkumulátor feltöltve</translation> +<translation id="3596012367874587041">Alkalmazásbeállítások</translation> <translation id="3600061223661453002">Ki</translation> <translation id="3604801046548457007">Létrehozta a(z) „<ph name="DESK_TITILE" />” asztalt</translation> <translation id="3606978283550408104">Braille-kijelző csatlakoztatva.</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb index a64e133..f441f61 100644 --- a/ash/strings/ash_strings_hy.xtb +++ b/ash/strings/ash_strings_hy.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Ձեր Chromebook-ը կողպվել է խնդրի պատճառով։ Դուք կկարողանաք մուտք գործել <ph name="TIME_LEFT" />ից։</translation> <translation id="1229194443904279055">Դադարեցնել տեքստի ընտրությունը</translation> <translation id="1239161794459865856">«<ph name="FEATURE_NAME" />» գործառույթը միացված է։</translation> +<translation id="1240638468526743569">Հավելված</translation> <translation id="1246890715821376239">Չաջակցվող հավելվածներ</translation> <translation id="1247372569136754018">Խոսափող (ներքին)</translation> <translation id="1247519845643687288">Վերջին օգտագործած հավելվածները</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Սեղմեք <ph name="SHORTCUT_KEY_NAME" /> + V՝ սեղմատախտակի պատմությունը տեսնելու համար։ Սկսելու համար պատճենեք որևէ տարր։</translation> <translation id="3593646411856133110">Մատը սահեցրեք վեր և պահեք՝ բացված հավելվածները տեսնելու համար</translation> <translation id="3595596368722241419">Մարտկոցը լրիվ լիցքավորված է</translation> +<translation id="3596012367874587041">Հավելվածի կարգավորումներ</translation> <translation id="3600061223661453002">Անջատել</translation> <translation id="3604801046548457007">Աշխատասեղան <ph name="DESK_TITILE" />-ը ստեղծվել է</translation> <translation id="3606978283550408104">Բրայլյան էկրանը կապակցված է:</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240">Մարտկոցի լիցքը՝ <ph name="BATTERY_PERCENTAGE" /></translation> <translation id="4917385247580444890">Ուժեղ</translation> <translation id="4918086044614829423">Ընդունել</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> հավելվածը ներկայումս օգտագործում է ձեր տեսախցիկը</translation> <translation id="4925542575807923399">Այս հաշվի ադմինիստրատորը պահանջում է, որ այս հաշիվը լինի առաջին մուտքգործած հաշիվը բազմակի մուտքի աշխատաշրջանում:</translation> <translation id="4938176435186993759">Թաքցնել բոլոր առաջարկները</translation> <translation id="4945196315133970626">Անջատել ծանուցումները</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">Այժմ դուք կարող եք միաժամանակ տեսագրել ձեզ և ձեր էկրանը</translation> <translation id="622484624075952240">Վար</translation> <translation id="6231419273573514727">Արտաքին սարքերի աշխատանքի արդյունավետությունը կարող է սահմանափակվել</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> հավելվածը ներկայումս օգտագործում է ձեր տեսախցիկն ու խոսափողը</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Միայն հորիզոնական</translation> <translation id="6259254695169772643">Ընտրելու համար օգտագործեք ստիլուսը</translation> @@ -1131,6 +1135,7 @@ <translation id="7544300628205093162">Ստեղնաշարի հետնալույսը միացված է</translation> <translation id="7548434653388805669">Քնելու ժամն է</translation> <translation id="7551643184018910560">Ամրացնել դարակում</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> հավելվածը ներկայումս օգտագործում է ձեր խոսափողը</translation> <translation id="7561982940498449837">Փակել ընտրացանկը</translation> <translation id="7564874036684306347">Պատուհանների տեղափոխումն այլ աշխատասեղան կարող է անսպասելի արդյունքներ ունենալ: Հետագա ծանուցումները, պատուհանները և երկխոսությունները կարող են տրոհվել աշխատասեղանների միջև:</translation> <translation id="7569509451529460200">Բրայլյան գրատիպն ու ChromeVox-ը միացված են</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index b0a7baa..8db5c83 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Akses histori papan klip dengan menekan <ph name="SHORTCUT_KEY_NAME" /> + V untuk menampilkan papan klip. Salin item untuk memulai.</translation> <translation id="3593646411856133110">Geser ke atas dan tahan untuk melihat aplikasi yang terbuka</translation> <translation id="3595596368722241419">Baterai penuh</translation> +<translation id="3596012367874587041">Setelan aplikasi</translation> <translation id="3600061223661453002">Nonaktif</translation> <translation id="3604801046548457007">Desktop <ph name="DESK_TITILE" /> dibuat</translation> <translation id="3606978283550408104">Penampil Braille terhubung.</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb index 2efaf97..a8c6219f 100644 --- a/ash/strings/ash_strings_is.xtb +++ b/ash/strings/ash_strings_is.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Opnaðu klippiborðsferilinn þinn með því að ýta á <ph name="SHORTCUT_KEY_NAME" /> + V til að skoða klippiborðið. Afritaðu atriði til að hefjast handa.</translation> <translation id="3593646411856133110">Strjúktu upp og haltu fingri þar til að sjá opin forrit</translation> <translation id="3595596368722241419">Rafhlaða fullhlaðin</translation> +<translation id="3596012367874587041">Forritastillingar</translation> <translation id="3600061223661453002">Slökkt</translation> <translation id="3604801046548457007">Skjáborð <ph name="DESK_TITILE" /> búið til</translation> <translation id="3606978283550408104">Blindraletursskjár tengdur.</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index 66f98d56..84cc09b6 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Accedi alla cronologia degli appunti premendo <ph name="SHORTCUT_KEY_NAME" /> + V per visualizzare gli appunti. Copia un elemento per iniziare.</translation> <translation id="3593646411856133110">Scorri verso l'alto e tieni premuto per vedere le app aperte</translation> <translation id="3595596368722241419">Batteria carica</translation> +<translation id="3596012367874587041">Impostazioni app</translation> <translation id="3600061223661453002">Off</translation> <translation id="3604801046548457007">Scrivania <ph name="DESK_TITILE" /> creata</translation> <translation id="3606978283550408104">Display Braille collegato.</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index f9ef964..a427845 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -100,6 +100,7 @@ <translation id="1455242230282523554">הצגת הגדרות השפה</translation> <translation id="1460620680449458626">צלילים מושתקים.</translation> <translation id="1467432559032391204">שמאלה</translation> +<translation id="146902737843070955">האדמין שלך ביקש את השינוי הזה</translation> <translation id="147310119694673958">טעינת הסוללה של הטלפון: %<ph name="BATTERY_PERCENTAGE" /></translation> <translation id="1479909375538722835">תפריט נגישות צף</translation> <translation id="1480845547124508962"><ph name="CURRENT_TIME" />, אפשר לפתוח את תצוגת היומן בלחיצה על Enter</translation> @@ -445,6 +446,7 @@ <translation id="3593039967545720377">כדי להיכנס להיסטוריית הלוח, יש ללחוץ על <ph name="SHORTCUT_KEY_NAME" /> + V לצפייה בלוח. כדי להתחיל, צריך להעתיק פריט.</translation> <translation id="3593646411856133110">כדי להציג את האפליקציות הפתוחות, מחליקים כלפי מעלה ולוחצים לחיצה ארוכה</translation> <translation id="3595596368722241419">סוללה מלאה</translation> +<translation id="3596012367874587041">הגדרות האפליקציה</translation> <translation id="3600061223661453002">כבוי</translation> <translation id="3604801046548457007">שולחן העבודה <ph name="DESK_TITILE" /> נוצר</translation> <translation id="3606978283550408104">צג ברייל מחובר</translation> @@ -837,6 +839,7 @@ <translation id="5779721926447984944">קבצים מוצמדים</translation> <translation id="5788127256798019331">קובצי Play</translation> <translation id="5790085346892983794">הצלחה</translation> +<translation id="5804651031882187592">השבתת ההגדרה 'נעילת כרטיס ה-SIM'</translation> <translation id="5805809050170488595">יש ללחוץ כדי להפעיל את <ph name="NETWORK_NAME" /></translation> <translation id="5825969630400862129">הגדרות של מכשירים מחוברים</translation> <translation id="5837036133683224804">הפסקת <ph name="ROUTE_TITLE" /> במכשיר <ph name="RECEIVER_NAME" /></translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index 45e932c..3fca8b44 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377"><ph name="SHORTCUT_KEY_NAME" /> + V キーを押してクリップボードを表示すると、クリップボードにコピーしたデータの履歴にアクセスできます。開始するにはアイテムをコピーします。</translation> <translation id="3593646411856133110">開いているアプリを表示するには、上にスワイプして長押ししてください</translation> <translation id="3595596368722241419">バッテリー残量: フル</translation> +<translation id="3596012367874587041">アプリの設定</translation> <translation id="3600061223661453002">オフ</translation> <translation id="3604801046548457007">デスク <ph name="DESK_TITILE" /> が作成されました</translation> <translation id="3606978283550408104">ブライユ点字ディスプレイが接続されています。</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb index 11b5f7f..ca85f03 100644 --- a/ash/strings/ash_strings_ka.xtb +++ b/ash/strings/ash_strings_ka.xtb
@@ -49,6 +49,7 @@ <translation id="1201402288615127009">შემდეგი</translation> <translation id="1210557957257435379">ეკრანის ჩაწერა</translation> <translation id="121097972571826261">ერთი სიტყვით წინ</translation> +<translation id="1217633719248931900">აპზე გადასვლა</translation> <translation id="1218444235442067213"><ph name="APP_NAME" />, Play Store აპი</translation> <translation id="1225748608451425081">თქვენი Chromebook დაბლოკილია ცნობილი პრობლემის გამო. შესვლას შეძლებთ გარკვეული დროის შემდეგ: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">არჩევის შეწყვეტა</translation> @@ -447,6 +448,7 @@ <translation id="3593039967545720377">თქვენი გაცვლის ბუფერის ისტორიაზე წვდომისთვის და გაცვლის ბუფერის სანახავად დააჭირეთ კლავიშთა კომბინაციას <ph name="SHORTCUT_KEY_NAME" /> + V. დასაწყებად დააკოპირეთ ერთეული.</translation> <translation id="3593646411856133110">გახსნილი აპების სანახავად გადაფურცლეთ ზემოთ და არ აუშვათ</translation> <translation id="3595596368722241419">ბატარეა სავსეა</translation> +<translation id="3596012367874587041">აპის პარამეტრები</translation> <translation id="3600061223661453002">გამორთვა</translation> <translation id="3604801046548457007">სამუშაო მაგიდა <ph name="DESK_TITILE" /> შექმნილია</translation> <translation id="3606978283550408104">ბრაილის დისპლეი შეერთებულია.</translation> @@ -538,6 +540,7 @@ <translation id="4123259114412175274">თქვენი Chromebook განსაბლოკად დარწმუნდით, რომ თქვენი ტელეფონის Bluetooth ჩართულია</translation> <translation id="4125970834901680537">აპების სტრიმინგი ვერ მოხერხდება ტაბლეტის რეჟიმში. ცადეთ ხელახლა ლეპტოპის რეჟიმის გამოყენებით.</translation> <translation id="4129129681837227511">ჩაკეტილ ეკრანზე შეტყობინებების სანახავად საჭიროა განბლოკვა და პარამეტრის შეცვლა</translation> +<translation id="4130035430755296270">განლაგებების მეტი ვარიანტებისთვის გააგრძელეთ გადატარება</translation> <translation id="4136724716305260864">ჩართულია მზის ამოსვლამდე</translation> <translation id="4146833061457621061">მუსიკის დაკვრა</translation> <translation id="4165275524535002941">კაბელს შეიძლება არ ჰქონდეს ეკრანების მხარდაჭერა</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb index 59ccd76..98eff4f 100644 --- a/ash/strings/ash_strings_kk.xtb +++ b/ash/strings/ash_strings_kk.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Буферді көру үшін <ph name="SHORTCUT_KEY_NAME" /> + V басу арқылы буфер тарихын пайдаланыңыз. Бастау үшін элементті көшіріңіз.</translation> <translation id="3593646411856133110">Ашық қолданбаларды көру үшін жоғары сипап, ұстап тұрыңыз.</translation> <translation id="3595596368722241419">Батарея толы</translation> +<translation id="3596012367874587041">Қолданба параметрлері</translation> <translation id="3600061223661453002">Өшіру</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> үстелі жасалды.</translation> <translation id="3606978283550408104">Брайль дисплейі қосылды.</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb index 596b8e48a..1cd76d7c 100644 --- a/ash/strings/ash_strings_km.xtb +++ b/ash/strings/ash_strings_km.xtb
@@ -49,10 +49,12 @@ <translation id="1201402288615127009">បន្ទាប់</translation> <translation id="1210557957257435379">ការថតវីដេអូអេក្រង់</translation> <translation id="121097972571826261">ទៅមុខមួយពាក្យ</translation> +<translation id="1217633719248931900">ចូលទៅកាន់កម្មវិធី</translation> <translation id="1218444235442067213"><ph name="APP_NAME" />, កម្មវិធីនៅលើ Play Store</translation> <translation id="1225748608451425081">Chromebook របស់អ្នកជាប់សោ ដោយសារបញ្ហាដែលស្គាល់។ អ្នកនឹងអាចចូលគណនី បន្ទាប់ពីរយៈពេល៖ <ph name="TIME_LEFT" /> ទៀត។</translation> <translation id="1229194443904279055">ឈប់ជ្រើសរើស</translation> <translation id="1239161794459865856">បានភ្ជាប់ <ph name="FEATURE_NAME" />។</translation> +<translation id="1240638468526743569">កម្មវិធីមួយ</translation> <translation id="1246890715821376239">កម្មវិធីដែលមិនអាចប្រើបាន</translation> <translation id="1247372569136754018">មីក្រូហ្វូន (ខាងក្នុង)</translation> <translation id="1247519845643687288">កម្មវិធីថ្មីៗ</translation> @@ -446,6 +448,7 @@ <translation id="3593039967545720377">ចូលប្រើប្រវត្តិឃ្លីបបតរបស់អ្នកដោយចុច <ph name="SHORTCUT_KEY_NAME" /> + V ដើម្បីមើលឃ្លីបបតរបស់អ្នក។ សូមចម្លងធាតុណាមួយ ដើម្បីចាប់ផ្ដើម។</translation> <translation id="3593646411856133110">អូសឡើងលើ រួចសង្កត់ឱ្យជាប់ ដើម្បីមើលកម្មវិធីដែលបើក</translation> <translation id="3595596368722241419">ថ្មពេញ</translation> +<translation id="3596012367874587041">ការកំណត់កម្មវិធី</translation> <translation id="3600061223661453002">បិទ</translation> <translation id="3604801046548457007">បានបង្កើតតុទី <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">អេក្រង់ប្រែលត្រូវបានភ្ជាប់</translation> @@ -685,6 +688,7 @@ <translation id="490788395437447240">ថ្ម <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="4917385247580444890">ខ្លាំង</translation> <translation id="4918086044614829423">ទទួល</translation> +<translation id="4919841137949306064">បច្ចុប្បន្ន <ph name="APP_NAME" /> កំពុងប្រើកាមេរ៉ារបស់អ្នក</translation> <translation id="4925542575807923399">អ្នកគ្រប់គ្រងគណនីនេះតម្រូវឲ្យគណនីនេះជាគណនីចូលមុននៅក្នុងវេនចូលច្រើនគណនី។</translation> <translation id="4938176435186993759">លាក់ការណែនាំទាំងអស់</translation> <translation id="4945196315133970626">បិទការជូនដំណឹង</translation> @@ -914,6 +918,7 @@ <translation id="6220928844947387476">ឥឡូវនេះអ្នកអាចថតខ្លួនអ្នក និងអេក្រង់របស់អ្នកក្នុងពេលតែមួយបាន</translation> <translation id="622484624075952240">ចុះក្រោម</translation> <translation id="6231419273573514727">ប្រតិបត្តិការរបស់ឧបករណ៍សម្រាប់ភ្ជាប់ជាមួយកុំព្យូទ័រអាចមានកម្រិត</translation> +<translation id="6232891689835436217">បច្ចុប្បន្ន <ph name="APP_NAME" /> កំពុងប្រើកាមេរ៉ា និងមីក្រូហ្វូនរបស់អ្នក</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">បានចាក់សោឱ្យស្ថិតក្នុងទិសដៅផ្ដេក</translation> <translation id="6259254695169772643">ប្រើប៊ិចរបស់អ្នកដើម្បីជ្រើសរើស</translation> @@ -1132,6 +1137,7 @@ <translation id="7544300628205093162">ពន្លឺផ្នែកខាងក្រោយនៃក្ដារចុចត្រូវបានបើក</translation> <translation id="7548434653388805669">ដល់ពេលគេងហើយ</translation> <translation id="7551643184018910560">ដៅទៅធ្នើ</translation> +<translation id="7557816257942363084">បច្ចុប្បន្ន <ph name="APP_NAME" /> កំពុងប្រើមីក្រូហ្វូនរបស់អ្នក</translation> <translation id="7561982940498449837">បិទម៉ឺនុយ</translation> <translation id="7564874036684306347">ការផ្លាស់ទីវិនដូទៅកុំព្យូទ័រផ្សេងទៀតអាចបណ្តាលឱ្យមានសកម្មភាពខុសប្រក្រតី។ ការជូនដំណឹងបន្តបន្ទាប់ វិនដូ និងប្រអប់បញ្ចូលអាចត្រូវបានបំបែកពីកុំព្យូទ័រនីមួយៗ។</translation> <translation id="7569509451529460200">បានបើកប្រ៊ែល និង ChromeVox</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index a936db6..aed090e 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">ನಿಮ್ಮ ಕ್ಲಿಪ್ಬೋರ್ಡ್ ಅನ್ನು ವೀಕ್ಷಿಸಲು <ph name="SHORTCUT_KEY_NAME" /> + V ಅನ್ನು ಒತ್ತುವ ಮೂಲಕ ನಿಮ್ಮ ಕ್ಲಿಪ್ಬೋರ್ಡ್ ಇತಿಹಾಸವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು. ಪ್ರಾರಂಭಿಸಲು, ಐಟಂ ಅನ್ನು ನಕಲಿಸಿ.</translation> <translation id="3593646411856133110">ತೆರೆದಿರುವ ಆ್ಯಪ್ಗಳನ್ನು ನೋಡಲು, ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ, ಒತ್ತಿಹಿಡಿಯಿರಿ</translation> <translation id="3595596368722241419">ಬ್ಯಾಟರಿ ಭರ್ತಿಯಾಗಿದೆ</translation> +<translation id="3596012367874587041">ಆ್ಯಪ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="3600061223661453002">ಆಫ್ ಮಾಡಿ</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> ಡೆಸ್ಕ್ ಅನ್ನು ರಚಿಸಲಾಗಿದೆ</translation> <translation id="3606978283550408104">ಬ್ರೈಲ್ ಡಿಸ್ಪ್ಲೇ ಸಂಪರ್ಕಗೊಳಿಸಲಾಗಿದೆ.</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 5cfa294b..bec5daf0 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377"><ph name="SHORTCUT_KEY_NAME" /> + V 키를 눌러 클립보드를 열면 클립보드 기록에 액세스할 수 있습니다. 시작하려면 항목을 복사하세요.</translation> <translation id="3593646411856133110">위로 스와이프한 후 눌러 열려 있는 앱 보기</translation> <translation id="3595596368722241419">배터리 충전 완료</translation> +<translation id="3596012367874587041">앱 설정</translation> <translation id="3600061223661453002">사용 설정</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> 데스크가 생성되었습니다.</translation> <translation id="3606978283550408104">점자 디스플레이가 연결되었습니다.</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb index b713872..1ef1e94 100644 --- a/ash/strings/ash_strings_ky.xtb +++ b/ash/strings/ash_strings_ky.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Алмашуу буферин көрүү үчүн <ph name="SHORTCUT_KEY_NAME" /> + V баскычтарын басып, алмашуу буферинин таржымалына кирүү мүмкүнчүлүгүн алыңыз. Баштоо үчүн элементти көчүрүңүз.</translation> <translation id="3593646411856133110">Ачылган колдонмолорду көрүү үчүн экранды өйдө сүрүп, коё бербей кармап туруңуз</translation> <translation id="3595596368722241419">Батарея толук</translation> +<translation id="3596012367874587041">Колдонмонун жөндөөлөрү</translation> <translation id="3600061223661453002">Өчүк</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> иш тактасы түзүлдү</translation> <translation id="3606978283550408104">Брайль дисплеи туташты.</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb index 22769eb..e7d7a18 100644 --- a/ash/strings/ash_strings_lo.xtb +++ b/ash/strings/ash_strings_lo.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">ເຂົ້າເຖິງປະຫວັດຄລິບບອດຂອງທ່ານໂດຍການກົດ <ph name="SHORTCUT_KEY_NAME" /> + V ເພື່ອເບິ່ງຄລິບບອດຂອງທ່ານ. ສຳເນົາລາຍການໃດໜຶ່ງເພື່ອເລີ່ມຕົ້ນ.</translation> <translation id="3593646411856133110">ປັດຂຶ້ນຄ້າງໄວ້ເພື່ອເບິ່ງແອັບທີ່ເປີດຢູ່</translation> <translation id="3595596368722241419">ແບັດເຕີຣີເຕັມ</translation> +<translation id="3596012367874587041">ການຕັ້ງຄ່າແອັບ</translation> <translation id="3600061223661453002">ປິດ</translation> <translation id="3604801046548457007">ສ້າງເດັສ <ph name="DESK_TITILE" /> ແລ້ວ</translation> <translation id="3606978283550408104">ການສະແດງຕົວໜັງສືນູນເຊື່ອມຕໍ່ແລ້ວ.</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index c0373bf..d25dca4 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Pasiekite iškarpinės istoriją paspaudę <ph name="SHORTCUT_KEY_NAME" /> ir V, kad peržiūrėtumėte iškarpinę. Jei norite pradėti, nukopijuokite elementą.</translation> <translation id="3593646411856133110">Perbraukite aukštyn ir laikykite, kad peržiūrėtumėte atidarytas programas</translation> <translation id="3595596368722241419">Akumuliatorius įkrautas</translation> +<translation id="3596012367874587041">Programos nustatymai</translation> <translation id="3600061223661453002">Išjungta</translation> <translation id="3604801046548457007">Sukurtas darbalaukis „<ph name="DESK_TITILE" />“</translation> <translation id="3606978283550408104">Brailio ekranas prijungtas.</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index b1ac939..7dd8585 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Lai skatītu starpliktuvi un piekļūtu starpliktuves vēsturei, nospiediet taustiņu kombināciju <ph name="SHORTCUT_KEY_NAME" />+V. Lai sāktu darbu, kopējiet kādu vienumu.</translation> <translation id="3593646411856133110">Velciet augšup un turiet, lai skatītu atvērtās lietotnes.</translation> <translation id="3595596368722241419">Akumulators pilns</translation> +<translation id="3596012367874587041">Lietotnes iestatījumi</translation> <translation id="3600061223661453002">Izslēgta</translation> <translation id="3604801046548457007">Darbvirsma <ph name="DESK_TITILE" /> ir izveidota</translation> <translation id="3606978283550408104">Savienojums ar Braila displeju ir izveidots.</translation> @@ -537,6 +538,7 @@ <translation id="4123259114412175274">Lai atbloķētu Chromebook datoru, pārliecinieties, ka tālrunī ir ieslēgts Bluetooth savienojums.</translation> <translation id="4125970834901680537">Lietotņu saturu nevar straumēt planšetdatora režīmā. Mēģiniet vēlreiz klēpjdatora režīmā.</translation> <translation id="4129129681837227511">Lai skatītu paziņojumus bloķēšanas ekrānā, atbloķējiet, lai mainītu iestatījumu</translation> +<translation id="4130035430755296270">Lai skatītu citas izkārtojuma iespējas, turpiniet turēt kursoru turpat</translation> <translation id="4136724716305260864">Ieslēgts līdz saullēktam</translation> <translation id="4146833061457621061">Atskaņot mūziku</translation> <translation id="4165275524535002941">Iespējams, vads neatbalsta displejus</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb index 5cd3a61..1bebee6 100644 --- a/ash/strings/ash_strings_mk.xtb +++ b/ash/strings/ash_strings_mk.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">Пристапете до историјата на привремената меморија така што ќе притиснете <ph name="SHORTCUT_KEY_NAME" /> + V за да се прикаже привремената меморија. Копирајте ставка за да започнете.</translation> <translation id="3593646411856133110">Повлечете нагоре и задржете за да ги видите отворените апликации</translation> <translation id="3595596368722241419">Батеријата е полна</translation> +<translation id="3596012367874587041">Поставки за апликацијата</translation> <translation id="3600061223661453002">Исклучи</translation> <translation id="3604801046548457007">Работниот простор <ph name="DESK_TITILE" /> е создаден</translation> <translation id="3606978283550408104">Поврзан екран за брајово писмо.</translation> @@ -539,6 +540,7 @@ <translation id="4123259114412175274">За да го отклучите вашиот Chromebook, уверете се дека Bluetooth на телефонот е вклучен</translation> <translation id="4125970834901680537">Не може да се стримуваат апликации во режим на таблет. Обидете се повторно во режим на лаптоп.</translation> <translation id="4129129681837227511">За да гледате известувања на заклучениот екран, отклучете за да ја промените поставката</translation> +<translation id="4130035430755296270">Наместете го курсорот за повеќе опции за распоред</translation> <translation id="4136724716305260864">Вклучено до изгрејсонце</translation> <translation id="4146833061457621061">Пушти музика</translation> <translation id="4165275524535002941">Кабелот не поддржува екрани</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index cda40cf..f147b0e 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">അറിയപ്പെടുന്ന ഒരു പ്രശ്നം കാരണം നിങ്ങളുടെ Chromebook ലോക്ക് ചെയ്തിരിക്കുന്നു. ഇനിപ്പറയുന്ന സമയത്തിന് ശേഷം നിങ്ങൾക്ക് സൈൻ ഇൻ ചെയ്യാനാകും: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">തിരഞ്ഞെടുക്കുന്നത് നിർത്തുക</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> കണക്റ്റ് ചെയ്തു.</translation> +<translation id="1240638468526743569">ഒരു ആപ്പ്</translation> <translation id="1246890715821376239">പിന്തുണയില്ലാത്ത ആപ്പുകൾ</translation> <translation id="1247372569136754018">മൈക്രോഫോൺ (ഇന്റേണൽ)</translation> <translation id="1247519845643687288">അടുത്തിടെ ലോഞ്ച് ചെയ്ത ആപ്പുകൾ</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">നിങ്ങളുടെ ക്ലിപ്പ്ബോർഡ് കാണാൻ <ph name="SHORTCUT_KEY_NAME" /> + V അമർത്തുക, തുടർന്ന് ക്ലിപ്പ്ബോർഡ് ചരിത്രം ആക്സസ് ചെയ്യുക. ആരംഭിക്കാൻ ഒരു ഇനം പകർത്തുക.</translation> <translation id="3593646411856133110">തുറന്നിരിക്കുന്ന ആപ്പുകൾ കാണാൻ മുകളിലേക്ക് സ്വൈപ്പ് ചെയ്ത് പിടിക്കുക</translation> <translation id="3595596368722241419">ബാറ്ററി നിറഞ്ഞു</translation> +<translation id="3596012367874587041">ആപ്പ് ക്രമീകരണം</translation> <translation id="3600061223661453002">ഓഫാണ്</translation> <translation id="3604801046548457007">ഡെസ്ക് <ph name="DESK_TITILE" /> സൃഷ്ടിച്ചു</translation> <translation id="3606978283550408104">ബ്രെയ്ലി ഡിസ്പ്ലേ കണക്റ്റ് ചെയ്തു.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" />% ബാറ്ററി</translation> <translation id="4917385247580444890">ശക്തം</translation> <translation id="4918086044614829423">സ്വീകരിക്കുക</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> നിലവിൽ നിങ്ങളുടെ ക്യാമറ ഉപയോഗിക്കുന്നു</translation> <translation id="4925542575807923399">ഈ അക്കൗണ്ട് ഒന്നിലധികം സൈൻ ഇൻ സെഷനിൽ സൈൻ ഇൻ ചെയ്തിരിക്കുന്ന ആദ്യ അക്കൗണ്ട് ആയിരിക്കാൻ ഈ അക്കൗണ്ടിനായുള്ള അഡ്മിനിസ്ട്രേറ്റർ ആവശ്യപ്പെടുന്നു.</translation> <translation id="4938176435186993759">എല്ലാ നിർദ്ദേശങ്ങളും മറയ്ക്കുക</translation> <translation id="4945196315133970626">അറിയിപ്പുകൾ ഓഫാക്കുക</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">നിങ്ങൾക്ക് ഇപ്പോൾ നിങ്ങളെയും ഒപ്പം സ്ക്രീനും ഒരേസമയം റെക്കോർഡ് ചെയ്യാം</translation> <translation id="622484624075952240">താഴേക്കുള്ള കീ</translation> <translation id="6231419273573514727">പെരിഫറൽ പ്രകടനം പരിമിതപ്പെട്ടേക്കാം</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> നിലവിൽ നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ഉപയോഗിക്കുന്നു</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">സമാന്തരമായി ലോക്ക് ചെയ്തു</translation> <translation id="6259254695169772643">തിരഞ്ഞെടുക്കാൻ നിങ്ങളുടെ സ്റ്റൈലസ് ഉപയോഗിക്കുക</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">കീബോർഡ് ബാക്ക്ലൈറ്റ് ഓണാണ്</translation> <translation id="7548434653388805669">ഉറങ്ങാൻ സമയമായി</translation> <translation id="7551643184018910560">ഷെൽഫിലേക്ക് പിൻ ചെയ്യുക</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> നിലവിൽ നിങ്ങളുടെ മൈക്രോഫോൺ ഉപയോഗിക്കുന്നു</translation> <translation id="7561982940498449837">മെനു അടയ്ക്കുക</translation> <translation id="7564874036684306347">മറ്റൊരു ഡെസ്ക്ടോപ്പിലേക്ക് വിൻഡോകൾ നീക്കുന്നത് അപ്രതീക്ഷിതമായ പ്രവർത്തനരീതിയ്ക്ക് ഇടയാക്കാം. തുടർന്നുള്ള അറിയിപ്പുകൾ, വിൻഡോകൾ, ഡയലോഗുകൾ എന്നിവ ഡെസ്ക്ടോപ്പുകൾക്കിടയിൽ വിഭജിക്കപ്പെടാം.</translation> <translation id="7569509451529460200">Braille, ChromeVox എന്നിവ പ്രവർത്തനക്ഷമമാക്കി</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb index d0acb5b1..1071f2e4 100644 --- a/ash/strings/ash_strings_mn.xtb +++ b/ash/strings/ash_strings_mn.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">Та түр санах ойгоо харахын тулд <ph name="SHORTCUT_KEY_NAME" /> + V дээр дарж түр санах ойн түүхдээ хандана уу. Эхлүүлэхийн тулд зүйл хуулна уу.</translation> <translation id="3593646411856133110">Нээлттэй аппуудыг харахын тулд дээш шудраад удаан дарна уу</translation> <translation id="3595596368722241419">Цэнэг дүүрсэн.</translation> +<translation id="3596012367874587041">Aппын тохиргоо</translation> <translation id="3600061223661453002">Унтраах</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> дэлгэц үүсгэлээ</translation> <translation id="3606978283550408104">Брайль дэлгэц холбогдсон.</translation> @@ -539,6 +540,7 @@ <translation id="4123259114412175274">Өөрийн Chromebook-н түгжээг тайлахын тулд утасныхаа Bluetooth-г асаалттай эсэхийг шалгана уу</translation> <translation id="4125970834901680537">Таблет горимд апп дамжуулах боломжгүй. Зөөврийн компьютерын горимд дахин оролдоно уу.</translation> <translation id="4129129681837227511">Мэдэгдлийг түгжигдсэн дэлгэц дээрээ харахын тулд төхөөрөмжийн түгжээг тайлж, тохиргоог өөрчилнө үү</translation> +<translation id="4130035430755296270">Бүдүүвчийн илүү олон сонголтыг харахын тулд үргэлжлүүлэн зөөгөөрэй</translation> <translation id="4136724716305260864">Нар мандах хүртэл асаалттай</translation> <translation id="4146833061457621061">Хөгжим тоглуулах</translation> <translation id="4165275524535002941">Кабель нь дэлгэцүүдийг дэмжихгүй байж магадгүй</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index f450595..e6d372db 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">तुमचे क्लिपबोर्ड पाहण्यासाठी, <ph name="SHORTCUT_KEY_NAME" /> + V दाबून तुमचा क्लिपबोर्ड इतिहास ॲक्सेस करा. सुरुवात करण्यासाठी आयटम कॉपी करा.</translation> <translation id="3593646411856133110">उघडी अॅप्स पाहण्यासाठी वर स्वाइप करा आणि धरून ठेवा</translation> <translation id="3595596368722241419">बॅटरी पूर्ण चार्ज</translation> +<translation id="3596012367874587041">अॅप सेटिंग्ज</translation> <translation id="3600061223661453002">बंद आहे</translation> <translation id="3604801046548457007">डेस्क <ph name="DESK_TITILE" /> तयार केले</translation> <translation id="3606978283550408104">ब्रेल डिस्प्ले कनेक्ट केला.</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 938e3ed..f1571ff 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">Akses sejarah papan keratan anda dengan menekan <ph name="SHORTCUT_KEY_NAME" /> + V untuk melihat papan keratan anda. Salin item untuk bermula.</translation> <translation id="3593646411856133110">Leret ke atas dan tahan untuk melihat apl yang terbuka</translation> <translation id="3595596368722241419">Bateri penuh</translation> +<translation id="3596012367874587041">Tetapan apl</translation> <translation id="3600061223661453002">Mati</translation> <translation id="3604801046548457007">Meja <ph name="DESK_TITILE" /> dihasilkan</translation> <translation id="3606978283550408104">Paparan Braille disambungkan.</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb index 084e729b..6c8ca9cd 100644 --- a/ash/strings/ash_strings_my.xtb +++ b/ash/strings/ash_strings_my.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">သင်၏ကလစ်ဘုတ်ကိုကြည့်ရန် <ph name="SHORTCUT_KEY_NAME" /> + V နှိပ်ခြင်းဖြင့် သင့်ကလစ်ဘုတ်မှတ်တမ်းကို ဝင်ကြည့်ပါ။ စတင်ရန် အကြောင်းအရာတစ်ခုကို မိတ္တူကူးပါ။</translation> <translation id="3593646411856133110">ဖွင့်ထားသောအက်ပ်များ ကြည့်ရန် အပေါ်သို့ပွတ်ဆွဲပြီး ဖိထားပါ</translation> <translation id="3595596368722241419">ဘက်ထရီ အားပြည့်နေ</translation> +<translation id="3596012367874587041">အက်ပ်ဆက်တင်များ</translation> <translation id="3600061223661453002">ပိတ်</translation> <translation id="3604801046548457007">'မြင်ကွင်း <ph name="DESK_TITILE" />' ကို ပြုလုပ်လိုက်သည်</translation> <translation id="3606978283550408104">မျက်မမြင်စာ ဖော်ပြချက် ချိတ်ဆက်ထားသည်။</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index 459551b..9df2155 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">कुनै ज्ञात समस्याका कारण तपाईंको Chromebook लक गरिएको छ। तपाईं यति समयपछि साइन इन गर्न सक्नु हुने छ: <ph name="TIME_LEFT" />।</translation> <translation id="1229194443904279055">पाठ चयन गर्न छाडियोस्</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> कनेक्ट गरिएको छ।</translation> +<translation id="1240638468526743569">कुनै एप</translation> <translation id="1246890715821376239">प्रयोग गर्न नमिल्ने एपहरू</translation> <translation id="1247372569136754018">माइक्रोफोन (आन्तरिक)</translation> <translation id="1247519845643687288">हालसालै चलाइएका एपहरू</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">आफूले विगतमा क्लिपबोर्डमा कपी गरेका वस्तुहरू हेर्न <ph name="SHORTCUT_KEY_NAME" /> + V थिच्नुहोस्। सुरु गर्न कुनै वस्तु कपी गर्नुहोस्।</translation> <translation id="3593646411856133110">खुला रहेका एपहरू हेर्न माथितिर स्वाइप गरी थिचिरहनुहोस्</translation> <translation id="3595596368722241419">ब्यटरी पूर्ण</translation> +<translation id="3596012367874587041">एपका सेटिङ</translation> <translation id="3600061223661453002">अफ गर्नुहोस्</translation> <translation id="3604801046548457007">डेस्क <ph name="DESK_TITILE" /> सिर्जना गरियो</translation> <translation id="3606978283550408104">ब्रेल प्रदर्शन जडित छ।</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240">ब्याट्री <ph name="BATTERY_PERCENTAGE" />% छ</translation> <translation id="4917385247580444890">बलियो</translation> <translation id="4918086044614829423">स्वीकार्नुहोस्</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> ले हाल तपाईंको क्यामेरा प्रयोग गरिरहेको छ</translation> <translation id="4925542575807923399">यस खाताको प्रशासकलाई एक बहुविध साइन-इन सत्रमा प्रथम साइन-इन गरिएको खाता हुन यस खातालाई आवश्यक छ।</translation> <translation id="4938176435186993759">सबै सिफारिसहरू लुकाइयोस्</translation> <translation id="4945196315133970626">सूचनाहरू अफ गर्नुहोस्</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">तपाईं अब एकै पटक आफूसँगै आफ्नो स्क्रिन रेकर्ड गर्न सक्नुहुन्छ</translation> <translation id="622484624075952240">तल</translation> <translation id="6231419273573514727">सहायक यन्त्रले पूर्ण रूपमा काम नगर्न सक्छ</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> ले हाल तपाईंको क्यामेरा र माइक्रोफोन प्रयोग गरिरहेको छ</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">तेर्सो अवस्थामा लक गरियो</translation> <translation id="6259254695169772643">चयन गर्न आफ्नो स्टाइलस प्रयोग गर्नुहोस्</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">किबोर्डको ब्याकलाइट अन छ</translation> <translation id="7548434653388805669">सुत्ने बेला भयो</translation> <translation id="7551643184018910560">शेल्फमा पिन गर्नुहोस्</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> ले हाल तपाईंको माइक्रोफोन प्रयोग गरिरहेको छ</translation> <translation id="7561982940498449837">मेनु बन्द गर्नुहोस्</translation> <translation id="7564874036684306347">विन्डोलाई अर्को डेस्कटपमा सार्नुले अनपेक्षित व्यवहार देखाउन सक्छ। यसपछि आउने सूचना, विन्डो र संवादहरू डेस्कटपहरूका बीचमा विभाजित हुन सक्छन्।</translation> <translation id="7569509451529460200">Braille र ChromeVox सक्षम पारिएका छन्</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index 445e1910..aeafcd3 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Je Chromebook is vergrendeld vanwege een bekend probleem. Je kunt inloggen over: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Selecteren stoppen</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> is verbonden.</translation> +<translation id="1240638468526743569">Een app</translation> <translation id="1246890715821376239">Niet-ondersteunde apps</translation> <translation id="1247372569136754018">Microfoon (intern)</translation> <translation id="1247519845643687288">Recente apps</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Je opent je klembordgeschiedenis door op <ph name="SHORTCUT_KEY_NAME" /> + V te drukken. Daarna kun je kopiëren wat je nodig hebt.</translation> <translation id="3593646411856133110">Swipe omhoog en houd vast om apps te openen</translation> <translation id="3595596368722241419">Batterij is vol</translation> +<translation id="3596012367874587041">App-instellingen</translation> <translation id="3600061223661453002">Uit</translation> <translation id="3604801046548457007">Bureaublad <ph name="DESK_TITILE" /> gemaakt</translation> <translation id="3606978283550408104">Braillescherm gekoppeld.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240">Batterij <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="4917385247580444890">Sterk</translation> <translation id="4918086044614829423">Accepteren</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> gebruikt momenteel je camera</translation> <translation id="4925542575807923399">De beheerder van dit account vereist dat dit account het eerste ingelogde account is in een sessie met toegang tot meerdere accounts.</translation> <translation id="4938176435186993759">Alle suggesties verbergen</translation> <translation id="4945196315133970626">Meldingen uitzetten</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">Je kunt jezelf en je scherm nu tegelijkertijd opnemen</translation> <translation id="622484624075952240">Omlaag</translation> <translation id="6231419273573514727">De prestaties van randapparaten kunnen beperkt zijn</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> gebruikt momenteel je camera en microfoon</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Vergrendeld in horizontale stand</translation> <translation id="6259254695169772643">Gebruik je stylus om te selecteren</translation> @@ -1129,6 +1133,7 @@ <translation id="7544300628205093162">Achtergrondverlichting van toetsenbord staat aan</translation> <translation id="7548434653388805669">Bedtijd</translation> <translation id="7551643184018910560">Vastzetten op plank</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> gebruikt momenteel je microfoon</translation> <translation id="7561982940498449837">Menu sluiten</translation> <translation id="7564874036684306347">Verplaatsing van vensters naar een ander bureaublad kan leiden tot onverwacht gedrag. Verdere meldingen, vensters en dialoogvensters worden mogelijk verdeeld over de bureaubladen.</translation> <translation id="7569509451529460200">Braille en ChromeVox staan aan</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index f1618d71..8dff3c06 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Chromebooken er låst på grunn av en kjent feil. Du kan logge på om <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Slutt å merke</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> er tilkoblet.</translation> +<translation id="1240638468526743569">En app</translation> <translation id="1246890715821376239">Apper som ikke støttes</translation> <translation id="1247372569136754018">Mikrofon (intern)</translation> <translation id="1247519845643687288">Nylige apper</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Åpne utklippstavleloggen ved å trykke på <ph name="SHORTCUT_KEY_NAME" /> + V for å se utklippstavlen. Kopiér et element for å komme i gang.</translation> <translation id="3593646411856133110">Sveip opp og hold for å se åpne apper</translation> <translation id="3595596368722241419">Batteriet er fullt</translation> +<translation id="3596012367874587041">Appinnstillinger</translation> <translation id="3600061223661453002">Av</translation> <translation id="3604801046548457007">Opprettet skrivebord <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">En leselist er tilkoblet.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" /> % batteri</translation> <translation id="4917385247580444890">Sterkt</translation> <translation id="4918086044614829423">Godta</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> bruker kameraet ditt for øyeblikket</translation> <translation id="4925542575807923399">Administratoren for denne kontoen krever at denne kontoen er den første påloggingskontoen i en multipåloggingsøkt.</translation> <translation id="4938176435186993759">Skjul alle forslag</translation> <translation id="4945196315133970626">Slå av varsler</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">Nå kan du ta opp deg selv og skjermen din samtidig</translation> <translation id="622484624075952240">Ned</translation> <translation id="6231419273573514727">Ytelsen til eksterne enheter kan være begrenset</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> bruker kameraet ditt og mikrofonen din for øyeblikket</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Låst til horisontal</translation> <translation id="6259254695169772643">Bruk pekepennen til å velge</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">Tastaturets bakgrunnsbelysning er på</translation> <translation id="7548434653388805669">Nå er det sengetid</translation> <translation id="7551643184018910560">Fest til hyllen</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> bruker mikrofonen din for øyeblikket</translation> <translation id="7561982940498449837">Lukk menyen</translation> <translation id="7564874036684306347">Flytting av vinduer til et annet skrivebord kan føre til uventet atferd. Følgende varsler, vinduer og dialogbokser kan bli delt mellom skrivebordene.</translation> <translation id="7569509451529460200">Braille og ChromeVox er slått på</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb index 3b48ea7..3cd47d8 100644 --- a/ash/strings/ash_strings_or.xtb +++ b/ash/strings/ash_strings_or.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">ଆପଣଙ୍କ କ୍ଲିପବୋର୍ଡ ଦେଖିବାକୁ <ph name="SHORTCUT_KEY_NAME" /> + V ଦବାଇ ଆପଣଙ୍କ କ୍ଲିପବୋର୍ଡ ଇତିହାସକୁ ଆକ୍ସେସ୍ କରନ୍ତୁ। ଆରମ୍ଭ କରିବାକୁ ଏକ ଆଇଟମ୍ କପି କରନ୍ତୁ।</translation> <translation id="3593646411856133110">ଖୋଲା ଥିବା ଆପଗୁଡ଼ିକୁ ଦେଖିବାକୁ ଉପରକୁ ଉଠାଇ ଧରି ରଖନ୍ତୁ</translation> <translation id="3595596368722241419">ବ୍ୟାଟେରୀ ପୂର୍ଣ୍ଣ</translation> +<translation id="3596012367874587041">ଆପ ସେଟିଂସ</translation> <translation id="3600061223661453002">ବନ୍ଦ ଅଛି</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> ଡେସ୍କ ତିଆରି କରାଯାଇଛି</translation> <translation id="3606978283550408104">ବ୍ରେଲିର ଡିସ୍ପ୍ଲେ ସଂଯୋଗ କରାଯାଇଛି।</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index 558f639..cfbe429 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">ਆਪਣਾ ਕਲਿੱਪਬੋਰਡ ਦੇਖਣ ਲਈ <ph name="SHORTCUT_KEY_NAME" /> + V ਦਬਾ ਕੇ ਆਪਣੇ ਕਲਿੱਪਬੋਰਡ ਦੇ ਇਤਿਹਾਸ ਤੱਕ ਪਹੁੰਚ ਕਰੋ। ਸ਼ੁਰੂਆਤ ਕਰਨ ਲਈ ਕੋਈ ਆਈਟਮ ਕਾਪੀ ਕਰੋ।</translation> <translation id="3593646411856133110">ਖੁੱਲ੍ਹੀਆਂ ਐਪਾਂ ਦੇਖਣ ਲਈ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰਕੇ ਦਬਾਈ ਰੱਖੋ</translation> <translation id="3595596368722241419">ਬੈਟਰੀ ਪੂਰੀ</translation> +<translation id="3596012367874587041">ਐਪ ਸੈਟਿੰਗਾਂ</translation> <translation id="3600061223661453002">ਬੰਦ ਕਰੋ</translation> <translation id="3604801046548457007">ਡੈਸਕ <ph name="DESK_TITILE" /> ਬਣਾਇਆ ਗਿਆ</translation> <translation id="3606978283550408104">ਬ੍ਰੇਲ ਡਿਸਪਲੇ ਕਨੈਕਟ ਕੀਤਾ।</translation> @@ -537,6 +538,7 @@ <translation id="4123259114412175274">ਆਪਣੀ Chromebook ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ, ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦਾ ਬਲੂਟੁੱਥ ਚਾਲੂ ਹੈ</translation> <translation id="4125970834901680537">ਟੈਬਲੈੱਟ ਮੋਡ ਵਿੱਚ ਐਪਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਲੈਪਟਾਪ ਮੋਡ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="4129129681837227511">ਆਪਣੀ ਲਾਕ ਸਕ੍ਰੀਨ 'ਤੇ ਸੂਚਨਾਵਾਂ ਦੇਖਣ ਲਈ, ਅਣਲਾਕ ਕਰਕੇ ਸੈਟਿੰਗ ਬਦਲੋ</translation> +<translation id="4130035430755296270">ਖਾਕੇ ਸੰਬੰਧੀ ਹੋਰ ਵਿਕਲਪਾਂ ਲਈ ਕਰਸਰ ਘੁਮਾਉਂਦੇ ਰਹੋ</translation> <translation id="4136724716305260864">ਸੂਰਜ ਚੜ੍ਹਨ ਤੱਕ ਚਾਲੂ ਰਹੇਗੀ</translation> <translation id="4146833061457621061">ਸੰਗੀਤ ਚਲਾਓ</translation> <translation id="4165275524535002941">ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਕੇਬਲ ਡਿਸਪਲੇਆਂ ਦਾ ਸਮਰਥਨ ਨਾ ਕਰੇ</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 5a46a5b..89bbc03 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Aby wyświetlić schowek i jego historię, naciśnij <ph name="SHORTCUT_KEY_NAME" /> + V. Najpierw skopiuj element.</translation> <translation id="3593646411856133110">Aby zobaczyć otwarte aplikacje, przesuń palcem w górę i przytrzymaj</translation> <translation id="3595596368722241419">Bateria naładowana</translation> +<translation id="3596012367874587041">Ustawienia aplikacji</translation> <translation id="3600061223661453002">Wył.</translation> <translation id="3604801046548457007">Utworzono biurko <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Podłączono monitor brajlowski.</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index e9ebe261..bef2350 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Seu Chromebook está bloqueado devido a um problema conhecido. Você poderá fazer login em <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Parar de selecionar</translation> <translation id="1239161794459865856">O recurso <ph name="FEATURE_NAME" /> está conectado.</translation> +<translation id="1240638468526743569">Um app</translation> <translation id="1246890715821376239">Apps sem suporte</translation> <translation id="1247372569136754018">Microfone (interno)</translation> <translation id="1247519845643687288">Apps recentes</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Para acessar o histórico da área de transferência, pressione <ph name="SHORTCUT_KEY_NAME" /> + V. Copie um item para começar.</translation> <translation id="3593646411856133110">Deslize para cima e mantenha a tela pressionada para ver os apps abertos</translation> <translation id="3595596368722241419">Bateria carregada</translation> +<translation id="3596012367874587041">Configurações do app</translation> <translation id="3600061223661453002">Apagar</translation> <translation id="3604801046548457007">Espaço de trabalho <ph name="DESK_TITILE" /> criado</translation> <translation id="3606978283550408104">Display em braille conectado.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" />% de bateria</translation> <translation id="4917385247580444890">Forte</translation> <translation id="4918086044614829423">Aceitar</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> está usando sua câmera</translation> <translation id="4925542575807923399">O administrador dessa conta exige que ela seja a primeira conta a fazer o login em uma sessão de login múltiplo.</translation> <translation id="4938176435186993759">Ocultar todas as sugestões</translation> <translation id="4945196315133970626">Desativar notificações</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">Agora é possível gravar você e a tela ao mesmo tempo</translation> <translation id="622484624075952240">Seta para baixo</translation> <translation id="6231419273573514727">O desempenho dos periféricos pode ser limitado</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> está usando sua câmera e seu microfone</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Bloqueado na horizontal</translation> <translation id="6259254695169772643">Use a stylus para selecionar</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">A luz de fundo do teclado está ligada</translation> <translation id="7548434653388805669">Hora de dormir</translation> <translation id="7551643184018910560">Fixar na estante</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> está usando seu microfone</translation> <translation id="7561982940498449837">Fechar menu</translation> <translation id="7564874036684306347">A movimentação de janelas para outra área de trabalho pode resultar em comportamentos inesperados. Notificações posteriores, janelas e caixas de diálogo podem ser divididas entre as áreas de trabalho.</translation> <translation id="7569509451529460200">Braille e ChromeVox estão ativados</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index 0eb1c552..d3117c13 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">Aceda ao seu histórico da área de transferência ao premir <ph name="SHORTCUT_KEY_NAME" /> + V para ver a área de transferência. Para começar, copie um item.</translation> <translation id="3593646411856133110">Deslize rapidamente para cima sem soltar para ver as apps abertas.</translation> <translation id="3595596368722241419">Bateria carregada</translation> +<translation id="3596012367874587041">Definições da app</translation> <translation id="3600061223661453002">Desativado</translation> <translation id="3604801046548457007">Foi criado o espaço de trabalho <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Visualização em braille ligada.</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index 9cbf7658..a7ace122 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Accesează istoricul clipboardului apăsând <ph name="SHORTCUT_KEY_NAME" /> + V pentru a vedea clipboardul. Copiază un element pentru a începe.</translation> <translation id="3593646411856133110">Glisează în sus și menține pentru a vedea aplicațiile deschise</translation> <translation id="3595596368722241419">Baterie încărcată</translation> +<translation id="3596012367874587041">Setările aplicației</translation> <translation id="3600061223661453002">Dezactivat</translation> <translation id="3604801046548457007">A fost creat desktopul <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Afișajul Braille este conectat.</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index 4607caa1..3e543440 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Чтобы посмотреть историю буфера обмена, нажмите клавиши <ph name="SHORTCUT_KEY_NAME" /> + V. Чтобы начать, скопируйте объект.</translation> <translation id="3593646411856133110">Чтобы увидеть открытые приложения, проведите по экрану вверх и удерживайте палец.</translation> <translation id="3595596368722241419">Аккумулятор заряжен</translation> +<translation id="3596012367874587041">Настройки приложений</translation> <translation id="3600061223661453002">Отключено</translation> <translation id="3604801046548457007">Создан рабочий стол "<ph name="DESK_TITILE" />".</translation> <translation id="3606978283550408104">Брайлевский дисплей подключен</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb index ed4b7b7..2b6da499 100644 --- a/ash/strings/ash_strings_si.xtb +++ b/ash/strings/ash_strings_si.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">ඔබගේ පසුරු පුවරුව බැලීමට <ph name="SHORTCUT_KEY_NAME" /> + V එබීමෙන් ඔබගේ පසුරු පුවරු ඉතිහාසයට ප්රවේශ වන්න. ආරම්භ කිරීමට අයිතමයක් පිටපත් කරන්න.</translation> <translation id="3593646411856133110">විවෘත යෙදුම් බැලීමට ඉහළට ස්වයිප් කර අල්ලා සිටින්න</translation> <translation id="3595596368722241419">බැටරිය ආරෝපිතයි</translation> +<translation id="3596012367874587041">යෙදුම් සැකසීම්</translation> <translation id="3600061223661453002">අක්රිය</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> මේසය සාදන ලදි</translation> <translation id="3606978283550408104">බ්රේල් ප්රදර්ශකය සම්බන්ධ කර ඇත.</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 8b159d0..634b0db 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Váš Chromebook je uzamknutý pre známy problém. Prihlásiť sa budete môcť po uplynutí tohto času: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Ukončiť výber</translation> <translation id="1239161794459865856">Funkcia <ph name="FEATURE_NAME" /> je pripojená.</translation> +<translation id="1240638468526743569">Aplikácia</translation> <translation id="1246890715821376239">Nepodporované aplikácie</translation> <translation id="1247372569136754018">Mikrofón (vnútorný)</translation> <translation id="1247519845643687288">Nedávne aplikácie</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Do histórie schránky môžete prejsť po zobrazení schránky stlačením klávesovej skratky <ph name="SHORTCUT_KEY_NAME" /> + V. Začnite skopírovaním položky.</translation> <translation id="3593646411856133110">Otvorené aplikácie zobrazíte potiahnutím nahor a pridržaním</translation> <translation id="3595596368722241419">Batéria je nabitá</translation> +<translation id="3596012367874587041">Nastavenia aplikácie</translation> <translation id="3600061223661453002">Vypnuté</translation> <translation id="3604801046548457007">Bola vytvorená plocha <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Bola pripojená Braillova obrazovka.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" /> % batérie</translation> <translation id="4917385247580444890">Silné</translation> <translation id="4918086044614829423">Prijať</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> momentálne používa kameru</translation> <translation id="4925542575807923399">Správca tohto účtu vyžaduje, aby sa tento účet v relácii viacnásobného prihlásenia prihlásil ako prvý.</translation> <translation id="4938176435186993759">Skryť všetky návrhy</translation> <translation id="4945196315133970626">Vypnúť upozornenia</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">Teraz môžete súčasne nahrať seba aj svoju obrazovku</translation> <translation id="622484624075952240">Dole</translation> <translation id="6231419273573514727">Výkonnosť periférie môže byť obmedzená</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> momentálne používa kameru a mikrofón</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Uzamknuté vodorovne</translation> <translation id="6259254695169772643">Vyberte pomocou dotykového pera</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">Podsvietenie klávesnice je zapnuté</translation> <translation id="7548434653388805669">Je čas ísť do postele</translation> <translation id="7551643184018910560">Pripnúť na poličku</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> momentálne používa mikrofón</translation> <translation id="7561982940498449837">Zavrieť ponuku</translation> <translation id="7564874036684306347">Presunutie okien na inú obrazovku môže spôsobiť neočakávané správanie. Nasledujúce upozornenia, okná a dialógové okná sa môžu zobraziť rozdelené na viacerých pracovných plochách.</translation> <translation id="7569509451529460200">Funkcie Braille a ChromeVox sú povolené</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index 161a54a..b264d959 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -447,6 +447,7 @@ <translation id="3593039967545720377">Dostopajte do zgodovine odložišča, tako da pritisnete <ph name="SHORTCUT_KEY_NAME" /> + V za ogled odložišča. Kopirajte element, če želite začeti.</translation> <translation id="3593646411856133110">Povlecite navzgor in pridržite, če si želite ogledati odprte aplikacije</translation> <translation id="3595596368722241419">Baterija je polna</translation> +<translation id="3596012367874587041">Nastavitve aplikacije</translation> <translation id="3600061223661453002">Izklop</translation> <translation id="3604801046548457007">Namizje <ph name="DESK_TITILE" /> je bilo ustvarjeno</translation> <translation id="3606978283550408104">Povezava z braillovo vrstico je vzpostavljena.</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb index 6606ec1..4a9a1ab 100644 --- a/ash/strings/ash_strings_sq.xtb +++ b/ash/strings/ash_strings_sq.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Qasu në historikun e kujtesës së fragmenteve duke shtypur <ph name="SHORTCUT_KEY_NAME" /> + V për të parë kujtesën tënde të fragmenteve. Kopjo një artikull për të filluar.</translation> <translation id="3593646411856133110">Rrëshqit shpejt larg dhe mbaj shtypur për të parë aplikacionet e hapura</translation> <translation id="3595596368722241419">Bateria është plot</translation> +<translation id="3596012367874587041">Cilësimet e aplikacionit</translation> <translation id="3600061223661453002">Joaktiv</translation> <translation id="3604801046548457007">U krijua tavolina e punës <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Ekrani "Braille" është i lidhur.</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index d13ce37..e2813a2 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Chromebook je zaključan zbog poznatog problema. Moći ćete da se prijavite za: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Izađi iz režima biranja</translation> <translation id="1239161794459865856">Funkcija <ph name="FEATURE_NAME" /> je povezana.</translation> +<translation id="1240638468526743569">Aplikacija</translation> <translation id="1246890715821376239">Nepodržane aplikacije</translation> <translation id="1247372569136754018">Mikrofon (interni)</translation> <translation id="1247519845643687288">Nedavne aplikacije</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V da biste pristupili istoriji privremene memorije. Kopirajte neku stavku da biste započeli.</translation> <translation id="3593646411856133110">Prevucite nagore i zadržite da biste videli otvorene aplikacije</translation> <translation id="3595596368722241419">Baterija je puna</translation> +<translation id="3596012367874587041">Podešavanja aplikacije</translation> <translation id="3600061223661453002">Isključi</translation> <translation id="3604801046548457007">Radna površina <ph name="DESK_TITILE" /> je napravljena</translation> <translation id="3606978283550408104">Povezan je ekran sa Brajevom azbukom.</translation> @@ -686,6 +688,7 @@ <translation id="490788395437447240">Nivo baterije je <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="4917385247580444890">Jak</translation> <translation id="4918086044614829423">Prihvati</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> trenutno koristi kameru</translation> <translation id="4925542575807923399">Administrator za ovaj nalog zahteva da ovaj nalog bude prvi prijavljeni nalog u sesiji sa višestrukim prijavljivanjem.</translation> <translation id="4938176435186993759">Sakrij sve predloge</translation> <translation id="4945196315133970626">Isključi obaveštenja</translation> @@ -915,6 +918,7 @@ <translation id="6220928844947387476">Sada istovremeno možete da snimate sebe i ekran</translation> <translation id="622484624075952240">Nadole</translation> <translation id="6231419273573514727">Učinak perifernih uređaja će možda biti ograničen</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> trenutno koristi kameru i mikrofon</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Horizontalni prikaz je zaključan</translation> <translation id="6259254695169772643">Izaberite pomoću pisaljke</translation> @@ -1133,6 +1137,7 @@ <translation id="7544300628205093162">Pozadinsko osvetljenje tastature je uključeno</translation> <translation id="7548434653388805669">Vreme je za spavanje</translation> <translation id="7551643184018910560">Zakači na policu</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> trenutno koristi mikrofon</translation> <translation id="7561982940498449837">Zatvori meni</translation> <translation id="7564874036684306347">Premeštanje prozora na drugi računar može da dovede do neočekivanog ponašanja. Naknadna obaveštenja, prozori i dijalozi će možda biti podeljeni između računara.</translation> <translation id="7569509451529460200">Brajeva azbuka i ChromeVox su omogućeni</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index 1c5a015..e78fd35d 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Chromebook је закључан због познатог проблема. Моћи ћете да се пријавите за: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Изађи из режима бирања</translation> <translation id="1239161794459865856">Функција <ph name="FEATURE_NAME" /> је повезана.</translation> +<translation id="1240638468526743569">Апликација</translation> <translation id="1246890715821376239">Неподржане апликације</translation> <translation id="1247372569136754018">Микрофон (интерни)</translation> <translation id="1247519845643687288">Недавне апликације</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Притисните <ph name="SHORTCUT_KEY_NAME" /> + V да бисте приступили историји привремене меморије. Копирајте неку ставку да бисте започели.</translation> <translation id="3593646411856133110">Превуците нагоре и задржите да бисте видели отворене апликације</translation> <translation id="3595596368722241419">Батерија је пуна</translation> +<translation id="3596012367874587041">Подешавања апликације</translation> <translation id="3600061223661453002">Искључи</translation> <translation id="3604801046548457007">Радна површина <ph name="DESK_TITILE" /> је направљена</translation> <translation id="3606978283550408104">Повезан је екран са Брајевом азбуком.</translation> @@ -686,6 +688,7 @@ <translation id="490788395437447240">Ниво батерије је <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="4917385247580444890">Јак</translation> <translation id="4918086044614829423">Прихвати</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> тренутно користи камеру</translation> <translation id="4925542575807923399">Администратор за овај налог захтева да овај налог буде први пријављени налог у сесији са вишеструким пријављивањем.</translation> <translation id="4938176435186993759">Сакриј све предлоге</translation> <translation id="4945196315133970626">Искључи обавештења</translation> @@ -915,6 +918,7 @@ <translation id="6220928844947387476">Сада истовремено можете да снимате себе и екран</translation> <translation id="622484624075952240">Надоле</translation> <translation id="6231419273573514727">Учинак периферних уређаја ће можда бити ограничен</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> тренутно користи камеру и микрофон</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Хоризонтални приказ је закључан</translation> <translation id="6259254695169772643">Изаберите помоћу писаљке</translation> @@ -1133,6 +1137,7 @@ <translation id="7544300628205093162">Позадинско осветљење тастатуре је укључено</translation> <translation id="7548434653388805669">Време је за спавање</translation> <translation id="7551643184018910560">Закачи на полицу</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> тренутно користи микрофон</translation> <translation id="7561982940498449837">Затвори мени</translation> <translation id="7564874036684306347">Премештање прозора на други рачунар може да доведе до неочекиваног понашања. Накнадна обавештења, прозори и дијалози ће можда бити подељени између рачунара.</translation> <translation id="7569509451529460200">Брајева азбука и ChromeVox су омогућени</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index 7ce381c1..cb72d59 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Få åtkomst till historiken för urklipp genom att trycka på <ph name="SHORTCUT_KEY_NAME" /> + V för att visa urklipp. Kopiera ett objekt för att komma igång.</translation> <translation id="3593646411856133110">Svep uppåt och tryck länge för att visa öppna appar</translation> <translation id="3595596368722241419">Batteriet är fulladdat</translation> +<translation id="3596012367874587041">Appinställningar</translation> <translation id="3600061223661453002">Av</translation> <translation id="3604801046548457007">Skrivbordet <ph name="DESK_TITILE" /> har skapats</translation> <translation id="3606978283550408104">Punktskriftsskärm ansluten.</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index 8a9aa7a..f7c23c3e 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Fikia historia ya ubao wako wa kunakili kwa kubonyeza kitufe cha <ph name="SHORTCUT_KEY_NAME" /> pamoja na herufi V ili uangalie ubao wako wa kunakili. Nakili kipengee ili uanze.</translation> <translation id="3593646411856133110">Telezesha kidole juu na ushikilie ili uone programu zilizofunguliwa</translation> <translation id="3595596368722241419">Betri imejaa</translation> +<translation id="3596012367874587041">Mipangilio ya programu</translation> <translation id="3600061223661453002">Zima</translation> <translation id="3604801046548457007">Kiolesura cha <ph name="DESK_TITILE" /> kimeanzishwa</translation> <translation id="3606978283550408104">Onyesho la breli limeunganishwa.</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index 05cfa1a..029b3fd 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">கிளிப்போர்டைப் பார்க்க, <ph name="SHORTCUT_KEY_NAME" /> + V விசைகளை அழுத்தி இதுவரையான கிளிப்போர்டு தகவல்களை அணுகலாம். இதைச் செய்ய, ஏதேனும் ஒன்றை நகலெடுக்கவும்.</translation> <translation id="3593646411856133110">திறந்திருக்கும் ஆப்ஸ்களைப் பார்க்க மேலே ஸ்வைப் செய்து பிடிக்கவும்</translation> <translation id="3595596368722241419">பேட்டரி நிரம்பியது</translation> +<translation id="3596012367874587041">ஆப்ஸ் அமைப்புகள்</translation> <translation id="3600061223661453002">முடக்கு</translation> <translation id="3604801046548457007">டெஸ்க் <ph name="DESK_TITILE" /> உருவாக்கப்பட்டது</translation> <translation id="3606978283550408104">பிரெய்ல் திரை இணைக்கப்பட்டது.</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index a2bfff1..631b8f4 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">తెలిసిన సమస్య కారణంగా మీ Chromebook లాక్ చేయబడింది. మీరు ఈ సమయం తర్వాత సైన్ ఇన్ చేయగలరు: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">ఎంచుకోవడం ఆపివేయండి</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> కనెక్ట్ చేయబడింది.</translation> +<translation id="1240638468526743569">ఒక యాప్</translation> <translation id="1246890715821376239">సపోర్ట్ చేయని యాప్లు</translation> <translation id="1247372569136754018">మైక్రోఫోన్ (అంతర్గతం)</translation> <translation id="1247519845643687288">ఇటీవలి యాప్లు</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">మీ క్లిప్బోర్డ్ను చూడడానికి, <ph name="SHORTCUT_KEY_NAME" /> + V నొక్కడం ద్వారా మీ క్లిప్బోర్డ్ హిస్టరీని యాక్సెస్ చేయండి. ప్రారంభించడానికి, ఐటెమ్ను కాపీ చేయండి.</translation> <translation id="3593646411856133110">తెరిచి ఉన్న యాప్లను చూడటానికి పైకి స్వైప్ చేసి, పట్టుకోండి</translation> <translation id="3595596368722241419">బ్యాటరీ నిండింది</translation> +<translation id="3596012367874587041">యాప్ సెట్టింగ్లు</translation> <translation id="3600061223661453002">ఆఫ్ చేయండి</translation> <translation id="3604801046548457007">"<ph name="DESK_TITILE" />" డెస్క్ క్రియేట్ చేయబడింది</translation> <translation id="3606978283550408104">బ్రెయిలీ డిస్ప్లే కనెక్ట్ చేయబడింది.</translation> @@ -686,6 +688,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" />% బ్యాటరీ</translation> <translation id="4917385247580444890">బలమైన</translation> <translation id="4918086044614829423">ఆమోదించు</translation> +<translation id="4919841137949306064"><ph name="APP_NAME" /> ప్రస్తుతం మీ కెమెరాను ఉపయోగిస్తోంది</translation> <translation id="4925542575807923399">బహుళ సైన్-ఇన్ సెషన్లో ఈ ఖాతా మొదటిగా సైన్-ఇన్ చేసిన ఖాతాగా ఉండటం ఈ ఖాతా నిర్వాహకులకు అవసరం.</translation> <translation id="4938176435186993759">అన్ని సూచనలను దాచండి</translation> <translation id="4945196315133970626">నోటిఫికేషన్లను ఆఫ్ చేయండి</translation> @@ -915,6 +918,7 @@ <translation id="6220928844947387476">ఇప్పుడు మీరు మిమ్మల్ని, మీ స్క్రీన్ను ఒకే సమయంలో రికార్డ్ చేయవచ్చు</translation> <translation id="622484624075952240">Down</translation> <translation id="6231419273573514727">పెరిఫెరల్ పనితీరు పరిమితంగా ఉండవచ్చు</translation> +<translation id="6232891689835436217"><ph name="APP_NAME" /> ప్రస్తుతం మీ కెమెరా, మైక్రోఫోన్ను ఉపయోగిస్తోంది</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">సమాంతర ప్రదర్శనకు లాక్ చేయబడింది</translation> <translation id="6259254695169772643">ఎంచుకోవడానికి మీ స్టైలస్ను ఉపయోగించండి</translation> @@ -1133,6 +1137,7 @@ <translation id="7544300628205093162">కీబోర్డ్ బ్యాక్లైట్ ఆన్లో ఉంది</translation> <translation id="7548434653388805669">నిద్రపోయే సమయం</translation> <translation id="7551643184018910560">అరకు పిన్ చేయండి</translation> +<translation id="7557816257942363084"><ph name="APP_NAME" /> ప్రస్తుతం మీ మైక్రోఫోన్ను ఉపయోగిస్తోంది</translation> <translation id="7561982940498449837">మెనూను మూసివేయి</translation> <translation id="7564874036684306347">విండోలను మరొక డెస్క్టాప్కు తరలించడం వలన ఊహించని ప్రవర్తన చోటు చేసుకోవచ్చు. తర్వాత చూపబడే నోటిఫికేషన్లు, విండోలు మరియు డైలాగ్లు డెస్క్టాప్ల మధ్య విభజించబడవచ్చు.</translation> <translation id="7569509451529460200">బ్రెయిలీ మరియు ChromeVox ప్రారంభించబడ్డాయి</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index 0ff1db8..d0b19b8 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">เข้าถึงประวัติคลิปบอร์ดโดยกด <ph name="SHORTCUT_KEY_NAME" /> + V เพื่อดูคลิปบอร์ด คัดลอกรายการเพื่อเริ่มต้นใช้งาน</translation> <translation id="3593646411856133110">เลื่อนขึ้นค้างไว้เพื่อดูแอปที่เปิดอยู่</translation> <translation id="3595596368722241419">แบตเตอรี่เต็ม</translation> +<translation id="3596012367874587041">การตั้งค่าแอป</translation> <translation id="3600061223661453002">ปิด</translation> <translation id="3604801046548457007">สร้างเดสก์ <ph name="DESK_TITILE" /> แล้ว</translation> <translation id="3606978283550408104">เชื่อมต่ออุปกรณ์แสดงผลอักษรเบรลล์แล้ว</translation> @@ -537,6 +538,7 @@ <translation id="4123259114412175274">หากต้องการปลดล็อก Chromebook ให้ตรวจสอบว่าบลูทูธของโทรศัพท์เปิดอยู่</translation> <translation id="4125970834901680537">สตรีมแอปในโหมดแท็บเล็ตไม่ได้ โปรดลองอีกครั้งในโหมดแล็ปท็อป</translation> <translation id="4129129681837227511">หากต้องการดูการแจ้งเตือนในหน้าจอล็อก ให้ปลดล็อกเพื่อเปลี่ยนการตั้งค่า</translation> +<translation id="4130035430755296270">ลากเมาส์ไปเรื่อยๆ เพื่อดูตัวเลือกเลย์เอาต์เพิ่มเติม</translation> <translation id="4136724716305260864">เปิดจนถึงพระอาทิตย์ขึ้น</translation> <translation id="4146833061457621061">เปิดเพลง</translation> <translation id="4165275524535002941">สายสัญญาณอาจไม่รองรับจอแสดงผล</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index 153e9085..a31190f 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">Panonuzu görüntülemek üzere <ph name="SHORTCUT_KEY_NAME" /> + V tuşlarına basarak pano geçmişinize erişin. Başlamak için bir öğe kopyalayın.</translation> <translation id="3593646411856133110">Açık uygulamaları görmek için yukarı kaydırıp basılı tutun</translation> <translation id="3595596368722241419">Pil tam dolu</translation> +<translation id="3596012367874587041">Uygulama ayarları</translation> <translation id="3600061223661453002">Kapalı</translation> <translation id="3604801046548457007">Masa <ph name="DESK_TITILE" /> oluşturuldu</translation> <translation id="3606978283550408104">Braille ekranı bağlandı.</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index c9341e84..9bd8ab5 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">Ваш пристрій Chromebook заблоковано через відому проблему. Ви зможете ввійти через <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Припинити вибір</translation> <translation id="1239161794459865856"><ph name="FEATURE_NAME" /> підключено.</translation> +<translation id="1240638468526743569">Додаток</translation> <translation id="1246890715821376239">Непідтримувані додатки</translation> <translation id="1247372569136754018">Мікрофон (внутрішній)</translation> <translation id="1247519845643687288">Нещодавні додатки</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Щоб переглянути історію буфера обміну, натисніть клавіші <ph name="SHORTCUT_KEY_NAME" /> + V. Щоб почати, скопіюйте елемент.</translation> <translation id="3593646411856133110">Щоб переглянути відкриті додатки, проведіть пальцем угору й утримуйте</translation> <translation id="3595596368722241419">Акумулятор заряджено</translation> +<translation id="3596012367874587041">Налаштування додатків</translation> <translation id="3600061223661453002">Вимкнути</translation> <translation id="3604801046548457007">Створено робочий стіл "<ph name="DESK_TITILE" />"</translation> <translation id="3606978283550408104">Брайлівський дисплей під’єднано.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240">Заряд акумулятора – <ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="4917385247580444890">Потужний</translation> <translation id="4918086044614829423">Прийняти</translation> +<translation id="4919841137949306064">Додаток <ph name="APP_NAME" /> використовує вашу камеру</translation> <translation id="4925542575807923399">Адміністратору облікового запису потрібно, щоб цей обліковий запис був першим обліковим записом, з якого здійснено вхід під час сеансу паралельного входу.</translation> <translation id="4938176435186993759">Приховати всі пропозиції</translation> <translation id="4945196315133970626">Вимкнути сповіщення</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">Тепер ви можете робити запис з екрана й веб-камери одночасно</translation> <translation id="622484624075952240">Донизу</translation> <translation id="6231419273573514727">Ефективність периферійних пристроїв може бути обмежена</translation> +<translation id="6232891689835436217">Додаток <ph name="APP_NAME" /> використовує ваші камеру та мікрофон</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Заблоковано в горизонтальному положенні</translation> <translation id="6259254695169772643">Вибирайте елементи за допомогою стилуса</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">Підсвітку клавіатури ввімкнено</translation> <translation id="7548434653388805669">Час спати</translation> <translation id="7551643184018910560">Закріпити на панелі запуску</translation> +<translation id="7557816257942363084">Додаток <ph name="APP_NAME" /> використовує ваш мікрофон</translation> <translation id="7561982940498449837">Закрити меню</translation> <translation id="7564874036684306347">Переміщення вікон на інший робочий стіл може спричинити неочікувану поведінку. Нові сповіщення та вікна можуть розділятися між робочими столами.</translation> <translation id="7569509451529460200">Шрифт Брайля та ChromeVox увімкнено</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index 3b5bc8a..79bb032 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">اپنا کلپ بورڈ دیکھنے کیلئے، <ph name="SHORTCUT_KEY_NAME" /> + V دبا کر اپنے کلپ بورڈ کی سرگزشت تک رسائی حاصل کریں۔ شروع کرنے کیلئے ایک آئٹم کاپی کریں۔</translation> <translation id="3593646411856133110">کھلی ایپس کو دیکھنے کے لیے سوائپ اپ اور ہولڈ کریں</translation> <translation id="3595596368722241419">بیٹری پوری چارج ہے</translation> +<translation id="3596012367874587041">ایپ کی ترتیبات</translation> <translation id="3600061223661453002">آف کریں</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> ڈیسک تخلیق کر دی گئی ہے</translation> <translation id="3606978283550408104">بریل ڈسپلے منسلک ہو گیا۔</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb index 739a742..2f6a05a6 100644 --- a/ash/strings/ash_strings_uz.xtb +++ b/ash/strings/ash_strings_uz.xtb
@@ -49,6 +49,7 @@ <translation id="1201402288615127009">Keyingisi</translation> <translation id="1210557957257435379">ekranni yozib olish</translation> <translation id="121097972571826261">Bitta soʻz oldinga</translation> +<translation id="1217633719248931900">Ilovani ochish</translation> <translation id="1218444235442067213"><ph name="APP_NAME" />, Play Market ilovasi</translation> <translation id="1225748608451425081">Chromebook qurilmangiz tanish xatolik tufayli qulflanib qoldi. Hisobingizga vaqtincha kira olmaysiz: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Matnni tanlashni toʻxtatish</translation> @@ -447,6 +448,7 @@ <translation id="3593039967545720377">Vaqtincha xotirani ochish uchun <ph name="SHORTCUT_KEY_NAME" /> + V tugmalarini bosing. Boshlash uchun elementni nusxalang.</translation> <translation id="3593646411856133110">Ochiq ilovalarni chiqarish uchun tepaga suring va ushlab turing.</translation> <translation id="3595596368722241419">Batareya to‘ldi</translation> +<translation id="3596012367874587041">Ilova sozlamalari</translation> <translation id="3600061223661453002">Yoqilmagan</translation> <translation id="3604801046548457007"><ph name="DESK_TITILE" /> ish stoli yaratildi</translation> <translation id="3606978283550408104">Brayl displeyi ulandi.</translation> @@ -538,6 +540,7 @@ <translation id="4123259114412175274">Chromebook qurilmangiz qulfini ochish uchun telefoningizda Bluetooth yoniqligini. tekshiring</translation> <translation id="4125970834901680537">Planshet rejimida ilovalar translatsiyasi ishlamaydi. Laptop rejimida qaytadan urining.</translation> <translation id="4129129681837227511">Bildirishnomalar qulflangan ekranda chiqishi uchun avval qulfdan chiqaring va sozlamani yangilang</translation> +<translation id="4130035430755296270">Boshqa dizayn variantlari uchun kursorni shu joyda ushlab turing</translation> <translation id="4136724716305260864">Quyosh botishigacha yoniq</translation> <translation id="4146833061457621061">Musiqani tinglash</translation> <translation id="4165275524535002941">Kabel displeylar bilan ishlamasligi mumkin</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index f47549c..e1a4b78 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -49,6 +49,7 @@ <translation id="1201402288615127009">Tiếp theo</translation> <translation id="1210557957257435379">ghi màn hình</translation> <translation id="121097972571826261">Tiến một từ</translation> +<translation id="1217633719248931900">Chuyển tới ứng dụng</translation> <translation id="1218444235442067213"><ph name="APP_NAME" />, Ứng dụng Cửa hàng Play</translation> <translation id="1225748608451425081">Chromebook của bạn đã bị khóa do một vấn đề đã biết. Bạn có thể đăng nhập sau: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Dừng chọn</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Truy cập vào nhật ký lưu dữ liệu vào bảng nhớ tạm bằng cách nhấn tổ hợp phím <ph name="SHORTCUT_KEY_NAME" /> + V để xem bảng nhớ tạm của bạn. Hãy sao chép một mục để bắt đầu.</translation> <translation id="3593646411856133110">Vuốt lên và giữ để xem các ứng dụng đang mở</translation> <translation id="3595596368722241419">Pin đầy</translation> +<translation id="3596012367874587041">Cài đặt ứng dụng</translation> <translation id="3600061223661453002">Tắt</translation> <translation id="3604801046548457007">Đã tạo Không gian làm việc <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">Đã kết nối màn hình Braille.</translation> @@ -537,6 +539,7 @@ <translation id="4123259114412175274">Để mở khoá Chromebook, hãy nhớ bật Bluetooth trên điện thoại</translation> <translation id="4125970834901680537">Không thể phát trực tuyến nội dung trên ứng dụng ở chế độ máy tính bảng. Hãy thử lại ở chế độ máy tính xách tay.</translation> <translation id="4129129681837227511">Để xem thông báo trên màn hình khóa, hãy mở khóa thiết bị để thay đổi tùy chọn cài đặt này</translation> +<translation id="4130035430755296270">Tiếp tục di chuột để xem thêm tuỳ chọn bố cục</translation> <translation id="4136724716305260864">Bật cho đến bình minh</translation> <translation id="4146833061457621061">Phát nhạc</translation> <translation id="4165275524535002941">Có thể cáp không hỗ trợ màn hình</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index b72dceba..03f7def 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -446,6 +446,7 @@ <translation id="3593039967545720377">您只需按“<ph name="SHORTCUT_KEY_NAME" /> + V”打开剪贴板,便可访问剪贴板历史记录。首先,请复制一项内容。</translation> <translation id="3593646411856133110">向上滑动并按住屏幕可查看已打开的应用</translation> <translation id="3595596368722241419">电池已充满</translation> +<translation id="3596012367874587041">应用设置</translation> <translation id="3600061223661453002">关闭</translation> <translation id="3604801046548457007">已创建桌面“<ph name="DESK_TITILE" />”</translation> <translation id="3606978283550408104">已连接盲文显示屏。</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb index de80a3c..6d860be 100644 --- a/ash/strings/ash_strings_zh-HK.xtb +++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -49,6 +49,7 @@ <translation id="1201402288615127009">下一個</translation> <translation id="1210557957257435379">螢幕錄影</translation> <translation id="121097972571826261">往前一個字詞</translation> +<translation id="1217633719248931900">前往應用程式</translation> <translation id="1218444235442067213"><ph name="APP_NAME" />,「Play 商店」應用程式</translation> <translation id="1225748608451425081">由於發生已知問題,因此 Chromebook 已鎖定。您將可在 <ph name="TIME_LEFT" />後登入。</translation> <translation id="1229194443904279055">停止選取</translation> @@ -447,6 +448,7 @@ <translation id="3593039967545720377">如要存取剪貼簿記錄,按下<ph name="SHORTCUT_KEY_NAME" /> + V 鍵即可查看剪貼簿。複製項目即可開始使用。</translation> <translation id="3593646411856133110">向上滑動並按住螢幕,即可查看開啟的應用程式</translation> <translation id="3595596368722241419">電池已滿</translation> +<translation id="3596012367874587041">應用程式設定</translation> <translation id="3600061223661453002">關閉</translation> <translation id="3604801046548457007">已建立桌面 <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">已連接點字顯示器。</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index 517fac1..6d76003 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">你的 Chromebook 因為已知問題遭到鎖定。你可以在 <ph name="TIME_LEFT" />後登入。</translation> <translation id="1229194443904279055">停止選取</translation> <translation id="1239161794459865856">「<ph name="FEATURE_NAME" />」已連線。</translation> +<translation id="1240638468526743569">某個應用程式</translation> <translation id="1246890715821376239">不支援的應用程式</translation> <translation id="1247372569136754018">麥克風 (內部)</translation> <translation id="1247519845643687288">最近使用的應用程式</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">按下 <ph name="SHORTCUT_KEY_NAME" /> + V 鍵查看剪貼簿,藉此存取剪貼簿歷史記錄。複製任一項目即可開始。</translation> <translation id="3593646411856133110">向上滑動並按住螢幕即可查看開啟的應用程式</translation> <translation id="3595596368722241419">電池已充滿</translation> +<translation id="3596012367874587041">應用程式設定</translation> <translation id="3600061223661453002">關閉</translation> <translation id="3604801046548457007">已建立桌面 <ph name="DESK_TITILE" /></translation> <translation id="3606978283550408104">已連接點字顯示器。</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240">電量:<ph name="BATTERY_PERCENTAGE" />%</translation> <translation id="4917385247580444890">強</translation> <translation id="4918086044614829423">接受</translation> +<translation id="4919841137949306064">「<ph name="APP_NAME" />」正在使用你的攝影機</translation> <translation id="4925542575807923399">這個帳戶的管理員要求此帳戶必需是多重登入工作階段中第一個登入的帳戶。</translation> <translation id="4938176435186993759">隱藏所有建議</translation> <translation id="4945196315133970626">關閉通知</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">你現在可以同時錄製鏡頭畫面和螢幕畫面</translation> <translation id="622484624075952240">向下鍵</translation> <translation id="6231419273573514727">周邊裝置效能可能受到限制</translation> +<translation id="6232891689835436217">「<ph name="APP_NAME" />」正在使用你的攝影機和麥克風</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">已鎖定為水平畫面</translation> <translation id="6259254695169772643">請使用觸控筆選取</translation> @@ -1131,6 +1135,7 @@ <translation id="7544300628205093162">鍵盤背光功能已開啟</translation> <translation id="7548434653388805669">就寢時間到了</translation> <translation id="7551643184018910560">固定至檔案櫃</translation> +<translation id="7557816257942363084">「<ph name="APP_NAME" />」正在使用你的麥克風</translation> <translation id="7561982940498449837">關閉選單</translation> <translation id="7564874036684306347">將視窗移至其他桌面可能會導致未預期的行為。後續的通知、視窗和對話方塊可能會分開顯示在不同桌面上。</translation> <translation id="7569509451529460200">點字模式和 ChromeVox 已啟用</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb index 406caa2..2614c809 100644 --- a/ash/strings/ash_strings_zu.xtb +++ b/ash/strings/ash_strings_zu.xtb
@@ -53,6 +53,7 @@ <translation id="1225748608451425081">I-Chromebook ikhiyiwe ngenxa yenkinga engaziwa. Uzokwazi ukungena ngemvume ngemva: <ph name="TIME_LEFT" />.</translation> <translation id="1229194443904279055">Yeka ukuhlela</translation> <translation id="1239161794459865856">I-<ph name="FEATURE_NAME" /> ixhunyiwe.</translation> +<translation id="1240638468526743569">I-app</translation> <translation id="1246890715821376239">Ama-app angasekelwe</translation> <translation id="1247372569136754018">Imakrofoni (okwangaphakathi)</translation> <translation id="1247519845643687288">Ama-app wakamuva</translation> @@ -446,6 +447,7 @@ <translation id="3593039967545720377">Finyelela umlando wakho webhodi lokunamathisela ngokucindezela okuthi <ph name="SHORTCUT_KEY_NAME" /> + V ukuze ubuke ibhodi lokunamathiselwe kwakho. Kopisha into ukuze uqalise.</translation> <translation id="3593646411856133110">Swayiphela phezulu ubambe ukuze ubone izinhlelo zokusebenza ezivuliwe</translation> <translation id="3595596368722241419">Ibhethri ligcwele</translation> +<translation id="3596012367874587041">Amasethingi e-App</translation> <translation id="3600061223661453002">Valiwe</translation> <translation id="3604801046548457007">Ideski <ph name="DESK_TITILE" /> lidaliwe</translation> <translation id="3606978283550408104">Isibonisi se-Braille sixhunyiwe.</translation> @@ -685,6 +687,7 @@ <translation id="490788395437447240"><ph name="BATTERY_PERCENTAGE" />% ibhethri</translation> <translation id="4917385247580444890">kunamandla</translation> <translation id="4918086044614829423">Yamukela</translation> +<translation id="4919841137949306064">I-<ph name="APP_NAME" /> okwamanje isebenzisa ikhamera yakho</translation> <translation id="4925542575807923399">Umlawuli wale akhawunti udinga le akhawunti ukuthi ibe yi-akhawunti yokuqala engene ngemvume kuseshini yokungena ngemvume eningi.</translation> <translation id="4938176435186993759">Fihla zonke iziphakamiso</translation> <translation id="4945196315133970626">Vala izaziso</translation> @@ -914,6 +917,7 @@ <translation id="6220928844947387476">Manje usungakwazi ukuzirekhoda wena nesikrini sakho ngesikhathi esifanayo</translation> <translation id="622484624075952240">Phansi</translation> <translation id="6231419273573514727">Ukusebenza kwemingcele kungakhawulelwa</translation> +<translation id="6232891689835436217">I-<ph name="APP_NAME" /> okwamanje isebenzisa ikhamera nemakrofoni yakho</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Kukhiywe ngokuqondile</translation> <translation id="6259254695169772643">Sebenzisa i-stylus yakho ukuze ukhethe</translation> @@ -1132,6 +1136,7 @@ <translation id="7544300628205093162">I-backlight yekhibhodi ivuliwe</translation> <translation id="7548434653388805669">Isikhathi sokulala</translation> <translation id="7551643184018910560">Phina kushelufu</translation> +<translation id="7557816257942363084">I-<ph name="APP_NAME" /> okwamanje isebenzisa imakrofoni yakho</translation> <translation id="7561982940498449837">Vala imenyu</translation> <translation id="7564874036684306347">Ukuhambisa amawindi kwenye ideskithophu kungabangela ekuziphatheni okungalindelekile. Izaziso ezilandelayo, amawindi nezingxoxo zingahlukaniswa phakathi kwamadeskithophu.</translation> <translation id="7569509451529460200">I-Braille ne-ChromeVox inikwe amandla</translation>
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc index 0dc724af..b8c194e3 100644 --- a/ash/system/ime_menu/ime_menu_tray.cc +++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -59,6 +59,7 @@ // Used for testing. const int kEmojiButtonId = 1; +const int kSettingsButtonId = 2; // Insets for the title view (dp). constexpr auto kTitleViewPadding = gfx::Insets::TLBR(0, 0, 0, 16); @@ -86,6 +87,11 @@ ui::TEXT_INPUT_TYPE_PASSWORD; } +// Returns true if it is Kiosk Session. +bool IsKioskSession() { + return Shell::Get()->session_controller()->IsRunningInAppMode(); +} + class ImeMenuLabel : public views::Label { public: METADATA_HEADER(ImeMenuLabel); @@ -153,15 +159,19 @@ TrayPopupUtils::FontStyle::kPodMenuHeader); SetFlexForView(title_label, 1); - settings_button_ = AddChildView(std::make_unique<IconButton>( - base::BindRepeating([]() { - base::RecordAction( - base::UserMetricsAction("StatusArea_IME_Detailed")); - Shell::Get()->system_tray_model()->client()->ShowIMESettings(); - }), - IconButton::Type::kSmall, &kSystemMenuSettingsIcon, - IDS_ASH_STATUS_TRAY_IME_SETTINGS)); - settings_button_->SetEnabled(TrayPopupUtils::CanOpenWebUISettings()); + // Don't create Settings Button if it is Kiosk session. + if (!IsKioskSession()) { + settings_button_ = AddChildView(std::make_unique<IconButton>( + base::BindRepeating([]() { + base::RecordAction( + base::UserMetricsAction("StatusArea_IME_Detailed")); + Shell::Get()->system_tray_model()->client()->ShowIMESettings(); + }), + IconButton::Type::kSmall, &kSystemMenuSettingsIcon, + IDS_ASH_STATUS_TRAY_IME_SETTINGS)); + settings_button_->SetEnabled(TrayPopupUtils::CanOpenWebUISettings()); + settings_button_->SetID(kSettingsButtonId); + } } ImeTitleView(const ImeTitleView&) = delete; ImeTitleView& operator=(const ImeTitleView&) = delete;
diff --git a/ash/system/ime_menu/ime_menu_tray_unittest.cc b/ash/system/ime_menu/ime_menu_tray_unittest.cc index 3e44febc..bfccce6 100644 --- a/ash/system/ime_menu/ime_menu_tray_unittest.cc +++ b/ash/system/ime_menu/ime_menu_tray_unittest.cc
@@ -8,6 +8,7 @@ #include "ash/ime/ime_controller_impl.h" #include "ash/ime/test_ime_controller_client.h" #include "ash/public/cpp/ime_info.h" +#include "ash/session/session_controller_impl.h" #include "ash/shell.h" #include "ash/system/ime_menu/ime_list_view.h" #include "ash/system/status_area_widget.h" @@ -34,6 +35,7 @@ namespace { const int kEmojiButtonId = 1; +const int kSettingsButtonId = 2; ImeMenuTray* GetTray() { return StatusAreaWidgetTestHelper::GetStatusAreaWidget()->ime_menu_tray(); @@ -87,6 +89,17 @@ GetTray()->bubble_->bubble_view()->GetViewByID(kEmojiButtonId)); } + views::View* GetSettingsButton() const { + return static_cast<views::View*>( + GetTray()->bubble_->bubble_view()->GetViewByID(kSettingsButtonId)); + } + + void SetUpKioskSession() { + SessionInfo info; + info.is_running_in_app_mode = true; + Shell::Get()->session_controller()->SetSessionInfo(info); + } + // Verifies the IME menu list has been updated with the right IME list. void ExpectValidImeList(const std::vector<ImeInfo>& expected_imes, const ImeInfo& expected_current_ime) { @@ -417,6 +430,33 @@ EXPECT_FALSE(IsVoiceEnabled()); } +TEST_F(ImeMenuTrayTest, KioskImeTraySettingsButton) { + SetUpKioskSession(); + Shell::Get()->ime_controller()->ShowImeMenuOnShelf(true); + ASSERT_TRUE(IsVisible()); + + // Open the menu. + ui::GestureEvent tap(0, 0, 0, base::TimeTicks(), + ui::GestureEventDetails(ui::ET_GESTURE_TAP)); + GetTray()->PerformAction(tap); + + views::View* settings_button = GetSettingsButton(); + EXPECT_FALSE(settings_button); +} + +TEST_F(ImeMenuTrayTest, UserSessionImeTraySettingsButton) { + Shell::Get()->ime_controller()->ShowImeMenuOnShelf(true); + ASSERT_TRUE(IsVisible()); + + // Open the menu. + ui::GestureEvent tap(0, 0, 0, base::TimeTicks(), + ui::GestureEventDetails(ui::ET_GESTURE_TAP)); + GetTray()->PerformAction(tap); + + views::View* settings_button = GetSettingsButton(); + EXPECT_TRUE(settings_button); +} + TEST_F(ImeMenuTrayTest, ShowOnScreenKeyboardToggle) { Shell::Get()->ime_controller()->ShowImeMenuOnShelf(true); ASSERT_TRUE(IsVisible());
diff --git a/ash/tooltips/tooltip_controller_unittest.cc b/ash/tooltips/tooltip_controller_unittest.cc index 381a07d..7805575 100644 --- a/ash/tooltips/tooltip_controller_unittest.cc +++ b/ash/tooltips/tooltip_controller_unittest.cc
@@ -171,4 +171,23 @@ EXPECT_TRUE(helper_->IsTooltipVisible()); } +TEST_F(TooltipControllerTest, HideTooltipWhenViewHidden) { + std::unique_ptr<views::Widget> widget(CreateNewWidgetOn(0)); + TooltipTestView* view = new TooltipTestView; + AddViewToWidgetAndResize(widget.get(), view); + view->set_tooltip_text(u"Tooltip Text"); + EXPECT_EQ(std::u16string(), helper_->GetTooltipText()); + EXPECT_EQ(nullptr, helper_->GetTooltipParentWindow()); + + ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); + generator.MoveMouseRelativeTo(widget->GetNativeView(), + view->bounds().CenterPoint()); + + // Mouse event triggers tooltip update so it becomes visible. + EXPECT_TRUE(helper_->IsTooltipVisible()); + + view->SetVisible(false); + EXPECT_FALSE(helper_->IsTooltipVisible()); +} + } // namespace ash
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_am.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_am.xtb index 99944ae..a65f6454 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_am.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_am.xtb
@@ -72,7 +72,7 @@ <translation id="3789724198583203151">90 ዲግሪ በሰዓት ተቃራኒ አቅጣጫ አሽከርክር</translation> <translation id="3810838688059735925">ቪዲዮ</translation> <translation id="3838931309141338733">የአሞሌ ኮድ ይቃኙ</translation> -<translation id="3892148308691398805">ጽሑፍ ቅዳ</translation> +<translation id="3892148308691398805">ጽሁፍ ቅዳ</translation> <translation id="4061162772429051350"><ph name="MAGAPIXELS_AMOUNT" /> ሜፒ</translation> <translation id="4118525110028899586">ቀረጻን ለአፍታ አቁም</translation> <translation id="4121305183798804752">ሰነድ ተገኝቷል</translation> @@ -137,7 +137,7 @@ <translation id="7191890674911603392">የቀረጻ ዓይነት</translation> <translation id="7243947652761655814">የቪዲዮ ምስል ጥራት</translation> <translation id="7337660886763914220">የፋይል ሥርዓት ስህተቶች።</translation> -<translation id="7450541714075000668">ፅሁፍ ገልብጧል</translation> +<translation id="7450541714075000668">ጽሁፍ ገልብጧል</translation> <translation id="7488619942230388918">የጂአይኤፍ ቪዲዮን ይቅረጹ</translation> <translation id="7557677699350329807">ወደ ቀጣዩ ካሜራ ቀይር</translation> <translation id="7607002721634913082">ለአፍታ ቆሟል</translation> @@ -151,7 +151,7 @@ <translation id="7726641833034062494">መደበኛ ቪዲዮን ይቅረጹ</translation> <translation id="7748344063862150053">የሰነድ ከላይ-ቀኝ ጥግ</translation> <translation id="7933675232020478311">ወደ ታች-ቀኝ አቅጣጫ በመንቀሳቀስ ላይ</translation> -<translation id="7983668134180549431">ጽሑፍ ተገኝቷል።</translation> +<translation id="7983668134180549431">ጽሁፍ ተገኝቷል።</translation> <translation id="8120146556401698679">ማንፏቀቅ- ማጋደል-አጉላ/አሳንስ</translation> <translation id="8131740175452115882">አረጋግጥ</translation> <translation id="8145038249676204903">ፎቶ ለማንሳት ይቀይሩ</translation>
diff --git a/ash/webui/os_feedback_ui/mojom/os_feedback_ui.mojom b/ash/webui/os_feedback_ui/mojom/os_feedback_ui.mojom index 0a4e7c72..fabd958 100644 --- a/ash/webui/os_feedback_ui/mojom/os_feedback_ui.mojom +++ b/ash/webui/os_feedback_ui/mojom/os_feedback_ui.mojom
@@ -81,6 +81,9 @@ // file, zipped, and then attached to the report. // Example value: "Failed to connect to wifi network.". string? extra_diagnostics; + // When a report is sent with bluetooth logs, the category_tag will be set + // to BluetoothReportWithLogs. + string? category_tag; }; // Status of the sending of a feedback report. @@ -123,6 +126,9 @@ // Whether or not consent has been granted to Google for to contact user in // reference to report. See (go/feedback-user-consent-faq). bool contact_user_consent_granted; + // Whether or not the report has sendBluetoothLogs + // flag set true by internal google account only. + bool send_bluetooth_logs; }; // The first action taken on the confirmation page.
diff --git a/ash/webui/os_feedback_ui/resources/share_data_page.js b/ash/webui/os_feedback_ui/resources/share_data_page.js index a6fcb89..d8302efc 100644 --- a/ash/webui/os_feedback_ui/resources/share_data_page.js +++ b/ash/webui/os_feedback_ui/resources/share_data_page.js
@@ -248,6 +248,7 @@ !!this.getElement_('#screenshotImage').src, contactUserConsentGranted: this.getElement_('#userConsentCheckbox').checked, + sendBluetoothLogs: this.getElement_('#bluetoothLogsCheckbox').checked, }); report.attachedFile = @@ -275,6 +276,10 @@ this.feedbackContext.extraDiagnostics; } + if (this.getElement_('#bluetoothLogsCheckbox').checked) { + report.feedbackContext.categoryTag = 'BluetoothReportWithLogs'; + } + return report; }
diff --git a/ash/wm/desks/templates/restore_data_collector.cc b/ash/wm/desks/templates/restore_data_collector.cc index e262f6b..185b5982 100644 --- a/ash/wm/desks/templates/restore_data_collector.cc +++ b/ash/wm/desks/templates/restore_data_collector.cc
@@ -135,9 +135,8 @@ Call& call = call_it->second; auto desk_template = std::make_unique<DeskTemplate>( - base::GUID::GenerateRandomV4().AsLowercaseString(), - DeskTemplateSource::kUser, call.template_name, base::Time::Now(), - call.template_type); + base::GUID::GenerateRandomV4(), DeskTemplateSource::kUser, + call.template_name, base::Time::Now(), call.template_type); desk_template->set_desk_restore_data(std::move(call.data)); if (!call.unsupported_apps.empty() &&
diff --git a/ash/wm/desks/templates/saved_desk_unittest.cc b/ash/wm/desks/templates/saved_desk_unittest.cc index 232404c..656810f 100644 --- a/ash/wm/desks/templates/saved_desk_unittest.cc +++ b/ash/wm/desks/templates/saved_desk_unittest.cc
@@ -111,8 +111,8 @@ DeskTemplateSource source, DeskTemplateType type, std::unique_ptr<app_restore::RestoreData> restore_data) { - auto desk_template = std::make_unique<DeskTemplate>( - uuid.AsLowercaseString(), source, name, created_time, type); + auto desk_template = + std::make_unique<DeskTemplate>(uuid, source, name, created_time, type); desk_template->set_desk_restore_data(std::move(restore_data)); AddEntry(std::move(desk_template)); @@ -3163,9 +3163,8 @@ restore_data->ModifyWindowInfo(kAppId2, kWindowId2, window_info_2); auto desk_template = std::make_unique<DeskTemplate>( - base::GUID::GenerateRandomV4().AsLowercaseString(), - DeskTemplateSource::kUser, "template_1", base::Time::Now(), - DeskTemplateType::kTemplate); + base::GUID::GenerateRandomV4(), DeskTemplateSource::kUser, "template_1", + base::Time::Now(), DeskTemplateType::kTemplate); desk_template->set_desk_restore_data(std::move(restore_data)); // Record histogram.
diff --git a/base/allocator/dispatcher/dispatcher.cc b/base/allocator/dispatcher/dispatcher.cc index 9a99878..b6ecb1c 100644 --- a/base/allocator/dispatcher/dispatcher.cc +++ b/base/allocator/dispatcher/dispatcher.cc
@@ -313,7 +313,12 @@ internal::DispatchData dispatch_data_; #if DCHECK_IS_ON() // Indicator if the dispatcher has been initialized before. +#if !defined(__cpp_lib_atomic_value_initialization) || \ + __cpp_lib_atomic_value_initialization < 201911L std::atomic_flag is_initialized_check_flag_ = ATOMIC_FLAG_INIT; +#else + std::atomic_flag is_initialized_check_flag_; +#endif #endif };
diff --git a/base/allocator/partition_allocator/BUILD.gn b/base/allocator/partition_allocator/BUILD.gn index 05644ad..5b57dfa 100644 --- a/base/allocator/partition_allocator/BUILD.gn +++ b/base/allocator/partition_allocator/BUILD.gn
@@ -44,7 +44,11 @@ if (make_partition_alloc_standalone) { partition_alloc_target_type = "component" } else { - partition_alloc_target_type = "source_set" + if (is_component_build) { + partition_alloc_target_type = "source_set" + } else { + partition_alloc_target_type = "static_library" + } } target(partition_alloc_target_type, "partition_alloc") {
diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc index c9f912e..03b60d35 100644 --- a/base/allocator/partition_allocator/partition_alloc_unittest.cc +++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -4540,11 +4540,14 @@ static_cast<partition_alloc::PartitionTag>(0xA3C4); partition_alloc::internal::PartitionTagSetValue( - ptr1, slot_span->bucket->slot_size, kTag1); + allocator.root()->ObjectToSlotStart(ptr1), slot_span->bucket->slot_size, + kTag1); partition_alloc::internal::PartitionTagSetValue( - ptr2, slot_span->bucket->slot_size, kTag2); + allocator.root()->ObjectToSlotStart(ptr2), slot_span->bucket->slot_size, + kTag2); partition_alloc::internal::PartitionTagSetValue( - ptr3, slot_span->bucket->slot_size, kTag3); + allocator.root()->ObjectToSlotStart(ptr3), slot_span->bucket->slot_size, + kTag3); memset(ptr1, 0, alloc_size); memset(ptr2, 0, alloc_size);
diff --git a/base/allocator/partition_allocator/partition_page.h b/base/allocator/partition_allocator/partition_page.h index 5adbaef..6525ff6 100644 --- a/base/allocator/partition_allocator/partition_page.h +++ b/base/allocator/partition_allocator/partition_page.h
@@ -419,16 +419,14 @@ SystemPageSize()); } -template <bool thread_safe> -PA_ALWAYS_INLINE const PartitionPage<thread_safe>* GetSubsequentPageMetadata( - const PartitionPage<thread_safe>* page) { - return page + 1; +PA_ALWAYS_INLINE const SubsequentPageMetadata* GetSubsequentPageMetadata( + const PartitionPage<ThreadSafe>* page) { + return &(page + 1)->subsequent_page_metadata; } -template <bool thread_safe> -PA_ALWAYS_INLINE PartitionPage<thread_safe>* GetSubsequentPageMetadata( - PartitionPage<thread_safe>* page) { - return page + 1; +PA_ALWAYS_INLINE SubsequentPageMetadata* GetSubsequentPageMetadata( + PartitionPage<ThreadSafe>* page) { + return &(page + 1)->subsequent_page_metadata; } template <bool thread_safe> @@ -690,26 +688,26 @@ PA_ALWAYS_INLINE void SlotSpanMetadata<thread_safe>::SetRawSize( size_t raw_size) { PA_DCHECK(CanStoreRawSize()); - auto* the_next_page = GetSubsequentPageMetadata( + auto* subsequent_page_metadata = GetSubsequentPageMetadata( reinterpret_cast<PartitionPage<thread_safe>*>(this)); - the_next_page->subsequent_page_metadata.raw_size = raw_size; + subsequent_page_metadata->raw_size = raw_size; } template <bool thread_safe> PA_ALWAYS_INLINE size_t SlotSpanMetadata<thread_safe>::GetRawSize() const { PA_DCHECK(CanStoreRawSize()); - auto* the_next_page = GetSubsequentPageMetadata( + const auto* subsequent_page_metadata = GetSubsequentPageMetadata( reinterpret_cast<const PartitionPage<thread_safe>*>(this)); - return the_next_page->subsequent_page_metadata.raw_size; + return subsequent_page_metadata->raw_size; } template <bool thread_safe> PA_ALWAYS_INLINE PartitionTag* SlotSpanMetadata<thread_safe>::DirectMapMTETag() { PA_DCHECK(bucket->is_direct_mapped()); - auto* the_next_page = GetSubsequentPageMetadata( + auto* subsequent_page_metadata = GetSubsequentPageMetadata( reinterpret_cast<PartitionPage<thread_safe>*>(this)); - return &the_next_page->subsequent_page_metadata.direct_map_tag; + return &subsequent_page_metadata->direct_map_tag; } template <bool thread_safe>
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index e9591ae..a477bbe 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h
@@ -1191,10 +1191,8 @@ #if defined(PA_USE_MTE_CHECKED_PTR_WITH_64_BITS_POINTERS) if (!root->IsDirectMappedBucket(slot_span->bucket)) { - size_t slot_size_less_extras = - root->AdjustSizeForExtrasSubtract(slot_span->bucket->slot_size); partition_alloc::internal::PartitionTagIncrementValue( - object, slot_size_less_extras); + slot_start, slot_span->bucket->slot_size); } #endif // defined(PA_USE_MTE_CHECKED_PTR_WITH_64_BITS_POINTERS)
diff --git a/base/allocator/partition_allocator/partition_tag.h b/base/allocator/partition_allocator/partition_tag.h index 7039ad5..3006ae1 100644 --- a/base/allocator/partition_allocator/partition_tag.h +++ b/base/allocator/partition_allocator/partition_tag.h
@@ -58,12 +58,13 @@ namespace internal { -PA_ALWAYS_INLINE void PartitionTagSetValue(uintptr_t addr, +PA_ALWAYS_INLINE void PartitionTagSetValue(uintptr_t slot_start, size_t size, PartitionTag value) { PA_DCHECK((size % tag_bitmap::kBytesPerPartitionTag) == 0); + PA_DCHECK((slot_start % tag_bitmap::kBytesPerPartitionTag) == 0); size_t tag_count = size >> tag_bitmap::kBytesPerPartitionTagShift; - PartitionTag* tag_ptr = PartitionTagPointer(addr); + PartitionTag* tag_ptr = PartitionTagPointer(slot_start); if (sizeof(PartitionTag) == 1) { memset(tag_ptr, value, tag_count); } else { @@ -72,28 +73,13 @@ } } -PA_ALWAYS_INLINE void PartitionTagSetValue(void* ptr, - size_t size, - PartitionTag value) { - // Disambiguation: UntagPtr relates to hwardware MTE, and it strips the tag - // from the pointer. Whereas, PartitionTagSetValue relates to software MTE - // (i.e. MTECheckedPtr) and it sets the in-memory tag. - PartitionTagSetValue(UntagPtr(ptr), size, value); -} - PA_ALWAYS_INLINE PartitionTag PartitionTagGetValue(void* ptr) { return *PartitionTagPointer(ptr); } -PA_ALWAYS_INLINE void PartitionTagClearValue(void* ptr, size_t size) { - size_t tag_region_size = size >> tag_bitmap::kBytesPerPartitionTagShift - << tag_bitmap::kPartitionTagSizeShift; - PA_DCHECK(!memchr(PartitionTagPointer(ptr), 0, tag_region_size)); - memset(PartitionTagPointer(ptr), 0, tag_region_size); -} - -PA_ALWAYS_INLINE void PartitionTagIncrementValue(void* ptr, size_t size) { - PartitionTag tag = PartitionTagGetValue(ptr); +PA_ALWAYS_INLINE void PartitionTagIncrementValue(uintptr_t slot_start, + size_t size) { + PartitionTag tag = *PartitionTagPointer(slot_start); PartitionTag new_tag = tag; ++new_tag; new_tag += !new_tag; // Avoid 0. @@ -101,13 +87,13 @@ // This verifies that tags for the entire slot have the same value and that // |size| doesn't exceed the slot size. size_t tag_count = size >> tag_bitmap::kBytesPerPartitionTagShift; - PartitionTag* tag_ptr = PartitionTagPointer(ptr); + PartitionTag* tag_ptr = PartitionTagPointer(slot_start); while (tag_count-- > 0) { PA_DCHECK(tag == *tag_ptr); tag_ptr++; } #endif - PartitionTagSetValue(ptr, size, new_tag); + PartitionTagSetValue(slot_start, size, new_tag); } } // namespace internal @@ -121,15 +107,12 @@ namespace internal { -PA_ALWAYS_INLINE void PartitionTagSetValue(void*, size_t, PartitionTag) {} - PA_ALWAYS_INLINE PartitionTag PartitionTagGetValue(void*) { return 0; } -PA_ALWAYS_INLINE void PartitionTagClearValue(void* ptr, size_t) {} - -PA_ALWAYS_INLINE void PartitionTagIncrementValue(void* ptr, size_t size) {} +PA_ALWAYS_INLINE void PartitionTagIncrementValue(uintptr_t slot_start, + size_t size) {} } // namespace internal
diff --git a/build/android/gradle/android.jinja b/build/android/gradle/android.jinja index df2edb9e..3b66b97 100644 --- a/build/android/gradle/android.jinja +++ b/build/android/gradle/android.jinja
@@ -56,8 +56,8 @@ } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 } {% if native is defined %}
diff --git a/build/android/gradle/java.jinja b/build/android/gradle/java.jinja index 7626f61..61886e91 100644 --- a/build/android/gradle/java.jinja +++ b/build/android/gradle/java.jinja
@@ -25,8 +25,8 @@ } } -sourceCompatibility = JavaVersion.VERSION_1_8 -targetCompatibility = JavaVersion.VERSION_1_8 +sourceCompatibility = JavaVersion.VERSION_11 +targetCompatibility = JavaVersion.VERSION_11 {% if template_type == 'java_binary' %} applicationName = "{{ target_name }}"
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni index d3bcb9e6..2b3c8f5 100644 --- a/buildtools/deps_revisions.gni +++ b/buildtools/deps_revisions.gni
@@ -5,5 +5,5 @@ declare_args() { # Used to cause full rebuilds on libc++ rolls. This should be kept in sync # with the libcxx_revision vars in //DEPS. - libcxx_revision = "6cc58d640cfe272f079b07da2e03781796c6a6aa" + libcxx_revision = "5df82514bc009b7fa3d4964ee1fdaf975646d44c" }
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index 9ae3d8c..d8b4ab2e 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -562,8 +562,6 @@ "test/mock_latency_info_swap_promise_monitor.h", "test/mock_layer_tree_mutator.cc", "test/mock_layer_tree_mutator.h", - "test/mock_mutator_host.cc", - "test/mock_mutator_host.h", "test/mock_occlusion_tracker.h", "test/paint_op_helper.h", "test/pixel_comparator.cc", @@ -774,7 +772,6 @@ "resources/resource_pool_unittest.cc", "scheduler/scheduler_state_machine_unittest.cc", "scheduler/scheduler_unittest.cc", - "test/mock_mutator_host_unittest.cc", "tiles/checker_image_tracker_unittest.cc", "tiles/decoded_image_tracker_unittest.cc", "tiles/gpu_image_decode_cache_unittest.cc",
diff --git a/cc/paint/oop_pixeltest.cc b/cc/paint/oop_pixeltest.cc index be2d0d3..d438d11 100644 --- a/cc/paint/oop_pixeltest.cc +++ b/cc/paint/oop_pixeltest.cc
@@ -240,9 +240,10 @@ SkBitmap ReadbackMailbox(gpu::raster::RasterInterface* ri, const gpu::Mailbox& mailbox, - const gfx::Size& image_size) { - SkImageInfo image_info = - SkImageInfo::MakeN32Premul(image_size.width(), image_size.height()); + const gfx::Size& image_size, + sk_sp<SkColorSpace> color_space = nullptr) { + SkImageInfo image_info = SkImageInfo::MakeN32Premul( + image_size.width(), image_size.height(), color_space); SkBitmap result; result.allocPixels(image_info); ri->ReadbackImagePixels(mailbox, image_info, image_info.minRowBytes(), 0, 0, @@ -250,16 +251,19 @@ return result; } - gpu::Mailbox CreateMailboxSharedImage(gpu::raster::RasterInterface* ri, - gpu::SharedImageInterface* sii, - const RasterOptions& options, - viz::ResourceFormat image_format) { + gpu::Mailbox CreateMailboxSharedImage( + gpu::raster::RasterInterface* ri, + gpu::SharedImageInterface* sii, + const RasterOptions& options, + viz::ResourceFormat image_format, + absl::optional<gfx::ColorSpace> color_space = absl::nullopt) { uint32_t flags = gpu::SHARED_IMAGE_USAGE_RASTER | gpu::SHARED_IMAGE_USAGE_OOP_RASTERIZATION; gpu::Mailbox mailbox = sii->CreateSharedImage( image_format, options.resource_size, - options.target_color_params.color_space, kTopLeft_GrSurfaceOrigin, - kPremul_SkAlphaType, flags, gpu::kNullSurfaceHandle); + color_space.value_or(options.target_color_params.color_space), + kTopLeft_GrSurfaceOrigin, kPremul_SkAlphaType, flags, + gpu::kNullSurfaceHandle); EXPECT_TRUE(mailbox.Verify()); ri->WaitSyncTokenCHROMIUM(sii->GenUnverifiedSyncToken().GetConstData()); @@ -2151,7 +2155,30 @@ // The Android emulator does not support RED_8 or RG_88 texture formats. #if !BUILDFLAG(IS_ANDROID_EMULATOR) -TEST_F(OopPixelTest, ConvertYUVToRGB) { +using OopYUVToRGBConfig = ::testing::tuple<gfx::ColorSpace, bool>; + +class OopYUVToRGBPixelTest + : public OopPixelTest, + public ::testing::WithParamInterface<OopYUVToRGBConfig> { + public: + bool TestColorSpaceConversion() const { + return ::testing::get<1>(GetParam()); + } + + gfx::ColorSpace DestinationColorSpace() const { + return ::testing::get<0>(GetParam()); + } +}; + +TEST_P(OopYUVToRGBPixelTest, ConvertYUVToRGB) { + // The source color space for the YUV image. If color space conversion is + // disabled, or if `dest_color_space` is invalid, then this will be ignored. + const gfx::ColorSpace source_color_space(gfx::ColorSpace::PrimaryID::P3, + gfx::ColorSpace::TransferID::SRGB); + + // The output SharedImage color space. + const gfx::ColorSpace dest_color_space = DestinationColorSpace(); + RasterOptions options(gfx::Size(16, 16)); RasterOptions uv_options(gfx::Size(options.resource_size.width() / 2, options.resource_size.height() / 2)); @@ -2159,7 +2186,7 @@ auto* sii = raster_context_provider_->SharedImageInterface(); gpu::Mailbox dest_mailbox = CreateMailboxSharedImage( - ri, sii, options, viz::ResourceFormat::RGBA_8888); + ri, sii, options, viz::ResourceFormat::RGBA_8888, dest_color_space); constexpr viz::ResourceFormat format = viz::ResourceFormat::RED_8; gpu::Mailbox yuv_mailboxes[3]{ @@ -2196,18 +2223,32 @@ UploadPixels(ri, yuv_mailboxes[2], uv_info, v_bitmap); ri->ConvertYUVAMailboxesToRGB(dest_mailbox, kJPEG_SkYUVColorSpace, - SkColorSpace::MakeSRGB().get(), + TestColorSpaceConversion() + ? source_color_space.ToSkColorSpace().get() + : nullptr, SkYUVAInfo::PlaneConfig::kY_U_V, SkYUVAInfo::Subsampling::k420, yuv_mailboxes); ri->OrderingBarrierCHROMIUM(); SkBitmap actual_bitmap = - ReadbackMailbox(ri, dest_mailbox, options.resource_size); + ReadbackMailbox(ri, dest_mailbox, options.resource_size, + dest_color_space.ToSkColorSpace()); + SkColor expected_color = + (TestColorSpaceConversion() && dest_color_space.IsValid()) + ? SkColorSetARGB(255, 61, 29, 252) + : SkColorSetARGB(255, 0, 0, 254); SkBitmap expected_bitmap = MakeSolidColorBitmap( - options.resource_size, - SkColor4f::FromColor(SkColorSetARGB(255, 0, 0, 254))); + options.resource_size, SkColor4f::FromColor(expected_color)); - ExpectEquals(actual_bitmap, expected_bitmap); + // Allow slight rounding error on all pixels. + FuzzyPixelComparator comparator( + /*discard_alpha=*/false, + /*error_pixels_percentage_limit=*/100.0f, + /*small_error_pixels_percentage_limit=*/0.0f, + /*avg_abs_error_limit=*/2.f, + /*max_abs_error_limit=*/2.f, + /*small_error_threshold=*/0); + ExpectEquals(actual_bitmap, expected_bitmap, comparator); gpu::SyncToken sync_token; sii->DestroySharedImage(sync_token, dest_mailbox); @@ -2216,6 +2257,15 @@ sii->DestroySharedImage(sync_token, yuv_mailboxes[2]); } +INSTANTIATE_TEST_SUITE_P( + P, + OopYUVToRGBPixelTest, + ::testing::Combine( + ::testing::Values(gfx::ColorSpace(gfx::ColorSpace::PrimaryID::BT2020, + gfx::ColorSpace::TransferID::SRGB), + gfx::ColorSpace()), + ::testing::Bool())); + TEST_F(OopPixelTest, ConvertNV12ToRGB) { RasterOptions options(gfx::Size(16, 16)); RasterOptions uv_options(gfx::Size(options.resource_size.width() / 2,
diff --git a/cc/test/mock_mutator_host.cc b/cc/test/mock_mutator_host.cc deleted file mode 100644 index 6ef7e8f..0000000 --- a/cc/test/mock_mutator_host.cc +++ /dev/null
@@ -1,14 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "cc/test/mock_mutator_host.h" - -#include "cc/trees/property_tree.h" - -namespace cc { - -MockMutatorHost::MockMutatorHost() = default; -MockMutatorHost::~MockMutatorHost() = default; - -} // namespace cc
diff --git a/cc/test/mock_mutator_host.h b/cc/test/mock_mutator_host.h deleted file mode 100644 index 0c5bee8..0000000 --- a/cc/test/mock_mutator_host.h +++ /dev/null
@@ -1,102 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CC_TEST_MOCK_MUTATOR_HOST_H_ -#define CC_TEST_MOCK_MUTATOR_HOST_H_ - -#include <memory> - -#include "cc/trees/mutator_host.h" -#include "testing/gmock/include/gmock/gmock.h" - -namespace cc { - -class MockMutatorHost : public MutatorHost { - public: - MockMutatorHost(); - ~MockMutatorHost(); - - MOCK_CONST_METHOD0(CreateImplInstance, std::unique_ptr<MutatorHost>()); - MOCK_METHOD0(ClearMutators, void()); - MOCK_METHOD0(InitClientAnimationState, void()); - MOCK_METHOD1(RemoveElementId, void(ElementId element_id)); - MOCK_METHOD1(SetMutatorHostClient, void(MutatorHostClient* client)); - MOCK_METHOD1(SetLayerTreeMutator, - void(std::unique_ptr<LayerTreeMutator> mutator)); - MOCK_METHOD2(PushPropertiesTo, - void(MutatorHost* host_impl, - const PropertyTrees& property_trees)); - MOCK_METHOD1(SetScrollAnimationDurationForTesting, - void(base::TimeDelta duration)); - MOCK_CONST_METHOD0(NeedsTickAnimations, bool()); - MOCK_METHOD1(ActivateAnimations, bool(MutatorEvents* events)); - MOCK_METHOD3(TickAnimations, - bool(base::TimeTicks monotonic_time, - const ScrollTree& scroll_tree, - bool is_active_tree)); - MOCK_METHOD2(TickScrollAnimations, - void(base::TimeTicks monotonic_time, - const ScrollTree& scroll_tree)); - MOCK_METHOD0(TickWorkletAnimations, void()); - MOCK_METHOD2(UpdateAnimationState, - bool(bool start_ready_animations, MutatorEvents* events)); - MOCK_METHOD1(TakeTimeUpdatedEvents, void(MutatorEvents* events)); - MOCK_METHOD0(PromoteScrollTimelinesPendingToActive, void()); - MOCK_METHOD0(CreateEvents, std::unique_ptr<MutatorEvents>()); - MOCK_METHOD1(SetAnimationEvents, void(std::unique_ptr<MutatorEvents> events)); - MOCK_CONST_METHOD1(ScrollOffsetAnimationWasInterrupted, - bool(ElementId element_id)); - MOCK_CONST_METHOD3(IsAnimatingProperty, - bool(ElementId element_id, - ElementListType list_type, - TargetProperty::Type property)); - MOCK_CONST_METHOD3(HasPotentiallyRunningAnimationForProperty, - bool(ElementId element_id, - ElementListType list_type, - TargetProperty::Type property)); - MOCK_CONST_METHOD2(HasAnyAnimationTargetingProperty, - bool(ElementId element_id, TargetProperty::Type property)); - MOCK_CONST_METHOD1(AnimationsPreserveAxisAlignment, - bool(ElementId element_id)); - MOCK_CONST_METHOD2(MaximumScale, - float(ElementId element_id, ElementListType list_type)); - MOCK_CONST_METHOD1(IsElementAnimating, bool(ElementId element_id)); - MOCK_CONST_METHOD1(HasTickingKeyframeModelForTesting, - bool(ElementId element_id)); - MOCK_METHOD5(ImplOnlyAutoScrollAnimationCreate, - void(ElementId element_id, - const gfx::PointF& target_offset, - const gfx::PointF& current_offset, - float autoscroll_velocity, - base::TimeDelta animation_start_offset)); - MOCK_METHOD5(ImplOnlyScrollAnimationCreate, - void(ElementId element_id, - const gfx::PointF& target_offset, - const gfx::PointF& current_offset, - base::TimeDelta delayed_by, - base::TimeDelta animation_start_offset)); - MOCK_METHOD4(ImplOnlyScrollAnimationUpdateTarget, - bool(const gfx::Vector2dF& scroll_delta, - const gfx::PointF& max_scroll_offset, - base::TimeTicks frame_monotonic_time, - base::TimeDelta delayed_by)); - MOCK_METHOD0(ScrollAnimationAbort, void()); - MOCK_CONST_METHOD0(ImplOnlyScrollAnimatingElement, ElementId()); - MOCK_CONST_METHOD0(MainThreadAnimationsCount, size_t()); - MOCK_CONST_METHOD0(HasInvalidationAnimation, bool()); - MOCK_CONST_METHOD0(HasNativePropertyAnimation, bool()); - MOCK_CONST_METHOD0(CurrentFrameHadRAF, bool()); - MOCK_CONST_METHOD0(HasSmilAnimation, bool()); - MOCK_CONST_METHOD0(HasSharedElementTransition, bool()); - MOCK_CONST_METHOD0(NextFrameHasPendingRAF, bool()); - MOCK_METHOD0(TakePendingThroughputTrackerInfos, - PendingThroughputTrackerInfos()); - MOCK_CONST_METHOD0(HasCanvasInvalidation, bool()); - MOCK_CONST_METHOD0(HasJSAnimation, bool()); - MOCK_CONST_METHOD0(MinimumTickInterval, base::TimeDelta()); -}; - -} // namespace cc - -#endif // CC_TEST_MOCK_MUTATOR_HOST_H_
diff --git a/cc/test/mock_mutator_host_unittest.cc b/cc/test/mock_mutator_host_unittest.cc deleted file mode 100644 index 2698003..0000000 --- a/cc/test/mock_mutator_host_unittest.cc +++ /dev/null
@@ -1,17 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "cc/test/mock_mutator_host.h" - -#include "testing/gtest/include/gtest/gtest.h" - -namespace cc { - -TEST(TestMockMutatorHost, ConstructAndPoke) { - MockMutatorHost mock; - EXPECT_CALL(mock, NextFrameHasPendingRAF).Times(1); - mock.NextFrameHasPendingRAF(); -} - -} // namespace cc
diff --git a/cc/tiles/gpu_image_decode_cache.cc b/cc/tiles/gpu_image_decode_cache.cc index 4aef58b0..4b50689 100644 --- a/cc/tiles/gpu_image_decode_cache.cc +++ b/cc/tiles/gpu_image_decode_cache.cc
@@ -3027,16 +3027,12 @@ void GpuImageDecodeCache::OnMemoryPressure( base::MemoryPressureListener::MemoryPressureLevel level) { + if (!ImageDecodeCacheUtils::ShouldEvictCaches(level)) + return; + base::AutoLock lock(lock_); - switch (level) { - case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE: - case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE: - break; - case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL: - base::AutoReset<bool> reset(&aggressively_freeing_resources_, true); - EnsureCapacity(0); - break; - } + base::AutoReset<bool> reset(&aggressively_freeing_resources_, true); + EnsureCapacity(0); } bool GpuImageDecodeCache::SupportsColorSpaceConversion() const {
diff --git a/cc/tiles/image_decode_cache_utils.cc b/cc/tiles/image_decode_cache_utils.cc index b730d06..b6a1faef 100644 --- a/cc/tiles/image_decode_cache_utils.cc +++ b/cc/tiles/image_decode_cache_utils.cc
@@ -15,6 +15,7 @@ namespace cc { +// static bool ImageDecodeCacheUtils::ScaleToHalfFloatPixmapUsingN32Intermediate( const SkPixmap& source_pixmap, SkPixmap* scaled_pixmap, @@ -51,6 +52,20 @@ return n32_resized_bitmap.readPixels(*scaled_pixmap, 0, 0); } +// static +bool ImageDecodeCacheUtils::ShouldEvictCaches( + base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { + switch (memory_pressure_level) { + case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE: + case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE: + return false; + case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL: + return true; + } + NOTREACHED(); + return false; +} + } // namespace cc #endif // CC_TILES_IMAGE_DECODE_CACHE_UTILS_CC_
diff --git a/cc/tiles/image_decode_cache_utils.h b/cc/tiles/image_decode_cache_utils.h index 6bfac7492..cbc64b2 100644 --- a/cc/tiles/image_decode_cache_utils.h +++ b/cc/tiles/image_decode_cache_utils.h
@@ -5,6 +5,7 @@ #ifndef CC_TILES_IMAGE_DECODE_CACHE_UTILS_H_ #define CC_TILES_IMAGE_DECODE_CACHE_UTILS_H_ +#include "base/memory/memory_pressure_listener.h" #include "build/build_config.h" #include "cc/paint/paint_flags.h" #include "third_party/skia/include/core/SkPixmap.h" @@ -35,6 +36,9 @@ const SkPixmap& source_pixmap, SkPixmap* scaled_pixmap, PaintFlags::FilterQuality filter_quality); + + static bool ShouldEvictCaches( + base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level); }; } // namespace cc
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 26daa203..4b73371a 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -3423,7 +3423,7 @@ if (!base::SysInfo::IsLowEndDevice()) return; - if (level != base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL) + if (!ImageDecodeCacheUtils::ShouldEvictCaches(level)) return; // TODO(crbug.com/1189208): Unlocking decoded-image-tracker images causes @@ -3441,14 +3441,15 @@ recycle_tree_->OnPurgeMemory(); EvictAllUIResources(); - if (image_decode_cache_) { - image_decode_cache_->SetShouldAggressivelyFreeResources(true); - image_decode_cache_->SetShouldAggressivelyFreeResources(false); - } if (resource_pool_) resource_pool_->OnMemoryPressure(level); tile_manager_.decoded_image_tracker().UnlockAllImages(); + + // There is no need to notify the |image_decode_cache| about the memory + // pressure as it (the gpu one as the software one doesn't keep outstanding + // images pinned) listens to memory pressure events and purges memory base on + // the ImageDecodeCacheUtils::ShouldEvictCaches' return value. } void LayerTreeHostImpl::SetVisible(bool visible) {
diff --git a/chrome/VERSION b/chrome/VERSION index 1bcfe30..a3903fb 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=106 MINOR=0 -BUILD=5244 +BUILD=5245 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 5078409..6feb344 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -120,6 +120,16 @@ ] } +jinja_template("chrome_public_android_feature_vr_manifest") { + input = "features/vr/java/AndroidManifest.xml" + output = feature_module_vr_android_manifest_path + variables = chrome_public_jinja_variables + variables += [ + "min_sdk_version=$default_min_sdk_version", + "target_sdk_version=$android_sdk_version", + ] +} + jinja_template("trichrome_library_android_manifest") { input = "java/AndroidManifest_trichrome_library.xml" output = trichrome_library_android_manifest
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni index 631f2f3..e550f10 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni
@@ -588,6 +588,7 @@ "java/res/layout/revamped_incognito_description_layout.xml", "java/res/layout/search_activity.xml", "java/res/layout/search_widget_template.xml", + "java/res/layout/send_tab_to_self_device_picker_footer.xml", "java/res/layout/send_tab_to_self_device_picker_item.xml", "java/res/layout/send_tab_to_self_device_picker_list.xml", "java/res/layout/send_tab_to_self_device_picker_toolbar.xml",
diff --git a/chrome/android/expectations/monochrome_public_bundle__vr.AndroidManifest.expected b/chrome/android/expectations/monochrome_public_bundle__vr.AndroidManifest.expected index 25a6d71..02b1d93 100644 --- a/chrome/android/expectations/monochrome_public_bundle__vr.AndroidManifest.expected +++ b/chrome/android/expectations/monochrome_public_bundle__vr.AndroidManifest.expected
@@ -17,11 +17,6 @@ </dist:delivery> # DIFF-ANCHOR: ea157ece <dist:fusing dist:include="true"/> </dist:module> # DIFF-ANCHOR: aac219ae - {% if channel in ['default'] %} - <queries> # DIFF-ANCHOR: 4f65d672 - <package android:name="com.google.vr.vrcore"/> - </queries> # DIFF-ANCHOR: 4f65d672 - {% endif %} <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="33"/> <uses-split android:name="chrome"/> <application/>
diff --git a/chrome/android/features/keyboard_accessory/BUILD.gn b/chrome/android/features/keyboard_accessory/BUILD.gn index ea0f535..12df7a96 100644 --- a/chrome/android/features/keyboard_accessory/BUILD.gn +++ b/chrome/android/features/keyboard_accessory/BUILD.gn
@@ -85,6 +85,8 @@ "//chrome/android:chrome_test_util_java", "//chrome/browser/feature_engagement:java", "//chrome/browser/flags:java", + "//chrome/browser/password_manager/android:java", + "//chrome/browser/password_manager/android:test_support_java", "//chrome/browser/profiles/android:java", "//chrome/browser/tab:java", "//chrome/browser/ui/android/layouts:java", @@ -99,6 +101,8 @@ "//components/browser_ui/widget/android:test_support_java", "//components/feature_engagement/public:public_java", "//components/infobars/core:infobar_enums_java", + "//components/messages/android/test:test_support_java", + "//components/signin/public/android:java", "//content/public/android:content_java", "//content/public/test/android:content_java_test_support", "//net/android:net_java_test_support",
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingTestHelper.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingTestHelper.java index 60b6f12..124d818 100644 --- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingTestHelper.java +++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingTestHelper.java
@@ -92,6 +92,15 @@ mActivityTestRule = activityTestRule; } + public EmbeddedTestServer getOrCreateTestServer() { + if (mEmbeddedTestServer == null) { + mEmbeddedTestServer = EmbeddedTestServer.createAndStartHTTPSServer( + InstrumentationRegistry.getInstrumentation().getContext(), + ServerCertificate.CERT_OK); + } + return mEmbeddedTestServer; + } + public void loadTestPage(boolean isRtl) { loadTestPage("/chrome/test/data/password/password_form.html", isRtl); } @@ -102,9 +111,7 @@ public void loadTestPage(String url, boolean isRtl, boolean waitForNode, ChromeWindow.KeyboardVisibilityDelegateFactory keyboardDelegate) { - mEmbeddedTestServer = EmbeddedTestServer.createAndStartHTTPSServer( - InstrumentationRegistry.getInstrumentation().getContext(), - ServerCertificate.CERT_OK); + getOrCreateTestServer(); ChromeWindow.setKeyboardVisibilityDelegateFactory(keyboardDelegate); if (mActivityTestRule.getActivity() == null) { mActivityTestRule.startMainActivityWithURL(mEmbeddedTestServer.getURL(url));
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/PasswordGenerationIntegrationTest.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/PasswordGenerationIntegrationTest.java index 2b0bf40f..db47fbee 100644 --- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/PasswordGenerationIntegrationTest.java +++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/PasswordGenerationIntegrationTest.java
@@ -6,19 +6,21 @@ import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA; import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static org.hamcrest.core.AllOf.allOf; +import static org.chromium.base.test.util.Matchers.is; +import static org.chromium.content_public.browser.test.util.TestThreadUtils.runOnUiThreadBlocking; +import static org.chromium.content_public.browser.test.util.TestThreadUtils.runOnUiThreadBlockingNoException; -import static org.chromium.chrome.R.id.password_generation_dialog; -import static org.chromium.chrome.browser.keyboard_accessory.ManualFillingTestHelper.selectTabAtPosition; - +import android.view.View; import android.view.Window; import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayout.Tab; + import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -27,19 +29,38 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisabledTest; +import org.chromium.base.test.util.DoNotBatch; import org.chromium.base.test.util.IntegrationTest; +import org.chromium.base.test.util.Matchers; +import org.chromium.chrome.browser.ChromeTabbedActivity; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.infobar.InfoBarContainer; +import org.chromium.chrome.browser.password_manager.FakePasswordStoreAndroidBackend; +import org.chromium.chrome.browser.password_manager.FakePasswordStoreAndroidBackendFactoryImpl; +import org.chromium.chrome.browser.password_manager.FakePasswordSyncControllerDelegateFactoryImpl; +import org.chromium.chrome.browser.password_manager.PasswordStoreAndroidBackendFactory; +import org.chromium.chrome.browser.password_manager.PasswordStoreBridge; +import org.chromium.chrome.browser.password_manager.PasswordStoreCredential; +import org.chromium.chrome.browser.password_manager.PasswordSyncControllerDelegateFactory; import org.chromium.chrome.browser.sync.SyncTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.util.ChromeTabUtils; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; +import org.chromium.chrome.test.util.browser.signin.SigninTestRule; import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; +import org.chromium.components.messages.MessagesTestHelper; +import org.chromium.components.signin.AccountUtils; import org.chromium.content_public.browser.test.util.DOMUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.widget.ButtonCompat; +import java.util.ArrayList; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicReference; @@ -47,6 +68,9 @@ * Integration tests for password generation. */ @RunWith(ChromeJUnit4ClassRunner.class) +@DoNotBatch(reason = "TODO(crbug.com/1346583): add resetting logic for" + + "FakePasswordStoreAndroidBackend to allow batching") +@EnableFeatures({ChromeFeatureList.UNIFIED_PASSWORD_MANAGER_ANDROID}) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "show-autofill-signatures"}) public class PasswordGenerationIntegrationTest { @Rule @@ -58,17 +82,38 @@ private static final String SUBMIT_NODE_ID_MANUAL = "input_submit_button_manual"; private static final String FORM_URL = "/chrome/test/data/password/filled_simple_signup_form.html"; + private static final String DONE_URL = "/chrome/test/data/password/done.html"; private static final String PASSWORD_ATTRIBUTE_NAME = "password_creation_field"; private static final String ELIGIBLE_FOR_GENERATION = "1"; - private static final String INFOBAR_MESSAGE = "Password saved"; + private static final String USERNAME_TEXT = "username"; - private final ManualFillingTestHelper mHelper = new ManualFillingTestHelper(mSyncTestRule); + private ManualFillingTestHelper mHelper; + private PasswordStoreBridge mPasswordStoreBridge; + private ChromeTabbedActivity mActivity; + private RecyclerView mKeyboardAccessoryBarItems; + private TextView mGeneratedPasswordTextView; @Before public void setUp() throws InterruptedException { + PasswordStoreAndroidBackendFactory.setFactoryInstanceForTesting( + new FakePasswordStoreAndroidBackendFactoryImpl()); + TestThreadUtils.runOnUiThreadBlocking(() -> { + ((FakePasswordStoreAndroidBackend) PasswordStoreAndroidBackendFactory.getInstance() + .createBackend()) + .setSyncingAccount( + AccountUtils.createAccountFromName(SigninTestRule.TEST_ACCOUNT_EMAIL)); + }); + PasswordSyncControllerDelegateFactory.setFactoryInstanceForTesting( + new FakePasswordSyncControllerDelegateFactoryImpl()); + mSyncTestRule.setUpAccountAndEnableSyncForTesting(); ManualFillingTestHelper.disableServerPredictions(); + + runOnUiThreadBlocking(() -> { mPasswordStoreBridge = new PasswordStoreBridge(); }); + + mHelper = new ManualFillingTestHelper(mSyncTestRule); mHelper.loadTestPage(FORM_URL, false); + mActivity = mSyncTestRule.getActivity(); } @After @@ -78,7 +123,6 @@ @Test @IntegrationTest - @DisabledTest(message = "https://crbug.com/1203679") public void testAutomaticGenerationCancel() throws InterruptedException, TimeoutException { waitForGenerationLabel(); focusField(PASSWORD_NODE_ID); @@ -93,11 +137,14 @@ onView(withId(R.id.negative_button)).perform(click()); assertPasswordTextEmpty(PASSWORD_NODE_ID); assertNoInfobarsAreShown(); + CriteriaHelper.pollUiThread(() -> { + PasswordStoreCredential[] credentials = mPasswordStoreBridge.getAllCredentials(); + Criteria.checkThat("Should have added no passwords.", credentials.length, is(0)); + }); } @Test @IntegrationTest - @DisabledTest(message = "crbug.com/1010540") public void testManualGenerationCancel() throws InterruptedException, TimeoutException { waitForGenerationLabel(); focusField(PASSWORD_NODE_ID_MANUAL); @@ -108,11 +155,14 @@ onView(withId(R.id.negative_button)).perform(click()); assertPasswordTextEmpty(PASSWORD_NODE_ID_MANUAL); assertNoInfobarsAreShown(); + CriteriaHelper.pollUiThread(() -> { + PasswordStoreCredential[] credentials = mPasswordStoreBridge.getAllCredentials(); + Criteria.checkThat("Should have added no passwords.", credentials.length, is(0)); + }); } @Test @IntegrationTest - @DisabledTest(message = "crbug.com/1067171") public void testAutomaticGenerationUsePassword() throws InterruptedException, TimeoutException { waitForGenerationLabel(); focusField(PASSWORD_NODE_ID); @@ -130,13 +180,19 @@ () -> !mHelper.getFieldText(PASSWORD_NODE_ID).isEmpty()); assertPasswordText(PASSWORD_NODE_ID, generatedPassword); clickNode(SUBMIT_NODE_ID); - mHelper.waitForViewOnActivityRoot(withId(R.id.infobar_message)) - .check(matches(withText(INFOBAR_MESSAGE))); + ChromeTabUtils.waitForTabPageLoaded(mSyncTestRule.getActivity().getActivityTab(), + mHelper.getOrCreateTestServer().getURL(DONE_URL)); + waitForMessageShown(); + CriteriaHelper.pollUiThread(() -> { + PasswordStoreCredential[] credentials = mPasswordStoreBridge.getAllCredentials(); + Criteria.checkThat("Should have added one password.", credentials.length, is(1)); + Criteria.checkThat(credentials[0].getUsername(), is(USERNAME_TEXT)); + }); } @Test @IntegrationTest - @DisabledTest(message = "crbug.com/1010540") + @DisabledTest(message = "This test is flaky.") public void testManualGenerationUsePassword() throws InterruptedException, TimeoutException { waitForGenerationLabel(); focusField(PASSWORD_NODE_ID_MANUAL); @@ -146,30 +202,52 @@ waitForGenerationDialog(); String generatedPassword = getTextFromTextView(R.id.generated_password); onView(withId(R.id.positive_button)).perform(click()); + CriteriaHelper.pollInstrumentationThread( + () -> !mHelper.getFieldText(PASSWORD_NODE_ID_MANUAL).isEmpty()); assertPasswordText(PASSWORD_NODE_ID_MANUAL, generatedPassword); clickNode(SUBMIT_NODE_ID_MANUAL); - mHelper.waitForViewOnActivityRoot(withId(R.id.infobar_message)) - .check(matches(withText(INFOBAR_MESSAGE))); + ChromeTabUtils.waitForTabPageLoaded(mSyncTestRule.getActivity().getActivityTab(), + mHelper.getOrCreateTestServer().getURL(DONE_URL)); + waitForMessageShown(); + CriteriaHelper.pollUiThread(() -> { + PasswordStoreCredential[] credentials = mPasswordStoreBridge.getAllCredentials(); + Criteria.checkThat("Should have added one password.", credentials.length, is(1)); + Criteria.checkThat(credentials[0].getUsername(), is(USERNAME_TEXT)); + }); } - public void pressManualGenerationSuggestion() { - onView(allOf(isDescendantOfA(withId(R.id.passwords_sheet)), - withText(R.string.password_generation_accessory_button))) - .perform(click()); + private void pressManualGenerationSuggestion() { + CriteriaHelper.pollUiThread( + () -> { return mActivity.findViewById(R.id.passwords_sheet) != null; }); + ArrayList<View> selectedViews = new ArrayList(); + (mActivity.findViewById(R.id.passwords_sheet)) + .findViewsWithText(selectedViews, + mActivity.getResources().getString( + R.string.password_generation_accessory_button), + View.FIND_VIEWS_WITH_TEXT); + View generationButton = selectedViews.get(0); + runOnUiThreadBlockingNoException(generationButton::callOnClick); } - public void toggleAccessorySheet() { - mHelper.waitForViewOnActivityRoot(withId(R.id.tabs)).perform(selectTabAtPosition(0)); + private void toggleAccessorySheet() { + CriteriaHelper.pollInstrumentationThread(() -> { + mKeyboardAccessoryBarItems = (RecyclerView) mActivity.findViewById(R.id.bar_items_view); + return mKeyboardAccessoryBarItems != null; + }); + TabLayout keyboardAccessoryView = + (TabLayout) mKeyboardAccessoryBarItems.findViewHolderForLayoutPosition(0).itemView; + Tab tab = keyboardAccessoryView.getTabAt(0); + runOnUiThreadBlocking(tab::select); } - public void focusField(String node) throws TimeoutException, InterruptedException { + private void focusField(String node) throws TimeoutException, InterruptedException { DOMUtils.focusNode(mHelper.getWebContents(), node); TestThreadUtils.runOnUiThreadBlocking( () -> { mHelper.getWebContents().scrollFocusedEditableNodeIntoView(); }); } - public void clickNode(String node) throws InterruptedException, TimeoutException { - DOMUtils.clickNode(mHelper.getWebContents(), node); + private void clickNode(String node) throws InterruptedException, TimeoutException { + DOMUtils.clickNodeWithJavaScript(mHelper.getWebContents(), node); } private void assertPasswordTextEmpty(String passwordNode) @@ -179,7 +257,7 @@ private void assertPasswordText(String passwordNode, String text) throws InterruptedException, TimeoutException { - Assert.assertEquals(mHelper.getFieldText(passwordNode), text); + Assert.assertEquals(text, mHelper.getFieldText(passwordNode)); } private void waitForGenerationLabel() { @@ -193,9 +271,12 @@ waitForModalDialogPresenter(); ModalDialogManager manager = TestThreadUtils.runOnUiThreadBlockingNoException( mSyncTestRule.getActivity()::getModalDialogManager); - Window window = ((AppModalPresenter) manager.getCurrentPresenterForTest()).getWindow(); - mHelper.waitForViewOnRoot( - window.getDecorView().getRootView(), withId(password_generation_dialog)); + CriteriaHelper.pollUiThread(() -> { + Window window = ((AppModalPresenter) manager.getCurrentPresenterForTest()).getWindow(); + mGeneratedPasswordTextView = + window.getDecorView().getRootView().findViewById(R.id.generated_password); + return mGeneratedPasswordTextView != null; + }); } private void waitForModalDialogPresenter() { @@ -213,10 +294,18 @@ }); } - public static String getTextFromTextView(int id) { + private static String getTextFromTextView(int id) { AtomicReference<String> textRef = new AtomicReference<>(); onView(withId(id)) .check((view, error) -> textRef.set(((TextView) view).getText().toString())); return textRef.get(); } + + private void waitForMessageShown() { + WindowAndroid window = mSyncTestRule.getActivity().getWindowAndroid(); + CriteriaHelper.pollUiThread(() -> { + Criteria.checkThat("Message is not enqueued.", + MessagesTestHelper.getMessageCount(window), Matchers.is(1)); + }); + } }
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb index 65396376..6f21d00 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_af.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Sien winkelresensies?</translation> <translation id="5082793167783849073">Vergelyk bladsye vinnig deur 'n groep te maak. Raak en hou 'n skakel om te begin.</translation> <translation id="5490235265819901748">Oortjiegroep is uitgevou</translation> +<translation id="5494920125229734069">Kies almal</translation> <translation id="5533021382642990449">Wys later</translation> <translation id="5556417849629758491">Bekyk winkelinligting; opsie beskikbaar naby bokant van die skerm</translation> <translation id="5558362125926932819">Maak oortjiegroep met <ph name="NUMBER_OF_TABS" /> oortjies toe</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_am.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_am.xtb index 8a67f30e..b60bca1 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_am.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_am.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">የመደብር ግምገማዎችን ይመለከታሉ?</translation> <translation id="5082793167783849073">ስብስብ በመፍጠር በፍጥነት ገጾችን ያነጻጽሩ። ለመጀመር አንድ አገናኝን ነክተው ይያዙ።</translation> <translation id="5490235265819901748">የትር ቡድን ተዘርግቷል</translation> +<translation id="5494920125229734069">ሁሉንም ይመርጣል</translation> <translation id="5533021382642990449">በኋላ አሳይ</translation> <translation id="5556417849629758491">የመደብር መረጃን ይመልከቱ፣ አማራጩ ከማያ ገጹ አናት አጠገብ ይገኛል</translation> <translation id="5558362125926932819">የትር ቡድንን ከ<ph name="NUMBER_OF_TABS" /> ትሮች ጋር ይዝጉ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb index 3048e9a..3b39baf 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ar.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">هل تريد الاطّلاع على مراجعات المتجر؟</translation> <translation id="5082793167783849073">يُرجى مقارنة الصفحات بسرعة من خلال إنشاء مجموعة. للبدء، المس رابطًا مع الاستمرار.</translation> <translation id="5490235265819901748">تم توسيع مجموعة علامات التبويب.</translation> +<translation id="5494920125229734069">اختيار الكل</translation> <translation id="5533021382642990449">العرض لاحقًا</translation> <translation id="5556417849629758491">عرض معلومات المتجر، وهو خيار متاح بالقرب من أعلى الشاشة</translation> <translation id="5558362125926932819">إغلاق مجموعة علامات التبويب التي تحتوي على <ph name="NUMBER_OF_TABS" /> علامة تبويب</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_as.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_as.xtb index 667460f..f87acbf 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_as.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_as.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">ষ্ট'ৰৰ পর্যালোচনা চাবনে?</translation> <translation id="5082793167783849073">এটা গোট বনাই পৃষ্ঠাসমূহ দ্ৰুতভাৱে তুলনা কৰক। আৰম্ভ কৰিবলৈ এটা লিংকত স্পৰ্শ কৰি ধৰি ৰাখক।</translation> <translation id="5490235265819901748">টেবৰ গোটটো বিস্তাৰ কৰা হৈছে</translation> +<translation id="5494920125229734069">সকলো বাছনি কৰক</translation> <translation id="5533021382642990449">পাছত দেখুৱাওক</translation> <translation id="5556417849629758491">ষ্ট’ৰৰ তথ্য চাওক, বিকল্পটো স্ক্ৰীনখনৰ প্ৰায় শীৰ্ষত আছে</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> টা টেবযুক্ত টেবৰ গোট বন্ধ কৰক</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_az.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_az.xtb index 5c0231f..9fffebd1 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_az.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_az.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Mağaza rəyləri göstərilsin?</translation> <translation id="5082793167783849073">Qruplaşdırmaqla səhifələri asanlıqla müqayisə edin. Başlamaq üçün linkə toxunub saxlayın.</translation> <translation id="5490235265819901748">Tab qrupu genişləndirildi</translation> +<translation id="5494920125229734069">Hamısını seçin</translation> <translation id="5533021382642990449">Sonra göstərin</translation> <translation id="5556417849629758491">Mağaza məlumatlarına baxın, seçim ekranın yuxarı hissəsində əlçatandır</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> tab olan tab qrupunu bağlayın</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_be.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_be.xtb index a2c7deb..ca71acf1 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_be.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_be.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Паказаць водгукі аб краме?</translation> <translation id="5082793167783849073">Каб хутка параўнаць старонкі, можна стварыць групу. Для гэтага дакраніцеся да спасылкі і ўтрымлівайце яе.</translation> <translation id="5490235265819901748">Група ўкладак разгорнута</translation> +<translation id="5494920125229734069">Выбраць усё</translation> <translation id="5533021382642990449">Паказаць пазней</translation> <translation id="5556417849629758491">Прагледзець звесткі пра краму; гэты варыянт выбару даступны ўверсе экрана</translation> <translation id="5558362125926932819">Закрыць групу з наступнай колькасцю ўкладак: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bg.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bg.xtb index edf1b0c..6054e676 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bg.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bg.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Искате ли да видите отзивите за магазина?</translation> <translation id="5082793167783849073">Сравнявайте бързо страници, като създадете група. За да започнете, докоснете и задръжте дадена връзка.</translation> <translation id="5490235265819901748">Групата с раздели е разгъната</translation> +<translation id="5494920125229734069">Избиране на всички</translation> <translation id="5533021382642990449">Показване по-късно</translation> <translation id="5556417849629758491">Преглед на информацията за магазина – опцията е близо до горната част на екрана</translation> <translation id="5558362125926932819">Затваряне на групата с раздели с(ъс) <ph name="NUMBER_OF_TABS" /> раздела.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb index 5105c41..39fa93b 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bn.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">স্টোরের রিভিউ দেখতে চান?</translation> <translation id="5082793167783849073">একটি গ্রুপ তৈরি করে দ্রুত পৃষ্ঠাগুলির তুলনা করুন। শুরু করতে, কোনও একটি লিঙ্ক স্পর্শ করে ধরে থাকুন।</translation> <translation id="5490235265819901748">ট্যাব গ্রুপ বড় করে দেখানো হয়েছে</translation> +<translation id="5494920125229734069">সকল বেছে নিন</translation> <translation id="5533021382642990449">পরে দেখুন</translation> <translation id="5556417849629758491">স্টোর সংক্রান্ত তথ্য দেখুন, স্ক্রিনের সবচেয়ে উপরের অংশে এই বিকল্প উপলভ্য আছে</translation> <translation id="5558362125926932819">সেই ট্যাব গ্রুপ বন্ধ করুন যেটিতে <ph name="NUMBER_OF_TABS" />টি ট্যাব আছে</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb index 5cc99d4f..e777c83 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_bs.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Želite li pogledati recenzije trgovine?</translation> <translation id="5082793167783849073">Kreirajte grupu i brzo uporedite stranice. Da započnete, dodirnite i držite link.</translation> <translation id="5490235265819901748">Grupa kartica je proširena</translation> +<translation id="5494920125229734069">Odaberi sve</translation> <translation id="5533021382642990449">Prikaži kasnije</translation> <translation id="5556417849629758491">Prikaz informacija o trgovini. Opcija je dostupna pri vrhu ekrana</translation> <translation id="5558362125926932819">Zatvaranje grupe kartica sa sljedećim brojem kartica: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ca.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ca.xtb index bee2e0c..c2a3fcc 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ca.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ca.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Vols veure les ressenyes de la botiga?</translation> <translation id="5082793167783849073">Crea un grup per comparar pàgines ràpidament. Per començar, mantén premut un enllaç.</translation> <translation id="5490235265819901748">El grup de pestanyes s'ha desplegat</translation> +<translation id="5494920125229734069">Selecciona-ho tot</translation> <translation id="5533021382642990449">Mostra més tard</translation> <translation id="5556417849629758491">Consulta la informació de la botiga, opció disponible a prop de la part superior de la pantalla</translation> <translation id="5558362125926932819">Tanca el grup format per <ph name="NUMBER_OF_TABS" /> pestanyes</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cs.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cs.xtb index 1c056b0..52c480b 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cs.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cs.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Zobrazit recenze obchodu?</translation> <translation id="5082793167783849073">Rychle stránky porovnejte tím, že vytvoříte skupinu. Chcete-li začít, podržte odkaz.</translation> <translation id="5490235265819901748">Skupina byla rozbalena</translation> +<translation id="5494920125229734069">Vybrat vše</translation> <translation id="5533021382642990449">Zobrazit později</translation> <translation id="5556417849629758491">Zobrazit informace o obchodu, možnost dostupná v horní části obrazovky</translation> <translation id="5558362125926932819">Zavřít skupinu karet s <ph name="NUMBER_OF_TABS" /> kartami</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cy.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cy.xtb index 1142f61..3bd1b735 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cy.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_cy.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Gweld adolygiadau'r siop?</translation> <translation id="5082793167783849073">Cymharwch dudalennau'n gyflym drwy wneud grŵp. I ddechrau, cyffyrddwch a daliwch ddolen.</translation> <translation id="5490235265819901748">Mae'r grŵp tabiau wedi'i ehangu</translation> +<translation id="5494920125229734069">Dewis pob un</translation> <translation id="5533021382642990449">Dangos yn nes ymlaen</translation> <translation id="5556417849629758491">Gweld gwybodaeth siop, opsiwn ar gael yn agos at frig y sgrîn</translation> <translation id="5558362125926932819">Cau'r grŵp tabiau â <ph name="NUMBER_OF_TABS" /> o dabiau</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb index 5bea0b2f..419cdea 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_da.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Vil du se butiksanmeldelser?</translation> <translation id="5082793167783849073">Sammenlign hurtigt sider ved at oprette en gruppe. Hold et link nede for at starte.</translation> <translation id="5490235265819901748">Fanegruppen blev udvidet</translation> +<translation id="5494920125229734069">Vælg alle</translation> <translation id="5533021382642990449">Vis senere</translation> <translation id="5556417849629758491">Se butiksoplysninger. Valgmuligheden findes øverst på skærmen</translation> <translation id="5558362125926932819">Luk fanegruppe med <ph name="NUMBER_OF_TABS" /> faner</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb index 003ab9d..2d5c507 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Möchtest du dir Händlerrezensionen ansehen?</translation> <translation id="5082793167783849073">Du kannst Seiten schnell miteinander vergleichen, indem du eine Gruppe erstellst. Berühre und halte einen Link, um den Vorgang zu starten.</translation> <translation id="5490235265819901748">Tabgruppe maximiert</translation> +<translation id="5494920125229734069">Alle auswählen</translation> <translation id="5533021382642990449">Später anzeigen</translation> <translation id="5556417849629758491">Geschäftsinformationen anzeigen, Option ist oben auf dem Bildschirm verfügbar</translation> <translation id="5558362125926932819">Tabgruppe mit <ph name="NUMBER_OF_TABS" /> Tabs schließen</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb index fbca4ac7..7bfd9749 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_el.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Εμφάνιση αξιολογήσεων καταστήματος;</translation> <translation id="5082793167783849073">Συγκρίνετε γρήγορα σελίδες δημιουργώντας μια ομάδα. Για να ξεκινήσετε, αγγίξτε παρατεταμένα κάποιον σύνδεσμο.</translation> <translation id="5490235265819901748">Η ομάδα καρτελών αναπτύχθηκε</translation> +<translation id="5494920125229734069">Επιλογή όλων</translation> <translation id="5533021382642990449">Εμφάνιση αργότερα</translation> <translation id="5556417849629758491">Δείτε πληροφορίες καταστήματος, η επιλογή είναι διαθέσιμη στο επάνω μέρος της οθόνης</translation> <translation id="5558362125926932819">Κλείσιμο της ομάδας καρτελών με τις <ph name="NUMBER_OF_TABS" /> καρτέλες</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_en-GB.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_en-GB.xtb index ecfd6dc..5574909 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_en-GB.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_en-GB.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">See store reviews?</translation> <translation id="5082793167783849073">Quickly compare pages by making a group. To start, touch and hold a link.</translation> <translation id="5490235265819901748">Tab group expanded</translation> +<translation id="5494920125229734069">Select all</translation> <translation id="5533021382642990449">Show later</translation> <translation id="5556417849629758491">View shop info, option available near top of the screen</translation> <translation id="5558362125926932819">Close tab group with <ph name="NUMBER_OF_TABS" /> tabs</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es-419.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es-419.xtb index 06aaf32d..4669bebe 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es-419.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es-419.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">¿Quieres ver las opiniones de la tienda?</translation> <translation id="5082793167783849073">Forma un grupo para comparar las páginas rápidamente. Para comenzar, mantén presionado un vínculo.</translation> <translation id="5490235265819901748">Se expandió el grupo de pestañas</translation> +<translation id="5494920125229734069">Seleccionar todo</translation> <translation id="5533021382642990449">Mostrar más tarde</translation> <translation id="5556417849629758491">Ver información de la tienda (la opción está disponible cerca de la parte superior de la pantalla)</translation> <translation id="5558362125926932819">Cerrar el grupo de pestañas, el cual tiene <ph name="NUMBER_OF_TABS" /> pestañas</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb index 3498c4a5..d4a4f13 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_es.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">¿Ver reseñas sobre la tienda?</translation> <translation id="5082793167783849073">Crea un grupo para comparar páginas rápidamente. Para comenzar, mantén pulsado un enlace.</translation> <translation id="5490235265819901748">Grupo de pestañas desplegado</translation> +<translation id="5494920125229734069">Seleccionar todo</translation> <translation id="5533021382642990449">Mostrar más tarde</translation> <translation id="5556417849629758491">Ver información de la tienda, opción disponible cerca de la parte superior de la pantalla</translation> <translation id="5558362125926932819">Cerrar grupo de pestañas con <ph name="NUMBER_OF_TABS" /> pestañas</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb index a21a900..d1f233cb 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_et.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Kas kuvada poe arvustused?</translation> <translation id="5082793167783849073">Looge rühm, et lehti kiiresti võrrelda. Alustamiseks puudutage pikalt linki.</translation> <translation id="5490235265819901748">Vahelehegruppi laiendati</translation> +<translation id="5494920125229734069">Valige kõik</translation> <translation id="5533021382642990449">Kuva hiljem</translation> <translation id="5556417849629758491">Poe teabe vaatamine, valik saadaval ekraanikuva ülaosas</translation> <translation id="5558362125926932819">Sule <ph name="NUMBER_OF_TABS" /> vahelehega vahelehegrupp</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_eu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_eu.xtb index f9c21e2..0648364 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_eu.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_eu.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Dendari buruzko iritziak ikusi nahi dituzu?</translation> <translation id="5082793167783849073">Egin talde bat orriak azkar konparatzeko. Hasteko, eduki sakatuta esteka bat.</translation> <translation id="5490235265819901748">Fitxa taldea zabalduta</translation> +<translation id="5494920125229734069">Hautatu guztiak</translation> <translation id="5533021382642990449">Erakutsi geroago</translation> <translation id="5556417849629758491">Ikusi dendari buruzko informazioa, pantailaren goialdean dago erabilgarri</translation> <translation id="5558362125926932819">Itxi <ph name="NUMBER_OF_TABS" /> fitxa dituen fitxa taldea</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb index 4f0fc496..15dc18d 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fa.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">میخواهید مرورهای فروشگاه را ببینید؟</translation> <translation id="5082793167783849073">با ایجاد گروه، صفحهها را سریع مقایسه کنید. برای شروع، پیوندی را لمس کنید و نگه دارید.</translation> <translation id="5490235265819901748">گروه برگه گسترده شد</translation> +<translation id="5494920125229734069">انتخاب همه</translation> <translation id="5533021382642990449">نمایش در فرصتی دیگر</translation> <translation id="5556417849629758491">مشاهده اطلاعات فروشگاه، گزینه مربوطه در نزدیکی بالای صفحه قرار دارد</translation> <translation id="5558362125926932819">بستن گروه برگه با <ph name="NUMBER_OF_TABS" /> برگه</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fi.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fi.xtb index f862440..fd12e56f 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fi.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fi.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Näytetäänkö kaupan arvostelut?</translation> <translation id="5082793167783849073">Luo ryhmä vertaillaksesi sivuja nopeasti. Aloita koskettamalla linkkiä pitkään.</translation> <translation id="5490235265819901748">Välilehtiryhmä laajennettu</translation> +<translation id="5494920125229734069">Valitse kaikki</translation> <translation id="5533021382642990449">Näytä myöhemmin</translation> <translation id="5556417849629758491">Näytä kaupan tiedot, vaihtoehto lähellä näytön yläreunaa</translation> <translation id="5558362125926932819">Sulje välilehtiryhmä, jossa on <ph name="NUMBER_OF_TABS" /> välilehteä.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb index 34b9bee..cfd99a2 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fil.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Tingnan ang mga review ng store?</translation> <translation id="5082793167783849073">Mabilis na paghambing-hambingin ang mga page sa pamamagitan ng paggawa ng pangkat. Para magsimula, pindutin nang matagal ang isang link.</translation> <translation id="5490235265819901748">Na-expand ang grupo ng tab</translation> +<translation id="5494920125229734069">Piliin ang lahat</translation> <translation id="5533021382642990449">Ipakita sa ibang pagkakataon</translation> <translation id="5556417849629758491">Tingnan ang impormasyon ng store, available ang opsyon malapit sa itaas ng screen</translation> <translation id="5558362125926932819">Isara ang grupo ng tab na may <ph name="NUMBER_OF_TABS" /> (na) tab</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr-CA.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr-CA.xtb index 3a49649..f9a74852 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr-CA.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr-CA.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Afficher les avis sur le magasin?</translation> <translation id="5082793167783849073">Comparez rapidement des pages en créant un groupe. Pour commencer, maintenez le doigt sur un lien.</translation> <translation id="5490235265819901748">Groupe d'onglets développé</translation> +<translation id="5494920125229734069">Tout sélectionner</translation> <translation id="5533021382642990449">Afficher plus tard</translation> <translation id="5556417849629758491">Afficher les renseignements sur le magasin, option accessible dans le haut de l'écran</translation> <translation id="5558362125926932819">Fermer le groupe d'onglets qui contient <ph name="NUMBER_OF_TABS" /> onglets</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr.xtb index 92cc22ae..24888d7 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_fr.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Afficher les avis sur le magasin ?</translation> <translation id="5082793167783849073">Comparez rapidement des pages en créant un groupe. Commencez par appuyer de manière prolongée sur un lien.</translation> <translation id="5490235265819901748">Groupe d'onglets développé</translation> +<translation id="5494920125229734069">Tout sélectionner</translation> <translation id="5533021382642990449">Afficher plus tard</translation> <translation id="5556417849629758491">Afficher les infos sur le magasin, option disponible en haut de l'écran</translation> <translation id="5558362125926932819">Fermez le groupe d'onglets qui contient <ph name="NUMBER_OF_TABS" /> onglets</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gl.xtb index 375c429..212a9e83 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gl.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gl.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Queres ver recensións da tenda?</translation> <translation id="5082793167783849073">Crea un grupo para comparar rapidamente varias páxinas. Para comezar, mantén premida unha ligazón.</translation> <translation id="5490235265819901748">Grupo de pestanas despregado</translation> +<translation id="5494920125229734069">Seleccionar todo</translation> <translation id="5533021382642990449">Mostrar máis adiante</translation> <translation id="5556417849629758491">Ver información sobre a tenda, opción dispoñible preto da parte superior da pantalla</translation> <translation id="5558362125926932819">Pechar grupo de pestanas con <ph name="NUMBER_OF_TABS" /> pestanas</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gu.xtb index f75378d..a5866a5 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gu.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_gu.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">શું સ્ટોરના રિવ્યૂ જોવા માગો છો?</translation> <translation id="5082793167783849073">ગ્રૂપ બનાવીને ઝડપથી પેજની સરખામણી કરો. શરૂ કરવા માટે, લિંકને સ્પર્શ કરી રાખો.</translation> <translation id="5490235265819901748">ટૅબ ગ્રૂપ મોટું કરો</translation> +<translation id="5494920125229734069">બધા પસંદ કરો</translation> <translation id="5533021382642990449">પછી બતાવો</translation> <translation id="5556417849629758491">સ્ટોરની માહિતી જુઓ, વિકલ્પ સ્ક્રીનની ટોચની નજીક ઉપલબ્ધ છે</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> ટૅબ ધરાવતા ટૅબ ગ્રૂપને બંધ કરો</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hi.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hi.xtb index 3becc5c..f6c8713 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hi.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hi.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">स्टोर की समीक्षाएं देखें?</translation> <translation id="5082793167783849073">पेजों की तुलना तुरंत करने के लिए समूह बनाएं. शुरू करने के लिए, लिंक को दबाकर रखें.</translation> <translation id="5490235265819901748">टैब ग्रुप बड़ा किया गया</translation> +<translation id="5494920125229734069">सभी को चुनें</translation> <translation id="5533021382642990449">बाद में दिखाएं</translation> <translation id="5556417849629758491">स्क्रीन पर सबसे ऊपर मौजूद विकल्प से स्टोर की जानकारी देखें</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> टैब वाला टैब ग्रुप बंद करें</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hr.xtb index c4921dc..c97c96b 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hr.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hr.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Pregled recenzija trgovine?</translation> <translation id="5082793167783849073">Izradom grupe možete brzo usporediti stranice. Da biste započeli, dodirnite i držite vezu.</translation> <translation id="5490235265819901748">Grupa kartica je proširena</translation> +<translation id="5494920125229734069">Odaberi sve</translation> <translation id="5533021382642990449">Prikaži kasnije</translation> <translation id="5556417849629758491">Pogledajte podatke o trgovini, opciju koja je dostupna pri vrhu zaslona</translation> <translation id="5558362125926932819">Zatvori grupu kartica koja sadrži sljedeći broj kartica: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb index 2bad6ae..58c0145 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hu.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Lát véleményeket az üzletről?</translation> <translation id="5082793167783849073">Csoport kialakításával gyorsan összehasonlíthat oldalakat. A kezdéshez tartsa lenyomva ujját a kívánt linken.</translation> <translation id="5490235265819901748">Lapcsoport kibontva</translation> +<translation id="5494920125229734069">Összes kiválasztása</translation> <translation id="5533021382642990449">Máskor megjelenhet</translation> <translation id="5556417849629758491">Az üzlet adatainak megtekintése; a lehetőség a képernyő tetején található</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> lapot tartalmazó lapcsoport bezárása</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hy.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hy.xtb index 016b12d..24f4d448 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hy.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_hy.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Ցուցադրե՞լ խանութի մասին կարծիքները</translation> <translation id="5082793167783849073">Արագ համեմատեք էջերը՝ խումբ կազմելով: Սկսելու համար հպեք և պահեք հղումը:</translation> <translation id="5490235265819901748">Ներդիրների խումբը ծավալվեց</translation> +<translation id="5494920125229734069">Ընտրել բոլորը</translation> <translation id="5533021382642990449">Ցույց տալ ավելի ուշ</translation> <translation id="5556417849629758491">Դիտել խանութի մասին տեղեկությունները, գործողությունը հասանելի է էկրանի վերին մասում</translation> <translation id="5558362125926932819">Փակել <ph name="NUMBER_OF_TABS" /> ներդիրից բաղկացած խումբը</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb index 35e3a07..ce9f984 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_id.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Lihat ulasan toko?</translation> <translation id="5082793167783849073">Bandingkan halaman secara cepat dengan membuat grup. Untuk memulai, sentuh lama link.</translation> <translation id="5490235265819901748">Grup tab diperluas</translation> +<translation id="5494920125229734069">Pilih semua</translation> <translation id="5533021382642990449">Tampilkan nanti</translation> <translation id="5556417849629758491">Lihat info toko, opsi tersedia di dekat bagian atas layar</translation> <translation id="5558362125926932819">Tutup grup tab yang berisi <ph name="NUMBER_OF_TABS" /> tab</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb index 05f3ee9..89ff449 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_is.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Skoða umsagnir um verslun?</translation> <translation id="5082793167783849073">Berðu síður saman á fljótlegan hátt með því að búa til hóp. Haltu fingri á tengli til að byrja.</translation> <translation id="5490235265819901748">Flipahópur stækkaður</translation> +<translation id="5494920125229734069">Velja allt</translation> <translation id="5533021382642990449">Sýna síðar</translation> <translation id="5556417849629758491">Skoða upplýsingar um verslun, valkostir eru ofarlega á skjánum</translation> <translation id="5558362125926932819">Loka flipahópi með <ph name="NUMBER_OF_TABS" /> flipum</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb index 8d11769..eb11ac7 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_it.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Vuoi visualizzare le recensioni sul negozio?</translation> <translation id="5082793167783849073">Confronta rapidamente le pagine creando un gruppo. Innanzitutto, tocca e tieni premuto un link.</translation> <translation id="5490235265819901748">Gruppo di schede espanso</translation> +<translation id="5494920125229734069">Seleziona tutto</translation> <translation id="5533021382642990449">Mostra più tardi</translation> <translation id="5556417849629758491">Visualizza informazioni sul negozio, opzione disponibile nella parte superiore dello schermo</translation> <translation id="5558362125926932819">Chiudi il gruppo di schede con <ph name="NUMBER_OF_TABS" /> schede</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_iw.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_iw.xtb index dedc3e0..03288ff 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_iw.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_iw.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">להציג ביקורות נוספות על החנות?</translation> <translation id="5082793167783849073">כדי להשוות במהירות בין דפים, אפשר ליצור קבוצה. כדי להתחיל, צריך ללחוץ לחיצה ארוכה על קישור.</translation> <translation id="5490235265819901748">קבוצת כרטיסיות הורחבה</translation> +<translation id="5494920125229734069">בחירת הכול</translation> <translation id="5533021382642990449">אני רוצה לראות את זה מאוחר יותר</translation> <translation id="5556417849629758491">ניתן להציג את פרטי החנות. האפשרות זמינה בחלק העליון של המסך</translation> <translation id="5558362125926932819">סגירת קבוצת הכרטיסיות עם <ph name="NUMBER_OF_TABS" /> כרטיסיות</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ja.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ja.xtb index c5c1b7f5..c6639abf 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ja.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ja.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">店舗の審査を確認しますか?</translation> <translation id="5082793167783849073">グループを作成して簡単にページを比較できます。グループを作成するには、リンクを長押しします。</translation> <translation id="5490235265819901748">タブグループを展開しました</translation> +<translation id="5494920125229734069">すべて選択する</translation> <translation id="5533021382642990449">後で表示</translation> <translation id="5556417849629758491">ストア情報を表示、画面上部付近に表示されるオプション</translation> <translation id="5558362125926932819">タブグループの <ph name="NUMBER_OF_TABS" /> 個のタブを閉じます</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ka.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ka.xtb index c020a3bf..e66ab63 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ka.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ka.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">გსურთ, ნახოთ მიმოხილვები მაღაზიიდან?</translation> <translation id="5082793167783849073">სწრაფად შეადარეთ გვერდები დაჯგუფების მეშვეობით. დასაწყებად ხანგრძლივად შეეხეთ ბმულს.</translation> <translation id="5490235265819901748">ჩანართების ჯგუფი გაფართოვდა</translation> +<translation id="5494920125229734069">აარჩიეთ ყველა</translation> <translation id="5533021382642990449">მოგვიანებით ჩვენება</translation> <translation id="5556417849629758491">მაღაზიის ინფორმაციის ნახვა, ვარიანტი ხელმისაწვდომია ეკრანის ზედა ნაწილთან</translation> <translation id="5558362125926932819">ჩანართების <ph name="NUMBER_OF_TABS" />-ჩანართიანი ჯგუფის დახურვა</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kk.xtb index b9645ba9..acfea372 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kk.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kk.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Дүкен туралы пікірлерді көресіз бе?</translation> <translation id="5082793167783849073">Топ жасай отырып, беттерді жылдам салыстырыңыз. Бастау үшін сілтемені басып тұрыңыз.</translation> <translation id="5490235265819901748">Қойындылар тобы жайылды</translation> +<translation id="5494920125229734069">Барлығын таңдау</translation> <translation id="5533021382642990449">Кейінірек көрсету</translation> <translation id="5556417849629758491">Дүкен туралы ақпаратты көру (опция экранның жоғарғы жағында орналасқан)</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> қойындысы бар қойындылар тобын жабу</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb index 364eaea..b1cbe69 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_km.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">មើលការវាយតម្លៃហាងឬ?</translation> <translation id="5082793167783849073">ប្រៀបធៀបទំព័រយ៉ាងរហ័សដោយការបង្កើតក្រុម។ ដើម្បីចាប់ផ្ដើម សូមចុចតំណឱ្យជាប់។</translation> <translation id="5490235265819901748">បានពង្រីកក្រុមផ្ទាំង</translation> +<translation id="5494920125229734069">ជ្រើសរើសទាំងអស់</translation> <translation id="5533021382642990449">បង្ហាញពេលក្រោយ</translation> <translation id="5556417849629758491">មើលព័ត៌មានអំពីហាង ជម្រើសមាននៅជិតផ្នែកខាងលើអេក្រង់</translation> <translation id="5558362125926932819">បិទក្រុមផ្ទាំងដែលមាន <ph name="NUMBER_OF_TABS" />ផ្ទាំង</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kn.xtb index 5492259..215eda1 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kn.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_kn.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">ಸ್ಟೋರ್ ವಿಮರ್ಶೆಗಳನ್ನು ನೋಡಬೇಕೆ?</translation> <translation id="5082793167783849073">ಗುಂಪನ್ನು ರಚಿಸುವ ಮೂಲಕ ಪುಟಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಹೋಲಿಸಿ ನೋಡಿ. ಪ್ರಾರಂಭಿಸಲು, ಲಿಂಕ್ ಸ್ಪರ್ಶಿಸಿ ಹಿಡಿಯಿರಿ.</translation> <translation id="5490235265819901748">ಟ್ಯಾಬ್ ಗುಂಪನ್ನು ವಿಸ್ತೃತಗೊಳಿಸಲಾಗಿದೆ</translation> +<translation id="5494920125229734069">ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆ ಮಾಡಿ</translation> <translation id="5533021382642990449">ನಂತರ ತೋರಿಸಿ</translation> <translation id="5556417849629758491">ಸ್ಟೋರ್ ಮಾಹಿತಿ ವೀಕ್ಷಿಸಿ, ಆಯ್ಕೆಯು ಸ್ಕ್ರೀನ್ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಲಭ್ಯವಿದೆ</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> ಟ್ಯಾಬ್ಗಳ ಜೊತೆಗೆ ಟ್ಯಾಬ್ ಗುಂಪನ್ನು ಮುಚ್ಚಿರಿ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb index 5330ab5e..3f0b63f 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ko.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">매장 리뷰를 확인하시겠습니까?</translation> <translation id="5082793167783849073">그룹을 만들어서 페이지를 빠르게 비교하세요. 시작하려면 링크를 길게 터치합니다.</translation> <translation id="5490235265819901748">탭 그룹 펼침</translation> +<translation id="5494920125229734069">모두 선택</translation> <translation id="5533021382642990449">계속 표시</translation> <translation id="5556417849629758491">스토어 정보 보기, 화면 상단에 옵션 있음</translation> <translation id="5558362125926932819">탭 <ph name="NUMBER_OF_TABS" />개가 포함된 탭 그룹 닫기</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ky.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ky.xtb index 59b9b91..4d79c24 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ky.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ky.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Дүкөн жөнүндө жазылган сын-пикирлерди көрөсүзбү?</translation> <translation id="5082793167783849073">Барактарды топко бириктирип, тез салыштырып чыгыңыз. Баштоо үчүн, шилтемени коё бербей басып туруңуз.</translation> <translation id="5490235265819901748">Өтмөктөр тобу жайылып көрсөтүлдү</translation> +<translation id="5494920125229734069">Баарын тандоо</translation> <translation id="5533021382642990449">Кийинчерээк көрсөтүү</translation> <translation id="5556417849629758491">Дүкөн тууралуу маалыматты көрүңүз. Параметр экрандын жогору жагында берилген</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> өтмөктөн турган өтмөктөр тобун жабуу</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb index 7caaccb..09f5ad72 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lo.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">ເບິ່ງຄຳຕິຊົມຮ້ານຄ້າບໍ?</translation> <translation id="5082793167783849073">ປຽບທຽບໜ້າຕ່າງໆໄດ້ຢ່າງວ່ອງໄວໂດຍການສ້າງກຸ່ມ. ເພື່ອເລີ່ມຕົ້ນ, ກະລຸນາແຕະລິ້ງຄ້າງໄວ້.</translation> <translation id="5490235265819901748">ຂະຫຍາຍກຸ່ມແຖບແລ້ວ</translation> +<translation id="5494920125229734069">ເລືອກທັງຫມົດ</translation> <translation id="5533021382642990449">ສະແດງໃນພາຍຫຼັງ</translation> <translation id="5556417849629758491">ເບິ່ງຂໍ້ມູນຮ້ານຄ້າ, ມີຕົວເລືອກຢູ່ເທິງສຸດຂອງໜ້າຈໍ</translation> <translation id="5558362125926932819">ປິດກຸ່ມແຖບທີ່ມີ <ph name="NUMBER_OF_TABS" /> ແຖບ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb index dc9777c8..6e87e40 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lt.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Peržiūrėti parduotuvės apžvalgas?</translation> <translation id="5082793167783849073">Sparčiai palyginkite puslapius sukūrę grupę. Jei norite pradėti, palieskite ir palaikykite nuorodą.</translation> <translation id="5490235265819901748">Skirtukų grupė išskleista</translation> +<translation id="5494920125229734069">Pasirinkti viską</translation> <translation id="5533021382642990449">Rodyti vėliau</translation> <translation id="5556417849629758491">Peržiūrėkite parduotuvės informaciją; parinktis pasiekiama ekrano viršuje</translation> <translation id="5558362125926932819">Uždaryti skirtukų grupę, kurioje yra tiek skirtukų: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lv.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lv.xtb index 996ebb0e..159b06e7 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lv.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_lv.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Vai skatīt atsauksmes par veikalu?</translation> <translation id="5082793167783849073">Ātri salīdziniet lapas, izveidojot grupu. Lai sāktu, pieskarieties un turiet saiti.</translation> <translation id="5490235265819901748">Ciļņu grupa ir izvērsta</translation> +<translation id="5494920125229734069">Atlasīt visu</translation> <translation id="5533021382642990449">Rādīt vēlāk</translation> <translation id="5556417849629758491">Skatiet veikala informāciju; opcija ir pieejama ekrāna augšdaļā</translation> <translation id="5558362125926932819">Aizvērt ciļņu grupu. Ciļņu skaits šajā grupā ir <ph name="NUMBER_OF_TABS" />.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mk.xtb index 8e17a9f..fafb0a22 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mk.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mk.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Сакате да видите рецензии за продавницата?</translation> <translation id="5082793167783849073">Набрзина споредете ги страниците со правење група. За да започнете, допрете и задржете го линкот.</translation> <translation id="5490235265819901748">Групата картички се прошири</translation> +<translation id="5494920125229734069">Избери сè</translation> <translation id="5533021382642990449">Прикажи подоцна</translation> <translation id="5556417849629758491">Прикажи информации за продавница, опција достапна во горниот дел од екранот</translation> <translation id="5558362125926932819">Затвори ја групата со <ph name="NUMBER_OF_TABS" /> картички</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ml.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ml.xtb index 7301d6d2..1641ebd 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ml.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ml.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">സ്റ്റോർ റിവ്യൂകൾ കാണണോ?</translation> <translation id="5082793167783849073">ഒരു ഗ്രൂപ്പ് സൃഷ്ടിച്ചുകൊണ്ട്, വേഗത്തിൽ പേജുകൾ താരതമ്യം ചെയ്യൂ. ആരംഭിക്കാൻ ഒരു ലിങ്ക് സ്പർശിച്ച് പിടിക്കുക.</translation> <translation id="5490235265819901748">ടാബ് ഗ്രൂപ്പ് വികസിപ്പിച്ചു</translation> +<translation id="5494920125229734069">എല്ലാം തിരഞ്ഞെടുക്കുക</translation> <translation id="5533021382642990449">പിന്നീട് കാണിക്കുക</translation> <translation id="5556417849629758491">സ്റ്റോർ വിവരങ്ങൾ കാണുക, സ്ക്രീനിന്റെ മുകൾ ഭാഗത്തിന് സമീപം ഓപ്ഷൻ ലഭ്യമാണ്</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> ടാബുകളുള്ള ടാബ് ഗ്രൂപ്പ് അടയ്ക്കുക</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb index 174799a..9d39c019 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mn.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Дэлгүүрийн шүүмжүүдийг харах уу?</translation> <translation id="5082793167783849073">Бүлэг үүсгэх байдлаар хуудаснуудыг хурдан харьцуулаарай. Эхлүүлэхийн тулд холбоосыг удаан дарна уу.</translation> <translation id="5490235265819901748">Бүлэг табыг дэлгэсэн</translation> +<translation id="5494920125229734069">Бүгдийг сонго</translation> <translation id="5533021382642990449">Дараа харуулах</translation> <translation id="5556417849629758491">Дэлгэцийн дээд хэсгийн ойролцоо боломжтой дэлгүүрийн мэдээллийг үзэх сонголт</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> таб бүхий бүлэг табыг хаах.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mr.xtb index e14fd832..b2fdcef 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mr.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_mr.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">स्टोअरशी संबंधित पुनरावलोकने पहायची आहेत का?</translation> <translation id="5082793167783849073">गट बनवून त्वरित पेजशी तुलना करा. सुरू करण्यासाठी, लिंकला स्पर्श करा आणि धरून ठेवा.</translation> <translation id="5490235265819901748">टॅब गटाचा विस्तार केला आहे</translation> +<translation id="5494920125229734069">सर्व निवडा</translation> <translation id="5533021382642990449">नंतर दाखवा</translation> <translation id="5556417849629758491">स्टोअरची माहिती पहा, पर्याय स्क्रीनच्या सर्वात वर उपलब्ध आहे</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> टॅब असलेला टॅब गट बंद करा</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ms.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ms.xtb index f69d664..66528d3 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ms.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ms.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Lihat ulasan gedung?</translation> <translation id="5082793167783849073">Bandingkan halaman dengan pantas dengan membuat kumpulan. Untuk bermula, sentuh & tahan pautan.</translation> <translation id="5490235265819901748">Kumpulan tab dikembangkan</translation> +<translation id="5494920125229734069">Pilih semua</translation> <translation id="5533021382642990449">Tunjukkan kemudian</translation> <translation id="5556417849629758491">Lihat maklumat kedai, pilihan tersedia berhampiran bahagian atas skrin</translation> <translation id="5558362125926932819">Tutup kumpulan tab dengan <ph name="NUMBER_OF_TABS" /> tab</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb index be659ee..72b2645 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_my.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">ဆိုင်အကြောင်း သုံးသပ်ချက်များ ကြည့်မလား။</translation> <translation id="5082793167783849073">အဖွဲ့ဖွဲ့ခြင်းဖြင့် စာမျက်နှာများကို အမြန်နှိုင်းယှဉ်ပါ။ စတင်ရန် လင့်ခ်ကို ထိပြီး ဖိထားပါ။</translation> <translation id="5490235265819901748">တဘ်အုပ်စုကို ချဲ့ထားသည်</translation> +<translation id="5494920125229734069">အားလုံး ရွေးရန်</translation> <translation id="5533021382642990449">နောက်မှ ပြရန်</translation> <translation id="5556417849629758491">ဆိုင်အချက်အလက် ကြည့်ရန် ရွေးချယ်စရာကို ဖန်သားပြင်ထိပ်ပိုင်းအနီးတွင် ရနိုင်သည်</translation> <translation id="5558362125926932819">တဘ် <ph name="NUMBER_OF_TABS" /> ခုပါသော တဘ်အုပ်စုကို ပိတ်ရန်</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb index 87d470c7..cb208c51 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ne.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">स्टोरसम्बन्धी समीक्षाहरू हेर्ने हो?</translation> <translation id="5082793167783849073">कुनै समूह बनाएर द्रुत रूपमा पृष्ठहरूको तुलना गर्नुहोस्। सुरु गर्न कुनै लिंकमा टच एण्ड होल्ड गर्नुहोस्।</translation> <translation id="5490235265819901748">ट्याब समूह विस्तृत गरियो</translation> +<translation id="5494920125229734069">सबै चयन गर्नुहोस्</translation> <translation id="5533021382642990449">पछि देखाइयोस्</translation> <translation id="5556417849629758491">स्क्रिनको सिरानको नजिक रहेको 'स्टोरसम्बन्धी जानकारी हेर्नुहोस्' नामक विकल्प</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> वटा ट्याब भएको ट्याब समूह बन्द गर्नुहोस्</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb index 3b9c25b..6c4e754b 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_nl.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Winkelreviews bekijken?</translation> <translation id="5082793167783849073">Vergelijk pagina's snel door een groep te maken. Tik op een link en houd deze vast om te beginnen.</translation> <translation id="5490235265819901748">Tabbladgroep uitgevouwen</translation> +<translation id="5494920125229734069">Alles selecteren</translation> <translation id="5533021382642990449">Later bekijken</translation> <translation id="5556417849629758491">Winkelinformatie bekijken, optie beschikbaar bovenaan het scherm</translation> <translation id="5558362125926932819">Tabbladgroep met <ph name="NUMBER_OF_TABS" /> tabbladen sluiten</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_no.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_no.xtb index a2c0053..a10afb7 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_no.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_no.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Vil du se butikkanmeldelser?</translation> <translation id="5082793167783849073">Sammenlign sider raskt ved å lage en gruppe. For å begynne, trykk og hold på en link.</translation> <translation id="5490235265819901748">Fanegruppen er utvidet</translation> +<translation id="5494920125229734069">Velg alle</translation> <translation id="5533021382642990449">Vis senere</translation> <translation id="5556417849629758491">Vis butikkinformasjon – alternativet er tilgjengelig nær toppen av skjermen</translation> <translation id="5558362125926932819">Lukk fanegruppe med <ph name="NUMBER_OF_TABS" /> faner</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb index 41141ffa..ff4d3a5 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_or.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">ଷ୍ଟୋର ସମୀକ୍ଷାଗୁଡ଼ିକୁ ଦେଖିବେ?</translation> <translation id="5082793167783849073">ଗୋଟିଏ ଗୋଷ୍ଠୀ ତିଆରି କରି ପୃଷ୍ଠାଗୁଡ଼ିକୁ ତୁରନ୍ତ ତୁଳନା କରନ୍ତୁ। ଆରମ୍ଭ କରିବା ପାଇଁ, ଗୋଟିଏ ଲିଙ୍କ୍କୁ ଦାବି ଧରନ୍ତୁ।</translation> <translation id="5490235265819901748">ଟାବ୍ ଗ୍ରୁପର ବିସ୍ତାର କରାଯାଇଛି</translation> +<translation id="5494920125229734069">ସମସ୍ତ ଚୟନ କରନ୍ତୁ</translation> <translation id="5533021382642990449">ପରେ ଦେଖାନ୍ତୁ</translation> <translation id="5556417849629758491">ଷ୍ଟୋରର ସୂଚନା ଦେଖନ୍ତୁ, ସ୍କ୍ରିନର ଶୀର୍ଷଭାଗର ନିକଟରେ ବିକଳ୍ପ ଉପଲବ୍ଧ ଅଛି</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" />ଟି ଟାବ୍ ଥିବା ଟାବ୍ ଗ୍ରୁପକୁ ବନ୍ଦ କରନ୍ତୁ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb index 104e387..dbae69a 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pa.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">ਕੀ ਸਟੋਰ ਦੀਆਂ ਸਮੀਖਿਆਵਾਂ ਦੇਖਣੀਆਂ ਹਨ?</translation> <translation id="5082793167783849073">ਗਰੁੱਪ ਬਣਾ ਕੇ ਪੰਨਿਆਂ ਦੀ ਤੁਲਨਾ ਜਲਦੀ ਕਰੋ। ਸ਼ੁਰੂ ਕਰਨ ਲਈ, ਕਿਸੇ ਲਿੰਕ ਨੂੰ ਸਪੱਰਸ਼ ਕਰਕੇ ਰੱਖੋ।</translation> <translation id="5490235265819901748">ਟੈਬ ਗਰੁੱਪ ਦਾ ਵਿਸਤਾਰ ਕੀਤਾ ਗਿਆ</translation> +<translation id="5494920125229734069">ਸਾਰੇ ਚੁਣੋ</translation> <translation id="5533021382642990449">ਬਾਅਦ ਵਿੱਚ ਦਿਖਾਓ</translation> <translation id="5556417849629758491">ਸਟੋਰ ਦੀ ਜਾਣਕਾਰੀ ਦੇਖੋ, ਇਹ ਵਿਕਲਪ ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ ਦੇ ਨੇੜੇ ਉਪਲਬਧ ਹੈ</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> ਟੈਬਾਂ ਵਾਲੇ ਟੈਬ ਗਰੁੱਪ ਨੂੰ ਬੰਦ ਕਰੋ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb index a751c45..c1aa9d7 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pl.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Wyświetlić opinie o sklepie?</translation> <translation id="5082793167783849073">Możesz szybko porównać strony, tworząc ich grupę. Aby to zrobić, naciśnij i przytrzymaj link.</translation> <translation id="5490235265819901748">Grupa kart została rozwinięta</translation> +<translation id="5494920125229734069">Wybierz wszystko</translation> <translation id="5533021382642990449">Pokaż później</translation> <translation id="5556417849629758491">Wyświetl informacje o sklepie, opcja dostępna u góry ekranu</translation> <translation id="5558362125926932819">Zamknij grupę kart z <ph name="NUMBER_OF_TABS" /> kartami</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb index 8554860..01a08484 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-BR.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Ver avaliações da loja?</translation> <translation id="5082793167783849073">Compare as páginas rapidamente criando um grupo. Para começar, toque em um link e mantenha-o pressionado.</translation> <translation id="5490235265819901748">Grupo de guias expandido</translation> +<translation id="5494920125229734069">Selecionar tudo</translation> <translation id="5533021382642990449">Mostrar mais tarde</translation> <translation id="5556417849629758491">Ver informações da loja, opção disponível perto da parte superior da tela</translation> <translation id="5558362125926932819">Fechar grupo de guias com <ph name="NUMBER_OF_TABS" /> guias</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb index 649403e..0e892ff 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_pt-PT.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Ver críticas de lojas?</translation> <translation id="5082793167783849073">Compare páginas rapidamente através da criação de um grupo. Para começar, toque sem soltar num link.</translation> <translation id="5490235265819901748">Grupo de separadores expandido</translation> +<translation id="5494920125229734069">Selecionar tudo</translation> <translation id="5533021382642990449">Mostrar mais tarde</translation> <translation id="5556417849629758491">Veja informações da loja, opção disponível junto à parte superior do ecrã</translation> <translation id="5558362125926932819">Feche o grupo de separadores com <ph name="NUMBER_OF_TABS" /> separadores.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb index b4b5d4f..14e472f 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ro.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Vezi recenziile magazinului?</translation> <translation id="5082793167783849073">Compară rapid paginile făcând un grup. Pentru a începe, atinge lung un link.</translation> <translation id="5490235265819901748">Grup de file extins</translation> +<translation id="5494920125229734069">Selectează-le pe toate</translation> <translation id="5533021382642990449">Afișează mai târziu</translation> <translation id="5556417849629758491">Vezi informații despre magazin, opțiune disponibilă în partea de sus a ecranului</translation> <translation id="5558362125926932819">Închide grupul de file cu <ph name="NUMBER_OF_TABS" /> file</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb index 4d64a4c..95273dca 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ru.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Показать отзывы о магазине?</translation> <translation id="5082793167783849073">Сравнивайте страницы быстрее, объединяя их в группы. Чтобы начать, нажмите на ссылку и удерживайте ее.</translation> <translation id="5490235265819901748">Группа вкладок развернута</translation> +<translation id="5494920125229734069">Выделить все</translation> <translation id="5533021382642990449">Показать позже</translation> <translation id="5556417849629758491">Просмотр сведений о магазине, параметр вверху экрана</translation> <translation id="5558362125926932819">Закрыть группу вкладок. Количество вкладок в ней – <ph name="NUMBER_OF_TABS" />.</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb index a56505fca..d16430ea 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_si.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">වෙළඳසැල් සමාලෝචන බලන්නද?</translation> <translation id="5082793167783849073">කණ්ඩායමක් කිරීමෙන් ඉක්මනින් පිටු සංසන්දන කරන්න. පටන් ගැනීමට, සබැඳියක් ස්පර්ශ කර අල්ලා සිටින්න.</translation> <translation id="5490235265819901748">ටැබ සමූහය දිග හරින ලදි</translation> +<translation id="5494920125229734069">සියල්ල තෝරන්න</translation> <translation id="5533021382642990449">පසුව පෙන්වන්න</translation> <translation id="5556417849629758491">අලෙවිසැල් තොරතුරු බලන්න, තිරයේ ඉහළින්ම ඇති විකල්පය</translation> <translation id="5558362125926932819">ටැබ සමූහය ටැබ <ph name="NUMBER_OF_TABS" />ක් සමග වසන්න</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb index b3d9e9d3..fe3005f 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sk.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Chcete si zobraziť recenzie v obchode?</translation> <translation id="5082793167783849073">Ak chcete rýchlo porovnať stránky, vytvorte skupinu. Začnite pridržaním ľubovoľného odkazu.</translation> <translation id="5490235265819901748">Skupina kariet bola rozbalená</translation> +<translation id="5494920125229734069">Vybrať všetko</translation> <translation id="5533021382642990449">Zobraziť neskôr</translation> <translation id="5556417849629758491">Zobraziť informácie o obchode, možnosť je k dispozícii v dolnej časti obrazovky</translation> <translation id="5558362125926932819">Zavrieť skupinu s <ph name="NUMBER_OF_TABS" /> kartami</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sl.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sl.xtb index f96029c..77ffc2d 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sl.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sl.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Si želite ogledati mnenja o trgovini?</translation> <translation id="5082793167783849073">Hitro primerjate strani tako, da ustvarite skupino. Če želite začeti, se dotaknite povezave in jo pridržite.</translation> <translation id="5490235265819901748">Skupina zavihkov je razširjena</translation> +<translation id="5494920125229734069">Izberi vse</translation> <translation id="5533021382642990449">Pokaži pozneje</translation> <translation id="5556417849629758491">Ogled podatkov o trgovini, možnosti so na voljo pri vrhu zaslona</translation> <translation id="5558362125926932819">Zapri skupino zavihkov s toliko zavihki: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sq.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sq.xtb index f0d0f70c2..0f25b344 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sq.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sq.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Të shihen komentet e dyqanit?</translation> <translation id="5082793167783849073">Krahaso me shpejtësi faqet duke krijuar një grup. Për të filluar, prek dhe mbaj të shtypur një lidhje.</translation> <translation id="5490235265819901748">Grupi i skedave u zgjerua</translation> +<translation id="5494920125229734069">Zgjidh të gjitha</translation> <translation id="5533021382642990449">Shfaq më vonë</translation> <translation id="5556417849629758491">Shiko informacionet e dyqanit. Opsioni ofrohet pranë kreut të ekranit</translation> <translation id="5558362125926932819">Mbyll grupin e skedave me <ph name="NUMBER_OF_TABS" /> skeda</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr-Latn.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr-Latn.xtb index b753ae1..5586c8da 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr-Latn.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr-Latn.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Želite da vidite recenzije prodavnica?</translation> <translation id="5082793167783849073">Napravite grupu da biste brzo upoređivali stranice. Za početak dodirnite i zadržite link.</translation> <translation id="5490235265819901748">Grupa kartica je proširena</translation> +<translation id="5494920125229734069">Izbor svih stavki</translation> <translation id="5533021382642990449">Prikaži kasnije</translation> <translation id="5556417849629758491">Pregledajte informacije o prodavnici, opciju koja je dostupna u vrhu ekrana</translation> <translation id="5558362125926932819">Zatvorite grupu od kartica: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr.xtb index f3f7fd2..e92e7647 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sr.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Желите да видите рецензије продавница?</translation> <translation id="5082793167783849073">Направите групу да бисте брзо упоређивали странице. За почетак додирните и задржите линк.</translation> <translation id="5490235265819901748">Група картица је проширена</translation> +<translation id="5494920125229734069">Избор свих ставки</translation> <translation id="5533021382642990449">Прикажи касније</translation> <translation id="5556417849629758491">Прегледајте информације о продавници, опцију која је доступна у врху екрана</translation> <translation id="5558362125926932819">Затворите групу од картица: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sv.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sv.xtb index f69ea4d..5ffa27b 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sv.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sv.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Vill du visa butiksrecensioner?</translation> <translation id="5082793167783849073">Jämför sidor snabbt genom att skapa en grupp. Börja med att trycka länge på en länk.</translation> <translation id="5490235265819901748">Flikgruppen har utökats</translation> +<translation id="5494920125229734069">Markera alla</translation> <translation id="5533021382642990449">Visa senare</translation> <translation id="5556417849629758491">Visa butiksinformation. Alternativet visas högt upp på skärmen</translation> <translation id="5558362125926932819">Stäng flikgruppen med <ph name="NUMBER_OF_TABS" /> flikar</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb index 253791d..baf41b3 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_sw.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Je, unaona maoni kuhusu duka?</translation> <translation id="5082793167783849073">Linganisha kurasa kwa haraka kwa kuanzisha kikundi. Ili uanze, gusa na ushikilie kiungo.</translation> <translation id="5490235265819901748">Kikundi cha vichupo kimepanuliwa</translation> +<translation id="5494920125229734069">Chagua zote</translation> <translation id="5533021382642990449">Onyesha baadaye</translation> <translation id="5556417849629758491">Angalia maelezo ya duka, chaguo hili linapatikana karibu na sehemu ya juu ya skrini</translation> <translation id="5558362125926932819">Funga kikundi chenye vichupo <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ta.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ta.xtb index 1accd7e..95ab9d461 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ta.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ta.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">ஸ்டோருக்குக் கிடைத்த கருத்துகளைப் பார்க்க வேண்டுமா?</translation> <translation id="5082793167783849073">ஒரு குழுவை உருவாக்கிப் பக்கங்களை விரைவாக ஒப்பிடலாம். தொடங்க, ஓர் இணைப்பைத் தொட்டுப் பிடிக்கவும்.</translation> <translation id="5490235265819901748">பக்கக் குழு விரிவாக்கப்பட்டது</translation> +<translation id="5494920125229734069">எல்லாவற்றையும் தேர்ந்தெடு</translation> <translation id="5533021382642990449">பின்னர் காட்டு</translation> <translation id="5556417849629758491">ஸ்டோர் தகவலைப் பார்ப்பதற்கான விருப்பம் திரையின் மேற்பகுதிக்கு அருகில் உள்ளது</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> பக்கங்கள் உள்ள பக்கக் குழுவை மூடும்</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_te.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_te.xtb index 5ddb2d9..441339e 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_te.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_te.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">స్టోర్ రివ్యూలను చూడాలనుకుంటున్నారా?</translation> <translation id="5082793167783849073">పేజీలను సమూహంగా వర్గీకరించడం ద్వారా వేగంగా సరిపోల్చండి. ప్రారంభించడానికి, లింక్ను తాకి & అలాగే నొక్కి ఉంచండి.</translation> <translation id="5490235265819901748">ట్యాబ్ గ్రూప్ విస్తరించబడింది</translation> +<translation id="5494920125229734069">అన్నీ ఎంచుకోండి</translation> <translation id="5533021382642990449">తర్వాత చూపించు</translation> <translation id="5556417849629758491">స్టోర్ సమాచారాన్ని చూడండి, ఆప్షన్ స్క్రీన్ పైభాగంలో అందుబాటులో ఉంది</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> ట్యాబ్లతో ఉన్న ట్యాబ్ గ్రూప్ను మూసివేయండి</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb index 2f9ea971..ae4e29ac 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_th.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">ดูรีวิวร้านค้าไหม</translation> <translation id="5082793167783849073">เปรียบเทียบหน้าต่างๆ อย่างรวดเร็วด้วยการสร้างกลุ่ม แตะลิงก์ค้างไว้เพื่อเริ่มต้น</translation> <translation id="5490235265819901748">ขยายกลุ่มแท็บแล้ว</translation> +<translation id="5494920125229734069">เลือกทั้งหมด</translation> <translation id="5533021382642990449">แสดงทีหลัง</translation> <translation id="5556417849629758491">ดูข้อมูลร้านค้า ตัวเลือกจะอยู่ตรงบริเวณด้านบนของหน้าจอ</translation> <translation id="5558362125926932819">ปิดกลุ่มแท็บที่มีแท็บอยู่ <ph name="NUMBER_OF_TABS" /> แท็บ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb index 2bab8d1..fce14413 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_tr.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Mağaza yorumları gösterilsin mi?</translation> <translation id="5082793167783849073">Grup oluşturarak sayfaları hızlıca karşılaştırın. Başlamak için bir bağlantıya dokunup basılı tutun.</translation> <translation id="5490235265819901748">Sekme grubu genişletildi</translation> +<translation id="5494920125229734069">Tümünü seç</translation> <translation id="5533021382642990449">Daha sonra göster</translation> <translation id="5556417849629758491">Mağaza bilgilerini görüntüleme seçeneği, ekranın üst kısmına yakın bir yerdedir</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> sekmeli sekme grubunu kapat</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb index e014dfd2..c981ee0 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uk.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Показати відгуки про магазин?</translation> <translation id="5082793167783849073">Швидко порівнюйте сторінки, створивши групу. Щоб почати, натисніть і втримуйте посилання.</translation> <translation id="5490235265819901748">Групу вкладок розгорнуто</translation> +<translation id="5494920125229734069">Вибрати все</translation> <translation id="5533021382642990449">Показати пізніше</translation> <translation id="5556417849629758491">Переглянути інформацію про магазин. Опція доступна вгорі екрана.</translation> <translation id="5558362125926932819">Закрити групу зі стількома вкладками: <ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb index 8eb4a6e..ea3123f 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_ur.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">اسٹور کے جائزے دیکھیں؟</translation> <translation id="5082793167783849073">ایک گروپ بنا کر صفحات کا فوری طور پر موازنہ کریں۔ شروع کرنے کیلئے، کسی لنک کو ٹچ کریں اور دبائے رکھیں۔</translation> <translation id="5490235265819901748">ٹیب گروپ پھیلا دیا گیا</translation> +<translation id="5494920125229734069">سبھی کو منتخب کریں</translation> <translation id="5533021382642990449">بعد میں دکھائیں</translation> <translation id="5556417849629758491">اسٹور کی معلومات دیکھنے کا اختیار اسکرین کے اوپری حصے کے قریپ دستیاب ہے</translation> <translation id="5558362125926932819">ٹیب گروپ کو <ph name="NUMBER_OF_TABS" /> ٹیبز کے ساتھ بند کریں</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uz.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uz.xtb index 288677c..5201c7b 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uz.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_uz.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Doʻkon sharhlari ochilsinmi?</translation> <translation id="5082793167783849073">Sahifalarni guruhlab, tezkor solishtiring. Boshlash uchun havolani uzoq bosib turing.</translation> <translation id="5490235265819901748">Varaqlar guruhi yoyildi</translation> +<translation id="5494920125229734069">Hammasini tanlash</translation> <translation id="5533021382642990449">Keyinroq koʻrsatish</translation> <translation id="5556417849629758491">Doʻkon axboroti ekranning yuqori qismida chiqadi</translation> <translation id="5558362125926932819"><ph name="NUMBER_OF_TABS" /> varaqli guruhni yopish</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_vi.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_vi.xtb index d3b6df9..f1c1612 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_vi.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_vi.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Xem đánh giá về cửa hàng?</translation> <translation id="5082793167783849073">Tạo một nhóm để so sánh nhanh các trang. Để bắt đầu, hãy chạm và giữ một đường liên kết.</translation> <translation id="5490235265819901748">Đã mở rộng nhóm thẻ</translation> +<translation id="5494920125229734069">Chọn tất cả</translation> <translation id="5533021382642990449">Hiển thị sau</translation> <translation id="5556417849629758491">Xem thông tin cửa hàng, tùy chọn này nằm ở gần đầu màn hình</translation> <translation id="5558362125926932819">Đóng nhóm thẻ có <ph name="NUMBER_OF_TABS" /> thẻ</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-CN.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-CN.xtb index 6049eb5..58fc3f16 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-CN.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-CN.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">查看商店评价?</translation> <translation id="5082793167783849073">通过分组快速比较网页。为此,请先轻触并按住某个链接。</translation> <translation id="5490235265819901748">已展开标签页组</translation> +<translation id="5494920125229734069">全选</translation> <translation id="5533021382642990449">稍后再显示</translation> <translation id="5556417849629758491">查看商店信息,屏幕顶部附近有可用选项</translation> <translation id="5558362125926932819">关闭包含 <ph name="NUMBER_OF_TABS" /> 个标签页的标签页组</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb index b63aba8b..8c6c749 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-HK.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">要查看商店評論嗎?</translation> <translation id="5082793167783849073">建立群組以快速比較多個頁面。輕觸並按住連結即可開始建立。</translation> <translation id="5490235265819901748">展開咗分頁群組</translation> +<translation id="5494920125229734069">全部選取</translation> <translation id="5533021382642990449">稍後再顯示</translation> <translation id="5556417849629758491">商店資料同可用選項喺螢幕最頂嘅附近</translation> <translation id="5558362125926932819">閂有 <ph name="NUMBER_OF_TABS" /> 個分頁嘅分頁群組</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb index 8a0b8a8..5a77c2a 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zh-TW.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">要查看商店評論嗎?</translation> <translation id="5082793167783849073">建立群組以快速比較多個頁面。如要開始建立,請輕觸並按住連結。</translation> <translation id="5490235265819901748">已展開分頁群組</translation> +<translation id="5494920125229734069">全選</translation> <translation id="5533021382642990449">之後繼續顯示</translation> <translation id="5556417849629758491">商店資訊和可用選項位於靠近畫面頂端的地方</translation> <translation id="5558362125926932819">關閉包含 <ph name="NUMBER_OF_TABS" /> 個分頁的分頁群組</translation>
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb index ba16e9b..74c018f 100644 --- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb +++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_zu.xtb
@@ -50,6 +50,7 @@ <translation id="5076161749301278626">Bona izibuyekezo zesitoreji?</translation> <translation id="5082793167783849073">Qhathanisa ngokushesha amakhasi ngokwenza iqembu. Ukuze uqale, thinta uphinde ubambe isixhumanisi.</translation> <translation id="5490235265819901748">Iqembu lethebhu linwetshiwe</translation> +<translation id="5494920125229734069">Khetha konke</translation> <translation id="5533021382642990449">Bonisa kamuva</translation> <translation id="5556417849629758491">Buka ulwazi lwesitoreji, inketho itholakala eduze naphezulu kwesikrini</translation> <translation id="5558362125926932819">Vala iqembu lethebhu ngamathebhu angu-<ph name="NUMBER_OF_TABS" /></translation>
diff --git a/chrome/android/features/vr/vr_module.gni b/chrome/android/features/vr/vr_module.gni index 8c03722c..1d705d4 100644 --- a/chrome/android/features/vr/vr_module.gni +++ b/chrome/android/features/vr/vr_module.gni
@@ -9,8 +9,14 @@ vr_module_desc = { name = "vr" + + # The manifest file needs to be preprocessed before use. See the + # jinja_template definition in chrome/android/BUILD.gn . + android_manifest_dep = + "//chrome/android:chrome_public_android_feature_vr_manifest" + android_manifest = feature_module_vr_android_manifest_path + java_deps = [ "//chrome/android/features/vr:java" ] - android_manifest = "//chrome/android/features/vr/java/AndroidManifest.xml" native_deps = [ "//chrome/browser/vr:vr_ui" ] native_entrypoints = "//chrome/browser/vr/module_exports.lst"
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java index 53b190f..da9a1df 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -47,7 +47,6 @@ import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.share.ShareDelegate; -import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.toolbar.top.Toolbar; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; @@ -65,7 +64,6 @@ import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; import org.chromium.components.feature_engagement.EventConstants; import org.chromium.components.feature_engagement.Tracker; -import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.third_party.android.swiperefresh.SwipeRefreshLayout; import org.chromium.ui.base.ViewUtils; import org.chromium.ui.base.WindowAndroid; @@ -869,10 +867,7 @@ @Override public boolean isSignedIn() { - return IdentityServicesProvider.get() - .getSigninManager(Profile.getLastUsedRegularProfile()) - .getIdentityManager() - .hasPrimaryAccount(ConsentLevel.SYNC); + return FeedServiceBridge.isSignedIn(); } @Override
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java index 6d6e440..044bfc57 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceMediator.java
@@ -52,7 +52,6 @@ import org.chromium.components.feed.proto.wire.ReliabilityLoggingEnums.DiscoverLaunchResult; import org.chromium.components.prefs.PrefService; import org.chromium.components.search_engines.TemplateUrlService.TemplateUrlServiceObserver; -import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.components.signin.identitymanager.IdentityManager; import org.chromium.components.signin.identitymanager.PrimaryAccountChangeEvent; import org.chromium.components.signin.metrics.SigninAccessPoint; @@ -688,7 +687,7 @@ } private void setHeaderIndicatorState(boolean suggestionsVisible) { - boolean isSignedIn = isSignedIn(); + boolean isSignedIn = FeedServiceBridge.isSignedIn(); boolean isTabMode = isSignedIn && FeedFeatures.isWebFeedUIEnabled() && suggestionsVisible; // If we're in tab mode now, make sure webfeed tab is set up. if (isTabMode) { @@ -782,10 +781,6 @@ } } - private boolean isSignedIn() { - return mSigninManager.getIdentityManager().hasPrimaryAccount(ConsentLevel.SYNC); - } - /** * Callback on section header toggled. This will update the visibility of the Feed and the * expand icon on the section header view. @@ -817,7 +812,8 @@ TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle(); final int sectionHeaderStringId; - if (ChromeFeatureList.isEnabled(ChromeFeatureList.WEB_FEED) && isSignedIn() && isExpanded) { + if (ChromeFeatureList.isEnabled(ChromeFeatureList.WEB_FEED) + && FeedServiceBridge.isSignedIn() && isExpanded) { sectionHeaderStringId = R.string.ntp_discover_on; } else if (isDefaultSearchEngineGoogle) { sectionHeaderStringId = @@ -833,7 +829,7 @@ private ModelList buildMenuItems() { ModelList itemList = new ModelList(); int iconId = 0; - if (isSignedIn()) { + if (FeedServiceBridge.isSignedIn()) { if (ChromeFeatureList.isEnabled(ChromeFeatureList.WEB_FEED)) { itemList.add(buildMenuListItem( R.string.ntp_manage_feed, R.id.ntp_feed_header_menu_item_manage, iconId));
diff --git a/chrome/android/java/res/layout/send_tab_to_self_device_picker_footer.xml b/chrome/android/java/res/layout/send_tab_to_self_device_picker_footer.xml new file mode 100644 index 0000000..9bb390f --- /dev/null +++ b/chrome/android/java/res/layout/send_tab_to_self_device_picker_footer.xml
@@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2022 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. --> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:background="@drawable/rectangle_surface_1"> + + <View style="@style/HorizontalDivider" /> + + <org.chromium.chrome.browser.share.send_tab_to_self.ManageAccountDevicesLinkView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:paddingStart="29dp" + android:paddingEnd="34dp" /> + +</LinearLayout>
diff --git a/chrome/android/java/res/layout/send_tab_to_self_feature_unavailable_prompt.xml b/chrome/android/java/res/layout/send_tab_to_self_feature_unavailable_prompt.xml index a9ea20f..d885cb5 100644 --- a/chrome/android/java/res/layout/send_tab_to_self_feature_unavailable_prompt.xml +++ b/chrome/android/java/res/layout/send_tab_to_self_feature_unavailable_prompt.xml
@@ -11,45 +11,51 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="@dimen/min_touch_target_size" + android:paddingBottom="16dp" android:orientation="vertical"> - <ImageView - android:id="@+id/empty_state_image" - android:layout_height="wrap_content" - android:layout_width ="match_parent" - android:paddingTop="16dp" - android:contentDescription="@string/sharing_hub_no_devices_available_text" - app:srcCompat="@drawable/shared_clipboard_zero_state"/> + <ImageView + android:id="@+id/empty_state_image" + android:layout_height="wrap_content" + android:layout_width ="match_parent" + android:paddingTop="16dp" + android:paddingBottom="16dp" + android:contentDescription="@string/sharing_hub_no_devices_available_text" + app:srcCompat="@drawable/shared_clipboard_zero_state"/> - <TextView - android:layout_width="match_parent" - android:layout_height="@dimen/min_touch_target_size" - android:gravity="center" - android:paddingStart="30dp" - android:paddingEnd="30dp" - android:paddingTop="16dp" - android:ellipsize="end" - android:textAppearance="@style/TextAppearance.BlackToolbarTitle" - android:text="@string/send_tab_to_self_share_activity_title"/> + <TextView + android:layout_width="match_parent" + android:layout_height="@dimen/min_touch_target_size" + android:gravity="center" + android:paddingStart="32dp" + android:paddingEnd="32dp" + android:paddingBottom="16dp" + android:ellipsize="end" + android:textAppearance="@style/TextAppearance.BlackToolbarTitle" + android:includeFontPadding="false" + android:text="@string/send_tab_to_self_share_activity_title"/> - <TextView - android:id="@+id/empty_state_label" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center" - android:paddingStart="30dp" - android:paddingEnd="30dp" - android:paddingTop="16dp" - android:paddingBottom="32dp" - android:ellipsize="end" - android:textAppearance="@style/TextAppearance.TextLarge.Secondary" - android:text="@string/send_tab_to_self_when_signed_in_unavailable"/> + <TextView + android:id="@+id/empty_state_label" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:paddingStart="32dp" + android:paddingEnd="32dp" + android:includeFontPadding="false" + android:paddingBottom="16dp" + android:ellipsize="end" + android:textAppearance="@style/TextAppearance.TextLarge.Secondary" + android:text="@string/send_tab_to_self_when_signed_in_unavailable"/> - <!-- TODO(crbug.com/1295204): Make this visible by default after launch. --> - <org.chromium.chrome.browser.share.send_tab_to_self.ManageAccountDevicesLinkView - android:id="@+id/manage_account_devices_link" - android:visibility="gone" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingTop="16dp" /> + <!-- TODO(crbug.com/1295204): Make this visible by default after launch. --> + <org.chromium.chrome.browser.share.send_tab_to_self.ManageAccountDevicesLinkView + android:id="@+id/manage_account_devices_link" + android:visibility="gone" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="center" + android:paddingBottom="16dp" /> + </LinearLayout>
diff --git a/chrome/android/java/res/layout/send_tab_to_self_manage_devices_link.xml b/chrome/android/java/res/layout/send_tab_to_self_manage_devices_link.xml index 6526a0f..d55d842 100644 --- a/chrome/android/java/res/layout/send_tab_to_self_manage_devices_link.xml +++ b/chrome/android/java/res/layout/send_tab_to_self_manage_devices_link.xml
@@ -3,43 +3,22 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:background="@drawable/rectangle_surface_1"> - - <View - style="@style/HorizontalDivider" - android:layout_width="match_parent" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal" - android:paddingTop="10dp" - android:paddingBottom="10dp" - android:paddingStart="29dp" - android:paddingEnd="34dp"> +<merge xmlns:android="http://schemas.android.com/apk/res/android"> <org.chromium.components.browser_ui.widget.RoundedCornerImageView android:id="@+id/account_avatar" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center_vertical" /> + android:layout_height="wrap_content"/> <!-- The default android:breakStrategy is "high_quality", which tries to be - smart and ends up splitting email addresses containing ".". So use - "simple" instead. --> + smart and ends up splitting email addresses containing ".". So use + "simple" instead. --> <TextView android:id="@+id/manage_devices_link" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="@style/TextAppearance.TextMedium.Secondary" - android:gravity="center_vertical" android:breakStrategy="simple" - android:paddingStart="20dp" /> + android:paddingStart="8dp" /> - </LinearLayout> -</LinearLayout> +</merge>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java index eccfdfe..099ea03 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
@@ -18,6 +18,7 @@ import org.chromium.chrome.browser.flags.CachedFlag; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.notifications.chime.ChimeFeatures; +import org.chromium.chrome.browser.omaha.VersionNumberGetter; import org.chromium.chrome.browser.optimization_guide.OptimizationGuidePushNotificationManager; import org.chromium.chrome.browser.page_annotations.PageAnnotationsServiceConfig; import org.chromium.chrome.browser.paint_preview.StartupPaintPreviewHelper; @@ -181,6 +182,7 @@ add(TabUiFeatureUtilities.THUMBNAIL_ASPECT_RATIO); add(TabUiFeatureUtilities.GRID_TAB_SWITCHER_FOR_TABLETS_POLISH); add(TabUiFeatureUtilities.TAB_STRIP_TAB_WIDTH); + add(VersionNumberGetter.MIN_SDK_VERSION); } }; tryToCatchMissingParameters(fieldTrialsToCache);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java index 11a61b5..a0770a2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -167,6 +167,10 @@ private static final String ON_VERTICAL_SCROLL_EVENT_CALLBACK = "onVerticalScrollEvent"; private static final String ON_VERTICAL_SCROLL_EVENT_IS_DIRECTION_UP_EXTRA = "isDirectionUp"; + private static final String ON_GREATEST_SCROLL_PERCENTAGE_INCREASED_CALLBACK = + "onGreatestScrollPercentageIncreased"; + private static final String ON_GREATEST_SCROLL_PERCENTAGE_INCREASED_PERCENTAGE_EXTRA = + "scrollPercentage"; @IntDef({ParallelRequestStatus.NO_REQUEST, ParallelRequestStatus.SUCCESS, ParallelRequestStatus.FAILURE_NOT_INITIALIZED, @@ -1159,6 +1163,25 @@ } /** + * Notifies the application that the scroll percentage of the page reached a new maximum. + * Only the values that are multiples of 5 will be reported, and every value will be reported at + * most once. + * + * @param session The Binder object identifying the session. + * @param scrollPercentage The new scroll percentage. + */ + public void notifyGreatestScrollPercentageIncreased( + CustomTabsSessionToken session, int scrollPercentage) { + Bundle args = new Bundle(); + args.putInt(ON_GREATEST_SCROLL_PERCENTAGE_INCREASED_PERCENTAGE_EXTRA, scrollPercentage); + + if (safeExtraCallback(session, ON_GREATEST_SCROLL_PERCENTAGE_INCREASED_CALLBACK, args)) { + logCallback("extraCallback(" + ON_GREATEST_SCROLL_PERCENTAGE_INCREASED_CALLBACK + ")", + args); + } + } + + /** * Notifies the application of a navigation event. * * Delivers the {@link CustomTabsCallback#onNavigationEvent} callback to the application.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabController.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabController.java index ce2f6d2d..8a88ea5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabController.java
@@ -8,6 +8,7 @@ import android.content.Intent; import android.graphics.Color; +import android.graphics.Point; import android.os.Bundle; import android.text.TextUtils; import android.view.Window; @@ -17,6 +18,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.browser.customtabs.CustomTabsSessionToken; +import org.chromium.base.MathUtils; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.browser.ActivityTabProvider; @@ -60,7 +62,10 @@ import org.chromium.chrome.browser.translate.TranslateBridge; import org.chromium.content_public.browser.GestureListenerManager; import org.chromium.content_public.browser.GestureStateListener; +import org.chromium.content_public.browser.LoadCommittedDetails; +import org.chromium.content_public.browser.RenderCoordinates; import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.WebContentsObserver; import org.chromium.ui.base.ActivityWindowAndroid; import java.lang.annotation.Retention; @@ -116,6 +121,7 @@ private GestureStateListener mGestureStateListener; private ScrollState mScrollState; + private WebContentsObserver mWebContentsObserver; @Inject public CustomTabActivityTabController(AppCompatActivity activity, @@ -429,12 +435,15 @@ public void webContentsWillSwap(Tab tab) { if (ChromeFeatureList.isEnabled( ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS)) { - if (tab.getWebContents() != null) { - if (mGestureStateListener != null) { - GestureListenerManager.fromWebContents(tab.getWebContents()) - .removeListener(mGestureStateListener); - } - } + removeObserversFromWebContents(tab.getWebContents()); + } + } + + @Override + public void onDestroyed(Tab tab) { + if (ChromeFeatureList.isEnabled( + ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS)) { + removeObserversFromWebContents(tab.getWebContents()); } } }; @@ -462,6 +471,18 @@ mTabObserverRegistrar.registerTabObserver(observer); } + private void removeObserversFromWebContents(@Nullable WebContents webContents) { + if (webContents == null) return; + + if (mGestureStateListener != null) { + GestureListenerManager.fromWebContents(webContents) + .removeListener(mGestureStateListener); + } + if (mWebContentsObserver != null) { + webContents.removeObserver(mWebContentsObserver); + } + } + /** Sets the initial background color for the Tab, shown before the page content is ready. */ private void prepareTabBackground(final Tab tab) { if (!CustomTabIntentDataProvider.isTrustedCustomTab(mIntent, mSession)) return; @@ -510,6 +531,16 @@ } @Override + public void onScrollUpdateGestureConsumed(@Nullable Point rootScrollOffset) { + if (rootScrollOffset != null) { + RenderCoordinates renderCoordinates = + RenderCoordinates.fromWebContents(tab.getWebContents()); + mScrollState.onScrollUpdate( + rootScrollOffset.y, renderCoordinates.getMaxVerticalScrollPixInt()); + } + } + + @Override public void onVerticalScrollDirectionChanged( boolean directionUp, float currentScrollRatio) { mScrollState.onScrollDirectionChanged(directionUp); @@ -521,17 +552,32 @@ } }; } + if (mWebContentsObserver == null) { + mWebContentsObserver = new WebContentsObserver() { + @Override + public void navigationEntryCommitted(LoadCommittedDetails details) { + // TODO(https://crbug.com/1351026): Look into back navigation/scroll + // restoration to see if we need any changes to match PRD specs. + if (details.isMainFrame() && !details.isSameDocument()) { + mScrollState.resetMaxScrollPercentage(); + } + } + }; + } GestureListenerManager gestureListenerManager = GestureListenerManager.fromWebContents(tab.getWebContents()); if (!gestureListenerManager.hasListener(mGestureStateListener)) { gestureListenerManager.addListener(mGestureStateListener); } + tab.getWebContents().addObserver(mWebContentsObserver); } private class ScrollState { boolean mIsScrollActive; boolean mIsDirectionUp; + int mMaxScrollPercentage; + int mMaxReportedScrollPercentage; void onScrollStarted(boolean isDirectionUp) { assert !mIsScrollActive; @@ -540,6 +586,17 @@ mConnection.notifyVerticalScrollEvent(mSession, mIsDirectionUp); } + void onScrollUpdate(int verticalScrollOffset, int maxVerticalScrollOffset) { + if (mIsScrollActive) { + int scrollPercentage = + Math.round(((float) verticalScrollOffset / maxVerticalScrollOffset) * 100); + scrollPercentage = MathUtils.clamp(scrollPercentage, 0, 100); + if (scrollPercentage > mMaxScrollPercentage) { + mMaxScrollPercentage = scrollPercentage; + } + } + } + void onScrollDirectionChanged(boolean isDirectionUp) { if (mIsScrollActive && isDirectionUp != mIsDirectionUp) { mIsDirectionUp = isDirectionUp; @@ -548,7 +605,19 @@ } void onScrollEnded() { + int maxScrollPercentageFivesMultiple = + mMaxScrollPercentage - (mMaxScrollPercentage % 5); + if (maxScrollPercentageFivesMultiple > mMaxReportedScrollPercentage) { + mMaxReportedScrollPercentage = maxScrollPercentageFivesMultiple; + mConnection.notifyGreatestScrollPercentageIncreased( + mSession, mMaxReportedScrollPercentage); + } mIsScrollActive = false; } + + void resetMaxScrollPercentage() { + mMaxScrollPercentage = 0; + mMaxReportedScrollPercentage = 0; + } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java index 6d21fb3..7c36388 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java
@@ -12,12 +12,18 @@ import org.chromium.base.BuildInfo; import org.chromium.base.ThreadUtils; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.IntCachedFieldTrialParameter; /** * Stubbed class for getting version numbers from the rest of Chrome. Override the functions for * unit tests. */ public class VersionNumberGetter { + private static final String MIN_SDK_VERSION_PARAM = "min_sdk_version"; + public static final IntCachedFieldTrialParameter MIN_SDK_VERSION = + new IntCachedFieldTrialParameter(ChromeFeatureList.OMAHA_MIN_SDK_VERSION_ANDROID, + MIN_SDK_VERSION_PARAM, Build.VERSION_CODES.M); private static final class LazyHolder { private static final VersionNumberGetter INSTANCE = new VersionNumberGetter(); @@ -96,7 +102,7 @@ * @return Whether the current Android OS version is supported. */ public static boolean isCurrentOsVersionSupported() { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M; + return Build.VERSION.SDK_INT >= MIN_SDK_VERSION.getValue(); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFirstRunFragment.java index 27737bf..80a5b72c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFirstRunFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFirstRunFragment.java
@@ -214,10 +214,13 @@ private View inflateFragmentView(LayoutInflater inflater, Configuration configuration) { // Since the landscape view has two panes the minimum screenWidth to show it is set to - // 600dp per android guideline. + // 600dp for phones and 1000dp for tablets per android guideline. + final int minWidthForLandscape = + configuration.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE) ? 1000 + : 600; final SigninFirstRunView view = (SigninFirstRunView) inflater.inflate( configuration.orientation == Configuration.ORIENTATION_LANDSCAPE - && configuration.screenWidthDp >= 600 + && configuration.screenWidthDp >= minWidthForLandscape ? R.layout.signin_first_run_landscape_view : R.layout.signin_first_run_portrait_view, null, false);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java index 68f81a7..789f32a5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
@@ -13,6 +13,7 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.signin.SyncConsentActivityLauncherImpl; @@ -22,6 +23,7 @@ import org.chromium.chrome.browser.signin.services.SigninManager.SignInStateObserver; import org.chromium.chrome.browser.sync.SyncService; import org.chromium.chrome.browser.sync.SyncService.SyncStateChangedListener; +import org.chromium.chrome.browser.ui.signin.TangibleSyncCoordinator; import org.chromium.components.browser_ui.settings.ManagedPreferencesUtils; import org.chromium.components.prefs.PrefService; import org.chromium.components.signin.AccountManagerFacade; @@ -32,6 +34,7 @@ import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.user_prefs.UserPrefs; import org.chromium.ui.base.ViewUtils; +import org.chromium.ui.modaldialog.ModalDialogManagerHolder; /** * A preference that displays "Sign in to Chrome" when the user is not sign in, and displays @@ -156,9 +159,18 @@ setFragment(null); setIcon(AppCompatResources.getDrawable(getContext(), R.drawable.logo_avatar_anonymous)); setViewEnabled(true); - setOnPreferenceClickListener(pref - -> SyncConsentActivityLauncherImpl.get().launchActivityIfAllowed( - getContext(), SigninAccessPoint.SETTINGS_SYNC_OFF_ROW)); + setOnPreferenceClickListener(pref -> { + if (ChromeFeatureList.isEnabled(ChromeFeatureList.TANGIBLE_SYNC)) { + TangibleSyncCoordinator.start(getContext(), + ((ModalDialogManagerHolder) getContext()).getModalDialogManager(), + SyncConsentActivityLauncherImpl.get(), + SigninAccessPoint.SETTINGS_SYNC_OFF_ROW); + return true; + } else { + return SyncConsentActivityLauncherImpl.get().launchActivityIfAllowed( + getContext(), SigninAccessPoint.SETTINGS_SYNC_OFF_ROW); + } + }); if (!mWasGenericSigninPromoDisplayed) { RecordUserAction.record("Signin_Impression_FromSettings");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java index c83b183a..eaf5fc64 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
@@ -59,6 +59,7 @@ import org.chromium.chrome.test.util.browser.sync.SyncTestUtil; import org.chromium.components.externalauth.ExternalAuthUtils; import org.chromium.components.policy.test.annotations.Policies; +import org.chromium.components.signin.test.util.FakeAccountManagerFacade; import org.chromium.content_public.browser.test.util.TestThreadUtils; /** @@ -77,8 +78,10 @@ @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + // TODO(https://crbug.com/1352119): Use IdentityIntegrationTestRule instead. @Rule - public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule(); + public final AccountManagerTestRule mAccountManagerTestRule = + new AccountManagerTestRule(new FakeAccountManagerFacade(), null); // TODO(crbug.com/1311260): Consider using a test rule to ensure this gets terminated correctly. public FirstRunActivity mFirstRunActivity;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java index 8bbc9fa2..d14365a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
@@ -328,6 +328,34 @@ } @Test + @MediumTest + public void testSigninRowLaunchesSignInFlowForSignedOutAccounts() { + launchSettingsActivity(); + + onView(withText(R.string.sync_promo_turn_on_sync)).perform(click()); + + verify(mMockSyncConsentActivityLauncher) + .launchActivityIfAllowed( + any(Activity.class), eq(SigninAccessPoint.SETTINGS_SYNC_OFF_ROW)); + } + + @Test + @MediumTest + @EnableFeatures(ChromeFeatureList.TANGIBLE_SYNC) + public void testSigninRowLaunchesTangibleSignInFlowForSignedOutAccounts() { + launchSettingsActivity(); + + onView(withText(R.string.sync_promo_turn_on_sync)).perform(click()); + + onView(withText(R.string.signin_account_picker_dialog_title)) + .inRoot(isDialog()) + .check(matches(isDisplayed())); + onView(withText(R.string.signin_add_account_to_device)) + .inRoot(isDialog()) + .check(matches(isDisplayed())); + } + + @Test @SmallTest public void testSyncRowLaunchesSignInFlowForSignedInAccounts() { CoreAccountInfo accountInfo = mSyncTestRule.setUpAccountAndSignInForTesting();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java index 384c63a..ac24487 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
@@ -48,6 +48,7 @@ import org.chromium.base.test.BaseActivityTestRule; import org.chromium.base.test.util.ApplicationTestUtils; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.CommandLineFlags.Add; import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; @@ -83,9 +84,7 @@ * Render tests for sync consent fragment. */ @RunWith(ChromeJUnit4ClassRunner.class) -@CommandLineFlags. -Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, ChromeSwitches.FORCE_ENABLE_SIGNIN_FRE}) -@DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) +@Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, ChromeSwitches.FORCE_ENABLE_SIGNIN_FRE}) public class SyncConsentFragmentTest { private static final int RENDER_REVISION = 1; private static final String RENDER_DESCRIPTION = "Change button style"; @@ -165,6 +164,7 @@ @Test @LargeTest @Feature("RenderTest") + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testSyncConsentFragmentDefaultAccount() throws IOException { CoreAccountInfo accountInfo = mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); @@ -198,6 +198,41 @@ @Test @LargeTest @Feature("RenderTest") + @EnableFeatures({ChromeFeatureList.TANGIBLE_SYNC + ":group_id/2"}) + public void testTangibleSyncConsentFragmentVariationTwoDefaultAccount() throws IOException { + CoreAccountInfo accountInfo = + mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); + mSyncConsentActivity = ActivityTestUtils.waitForActivity( + InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> { + SyncConsentActivityLauncherImpl.get().launchActivityForPromoDefaultFlow( + mChromeActivityTestRule.getActivity(), + SigninAccessPoint.BOOKMARK_MANAGER, accountInfo.getEmail()); + }); + mRenderTestRule.render(mSyncConsentActivity.findViewById(R.id.fragment_container), + "tangible_sync_consent_fragment_variation_two_default_account"); + } + + @Test + @LargeTest + @Feature("RenderTest") + @EnableFeatures({ChromeFeatureList.TANGIBLE_SYNC + ":group_id/3"}) + public void testTangibleSyncConsentFragmentVariationThreeDefaultAccount() throws IOException { + CoreAccountInfo accountInfo = + mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); + mSyncConsentActivity = ActivityTestUtils.waitForActivity( + InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> { + SyncConsentActivityLauncherImpl.get().launchActivityForPromoDefaultFlow( + mChromeActivityTestRule.getActivity(), + SigninAccessPoint.BOOKMARK_MANAGER, accountInfo.getEmail()); + }); + mRenderTestRule.render(mSyncConsentActivity.findViewById(R.id.fragment_container), + "tangible_sync_consent_fragment_variation_three_default_account"); + } + + @Test + @LargeTest + @Feature("RenderTest") + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testSyncConsentFragmentNewAccount() throws IOException { mSyncConsentActivity = ActivityTestUtils.waitForActivity( InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> { @@ -212,6 +247,7 @@ @Test @LargeTest @Feature("RenderTest") + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testSyncConsentFragmentNotDefaultAccountWithPrimaryAccount() throws IOException { CoreAccountInfo accountInfo = mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); @@ -252,6 +288,7 @@ // This test is only relevant if child users do not have sync force-enabled (if they do, then // they can only ever access this fragment from the FRE). @EnableFeatures({ChromeFeatureList.ALLOW_SYNC_OFF_FOR_CHILD_ACCOUNTS}) + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testSyncConsentFragmentWithChildAccount() throws IOException { CoreAccountInfo accountInfo = mSigninTestRule.addChildTestAccountThenWaitForSignin(); mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); @@ -268,6 +305,7 @@ @Test @LargeTest @Feature("RenderTest") + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testFRESyncConsentFragmentWithNoAccountsOnDevice() throws IOException { HistogramDelta startPageHistogram = new HistogramDelta("Signin.SigninStartedAccessPoint", SigninAccessPoint.START_PAGE); @@ -286,6 +324,7 @@ @Test @LargeTest @Feature("RenderTest") + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testFRESyncConsentFragmentWithAdultAccount() throws IOException { HistogramDelta startPageHistogram = new HistogramDelta("Signin.SigninStartedAccessPoint", SigninAccessPoint.START_PAGE); @@ -325,8 +364,10 @@ @Test @LargeTest @Feature("RenderTest") - @DisableFeatures({ChromeFeatureList.ALLOW_SYNC_OFF_FOR_CHILD_ACCOUNTS}) - public void testFRESyncConsentFragmentWithChildAccount() throws IOException { + @DisableFeatures( + {ChromeFeatureList.ALLOW_SYNC_OFF_FOR_CHILD_ACCOUNTS, ChromeFeatureList.TANGIBLE_SYNC}) + public void + testFRESyncConsentFragmentWithChildAccount() throws IOException { HistogramDelta startPageHistogram = new HistogramDelta("Signin.SigninStartedAccessPoint", SigninAccessPoint.START_PAGE); mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); @@ -351,6 +392,7 @@ @LargeTest @Feature("RenderTest") @EnableFeatures({ChromeFeatureList.ALLOW_SYNC_OFF_FOR_CHILD_ACCOUNTS}) + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testFRESyncConsentFragmentWithChildAccountAllowSyncOff() throws IOException { HistogramDelta startPageHistogram = new HistogramDelta("Signin.SigninStartedAccessPoint", SigninAccessPoint.START_PAGE); @@ -377,6 +419,7 @@ @Feature("RenderTest") @CommandLineFlags.Remove({ChromeSwitches.FORCE_ENABLE_SIGNIN_FRE}) @EnableFeatures({ChromeFeatureList.ALLOW_SYNC_OFF_FOR_CHILD_ACCOUNTS}) + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testFRESyncConsentFragmentWithChildAccountLegacy() throws IOException { HistogramDelta startPageHistogram = new HistogramDelta("Signin.SigninStartedAccessPoint", SigninAccessPoint.START_PAGE); @@ -401,6 +444,7 @@ @Test @LargeTest @Feature("RenderTest") + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testFRESyncConsentFragmentWhenSignedInWithoutSync() throws IOException { mSigninTestRule.addTestAccountThenSignin(); CustomSyncConsentFirstRunFragment fragment = new CustomSyncConsentFirstRunFragment(); @@ -416,6 +460,7 @@ @Test @MediumTest + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testFRESyncConsentFragmentWhenSelectedAccountIsRemoved() { final CoreAccountInfo defaultAccount = mSigninTestRule.addAccount("test.default.account@gmail.com"); @@ -438,6 +483,7 @@ @Test @LargeTest @Feature("RenderTest") + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testFRESyncConsentFragmentWhenSignedInWithoutSyncDynamically() throws IOException { CustomSyncConsentFirstRunFragment fragment = new CustomSyncConsentFirstRunFragment(); Bundle bundle = new Bundle(); @@ -459,6 +505,7 @@ @Test @LargeTest + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testClickingSettingsDoesNotSetFirstSetupComplete() { CoreAccountInfo accountInfo = mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); @@ -534,6 +581,7 @@ @Test @LargeTest + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testFRESyncConsentFragmentWithoutSelectedAccount() { CustomSyncConsentFirstRunFragment fragment = new CustomSyncConsentFirstRunFragment(); Bundle bundle = new Bundle(); @@ -549,6 +597,7 @@ @Test @MediumTest + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testSyncConsentFragmentWithDefaultFlow() { HistogramDelta settingsHistogram = new HistogramDelta("Signin.SigninStartedAccessPoint", SigninAccessPoint.SETTINGS); @@ -564,6 +613,7 @@ @Test @MediumTest + @DisableFeatures({ChromeFeatureList.TANGIBLE_SYNC}) public void testSelectNonDefaultAccountInAccountPickerDialog() { HistogramDelta bookmarkHistogram = new HistogramDelta( "Signin.SigninStartedAccessPoint", SigninAccessPoint.BOOKMARK_MANAGER);
diff --git a/chrome/android/junit/DEPS b/chrome/android/junit/DEPS index 3051df2..86e98636 100644 --- a/chrome/android/junit/DEPS +++ b/chrome/android/junit/DEPS
@@ -41,4 +41,5 @@ "-content/public/android/java", "+content/public/android/java/src/org/chromium/content_public", + "+content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java", ]
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabControllerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabControllerUnitTest.java index 1526fb7..7db7c22f 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabControllerUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/content/CustomTabActivityTabControllerUnitTest.java
@@ -22,7 +22,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.chromium.url.JUnitTestGURLs.URL_1; + import android.content.Intent; +import android.graphics.Point; import android.os.Bundle; import org.junit.After; @@ -44,8 +47,12 @@ import org.chromium.chrome.test.util.browser.Features.DisableFeatures; import org.chromium.components.embedder_support.util.ShadowUrlUtilities; import org.chromium.content.browser.GestureListenerManagerImpl; +import org.chromium.content.browser.RenderCoordinatesImpl; import org.chromium.content_public.browser.GestureStateListener; +import org.chromium.content_public.browser.LoadCommittedDetails; import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.WebContentsObserver; +import org.chromium.url.JUnitTestGURLs; /** * Tests for {@link CustomTabActivityTabController}. @@ -61,23 +68,30 @@ @Rule public Features.JUnitProcessor processor = new Features.JUnitProcessor(); + private static final int SCROLL_EXTENT = 100; + private CustomTabActivityTabController mTabController; @Mock private Profile mProfile; @Mock private GestureListenerManagerImpl mGestureListenerManagerImpl; + @Mock + private RenderCoordinatesImpl mRenderCoordinatesImpl; @Before public void setUp() { MockitoAnnotations.initMocks(this); Profile.setLastUsedProfileForTesting(mProfile); mTabController = env.createTabController(); + when(mRenderCoordinatesImpl.getMaxVerticalScrollPixInt()).thenReturn(100); GestureListenerManagerImpl.setInstanceForTesting(mGestureListenerManagerImpl); + RenderCoordinatesImpl.setInstanceForTesting(mRenderCoordinatesImpl); } @After public void tearDown() { + RenderCoordinatesImpl.setInstanceForTesting(null); GestureListenerManagerImpl.setInstanceForTesting(null); } @@ -235,11 +249,7 @@ @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) public void removesGestureStateListenerWhenWebContentsWillSwap() { env.reachNativeInit(mTabController); - - ArgumentCaptor<GestureStateListener> gestureStateListenerArgumentCaptor = - ArgumentCaptor.forClass(GestureStateListener.class); - verify(mGestureListenerManagerImpl) - .addListener(gestureStateListenerArgumentCaptor.capture()); + GestureStateListener listener = captureGestureStateListener(); ArgumentCaptor<TabObserver> tabObserverArgumentCaptor = ArgumentCaptor.forClass(TabObserver.class); @@ -249,25 +259,20 @@ for (TabObserver observer : tabObserverArgumentCaptor.getAllValues()) { observer.webContentsWillSwap(env.tabProvider.getTab()); } - verify(mGestureListenerManagerImpl) - .removeListener(gestureStateListenerArgumentCaptor.getValue()); + verify(mGestureListenerManagerImpl).removeListener(listener); } @Test @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) public void sendsSignalsForScrollStartThenEnd() { env.reachNativeInit(mTabController); - - ArgumentCaptor<GestureStateListener> gestureStateListenerArgumentCaptor = - ArgumentCaptor.forClass(GestureStateListener.class); - verify(mGestureListenerManagerImpl) - .addListener(gestureStateListenerArgumentCaptor.capture()); + GestureStateListener listener = captureGestureStateListener(); // Start scrolling down. - gestureStateListenerArgumentCaptor.getValue().onScrollStarted(0, 100, false); + listener.onScrollStarted(0, SCROLL_EXTENT, false); verify(env.connection).notifyVerticalScrollEvent(eq(env.session), eq(false)); // End scrolling at 50%. - gestureStateListenerArgumentCaptor.getValue().onScrollEnded(50, 100); + listener.onScrollEnded(50, SCROLL_EXTENT); // We shouldn't make any more calls. verify(env.connection, times(1)).notifyVerticalScrollEvent(eq(env.session), anyBoolean()); } @@ -276,24 +281,251 @@ @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) public void sendsSignalsForScrollStartDirectionChangeThenEnd() { env.reachNativeInit(mTabController); + GestureStateListener listener = captureGestureStateListener(); + // Start by scrolling down. + listener.onScrollStarted(0, SCROLL_EXTENT, false); + verify(env.connection).notifyVerticalScrollEvent(eq(env.session), eq(false)); + // Change direction to up at 10%. + listener.onVerticalScrollDirectionChanged(true, .1f); + verify(env.connection).notifyVerticalScrollEvent(eq(env.session), eq(true)); + // Change direction to down at 5%. + listener.onVerticalScrollDirectionChanged(false, .05f); + verify(env.connection, times(2)).notifyVerticalScrollEvent(eq(env.session), eq(false)); + // End scrolling at 50%. + listener.onScrollEnded(50, SCROLL_EXTENT); + // We shouldn't make any more calls. + verify(env.connection, times(3)).notifyVerticalScrollEvent(eq(env.session), anyBoolean()); + } + + @Test + @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) + public void doesNotSendMaxScrollSignalForZeroPercent() { + env.reachNativeInit(mTabController); + + // We shouldn't make any calls. + verify(env.connection, never()) + .notifyGreatestScrollPercentageIncreased(eq(env.session), anyInt()); + } + + @Test + @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) + public void onlySendsMaxScrollSignalAfterScrollEnd() { + env.reachNativeInit(mTabController); + GestureStateListener listener = captureGestureStateListener(); + + // Start by scrolling down. + listener.onScrollStarted(0, SCROLL_EXTENT, false); + // Scroll down to 55%. + listener.onScrollUpdateGestureConsumed(new Point(0, 55)); + // Scroll up to 30%. + listener.onScrollUpdateGestureConsumed(new Point(0, 30)); + + // We shouldn't make any calls at this point. + verify(env.connection, never()) + .notifyGreatestScrollPercentageIncreased(eq(env.session), anyInt()); + + // End scrolling. + listener.onScrollEnded(30, SCROLL_EXTENT); + // Now we should make the call. + verify(env.connection, times(1)) + .notifyGreatestScrollPercentageIncreased(eq(env.session), eq(55)); + } + + @Test + @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) + public void onlySendsMaxScrollSignalForFivesMultiples() { + env.reachNativeInit(mTabController); + GestureStateListener listener = captureGestureStateListener(); + + // Start by scrolling down. + listener.onScrollStarted(0, SCROLL_EXTENT, false); + // Scroll down to 3%. + listener.onScrollUpdateGestureConsumed(new Point(0, 3)); + // End scrolling. + listener.onScrollEnded(3, SCROLL_EXTENT); + // We shouldn't make any calls at this point. + verify(env.connection, never()) + .notifyGreatestScrollPercentageIncreased(eq(env.session), anyInt()); + + // Start scrolling down again. + listener.onScrollStarted(3, SCROLL_EXTENT, false); + // Scroll down to 8%. + listener.onScrollUpdateGestureConsumed(new Point(0, 8)); + // End scrolling. + listener.onScrollEnded(8, SCROLL_EXTENT); + // We should make a call for 5%. + verify(env.connection, times(1)) + .notifyGreatestScrollPercentageIncreased(eq(env.session), eq(5)); + + // Start scrolling down again. + listener.onScrollStarted(8, SCROLL_EXTENT, false); + // Scroll down to 94%. + listener.onScrollUpdateGestureConsumed(new Point(0, 94)); + // End scrolling. + listener.onScrollEnded(94, SCROLL_EXTENT); + // We should make a call for 90%. + verify(env.connection, times(1)) + .notifyGreatestScrollPercentageIncreased(eq(env.session), eq(90)); + } + + @Test + @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) + public void doesNotSendSignalForLowerPercentage() { + env.reachNativeInit(mTabController); + GestureStateListener listener = captureGestureStateListener(); + + // Start by scrolling down. + listener.onScrollStarted(0, SCROLL_EXTENT, false); + // Scroll down to 63%. + listener.onScrollUpdateGestureConsumed(new Point(0, 63)); + // End scrolling. + listener.onScrollEnded(63, SCROLL_EXTENT); + // We should make a call for 60%. + verify(env.connection, times(1)) + .notifyGreatestScrollPercentageIncreased(eq(env.session), eq(60)); + clearInvocations(env.connection); + + // Now scroll back up. + listener.onScrollStarted(63, SCROLL_EXTENT, true); + // Scroll up to 30%. + listener.onScrollUpdateGestureConsumed(new Point(0, 30)); + // End scrolling. + listener.onScrollEnded(30, SCROLL_EXTENT); + + // We shouldn't make any more calls since the max didn't change. + verify(env.connection, never()) + .notifyGreatestScrollPercentageIncreased(eq(env.session), anyInt()); + } + + @Test + @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) + public void doesNotSendSignalEqualToPreviousMax() { + env.reachNativeInit(mTabController); + GestureStateListener listener = captureGestureStateListener(); + + // Start by scrolling down. + listener.onScrollStarted(0, SCROLL_EXTENT, false); + // Scroll down to 50%. + listener.onScrollUpdateGestureConsumed(new Point(0, 50)); + // End scrolling. + listener.onScrollEnded(50, SCROLL_EXTENT); + + // Now scroll up, then back down to 50%. + listener.onScrollStarted(50, SCROLL_EXTENT, true); + // Scroll up to 30%. + listener.onScrollUpdateGestureConsumed(new Point(0, 30)); + // Back down to 50%. + listener.onScrollUpdateGestureConsumed(new Point(0, 50)); + // End scrolling. + listener.onScrollEnded(50, SCROLL_EXTENT); + + // There should be only one call. + verify(env.connection, times(1)) + .notifyGreatestScrollPercentageIncreased(eq(env.session), eq(50)); + } + + @Test + @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) + public void resetsMaxOnNavigation_MainFrame_NewDocument() { + env.reachNativeInit(mTabController); + GestureStateListener gestureStateListener = captureGestureStateListener(); + WebContentsObserver webContentsObserver = captureWebContentsObserver(); + + // Scroll down to 50%. + gestureStateListener.onScrollStarted(0, SCROLL_EXTENT, false); + gestureStateListener.onScrollUpdateGestureConsumed(new Point(0, 50)); + gestureStateListener.onScrollEnded(50, SCROLL_EXTENT); + + // Verify 50% is reported. + verify(env.connection).notifyGreatestScrollPercentageIncreased(eq(env.session), eq(50)); + clearInvocations(env.connection); + + LoadCommittedDetails details = new LoadCommittedDetails(0, JUnitTestGURLs.getGURL(URL_1), + false, /*isSameDocument=*/false, /*isMainFrame=*/true, 200); + webContentsObserver.navigationEntryCommitted(details); + + // Scroll down to 10%. + gestureStateListener.onScrollStarted(0, SCROLL_EXTENT, false); + gestureStateListener.onScrollUpdateGestureConsumed(new Point(0, 10)); + gestureStateListener.onScrollEnded(10, SCROLL_EXTENT); + + // Verify 10% is reported. + verify(env.connection).notifyGreatestScrollPercentageIncreased(eq(env.session), eq(10)); + } + + @Test + @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) + public void doesNotResetMaxOnNavigation_MainFrame_SameDocument() { + env.reachNativeInit(mTabController); + GestureStateListener gestureStateListener = captureGestureStateListener(); + WebContentsObserver webContentsObserver = captureWebContentsObserver(); + + // Scroll down to 30%. + gestureStateListener.onScrollStarted(0, SCROLL_EXTENT, false); + gestureStateListener.onScrollUpdateGestureConsumed(new Point(0, 30)); + gestureStateListener.onScrollEnded(30, SCROLL_EXTENT); + + // Verify 30% is reported. + verify(env.connection).notifyGreatestScrollPercentageIncreased(eq(env.session), eq(30)); + clearInvocations(env.connection); + + LoadCommittedDetails details = new LoadCommittedDetails(0, JUnitTestGURLs.getGURL(URL_1), + false, /*isSameDocument=*/true, /*isMainFrame=*/true, 200); + webContentsObserver.navigationEntryCommitted(details); + + // Scroll down to 10%. + gestureStateListener.onScrollStarted(0, SCROLL_EXTENT, false); + gestureStateListener.onScrollUpdateGestureConsumed(new Point(0, 10)); + gestureStateListener.onScrollEnded(10, SCROLL_EXTENT); + + // Verify % isn't reported. + verify(env.connection, never()) + .notifyGreatestScrollPercentageIncreased(eq(env.session), anyInt()); + } + + @Features.EnableFeatures({ChromeFeatureList.CCT_REAL_TIME_ENGAGEMENT_SIGNALS}) + public void doesNotResetMaxOnNavigation_SubFrame_NewDocument() { + env.reachNativeInit(mTabController); + GestureStateListener gestureStateListener = captureGestureStateListener(); + WebContentsObserver webContentsObserver = captureWebContentsObserver(); + + // Scroll down to 90%. + gestureStateListener.onScrollStarted(0, SCROLL_EXTENT, false); + gestureStateListener.onScrollUpdateGestureConsumed(new Point(0, 90)); + gestureStateListener.onScrollEnded(90, SCROLL_EXTENT); + + // Verify 90% is reported. + verify(env.connection).notifyGreatestScrollPercentageIncreased(eq(env.session), eq(90)); + clearInvocations(env.connection); + + LoadCommittedDetails details = new LoadCommittedDetails(0, JUnitTestGURLs.getGURL(URL_1), + false, /*isSameDocument=*/false, /*isMainFrame=*/false, 200); + webContentsObserver.navigationEntryCommitted(details); + + // Scroll down to 50%. + gestureStateListener.onScrollStarted(0, SCROLL_EXTENT, false); + gestureStateListener.onScrollUpdateGestureConsumed(new Point(0, 50)); + gestureStateListener.onScrollEnded(50, SCROLL_EXTENT); + + // Verify % isn't reported. + verify(env.connection, never()) + .notifyGreatestScrollPercentageIncreased(eq(env.session), anyInt()); + } + + private GestureStateListener captureGestureStateListener() { ArgumentCaptor<GestureStateListener> gestureStateListenerArgumentCaptor = ArgumentCaptor.forClass(GestureStateListener.class); verify(mGestureListenerManagerImpl) .addListener(gestureStateListenerArgumentCaptor.capture()); + return gestureStateListenerArgumentCaptor.getValue(); + } - // Start by scrolling down. - gestureStateListenerArgumentCaptor.getValue().onScrollStarted(0, 100, false); - verify(env.connection).notifyVerticalScrollEvent(eq(env.session), eq(false)); - // Change direction to up at 10%. - gestureStateListenerArgumentCaptor.getValue().onVerticalScrollDirectionChanged(true, .1f); - verify(env.connection).notifyVerticalScrollEvent(eq(env.session), eq(true)); - // Change direction to down at 5%. - gestureStateListenerArgumentCaptor.getValue().onVerticalScrollDirectionChanged(false, .05f); - verify(env.connection, times(2)).notifyVerticalScrollEvent(eq(env.session), eq(false)); - // End scrolling at 50%. - gestureStateListenerArgumentCaptor.getValue().onScrollEnded(50, 100); - // We shouldn't make any more calls. - verify(env.connection, times(3)).notifyVerticalScrollEvent(eq(env.session), anyBoolean()); + private WebContentsObserver captureWebContentsObserver() { + ArgumentCaptor<WebContentsObserver> webContentsObserverArgumentCaptor = + ArgumentCaptor.forClass(WebContentsObserver.class); + WebContents webContents = env.tabProvider.getTab().getWebContents(); + verify(webContents).addObserver(webContentsObserverArgumentCaptor.capture()); + return webContentsObserverArgumentCaptor.getValue(); } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java index 968ce8a..64bc4cb 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedSurfaceMediatorTest.java
@@ -334,7 +334,7 @@ PropertyModel model = SectionHeaderListProperties.create(TOOLBAR_HEIGHT); mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOR_YOU, model); mFeedSurfaceMediator.updateContent(); - when(mIdentityManager.hasPrimaryAccount(anyInt())).thenReturn(true); + when(mFeedServiceBridgeJniMock.isSignedIn()).thenReturn(true); when(mUrlService.isDefaultSearchEngineGoogle()).thenReturn(true); when(mPrefService.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(true); @@ -353,7 +353,7 @@ mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOR_YOU, model); mFeedSurfaceMediator.updateContent(); - when(mIdentityManager.hasPrimaryAccount(anyInt())).thenReturn(true); + when(mFeedServiceBridgeJniMock.isSignedIn()).thenReturn(true); when(mUrlService.isDefaultSearchEngineGoogle()).thenReturn(true); when(mPrefService.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(false); @@ -372,7 +372,7 @@ mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOR_YOU, model); mFeedSurfaceMediator.updateContent(); - when(mIdentityManager.hasPrimaryAccount(anyInt())).thenReturn(false); + when(mFeedServiceBridgeJniMock.isSignedIn()).thenReturn(false); when(mUrlService.isDefaultSearchEngineGoogle()).thenReturn(true); when(mPrefService.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(true); @@ -391,7 +391,7 @@ mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOR_YOU, model); mFeedSurfaceMediator.updateContent(); - when(mIdentityManager.hasPrimaryAccount(anyInt())).thenReturn(false); + when(mFeedServiceBridgeJniMock.isSignedIn()).thenReturn(false); when(mUrlService.isDefaultSearchEngineGoogle()).thenReturn(true); when(mPrefService.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(false); @@ -410,7 +410,7 @@ when(mPrefService.getBoolean(Pref.ENABLE_SNIPPETS)).thenReturn(true); mFeedSurfaceMediator.updateContent(); - when(mIdentityManager.hasPrimaryAccount(anyInt())).thenReturn(true); + when(mFeedServiceBridgeJniMock.isSignedIn()).thenReturn(true); when(mUrlService.isDefaultSearchEngineGoogle()).thenReturn(false); when(mPrefService.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(true); @@ -429,7 +429,7 @@ mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOR_YOU, model); mFeedSurfaceMediator.updateContent(); - when(mIdentityManager.hasPrimaryAccount(anyInt())).thenReturn(true); + when(mFeedServiceBridgeJniMock.isSignedIn()).thenReturn(true); when(mUrlService.isDefaultSearchEngineGoogle()).thenReturn(false); when(mPrefService.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(false); @@ -448,7 +448,7 @@ mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOR_YOU, model); mFeedSurfaceMediator.updateContent(); - when(mIdentityManager.hasPrimaryAccount(anyInt())).thenReturn(false); + when(mFeedServiceBridgeJniMock.isSignedIn()).thenReturn(false); when(mUrlService.isDefaultSearchEngineGoogle()).thenReturn(false); when(mPrefService.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(true); @@ -467,7 +467,7 @@ mFeedSurfaceMediator = createMediator(FeedSurfaceCoordinator.StreamTabId.FOR_YOU, model); mFeedSurfaceMediator.updateContent(); - when(mIdentityManager.hasPrimaryAccount(anyInt())).thenReturn(false); + when(mFeedServiceBridgeJniMock.isSignedIn()).thenReturn(false); when(mUrlService.isDefaultSearchEngineGoogle()).thenReturn(false); when(mPrefService.getBoolean(Pref.ARTICLES_LIST_VISIBLE)).thenReturn(true);
diff --git a/chrome/android/modules/buildflags.gni b/chrome/android/modules/buildflags.gni index 5cb4983..b201a5b 100644 --- a/chrome/android/modules/buildflags.gni +++ b/chrome/android/modules/buildflags.gni
@@ -10,3 +10,6 @@ # If true, lld is used to partition feature code into separate libraries, which # in turn are included in Dynamic Feature Modules. use_native_partitions = is_android && is_clang && use_lld && !is_component_build + +feature_module_vr_android_manifest_path = + "$root_gen_dir/chrome/android/chrome_public_features/vr/AndroidManifest.xml"
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 37ed5959..df74295 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -13498,7 +13498,7 @@ Successfully changed the compromised password </message> <message name="IDS_AUTOFILL_ASSISTANT_PASSWORD_CHANGE_SUCCESSFULLY_CHANGED_PASSWORD_DESCRIPTION" desc="The description shown on the side panel after an Automated Password Change flow has been succeeded." translateable="false" > - Check your passwords any time in <ph name="GOOGLE_PASSWORD_MANAGER">$1<ex>Google Password Manager</ex></ph>. + Check your passwords anytime in <ph name="GOOGLE_PASSWORD_MANAGER">$1<ex>Google Password Manager</ex></ph>. </message> <message name="IDS_AUTOFILL_ASSISTANT_PASSWORD_CHANGE_SUCCESSFULLY_CHANGED_PASSWORD_CLOSE_SIDE_PANEL" desc="The label of the button shown in the side panel after a sucessfull run. Once a user clicks on it, the side panel will close." translateable="false"> Done
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb index 83d85a98..ff091b3 100644 --- a/chrome/app/resources/chromium_strings_am.xtb +++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -166,7 +166,7 @@ <translation id="4748217263233248895">ለChromium ልዩ የደህንነት ዝማኔ ተፈጻሚ ተደርጓል። አሁን ዳግም ያስጀምሩ እና የእርስዎን ትሮች ወደ ነበሩበት እንመልሳለን።</translation> <translation id="4765210420921718862">በChromium ቅንብሮች ውስጥ ሐሳብዎን በማንኛውም ጊዜ መቀየር ይችላሉ። ሙከራዎቹ ማስታወቂያዎች የሚስተናገዱበት መንገድ ጋር አብረው ይሄዳሉ፣ ስለሆነም ለውጦችን ወዲያውኑ ማየት አይችሉም።</translation> <translation id="4788777615168560705">Chromium የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም። ከ24 ሰዓቶች በኋላ እንደገና ይሞክሩ ወይም <ph name="BEGIN_LINK" />በGoogle መለያዎ ውስጥ የይለፍ ቃላትን ይፈትሹ<ph name="END_LINK" />።</translation> -<translation id="479167709087336770">ይህ በ Google ፍለጋ ውስጥ ጥቅም ላይ ጋር ተመሳሳይ የፊደል አራሚ ይጠቀማል። በአሳሽ ውስጥ የሚተይቡት ጽሑፍ ወደ Google ይላካል። ይህን ባህሪ ሁልጊዜ በቅንብሮች ውስጥ መለወጥ ይችላሉ።</translation> +<translation id="479167709087336770">ይህ በ Google ፍለጋ ውስጥ ጥቅም ላይ ጋር ተመሳሳይ የፊደል አራሚ ይጠቀማል። በአሳሽ ውስጥ የሚተይቡት ጽሁፍ ወደ Google ይላካል። ይህን ባህሪ ሁልጊዜ በቅንብሮች ውስጥ መለወጥ ይችላሉ።</translation> <translation id="4888717733111232871">Chromium ለmDNS ትራፊክ ለመፍቀድ የውስጥ ደንብ።</translation> <translation id="4893347770495441059">&Chromiumን ለማዘመን ዳግም ያስነሱት</translation> <translation id="4943838377383847465">Chromium በጀርባ ሁነታ ላይ ነው።</translation> @@ -240,7 +240,7 @@ <translation id="6475912303565314141">እንዲሁም Chromiumን ሲጀምሩት የሚታየውን ገጽ ይቆጣጠራል።</translation> <translation id="6510925080656968729">Chromiumን ያራግፉ</translation> <translation id="6542839706527980775">እያንዳንዱ መገለጫ እንደ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎችም ያሉ የራሱ የChromium መረጃዎችን ይይዛል</translation> -<translation id="6570579332384693436">የሥርዓተ ፊደል አጻጻፍ ስህተቶችን ለማስተካከል፣ Chromium እርስዎ በጽሑፍ መስኮች ውስጥ የሚተይቡትን ጽሑፍ ወደ Google ይልካል</translation> +<translation id="6570579332384693436">የሥርዓተ ፊደል አጻጻፍ ስህተቶችን ለማስተካከል፣ Chromium እርስዎ በጽሁፍ መስኮች ውስጥ የሚተይቡትን ጽሁፍ ወደ Google ይልካል</translation> <translation id="6598877126913850652">ወደ የChromium ማሳወቂያ ቅንብሮች ይሂዱ</translation> <translation id="6613594504749178791">ለውጦችዎ Chromium በሚያስጀምሩበት ቀጣዩ ጊዜ ላይ ይተገበራሉ።</translation> <translation id="665732753414869868">Chromium የዙሪያዎን የ3ል ካርታ ለመፍጠር የካሜራ ፈቃድ ያስፈልገዋል</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 36d352d..c69f7e0 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -513,6 +513,7 @@ <translation id="1480663089572535854">Jy kan teruggaan om die toewysing vir "Kies" te verander. Jy kan altyd outskandeer in Instellings afskakel.</translation> <translation id="1481537595330271162">Kon nie skyfgrootte verander nie</translation> <translation id="1482626744466814421">Boekmerk hierdie oortjie …</translation> +<translation id="1482772681918035149">wysig wagwoorde</translation> <translation id="1483493594462132177">Stuur</translation> <translation id="1484979925941077974">Werf gebruik tans Bluetooth</translation> <translation id="1485015260175968628">Dit kan nou:</translation> @@ -527,6 +528,7 @@ <translation id="1500801317528437432">Kom meer te wete oor ongesteunde Chrome-programme</translation> <translation id="150411034776756821">Verwyder <ph name="SITE" /></translation> <translation id="1504551620756424144">Gedeelde vouers is in Windows beskikbaar by <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">voer wagwoorde uit</translation> <translation id="1506061864768559482">Soekenjin</translation> <translation id="1507170440449692343">Hierdie bladsy word gekeer om by jou kamera in te gaan.</translation> <translation id="1507246803636407672">Gooi weg</translation> @@ -1759,6 +1761,7 @@ <translation id="2602501489742255173">Swiep op om te begin</translation> <translation id="2603115962224169880">Maak rekenaar skoon</translation> <translation id="2603355571917519942">Voice Match is gereed</translation> +<translation id="2604129989323098489">Werwe vra gewoonlik vir inligting oor jou skerms sodat hulle vensters intelligent kan oopmaak en plaas, soos om dokumente of volskerminhoud langs mekaar te wys.</translation> <translation id="2604255671529671813">Netwerkverbinding-fout</translation> <translation id="2605668923777146443">Gaan na <ph name="LINK_BEGIN" />Instellings<ph name="LINK_END" /> om jou opsies vir Beter Saam te sien.</translation> <translation id="2606246518223360146">Koppel data</translation> @@ -2975,6 +2978,7 @@ <translation id="3778740492972734840">Ontwikkelaarnutsgoed</translation> <translation id="3778868487658107119">Vra dit vrae. Sê dit aan om dinge te doen. Dis jou eie persoonlike Google en dis altyd gereed om te help.</translation> <translation id="3781742599892759500">Linux-mikrofoontoegang</translation> +<translation id="3783889407390048282">Maak spasie beskikbaar om te keer dat jy toegang tot Android verloor.</translation> <translation id="3784472333786002075">Webkoekies is lêers wat deur webwerwe geskep word. Daar is twee soorte webkoekies: Eersteparty-webkoekies word geskep deur die werf wat jy besoek. Die werf word in die adresbalk gewys. Derdeparty-webkoekies word deur ander werwe geskep. Hierdie werwe besit van die inhoud, soos advertensies of prente, wat jy sien op die webwerf wat jy besoek.</translation> <translation id="3785308913036335955">Wys programkortpad</translation> <translation id="3785727820640310185">Gestoorde wagwoorde vir hierde werf</translation> @@ -4288,6 +4292,7 @@ <translation id="5066100345385738837">Bestuur Veilige DNS in Chrome-bedryfstelselinstellings</translation> <translation id="5067399438976153555">Altyd aan</translation> <translation id="5067867186035333991">Vra of <ph name="HOST" /> by jou mikrofoon wil ingaan</translation> +<translation id="5068553687099139861">wys wagwoorde</translation> <translation id="5068918910148307423">Moenie werwe wat onlangs toegemaak is, toelaat om data klaar te stuur en te ontvang nie</translation> <translation id="5068919226082848014">Pizza</translation> <translation id="5070710277167211639">Gradeer navigasie op na HTTPS en waarsku jou voordat werwe gelaai word wat dit nie ondersteun nie</translation> @@ -5392,6 +5397,7 @@ <translation id="6130692320435119637">Voeg Wi-Fi by</translation> <translation id="6130887916931372608">Sleutelbordsleutel</translation> <translation id="6135823405800500595">Maak seker dat jou foon in die omtrek is en ontsluit is, en dat Bluetooth en wi-fi aangeskakel is</translation> +<translation id="6135826623269483856">Word nie toegelaat om vensters op al jou skerms te bestuur nie</translation> <translation id="6136114942382973861">Maak aflaaibalk toe</translation> <translation id="6136287496450963112">Jou sekuriteitsleutel word nie met 'n PIN beskerm nie. As jy vingerafdrukke wil bestuur, moet jy eers 'n PIN skep.</translation> <translation id="6138680304137685902">X9.62 ECDSA-handtekening met SHA-384</translation> @@ -6439,6 +6445,7 @@ <translation id="7152478047064750137">Hierdie uitbreiding vereis geen spesiale toestemmings nie</translation> <translation id="7154130902455071009">Verander jou beginblad na: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Bestaande foto in kamera of lêer</translation> +<translation id="7159953856712257647">By verstel geïnstalleer</translation> <translation id="7160182524506337403">Jy kan nou jou foon se kennisgewings bekyk</translation> <translation id="7163202347044721291">Verifieer tans aktiveringkode …</translation> <translation id="716640248772308851">"<ph name="EXTENSION" />" kan prente, video en klanklêers in die gemerkte liggings lees.</translation> @@ -7398,6 +7405,7 @@ <ph name="BEGIN_PARAGRAPH3" />Jy kan hierdie diens in Instellings afskakel.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Oortjies</translation> <translation id="8076835018653442223">Toegang tot plaaslike lêers op jou toestel is deur jou administrateur gedeaktiveer</translation> +<translation id="80798452873915119">Werwe kan vra om vensters op al jou skerms te bestuur</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Jou sessie word bestuur deur <ph name="MANAGER_NAME" />. Administrateurs kan jou profiel uitvee en ook jou netwerkverkeer monitor.</translation> <translation id="8081989000209387414">Deaktiveer ADB-ontfouting?</translation> @@ -7537,6 +7545,7 @@ <translation id="820568752112382238">Mees besoekte werwe</translation> <translation id="8206745257863499010">Blues</translation> <translation id="8206859287963243715">Sellulêr</translation> +<translation id="8208216423136871611">Moenie stoor nie</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nuwe kennisgewing}other{# nuwe kennisgewings}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Aflaai is aan die gang}other{Aflaaie is aan die gang}}</translation> <translation id="8213449224684199188">Het fotomodus ingevoer</translation> @@ -7649,6 +7658,7 @@ <translation id="8314835274931377415">Begin skakelaartoegangopstelling?</translation> <translation id="8317582043908962055">Herken PDF-teks</translation> <translation id="8317671367883557781">Voeg netwerkverbinding by</translation> +<translation id="8317965619823678157">kopieer wagwoorde</translation> <translation id="8318266828739827371">Gebruik ’n verdeeldeskermaansig om die vergrote area van jou skerm te sien. Gebruik Soek + Ctrl + D om die gedokte vergrootglas aan en af te skakel.</translation> <translation id="8319414634934645341">Uitgebreide sleutelgebruik</translation> <translation id="8321837372750396788">Hierdie <ph name="DEVICE_TYPE" /> sal bestuur word deur <ph name="MANAGER" />.</translation> @@ -7702,6 +7712,7 @@ <translation id="8371695176452482769">Praat nou</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Demp werf}other{Demp werwe}}</translation> <translation id="8373652277231415614">Gedeelde gidse in Crostini</translation> +<translation id="8374243500935816406">Moenie werwe toelaat om vensters op al jou skerms te bestuur nie</translation> <translation id="8376137163494131156">Vertel ons wat met Google Cast gebeur.</translation> <translation id="8376384591331888629">Insluitend derdeparty-webkoekies op hierdie werf</translation> <translation id="8376451933628734023">Deïnstalleer hierdie webprogram as dit jou probeer mislei om te dink dat dit 'n ander program is.</translation> @@ -7996,6 +8007,7 @@ <translation id="8670537393737592796">Om vinnig hierheen terug te kom, kan jy die installeerknoppie klik om <ph name="APP_NAME" /> te installeer</translation> <translation id="867085395664725367">'n Tydelike bedienerfout het voorgekom.</translation> <translation id="8673026256276578048">Deursoek die web …</translation> +<translation id="867329473311423817">Word toegelaat om vensters op al jou skerms te bestuur</translation> <translation id="8673383193459449849">Bedienerprobleem</translation> <translation id="8674903726754070732">Ongelukkig is jou rekenaar opgestel met ’n misvormde hardeware-ID. Dit verhinder Chrome-bedryfstelsel om met die nuutste sekuriteitsoplossings op te dateer, en jou rekenaar <ph name="BEGIN_BOLD" />sal dalk blootgestel wees aan kwaadwillige aanvalle<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Die installeerder kon nie 'n geldige bestemming kry om <ph name="DEVICE_OS" /> te installeer nie.</translation> @@ -8574,6 +8586,7 @@ <translation id="929117907539171075">Vanlyn data in geïnstalleerde program sal ook uitgevee word</translation> <translation id="930268624053534560">Gedetailleerde tydstempels</translation> <translation id="930893132043726269">Swerf tans</translation> +<translation id="93140074055951850">Android-programme is gestop</translation> <translation id="932327136139879170">Tuis</translation> <translation id="932508678520956232">Kon nie uitdruk begin nie.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Hierdie lêer is te groot vir 'n sekuriteitkontrole. Jy kan lêers van tot 50 MB oplaai.}other{Sommige van hierdie lêers is te groot vir 'n sekuriteitkontrole. Jy kan lêers van tot 50 MB oplaai.}}</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 45c0f9db..698509e05 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -47,7 +47,7 @@ <translation id="1043818413152647937">በተጨማሪ ከእነዚህ መተግበሪያዎች ውሂብ ይጸዳ?</translation> <translation id="1043824690776631483">ይህን ጣቢያ ለመጎብኘት ፈቃድ ያስፈልገዎታል። አግባብነት የሌለው ይዘት ሊኖረው ይችላል።</translation> <translation id="104710386808485638">Linux ዳግም ይነሳ?</translation> -<translation id="1047431265488717055">የአገናኝ ጽሑፍ &ቅዳ</translation> +<translation id="1047431265488717055">የአገናኝ ጽሁፍ &ቅዳ</translation> <translation id="1048286738600630630">ማሳያዎች</translation> <translation id="1048986595386481879">በተለዋዋጭነት የሚመደብ</translation> <translation id="1049324577536766607">{COUNT,plural, =1{<ph name="ATTACHMENTS" />ን ከ<ph name="DEVICE_NAME" /> በመቀበል ላይ}one{<ph name="ATTACHMENTS" />ን ከ<ph name="DEVICE_NAME" /> በመቀበል ላይ}other{<ph name="ATTACHMENTS" />ን ከ<ph name="DEVICE_NAME" /> በመቀበል ላይ}}</translation> @@ -258,7 +258,7 @@ <translation id="1234808891666923653">የአገልግሎት ሰራተኛዎች</translation> <translation id="1235458158152011030">የታወቁ አውታረ መረቦች</translation> <translation id="123578888592755962">ዲስክ ሙሉ ነው</translation> -<translation id="1235924639474699896">{COUNT,plural, =1{ጽሑፍ}one{# ጽሑፎች}other{# ጽሑፎች}}</translation> +<translation id="1235924639474699896">{COUNT,plural, =1{ጽሁፍ}one{# ጽሑፎች}other{# ጽሑፎች}}</translation> <translation id="1236009322878349843">ስልክን ያርትዑ</translation> <translation id="1239594683407221485">የመሣሪያውን ይዘት በፋይሎች መተግበሪያው ውስጥ ያስሱት።</translation> <translation id="1240903469550363138">ለመቀጠል <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /> የእርስዎን ስም፣ ኢሜይል አድራሻ እና የመገለጫ ሥዕል ለዚህ ጣቢያ ያጋራል። የዚህ ጣቢያ <ph name="BEGIN_LINK1" />የግላዊነት መመሪያ<ph name="END_LINK1" /> እና <ph name="BEGIN_LINK2" />የአገልግሎት ውል<ph name="END_LINK2" /> ይመልከቱ።</translation> @@ -558,7 +558,7 @@ <translation id="1531734061664070992"><ph name="FIRST_SWITCH" />፣ <ph name="SECOND_SWITCH" />፣ <ph name="THIRD_SWITCH" /></translation> <translation id="1533948060140843887">ይህ ማውረድ ኮምፒውተሬን እንደሚጎዳ ተረድቻለሁ</translation> <translation id="1535228823998016251">ጮክ ያለ</translation> -<translation id="1535753739390684432">የተወሰነ ጽሑፍ ጮክ ተብሎ ሲነበብ ይስሙ። መጀመሪያ በማያ ገጽዎ ግርጌ ላይ ያለውን የለመናገር ምረጥ አዶውን ይምረጡ፣ ከዚያ ጽሑፉን ያድምቁ።</translation> +<translation id="1535753739390684432">የተወሰነ ጽሁፍ ጮክ ተብሎ ሲነበብ ይስሙ። መጀመሪያ በማያ ገጽዎ ግርጌ ላይ ያለውን የለመናገር ምረጥ አዶውን ይምረጡ፣ ከዚያ ጽሑፉን ያድምቁ።</translation> <translation id="1536754031901697553">ግንኙነት በማቋረጥ ላይ...</translation> <translation id="1537254971476575106">የሙሉ ማያ ገጽ ማጉያ</translation> <translation id="15373452373711364">ትልቅ የመዳፊት ጠቋሚ</translation> @@ -716,7 +716,7 @@ <translation id="166278006618318542">የርዕሰ ጉዳዩ ህዝባዊ ቁልፍ አልጎሪዝም</translation> <translation id="1662801900924515589"><ph name="APP" /> ተጭኗል</translation> <translation id="1666232093776384142">ለተቀጥላ ክፍሎች የመረጃ መዳረሻ ጥበቃን ያሰናክሉ</translation> -<translation id="1667842670298352129">የተወሰነ ጽሑፍ ጮክ ተብሎ ሲነበብ ይስሙ። መጀመሪያ በማያ ገጽዎ ግርጌ ላይ ያለውን የለመናገር ምረጥ አዶውን ይምረጡ፣ ከዚያ ጽሑፉን ያድምቁ። እንዲሁም የቁልፍ ሰሌዳ አቋራጭን መጠቀም ይችላሉ፦ ጽሑፍ ያድምቁ፣ ከዚያ Search + Sን ይጫኑ።</translation> +<translation id="1667842670298352129">የተወሰነ ጽሁፍ ጮክ ተብሎ ሲነበብ ይስሙ። መጀመሪያ በማያ ገጽዎ ግርጌ ላይ ያለውን የለመናገር ምረጥ አዶውን ይምረጡ፣ ከዚያ ጽሑፉን ያድምቁ። እንዲሁም የቁልፍ ሰሌዳ አቋራጭን መጠቀም ይችላሉ፦ ጽሁፍ ያድምቁ፣ ከዚያ Search + Sን ይጫኑ።</translation> <translation id="1668435968811469751">ራስዎ ያስመዝግቡ</translation> <translation id="1668979692599483141">ስለአስተያየት ጥቆማዎች ይረዱ</translation> <translation id="1670399744444387456">መሠረታዊ</translation> @@ -883,7 +883,7 @@ <translation id="1811908311154949291">ማንነት የማያሳውቅ የታጠረ ክፍለ ገጸ ድር፦ <ph name="FENCEDFRAME_SITE" /></translation> <translation id="1813278315230285598">ግልጋሎቶች</translation> <translation id="18139523105317219">EDI ፓርቲ ስም</translation> -<translation id="1815083418640426271">እንደ ስነጣ አልባ ጽሑፍ ለጥፍ</translation> +<translation id="1815083418640426271">እንደ ስነጣ አልባ ጽሁፍ ለጥፍ</translation> <translation id="1815097521077272760">ለዚህ ጨዋታ የቁልፍ ሰሌዳ መቆጣጠሪያን እንዲሞክሩ ተጋብዘዋል።</translation> <translation id="1815181278146012280">አንድ ጣቢያ የHID መሣሪያዎችን መድረስ ሲፈልግ ጠይቅ</translation> <translation id="181577467034453336"><ph name="NUMBER_OF_VIEWS" /> ተጨማሪ...</translation> @@ -1048,7 +1048,7 @@ <translation id="1963227389609234879">ሁሉንም አስወግድ</translation> <translation id="1963976881984600709">መደበኛ ጥበቃ</translation> <translation id="1965624977906726414">ምንም ልዩ ፍቃዶች የሉትም።</translation> -<translation id="1969654639948595766">የWebRTC ጽሑፍ ምዝግብ ማስታወሻዎች (<ph name="WEBRTC_TEXT_LOG_COUNT" />)</translation> +<translation id="1969654639948595766">የWebRTC ጽሁፍ ምዝግብ ማስታወሻዎች (<ph name="WEBRTC_TEXT_LOG_COUNT" />)</translation> <translation id="1970368523891847084">ወደ የቪዲዮ ሁነታ ተገብቷል</translation> <translation id="1972325230031091483">አሁን ባለው የድረ-ገጽ ጉብኝትዎ ላይ በመመስረት ይዘቱ በንቃት ስለተጫነ በፍጥነት ያስሱታል</translation> <translation id="197288927597451399">አስቀምጥ</translation> @@ -1173,7 +1173,7 @@ <translation id="2088092308059522196">ምዝገባ የሚደገፈው <ph name="DEVICE_OS" />ን ከጫኑ በኋላ ብቻ ነው።</translation> <translation id="208928984520943006">በማንኛውም ጊዜ ወደ መነሻ ገጹ ለመሄድ ከታች ሆነው ወደ ላይ ይጥረጉ።</translation> <translation id="2089566709556890888">ከGoogle Chrome ጋር ደህንነቱ በተጠበቀ ሁኔታ ያስሱ</translation> -<translation id="2089795179672254991">አንድ ጣቢያ እርስዎ ወደ ቅንጥብ ሰሌዳ የቀዱትን ጽሑፍ እና ምስሎች መመልከት ሲፈልግ ይጠይቅ (የሚመከር)</translation> +<translation id="2089795179672254991">አንድ ጣቢያ እርስዎ ወደ ቅንጥብ ሰሌዳ የቀዱትን ጽሁፍ እና ምስሎች መመልከት ሲፈልግ ይጠይቅ (የሚመከር)</translation> <translation id="2090165459409185032">የጠፋብዎትን የመለያ መረጃ መልሶ ለማግኘት፣ ወደዚህ ይሂዱ፦ google.com/accounts/recovery</translation> <translation id="2090507354966565596">ሲገቡ በራስ-ሰር ይገናኛል</translation> <translation id="2090876986345970080">የስርዓት ደህንነት ቅንብር</translation> @@ -1320,7 +1320,7 @@ <translation id="2214893006758804920">{LINE_COUNT,plural, =1{<1 መስመር አይታይም>}one{<<ph name="NUMBER_OF_LINES" /> መስመሮች አይታዩም>}other{<<ph name="NUMBER_OF_LINES" /> መስመሮች አይታዩም>}}</translation> <translation id="2218019600945559112">መዳፊት እና መዳሰሻ</translation> <translation id="2218320521449013367">Chrome ጎጂ ሶፍትዌር እያስወገደ ሳለ አንድ ስህተት ተከስቷል</translation> -<translation id="2218515861914035131">እንደ ስነጣ አልባ ጽሑፍ ለጥፍ</translation> +<translation id="2218515861914035131">እንደ ስነጣ አልባ ጽሁፍ ለጥፍ</translation> <translation id="2220409419896228519">ዕልባቶችን ወደ የእርስዎ ተወዳጅ የGoogle መተግበሪያዎች ያክሉ</translation> <translation id="2220529011494928058">ችግር ሪፖርት አድርግ</translation> <translation id="2220572644011485463">ፒን ወይም የይለፍ ቃል</translation> @@ -1752,6 +1752,7 @@ <translation id="2602501489742255173">ለመጀመር በጣት ይጥረጉ</translation> <translation id="2603115962224169880">ኮምፒውተርን አጽዳ</translation> <translation id="2603355571917519942">Voice Match ዝግጁ ነው</translation> +<translation id="2604129989323098489">መስኮቶችን በብልሃት ለመክፈት እና ለማስቀመጥ ጣቢያዎች ብዙ ጊዜ ሰነዶችን ወይም የሙሉ መስኮት ማሳያ ይዘትን ጎን ለጎን እንደማሳየት ያሉ የእርስዎ ማሳያዎች መረጃን ይጠይቃሉ</translation> <translation id="2604255671529671813">የአውታረ መረብ ግንኙነት ስህተት</translation> <translation id="2605668923777146443">ለተሻለ አብሮነት የእርስዎን ምርጫዎች ለማየት ወደ <ph name="LINK_BEGIN" />ቅንብሮች<ph name="LINK_END" /> ይሂዱ።</translation> <translation id="2606246518223360146">ውሂብ አገናኝ</translation> @@ -1826,7 +1827,7 @@ <translation id="2669241540496514785"><ph name="APP_NAME" />ን መክፈት አልተቻለም</translation> <translation id="2669454659051515572">ይህን መሣሪያ የሚጠቀም ማንኛውም ሰው የወረዱ ፋይሎችን መመልከት ይችላል</translation> <translation id="2670102641511624474"><ph name="APP_NAME" /> የChrome ትር እያጋራ ነው።</translation> -<translation id="2670403088701171361">ጣቢያዎች በቅንጥብ ሰሌዳዎ ላይ ጽሑፍ ወይም ምስሎችን እንዲያዩ አይፍቀዱላቸው</translation> +<translation id="2670403088701171361">ጣቢያዎች በቅንጥብ ሰሌዳዎ ላይ ጽሁፍ ወይም ምስሎችን እንዲያዩ አይፍቀዱላቸው</translation> <translation id="2670429602441959756">ይህ ገጽ እስካሁን በVR ውስጥ የማይደገፉ ባህሪያትን ይዟል። በመውጣት ላይ...</translation> <translation id="2671451824761031126">የእርስዎ ዕልባቶች እና ቅንብሮች ዝግጁ ናቸው</translation> <translation id="2672142220933875349">መጥፎ የcrx ፋይል፣ ጥቅል መክፈት አልተሳካም።</translation> @@ -2165,7 +2166,7 @@ <translation id="2981113813906970160">ትልቅ የመዳፊት ጠቋሚ አሳይ</translation> <translation id="2983373101216420412">የማስቀመጫ የባትሪ ደረጃ <ph name="PERCENTAGE" />%።</translation> <translation id="2985348301114641460">«<ph name="EXTENSION_NAME" />» ለመጫን ለእርስዎ አስተዳዳሪ ጥያቄ ይላክ?</translation> -<translation id="2987620471460279764">ከሌሎች መሣሪያዎች የተጋራ ጽሑፍ</translation> +<translation id="2987620471460279764">ከሌሎች መሣሪያዎች የተጋራ ጽሁፍ</translation> <translation id="2988018669686457659">አነስተኛ ምስል ሰሪ</translation> <translation id="2989123969927553766">የመዳፊት ሽብለላ ማፍጠኛ</translation> <translation id="2989474696604907455">አልተያያዘም</translation> @@ -2188,7 +2189,7 @@ <translation id="3005574332301273731">አታሳይ</translation> <translation id="3006881078666935414">ምንም የአጠቃቀም ውሂብ የለም</translation> <translation id="3007771295016901659">የተባዛ ትር</translation> -<translation id="3008232374986381779">በእርስዎ <ph name="DEVICE_TYPE" /> ላይ የLinux መሣሪያዎችን፣ ጽሑፍ አቀናባሪዎችን እና አይዲኢዎች ያሂዱ። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> +<translation id="3008232374986381779">በእርስዎ <ph name="DEVICE_TYPE" /> ላይ የLinux መሣሪያዎችን፣ ጽሁፍ አቀናባሪዎችን እና አይዲኢዎች ያሂዱ። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> <translation id="3008272652534848354">ፈቃዶችን ዳግም ያቀናብሩ</translation> <translation id="3008694618228964140">{NUM_DAYS,plural, =1{<ph name="MANAGER" /> ዝማኔን ለማውረድ ዛሬ ከWi-Fi ጋር እንዲገናኙ ይፈልግብዎታል። ወይም ደግሞ ከሚለካ ግንኙነት ያውርዱ (ክፍያዎች ሊከፈልባቸው ይችላል)።}one{<ph name="MANAGER" /> ከቀነ ገደቡ በፊት ከWi-Fi ጋር እንዲገናኙ እና ዝማኔን እንዲያወርዱ ይፈልግብዎታል። ወይም ደግሞ ከሚለካ ግንኙነት ያውርዱ (ክፍያዎች ሊከፈልባቸው ይችላል)።}other{<ph name="MANAGER" /> ከቀነ ገደቡ በፊት ከWi-Fi ጋር እንዲገናኙ እና ዝማኔን እንዲያወርዱ ይፈልግብዎታል። ወይም ደግሞ ከሚለካ ግንኙነት ያውርዱ (ክፍያዎች ሊከፈልባቸው ይችላል)።}}</translation> <translation id="3009178788565917040">ውጽዓት</translation> @@ -2575,7 +2576,7 @@ <translation id="3413122095806433232">CA ሰጪዎች፦ <ph name="LOCATION" /></translation> <translation id="3414952576877147120">መጠን፦</translation> <translation id="3414966631182382431">የእርስዎ <ph name="BEGIN_LINK" />አሳሽ የሚተዳደረው<ph name="END_LINK" /> በ<ph name="MANAGER" /> ነው</translation> -<translation id="341589277604221596">የቀጥታ ስርጭት መግለጫ ጽሑፍ - <ph name="LANGUAGE" /></translation> +<translation id="341589277604221596">የቀጥታ ስርጭት መግለጫ ጽሁፍ - <ph name="LANGUAGE" /></translation> <translation id="3416468988018290825">ሁልጊዜ ሙሉ ዩአርኤሎችን አሳይ</translation> <translation id="3417835166382867856">ትሮችን ይፈልጉ</translation> <translation id="3417836307470882032">ወታደራዊ ሰዓት</translation> @@ -2657,7 +2658,7 @@ <translation id="347785443197175480"><ph name="HOST" /> ካሜራዎን እና ማይክሮፎንዎን እንዲደርስ መፍቀዱን ይቀጥሉ</translation> <translation id="3479552764303398839">አሁን አይደለም</translation> <translation id="3479685872808224578">የህትመት አገልጋዩን ማግኘት አልተቻለም። እባክዎ አድራሻውን ይፈትሹ እና እንደገና ይሞክሩ።</translation> -<translation id="3480612136143976912">የመግለጫ ጽሑፍ መጠን እና ቅጥ ለቀጥታ መግለጫ ጽሑፍ ይበጅ? አንዳንድ መተግበሪያዎች እና ጣቢያዎች ይህን ቅንብር ይጠቀሙበታል።</translation> +<translation id="3480612136143976912">የመግለጫ ጽሁፍ መጠን እና ቅጥ ለቀጥታ መግለጫ ጽሁፍ ይበጅ? አንዳንድ መተግበሪያዎች እና ጣቢያዎች ይህን ቅንብር ይጠቀሙበታል።</translation> <translation id="3480827850068960424"><ph name="NUM" /> ትሮች ተገኝተዋል</translation> <translation id="3481268647794498892"><ph name="ALTERNATIVE_BROWSER_NAME" />ን በ<ph name="COUNTDOWN_SECONDS" /> ሰከንዶች ውስጥ ይከፈታል</translation> <translation id="348268549820508141">ንግግርን ማወቅ</translation> @@ -3609,14 +3610,14 @@ <translation id="4400963414856942668">አንድ ትር ዕልባት ለማድረግ ኮከቡን ጠቅ ማድረግ ይችላሉ</translation> <translation id="4401912261345737180">cast ለማድረግ በኮድ ይገናኙ</translation> <translation id="4402755511846832236">እርስዎ ይህን መሣሪያ በንቃት ሲጠቀሙ ጣቢያዎች እንዳያውቁ ያግዱ</translation> -<translation id="4403012369005671154">ከንግግር-ወደ-ጽሑፍ</translation> +<translation id="4403012369005671154">ከንግግር-ወደ-ጽሁፍ</translation> <translation id="4403266582403435904">ውሂብ በቀላሉ ወደነበረበት ይመልሱ ወይም በማንኛውም ጊዜ መሣሪያዎችን ይቀያይሩ። ምትኬዎች ወደ Google ተሰቅለዋል እና የልጅዎን የGoogle መለያ የይለፍ ቃል በመጠቀም ተመስጥረዋል።</translation> <translation id="4403775189117163360">የተለየ አቃፊ ይምረጡ</translation> <translation id="4404136731284211429">እንደገና ቃኝ</translation> <translation id="4404843640767531781"><ph name="APP_NAME" /> በእርስዎ ወላጅ ታግዷል። ወላጅዎ ይህን መተግበሪያ እንዲጠቀሙ ፈቃድ ይጠይቋቸው።</translation> <translation id="4405117686468554883">*.jpeg፣ *.jpg፣ *.png</translation> <translation id="440653823335387109">እርስዎ ያነበቧቸው ገጾች</translation> -<translation id="4406883609789734330">የቀጥታ ስርጭት መግለጫ ጽሑፍ</translation> +<translation id="4406883609789734330">የቀጥታ ስርጭት መግለጫ ጽሁፍ</translation> <translation id="4407039574263172582">ለመቀጠል <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /> የእርስዎን ስም፣ ኢሜይል አድራሻ እና የመገለጫ ሥዕል ለዚህ ጣቢያ ያጋራል። የዚህን ጣቢያ <ph name="BEGIN_LINK" />የአገልግሎት ውል<ph name="END_LINK" /> ይመልከቱ።</translation> <translation id="4408599188496843485">እ&ገዛ</translation> <translation id="4409271659088619928">የእርስዎ የፍለጋ ፕሮግራም <ph name="DSE" /> ነው። መተግበር የሚችል ከሆነ የፍለጋ ታሪክዎን ለመሰረዝ መመሪያዎቻቸውን ይመልከቱ።</translation> @@ -3627,7 +3628,7 @@ <translation id="44141919652824029">«<ph name="APP_NAME" />» የተያያዙ ዩኤስቢ መሣሪያዎችዎን ዝርዝር እንዲያገኝ ይፈቀድለት?</translation> <translation id="4414232939543644979">አዲስ ማን&ነትን የማያሳውቅ መስኮት</translation> <translation id="4415213869328311284">የእርስዎን <ph name="DEVICE_TYPE" /> መጠቀም ለመጀመር ዝግጁ ነዎት።</translation> -<translation id="4415245286584082850">ምንም መሣሪያዎች አልተገኙም። የእገዛ ማዕከል ጽሑፍ በአዲስ ትር ላይ ይክፈቱ።</translation> +<translation id="4415245286584082850">ምንም መሣሪያዎች አልተገኙም። የእገዛ ማዕከል ጽሁፍ በአዲስ ትር ላይ ይክፈቱ።</translation> <translation id="4415276339145661267">የGoogle መለያዎን ያቀናብሩ</translation> <translation id="4415748029120993980">የSECG ሞላላ ጥምዝ secp384r1 (እንዲሁም NIST P-384 በመባል የሚታወቅ)</translation> <translation id="4416450511678320850">ለዚህ ይዘት ምንም መተግበሪያዎች አይገኘም</translation> @@ -3738,7 +3739,7 @@ <translation id="452750746583162491">የሰመረ ውሂብዎን ይገምግሙ</translation> <translation id="4527929807707405172">ኋልዮሽ መሸብለልን አንቃ <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation> <translation id="4528494169189661126">የትርጉም አስተያየት ጥቆማ</translation> -<translation id="4529455689802245339">የChrome የቀጥታ መግለጫ ጽሑፍ ላይሰራ ይችላል</translation> +<translation id="4529455689802245339">የChrome የቀጥታ መግለጫ ጽሁፍ ላይሰራ ይችላል</translation> <translation id="4530494379350999373">መነሻ</translation> <translation id="4531924570968473143">ማንን ወደዚህ <ph name="DEVICE_TYPE" /> ማከል ይፈልጋል?</translation> <translation id="4532625150642446981">«<ph name="USB_DEVICE_NAME" />» ሥራ ላይ ነው። መሣሪያውን በሚሠራበት ጊዜ እንደገና መመደብ ስህተት ሊያስከትል ይችላል። እርግጠኛ ነዎት መቀጠል ይፈልጋሉ?</translation> @@ -3856,7 +3857,7 @@ <translation id="4636930964841734540">መረጃ</translation> <translation id="4637083375689622795">ተጨማሪ እርምጃዎች፣ <ph name="EMAIL" /></translation> <translation id="4637189644956543313">እንደገና ካሜራ ይጠቀሙ</translation> -<translation id="4637252186848840278">{COUNT,plural, =1{ጽሑፍ}one{# ጽሑፎች}other{# ጽሑፎች}}</translation> +<translation id="4637252186848840278">{COUNT,plural, =1{ጽሁፍ}one{# ጽሑፎች}other{# ጽሑፎች}}</translation> <translation id="4638930039313743000">የADB ስህተትን ማረሚያ አንቃ</translation> <translation id="4641539339823703554">Chrome የስርዓት ጊዜ ማዘጋጀት አልቻለም። እባክዎ ከዚህ በታች ያለውን ጊዜ ይፈትሹና አስፈላጊ ከሆነ ያስተካክሉ።</translation> <translation id="4643612240819915418">&ቪዲዮ በአዲስ ትር ክፈት</translation> @@ -3976,7 +3977,7 @@ <translation id="475088594373173692">የመጀመሪያ ተጠቃሚ</translation> <translation id="4756378406049221019">አስቁም/ዳግም ጫን</translation> <translation id="4756388243121344051">&ታሪክ</translation> -<translation id="4756671452988984333">ለኦዲዮ ጽሑፍ</translation> +<translation id="4756671452988984333">ለኦዲዮ ጽሁፍ</translation> <translation id="4759202969060787081">አትክፈት</translation> <translation id="4759238208242260848">የወረዱ</translation> <translation id="4761104368405085019">ማይክፎሮንዎን ይጠቀማል</translation> @@ -4043,7 +4044,7 @@ <translation id="4824958205181053313">ስምረት ይሰረዝ?</translation> <translation id="4825532258163983651">የይለፍ ቁልፍን መሰረዝ አልተቻለም</translation> <translation id="4827675678516992122">መገናኘት አልተቻለም</translation> -<translation id="4827784381479890589">በChrome አሳሽ ውስጥ የተሻሻለ የፊደል ማረም (የፊደል አጻጻፍ አስተያየቶችን ለማግኘት ጽሑፍ ወደ Google ይላካል)</translation> +<translation id="4827784381479890589">በChrome አሳሽ ውስጥ የተሻሻለ የፊደል ማረም (የፊደል አጻጻፍ አስተያየቶችን ለማግኘት ጽሁፍ ወደ Google ይላካል)</translation> <translation id="4827904420700932487">ለዚህ ምስል የQR ኮድ ፍጠር</translation> <translation id="4827970183019354123">ዩአርኤል ፈታሽ</translation> <translation id="4828567746430452681">«<ph name="EXTENSION_NAME" />» ከአሁን ጀምሮ አይደገፍም</translation> @@ -4152,7 +4153,7 @@ <translation id="4918021164741308375"><ph name="ORIGIN" /> ከቅጥያ «<ph name="EXTENSION_NAME" />» ጋር መገናኘት ይፈልጋል</translation> <translation id="4918086044614829423">ይቀበሉ</translation> <translation id="4918134162946436591">ፍንጭ ተደራቢ አሳይ</translation> -<translation id="4921348630401250116">ጽሑፍ-ወደ-ንግግር</translation> +<translation id="4921348630401250116">ጽሁፍ-ወደ-ንግግር</translation> <translation id="492299503953721473">የAndroid መተግበሪያዎችን አስወግድ</translation> <translation id="492363500327720082"><ph name="APP_NAME" />ን በማራገፍ ላይ...</translation> <translation id="4924002401726507608">ግብረመልስ አስገባ</translation> @@ -4565,7 +4566,7 @@ <translation id="534449933710420173">ያልተሰየመ አቃፊ</translation> <translation id="5345916423802287046">ሲገቡ መተግበሪያውን ይጀምሩ</translation> <translation id="5350293332385664455">Google ረዳትን ያጥፉ</translation> -<translation id="535123479159372765">ጽሑፍ ከሌላ መሣሪያ ተቀድቷል</translation> +<translation id="535123479159372765">ጽሁፍ ከሌላ መሣሪያ ተቀድቷል</translation> <translation id="5352033265844765294">የሰዓት ምዝገባ</translation> <translation id="5352257124367865087">የጣቢያ ፈቃዶችን አስተዳድር</translation> <translation id="5353252989841766347">የይለፍ ቃላትን ከChrome ወደ ውጭ ይላኩ</translation> @@ -4747,7 +4748,7 @@ <translation id="5514315914873062345">ትር</translation> <translation id="5517304475148761050">ይህ መተግበሪያ የPlay መደብር መዳረሻ ያስፈልገዋል</translation> <translation id="5517412723934627386"><ph name="NETWORK_TYPE" /> - <ph name="NETWORK_DISPLAY_NAME" /></translation> -<translation id="5518219166343146486">አንድ ጣቢያ ወደ ቅንጥብ ሰሌዳ የተቀዱትን ጽሑፍ እና ምስሎች መመልከት ሲፈልግ ይጠይቅ</translation> +<translation id="5518219166343146486">አንድ ጣቢያ ወደ ቅንጥብ ሰሌዳ የተቀዱትን ጽሁፍ እና ምስሎች መመልከት ሲፈልግ ይጠይቅ</translation> <translation id="5519195206574732858">LTE</translation> <translation id="5521078259930077036">የጠበቁት የመነሻ ገጽ ይሄ ነው?</translation> <translation id="5522156646677899028">ይህ ቅጥያ ከባድ የደህንነት ተጋላጭነት ያካትታል።</translation> @@ -5342,7 +5343,7 @@ <translation id="6097480669505687979">ቦታ ካላስለቀቁ ተጠቃሚዎች እና ውሂብ በራስ-ሰር ሊወገዱ ይችላሉ።</translation> <translation id="6097600385983390082">የድምፅ ፍለጋ ተዘግቷል</translation> <translation id="6098793583803863900">አንድ ያልታወቀ ፋይል አደገኛ ይዘት ካለው እየተቃኘ ነው።</translation> -<translation id="609942571968311933">ጽሑፍ ከ<ph name="DEVICE_NAME" /> ተቀድቷል</translation> +<translation id="609942571968311933">ጽሁፍ ከ<ph name="DEVICE_NAME" /> ተቀድቷል</translation> <translation id="6100736666660498114">የጀምር ምናሌ</translation> <translation id="6101226222197207147">አዲስ መተግበሪያ ታክሏል (<ph name="EXTENSION_NAME" />)</translation> <translation id="6102043788063419338">ይህ ፋይል በላቀ ጥበቃ ታግዷል።</translation> @@ -5381,6 +5382,7 @@ <translation id="6130692320435119637">Wi-Fi ያክሉ</translation> <translation id="6130887916931372608">የቁልፍ ሰሌዳ ቁልፍ</translation> <translation id="6135823405800500595">ስልክዎ በአቅራቢያ መኖሩን፣ መከፈቱን እና ብሉቱዝና Wi-Fi መብራታቸውን ያረጋግጡ።</translation> +<translation id="6135826623269483856">በሁሉም የእርስዎ ማሳያዎች ላይ መስኮቶችን ማስተዳደር አይፈቀድም</translation> <translation id="6136114942382973861">የውርዶች አሞሌን ዝጋ</translation> <translation id="6136287496450963112">የእርስዎ ደህንነት ቁልፍ በፒን ጥበቃ እየተደረገለት አይደለም ያለው። የዲጂታል አሻራዎችን ለማቀናበር መጀመሪያ ፒን ይፍጠሩ።</translation> <translation id="6138680304137685902">የX9.62 ECDSA ፊርማ በSHA-384</translation> @@ -5473,7 +5475,7 @@ <translation id="6235208551686043831">የመሣሪያ ካሜራ በርቷል። እባክዎ የኢሲም QR ኮድዎን ከካሜራው ፊት ለፊት ያኑሩ።</translation> <translation id="6237474966939441970">የስታይለስ ማስታወሻ መጻፊያ መተግበሪያ</translation> <translation id="6238624845858322552">ወደ ብሉቱዝ መሣሪያ አያይዝ</translation> -<translation id="6238767809035845642">ከሌላ መሣሪያ የተጋራ ጽሑፍ</translation> +<translation id="6238767809035845642">ከሌላ መሣሪያ የተጋራ ጽሁፍ</translation> <translation id="6238923052227198598">በማያ ገጽ መቆለፊያ ላይ የቅርብ ጊዜውን ማስታወሻ አቆይ</translation> <translation id="6239558157302047471">&ክፈፍን ዳግም ጫን</translation> <translation id="6240821072888636753">ሁልጊዜ ጠይቅ</translation> @@ -5969,7 +5971,7 @@ <translation id="6709133671862442373">ዜና</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" />ን በመጠቀም አገናኝ</translation> <translation id="6710213216561001401">ቀዳሚ</translation> -<translation id="6710394144992407503">በድረ-ገጾች ላይ ጽሑፍ በሚተይቡበት ጊዜ የፊደል ስህተቶችን ይፈትሹ</translation> +<translation id="6710394144992407503">በድረ-ገጾች ላይ ጽሁፍ በሚተይቡበት ጊዜ የፊደል ስህተቶችን ይፈትሹ</translation> <translation id="6711146141291425900">ለውርዶች <ph name="WEB_DRIVE" /> መለያን ያገናኙ</translation> <translation id="6712943853047024245">ለ<ph name="WEBSITE" /> ከዚህ የተጠቃሚ ስም ጋር የይለፍ ቃል አስቀድመው አስቀምጠዋል</translation> <translation id="6713233729292711163">የስራ መገለጫን አክል</translation> @@ -6028,7 +6030,7 @@ <translation id="6776729248872343918">ፈጣን ጥምረትን ያንቁ</translation> <translation id="6777817260680419853">አቅጣጫ ማዞር ታግዷል</translation> <translation id="6778737459546443941">የእርስዎ ወላጅ ገና አላጸደቁትም</translation> -<translation id="6779092717724412415">እንደዚህ አይነት ድምቀት ለመፍጠር ማንኛውንም ጽሑፍ ይምረጡ እና የቀኝ-ጠቅ ያድርጉ።</translation> +<translation id="6779092717724412415">እንደዚህ አይነት ድምቀት ለመፍጠር ማንኛውንም ጽሁፍ ይምረጡ እና የቀኝ-ጠቅ ያድርጉ።</translation> <translation id="6779447100905857289">የእርስዎ ተሳቢዎች</translation> <translation id="677965093459947883">በጣም ትንሽ</translation> <translation id="6781005693196527806">&የፍለጋ ፕሮግራሞችን ያስተዳድሩ...</translation> @@ -6184,7 +6186,7 @@ <translation id="691106080621596509">ይህ በ<ph name="SITE_GROUP_NAME" />፣ በእሱ ስር ያሉ ማናቸውም ጣቢያዎች እና በተጫነ መተግበሪያው የተከማቹ ሁሉንም ውሂብ እና ኩኪዎች ያጠፋል</translation> <translation id="6911734910326569517">የማህደረ ትውስታ አሻራ</translation> <translation id="6912007319859991306">የተንቀሳቃሽ ስልክ ሲም ፒን</translation> -<translation id="691289340230098384">የመግለጫ ጽሑፍ ምርጫዎች</translation> +<translation id="691289340230098384">የመግለጫ ጽሁፍ ምርጫዎች</translation> <translation id="6914783257214138813">የእርስዎ የይለፍ ቃላት ወደ ውጭ የተላከውን ፋይልን መመልከት ለሚችል ማንኛውም ሰው የሚታዩ ይሆናሉ።</translation> <translation id="6916590542764765824">ቅጥያዎችን አስተዳድር</translation> <translation id="6918677045355889289">የChromeOS ዝማኔ ያስፈልጋል</translation> @@ -6325,7 +6327,7 @@ <translation id="7033616203784997570">ግብዓት ቢበዛ 62 ቁምፊዎች መሆን አለበት</translation> <translation id="7034692021407794547">የሒሳብ አከፋፈል አስተዳደር ልዩ መብቶች ያሉት አስተዳዳሪ መጀመሪያ በአስተዳዳሪ መሥሪያው የGoogle Meet ሃርድዌር ክፍል ውስጥ የGoogle Meet ሃርድዌር የአገልግሎት ውልን መቀበል አለባቸው።</translation> <translation id="7036706669646341689">ለLinux <ph name="DISK_SIZE" /> ቦታ ይመከራል። ባዶ ቦታን ለመጨመር ከመሣሪያዎ ፋይሎችን ይሰርዙ።</translation> -<translation id="7037509989619051237">ቅድሚያ የሚታይ ጽሑፍ</translation> +<translation id="7037509989619051237">ቅድሚያ የሚታይ ጽሁፍ</translation> <translation id="7038632520572155338">የመዳረሻ መቀየሪያ</translation> <translation id="7038710352229712897">ለ<ph name="USER_NAME" /> ሌላ Google መለያ ያክሉ</translation> <translation id="7039326228527141150">ከ<ph name="VENDOR_NAME" /> የመጡ የዩኤስቢ መሣሪያዎችን ይደርሳል</translation> @@ -6418,7 +6420,7 @@ <translation id="7130890260487814974">የአጠቃቀም እና የምርመራ ውሂብ ይላኩ።</translation> <translation id="7131040479572660648">የእርስዎን ውሂብ በ<ph name="WEBSITE_1" />፣ በ<ph name="WEBSITE_2" />፣ እና በ<ph name="WEBSITE_3" /> ላይ ያንብቡ</translation> <translation id="713122686776214250">&ገጽ አክል...</translation> -<translation id="7134098520442464001">ጽሑፍ አሳንስ</translation> +<translation id="7134098520442464001">ጽሁፍ አሳንስ</translation> <translation id="7135729336746831607">ብሉቱዝ ይብራ?</translation> <translation id="7136694880210472378">ነባሪ አድርግ</translation> <translation id="7138678301420049075">ሌላ</translation> @@ -6720,7 +6722,7 @@ <translation id="7456142309650173560">dev</translation> <translation id="7456847797759667638">የተቀመጠበትን ቦታ ክፈት…</translation> <translation id="7457831169406914076">{COUNT,plural, =1{አንድ አገናኝ}one{# አገናኞች}other{# አገናኞች}}</translation> -<translation id="7458168200501453431">በGoogle ፍለጋ ላይ ስራ ላይ የሚውለው ተመሳሳዩን ፊደል ማረሚያ ይጠቀማል። በአሳሹ ውስጥ የሚተይቡት ጽሑፍ ወደ Google ይላካል።</translation> +<translation id="7458168200501453431">በGoogle ፍለጋ ላይ ስራ ላይ የሚውለው ተመሳሳዩን ፊደል ማረሚያ ይጠቀማል። በአሳሹ ውስጥ የሚተይቡት ጽሁፍ ወደ Google ይላካል።</translation> <translation id="7458715171471938198">መተግበሪያዎች ወደነበሩበት ይመለሱ?</translation> <translation id="7460045493116006516">እርስዎ የጫኑት አሁን ያለ ገጽታ</translation> <translation id="7461924472993315131">ሰካ</translation> @@ -6758,7 +6760,7 @@ <translation id="7490683549040131791">ቀሪ የይለፍ ቃላትን ይፈትሹ</translation> <translation id="7491962110804786152">TAB</translation> <translation id="7491963308094506985">{NUM_COOKIES,plural, =1{1 ኩኪ}one{{NUM_COOKIES} ኩኪዎች}other{{NUM_COOKIES} ኩኪዎች}}</translation> -<translation id="7493386493263658176">የ<ph name="EXTENSION_NAME" /> ቅጥያ እንደ የይለፍ ቃላት እና የክሬዲት ካርድ ቁጥሮች ያለ የሚተይቡትን ጽሑፍ ሁሉ ሊሰበስብ ይችላል። ይህን ቅጥያ መጠቀም ይፈልጋሉ?</translation> +<translation id="7493386493263658176">የ<ph name="EXTENSION_NAME" /> ቅጥያ እንደ የይለፍ ቃላት እና የክሬዲት ካርድ ቁጥሮች ያለ የሚተይቡትን ጽሁፍ ሁሉ ሊሰበስብ ይችላል። ይህን ቅጥያ መጠቀም ይፈልጋሉ?</translation> <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7495149565104413027">የAndroid መተግበሪያ</translation> <translation id="7495778526395737099">የይለፍ ቃልዎን ረስተውታል?</translation> @@ -7041,7 +7043,7 @@ <translation id="7755287808199759310">የእርስዎ ወላጅ እገዳውን ሊያነሱልዎ ይችላሉ</translation> <translation id="7757592200364144203">የመሣሪያ ስም ይቀይሩ</translation> <translation id="7757739382819740102">በአቅራቢያ ያሉ እውቂያዎች ለእርስዎ ማጋራት ይችላሉ። ማጽደቅ ያስፈልጋል።</translation> -<translation id="7757787379047923882">ከ<ph name="DEVICE_NAME" /> የተጋራ ጽሑፍ</translation> +<translation id="7757787379047923882">ከ<ph name="DEVICE_NAME" /> የተጋራ ጽሁፍ</translation> <translation id="7758143121000533418">Family Link</translation> <translation id="7758450972308449809">የማሳያዎን ድንበሮች ያስተካክሉ</translation> <translation id="7760004034676677601">የጠበቁት የጅማሬ ገጽ ይሄ ነው?</translation> @@ -7395,6 +7397,7 @@ <ph name="BEGIN_PARAGRAPH3" />ይህን አገልግሎት በቅንብሮች ውስጥ ማጥፋት ይችላሉ።<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">ትሮች</translation> <translation id="8076835018653442223">በእርስዎ መሣሪያ ላይ ያሉ የአካባቢያዊ ፋይሎች መዳረሻ በእርስዎ አስተዳዳሪ ተሰናክሏል</translation> +<translation id="80798452873915119">ጣቢያዎች በሁሉም የእርስዎ ማሳያዎች ላይ መስኮቶችን ለማስተዳደር መጠየቅ ይችላሉ</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">ክፍለ ጊዜዎ በ<ph name="MANAGER_NAME" /> የሚተዳደር ነው። አስተዳዳሪዎች የእርስዎን መገለጫ መሰረዝ እና እንዲሁም የእርስዎን የአውታረ መረብ ትራፊክ መቆጣጠር ይችላሉ።</translation> <translation id="8081989000209387414">የADB ስሕተት ማረሚያ ይሰናከል?</translation> @@ -7534,6 +7537,7 @@ <translation id="820568752112382238">በብዛት የተጎበኙ ጣቢያዎች</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">ሴሉላር</translation> +<translation id="8208216423136871611">አታስቀምጥ</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{አዲስ ማሳወቂያ}one{# አዲስ ማሳወቂያዎች}other{# አዲስ ማሳወቂያዎች}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ማውረድ በሂደት ላይ ነው}one{ውርዶች በሂደት ላይ ናቸው}other{ውርዶች በሂደት ላይ ናቸው}}</translation> <translation id="8213449224684199188">ወደ የፎቶ ሁነታ ተገብቷል</translation> @@ -7699,6 +7703,7 @@ <translation id="8371695176452482769">አሁን ይናገሩ</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{ጣቢያ ላይ ድምጸ-ከል አድርግ}one{ጣቢያዎች ላይ ድምጸ-ከል አድርግ}other{ጣቢያዎች ላይ ድምጸ-ከል አድርግ}}</translation> <translation id="8373652277231415614">በCrostini የተጋሩ ማውጫዎች</translation> +<translation id="8374243500935816406">ጣቢያዎች በሁሉም የእርስዎ ማሳያዎች ላይ መስኮቶችን እንዲያስተዳድሩ አይፍቀዱ</translation> <translation id="8376137163494131156">Google Cast ላይ ምን እየተፈጠረ እንዳለ ይንገሩን።</translation> <translation id="8376384591331888629">በዚህ ጣቢያ ላይ የሶስተኛ ወገን ኩኪዎችን ጨምሮ</translation> <translation id="8376451933628734023">ይህ የድር መተግበሪያ ሌላ መተግበሪያ ነው ብለው እንዲያስቡት ለማታለል እየሞከረ ከሆነ ያራግፉት።</translation> @@ -7748,7 +7753,7 @@ <translation id="8418445294933751433">&በትር አሳይ</translation> <translation id="8419098111404128271">የ«<ph name="SEARCH_TEXT" />» ውጤቶችን ይፈልጉ</translation> <translation id="8420308167132684745">የመዝገበ ቃላት ግቤቶችን ያርትዑ</translation> -<translation id="8421361468937925547">የቀጥታ መግለጫ ጽሑፍ (በእንግሊዝኛ ብቻ)</translation> +<translation id="8421361468937925547">የቀጥታ መግለጫ ጽሁፍ (በእንግሊዝኛ ብቻ)</translation> <translation id="8422787418163030046">ትሪ ይጎድላል</translation> <translation id="8424250197845498070">በላቀ ጥበቃ ታግዷል</translation> <translation id="8425213833346101688">ለውጥ</translation> @@ -7951,7 +7956,7 @@ <translation id="8639047128869322042">ጎጂ ሶፍትዌር ካለ በመፈተሽ ላይ...</translation> <translation id="8639635302972078117">የአጠቃቀም እና የምርመራ ውሂብ ይላኩ። ይህ መሣሪያ በአሁኑ ጊዜ በራስ-ሰር የምርመራ፣ የመሣሪያ እና የመተግበሪያ አጠቃቀም ውሂብ ወደ Google እየላከ ነው። ይህ ልጅዎን ለመለየት ስራ ላይ አይውልም፣ እና የስርዓት እና የመተግበሪያ እርጋታን እና ሌሎች ማሻሻያዎችን ያግዛል። አንዳንድ ውሑድ ውሂብ እንዲሁም የGoogle መተግበሪያዎችን እና እንደ የAndroid ገንቢዎች ያሉ አጋሮችን ያግዛሉ። የተጨማሪ የድር እና መተግበሪያ እንቅስቃሴ ቅንብር ለልጅዎ በርቶ ከሆነ ይህ ውሂብ ወደ የGoogle መለያቸው ሊቀመጥ ይችላል።</translation> <translation id="8642900771896232685">2 ሰከንዶች</translation> -<translation id="8642947597466641025">ጽሑፍ አተልቅ</translation> +<translation id="8642947597466641025">ጽሁፍ አተልቅ</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> አደገኛ ሊሆን ይችላል። እንዲቃኝ ወደ Google የላቀ ጥበቃ ይላክ?</translation> <translation id="8644047503904673749">{COUNT,plural, =0{ምንም ኩኪዎች የሉም}=1{1 ኩኪ ታግዷል}one{# ኩኪዎች ታግደዋል}other{# ኩኪዎች ታግደዋል}}</translation> <translation id="864423554496711319">በእርስዎ መለያ ላይ የተቀመጡ መሣሪያዎች</translation> @@ -7993,6 +7998,7 @@ <translation id="8670537393737592796">በፍጥነት ወደዚህ ለመመለስ የመጫኛ አዝራሩን ጠቅ በማድረግ <ph name="APP_NAME" /> ይጫኑ</translation> <translation id="867085395664725367">ጊዜያዊ የአገልጋይ ስህተት አጋጥሟል።</translation> <translation id="8673026256276578048">ድሩን ፈልግ...</translation> +<translation id="867329473311423817">በሁሉም የእርስዎ ማሳያዎች ላይ መስኮቶችን ማስተዳደር ይፈቀዳል</translation> <translation id="8673383193459449849">የአገልጋይ ችግር</translation> <translation id="8674903726754070732">የአጋጣሚ ነገር ሆኖ ኮምፒውተርዎ የተዋቀረው በተበላሸ የሃርድዌር መታወቂያ ነው። ይህ ChromeOS በቅርብ ጊዜዎቹ የደህንነት ጥገናዎች እንዳይዘመን ያግደዋል እና የእርስዎ ኮምፒውተር <ph name="BEGIN_BOLD" />ለተንኮል-አዘል ጥቃቶች የተጋለጠ ሊሆን ይችላል<ph name="END_BOLD" />።</translation> <translation id="8675704450909805533">ጫኚው <ph name="DEVICE_OS" />ን ለመጫን ትክክለኛ መዳረሻ ማግኘት አልቻለም።</translation> @@ -8152,7 +8158,7 @@ <translation id="8821045908425223359">የአይፒ አድራሻ በራስ-ሰር አዋቅር</translation> <translation id="8821268776955756404"><ph name="APP_NAME" /> ስራ ላይ ለመዋል ዝግጁ ነው።</translation> <translation id="882204272221080310">ለተጨማሪ ደህንነት ጽኑ ትዕዛዝን ያዘምኑ።</translation> -<translation id="8823514049557262177">የአገናኝ ጽሑፍ &ቅዳ</translation> +<translation id="8823514049557262177">የአገናኝ ጽሁፍ &ቅዳ</translation> <translation id="8823559166155093873">ኩኪዎችን አግድ</translation> <translation id="8823704566850948458">የይለፍ ቃል ጠቁም...</translation> <translation id="8824701697284169214">&ገጽ አክል...</translation> @@ -8178,7 +8184,7 @@ <translation id="8845001906332463065">እገዛ ያግኙ</translation> <translation id="8846132060409673887">የዚህ ኮምፒውተር አምራችና ሞዴል ማንበብ</translation> <translation id="8846163936679269230">የኢሲም መገለጫዎችን ዳግም ያስጀምሩ</translation> -<translation id="8846239054091760429">ሞኖ ኦዲዮ፣ ጀማሪ ድርጅት፣ የቀጥታ መግለጫ ጽሑፍ እና ተጨማሪ</translation> +<translation id="8846239054091760429">ሞኖ ኦዲዮ፣ ጀማሪ ድርጅት፣ የቀጥታ መግለጫ ጽሁፍ እና ተጨማሪ</translation> <translation id="8847523528195140327">ክዳኑ ሲዘጋ ዘግተህ ውጣ</translation> <translation id="8847988622838149491">ዩ ኤስ ቢ</translation> <translation id="8849001918648564819">ተደብቋል</translation> @@ -8411,7 +8417,7 @@ <ph name="BREAK" /> <ph name="BEGIN_LINK2" />policies.google.com<ph name="END_LINK2" /> ላይ Google ስለሚሰበስበው ውሂብ እና ለምን እንደሚሰበስብ ይረዱ።</translation> <translation id="9066777626153702300">የቦዘኑ ጣቢያዎች</translation> -<translation id="9066782832737749352">ጽሑፍ ወደ ንግግር</translation> +<translation id="9066782832737749352">ጽሁፍ ወደ ንግግር</translation> <translation id="9068298336633421551">የአካባቢ ፈቃድ ያላቸው የAndroid መተግበሪያዎች እና አገልግሎቶች የዚህን መሣሪያ አካባቢ እንዲጠቀሙ ይፍቀዱ። Google የአካባቢ ትክክለኝነትን እና በአካባቢ ላይ የተመሠረቱ አገልግሎቶችን ለማሻሻል በየጊዜው የአካባቢ ውሂብ ሊሰበስብና ይህን ውሂብ ስም-አልባ በሆነ መልኩ ሊጠቀምበት ይችላል።</translation> <translation id="9068598199622656904">ለቁልፍ ሰሌዳ አቋራጮች በተመሳሳይ ጊዜ ቁልፎችን ወደታች ይዞ በመቆየት ምትክ በአንድ ጊዜ አንድ ቁልፍ ይጫኑ</translation> <translation id="9068878141610261315">የማይደገፍ የፋይል ዓይነት</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 09a9b67b..88c5e6c 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -7536,6 +7536,7 @@ </translation> <translation id="8206745257863499010">موسيقي</translation> <translation id="8206859287963243715">خلوي</translation> +<translation id="8208216423136871611">عدم الحفظ</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{إشعار واحد جديد}zero{# إشعار جديد}two{إشعاران جديدان}few{# إشعارات جديدة}many{# إشعارًا جديدًا}other{# إشعار جديد}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{جارٍ تنزيل عنصر واحد}zero{جارٍ تنزيل عدّة عناصر}two{جارِ تنزيل عنصرين}few{جارٍ تنزيل عدّة عناصر}many{جارٍ تنزيل عدّة عناصر}other{جارٍ تنزيل عدّة عناصر}}</translation> <translation id="8213449224684199188">تم الدخول إلى وضع الصور</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index d3c5daa..da3989d 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -508,6 +508,7 @@ <translation id="1480663089572535854">"Seçin" əməliyyatı üçün təyinatı dəyişdirmək üçün geri qayıda bilərsiniz. Hər zaman Ayarlarda avtomatik skanlamanı deaktiv edə bilərsiniz.</translation> <translation id="1481537595330271162">Diskin ölçüsünü dəyişərkən xəta baş verdi</translation> <translation id="1482626744466814421">Bu tabı əlfəcinlərə əlavə edin...</translation> +<translation id="1482772681918035149">parolları redaktə edin</translation> <translation id="1483493594462132177">Göndərin</translation> <translation id="1484979925941077974">Sayt Bluetooth istifadə edir</translation> <translation id="1485015260175968628">İndi bunları bacarır:</translation> @@ -522,6 +523,7 @@ <translation id="1500801317528437432">Dəstəklənməyən Chrome tətbiqləri haqqında ətraflı məlumat</translation> <translation id="150411034776756821"><ph name="SITE" /> saytını silin</translation> <translation id="1504551620756424144">Paylaşılmış qovluqlar <ph name="BASE_DIR" /> ünvanındakı Windows'da əlçatandır.</translation> +<translation id="1505494256539862015">parolları eksport edin</translation> <translation id="1506061864768559482">Axtarış mühərriki</translation> <translation id="1507170440449692343">Bu səhifə ilə kameranıza daxil olma bloklandı.</translation> <translation id="1507246803636407672">Ləğv edin</translation> @@ -2959,6 +2961,7 @@ <translation id="3778740492972734840">&Developer alətləri</translation> <translation id="3778868487658107119">Ona suallar verin və iş tapşırın. Bu Sizin şəxsi Google'dur, hər zaman kömək etməyə hazırdır.</translation> <translation id="3781742599892759500">Linux mikrofona girişi</translation> +<translation id="3783889407390048282">Android'ə girişi itirməmək üçün yer boşaldın.</translation> <translation id="3784472333786002075">Kukilər vebsaytların yaratdığı fayllardır. İki növ kuki var: Birinci tərəf kukilər ziyarət etdiyiniz sayt tərəfindən yaradılır. Sayt ünvan panelində göstərilir. Üçüncü tərəf kukilər başqa saytlar tərəfindən yaradılır. Bu saytlar ziyarət etdiyiniz vebsaytda gördüyünüz reklam və ya şəkillər kimi bəzi məzmunun sahibidir.</translation> <translation id="3785308913036335955">Tətbiqlərin qısayollarını göstərin</translation> <translation id="3785727820640310185">Bu sayt üçün yadda saxlanmış parollar</translation> @@ -4269,6 +4272,7 @@ <translation id="5066100345385738837">ChromeOS ayarlarında güvənli DNS'i idarə edin</translation> <translation id="5067399438976153555">Həmişə aktivdir</translation> <translation id="5067867186035333991"><ph name="HOST" /> mikforonu işlətmək istəyəndə icazə alsın</translation> +<translation id="5068553687099139861">parolları göstərin</translation> <translation id="5068918910148307423">Son qapadılan saytlara data göndərilməsini və qəbulunu tamamlamağa icazə verməyin</translation> <translation id="5068919226082848014">Pizza</translation> <translation id="5070710277167211639">Naviqasiyaları HTTPS-ə yüksəltmək və dəstəkləməyən saytları yükləmədən əvvəl sizi xəbərdar etmək</translation> @@ -6418,6 +6422,7 @@ <translation id="7152478047064750137">Bu artırma xüsusi icazələr tələb etmir</translation> <translation id="7154130902455071009">Başlanğıc səhifənizi buna dəyişin: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Kamera və ya fayldan mövcud foto</translation> +<translation id="7159953856712257647">Defolt olaraq quraşdırılıb</translation> <translation id="7160182524506337403">İndi telefonunuzun bildirişlərinə baxa bilərsiniz</translation> <translation id="7163202347044721291">Aktivləşdirmə kodu doğrulanır...</translation> <translation id="716640248772308851">"<ph name="EXTENSION" />" yoxlanılmış məkanlarda şəkil, video və səs fayllarını oxuya bilər.</translation> @@ -7516,6 +7521,7 @@ <translation id="820568752112382238">Ən çox daxil olduğunuz saytlar</translation> <translation id="8206745257863499010">Blyuz</translation> <translation id="8206859287963243715">Mobil</translation> +<translation id="8208216423136871611">Yadda saxlamayın</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Yeni bildiriş}other{# yeni bildiriş}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Endirmə gözlənilir}other{Endirmə gözlənilir}}</translation> <translation id="8213449224684199188">Foto rejimi daxil edildi</translation> @@ -7628,6 +7634,7 @@ <translation id="8314835274931377415">Keçirici ilə Giriş ayarlanması başladılsın?</translation> <translation id="8317582043908962055">P&DF mətnini tanıyın</translation> <translation id="8317671367883557781">Şəbəkə bağlantısı əlavə edin</translation> +<translation id="8317965619823678157">parolları kopyalayın</translation> <translation id="8318266828739827371">Ekranınızın böyüdülmüş sahəsini görmək üçün bölünmüş ekran görünüşündən istifadə edin. Daxili böyüdücünü aktiv və deaktiv etmək üçün Axtarış + Ctrl + D istifadə edin.</translation> <translation id="8319414634934645341">Genişləndirilmiş Açar İstifadəsi</translation> <translation id="8321837372750396788">Bu <ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> tərəfindən idarə ediləcək.</translation> @@ -8553,6 +8560,7 @@ <translation id="929117907539171075">Quraşdırılmış tətbiqdəki oflayn data da silinəcək</translation> <translation id="930268624053534560">Detallı Zaman Damğaları</translation> <translation id="930893132043726269">Hazırda rouminqdədir</translation> +<translation id="93140074055951850">Android tətbiqləri dayandırılıb</translation> <translation id="932327136139879170">Ev</translation> <translation id="932508678520956232">Çapa başlamaq alınmadı.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Bu fayl Güvənlik yoxlanışı üçün çox böyükdür. 50 MB-a qədər faylları yükləyə bilərsiniz.}other{Bu fayllardan bəziləri Güvənlik yoxlanışı üçün çox böyükdür. 50 MB-a qədər faylları yükləyə bilərsiniz.}}</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index c76684c..59cf52e 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -194,6 +194,7 @@ <translation id="1174391930667737831">Цэнтр прыватнасці</translation> <translation id="117445914942805388">Каб ачысціць даныя прагляду з усіх сінхранізаваных прылад і Уліковага запісу Google, <ph name="BEGIN_LINK" />перайдзіце ў налады сінхранізацыі<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Друк...</translation> +<translation id="1176378369905028399">Пароль для гэтага ўліковага запісу ўжо захаваны ў Менеджары пароляў Google (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">Не маюць дазволу змяняць файлы або папкі на прыладзе</translation> <translation id="1177863135347784049">Карыстальніцкая</translation> <translation id="1178581264944972037">Прыпыніць</translation> @@ -798,6 +799,7 @@ <translation id="1745732479023874451">Кіраваць кантактамі</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}one{Адкрыць і змяніць у гэтай вэб-праграме # файл?}few{Адкрыць і змяніць у гэтай вэб-праграме # файлы?}many{Адкрыць і змяніць у гэтай вэб-праграме # файлаў?}other{Адкрыць і змяніць у гэтай вэб-праграме # файла?}}</translation> <translation id="1748563609363301860">Вы можаце захаваць пароль ва Уліковым запісе Google або толькі на гэтай прыладзе</translation> +<translation id="1749733017156547309">Неабходна ўказаць пароль</translation> <translation id="1750172676754093297">Не ўдалося захаваць адбіткі пальцаў на вашым ключы бяспекі</translation> <translation id="1751249301761991853">Персаналізацыя</translation> <translation id="1751262127955453661">Сайт <ph name="ORIGIN" /> зможа змяняць файлы ў папцы "<ph name="FOLDERNAME" />", пакуль вы не закрыеце ўсе яго ўкладкі</translation> @@ -1745,6 +1747,7 @@ <translation id="2602501489742255173">Каб пачаць, правядзіце пальцам уверх</translation> <translation id="2603115962224169880">Ачыстка камп'ютара</translation> <translation id="2603355571917519942">Функцыя Voice Match гатовая да работы</translation> +<translation id="2604129989323098489">Сайты звычайна запытваюць інфармацыю пра дысплэі, каб карэктна адкрываць і размяшчаць вокны (напрыклад, пры паралельным паказе дакументаў і змесціва ў поўнаэкранным рэжыме)</translation> <translation id="2604255671529671813">Памылка падключэння да сеткі</translation> <translation id="2605668923777146443">Каб прагледзець параметры функцыі Better Together, перайдзіце ў <ph name="LINK_BEGIN" />Налады<ph name="LINK_END" />.</translation> <translation id="2606246518223360146">Звязаць даныя</translation> @@ -1790,6 +1793,7 @@ <translation id="2645047101481282803">Гэтай прыладай кіруе <ph name="PROFILE_NAME" /></translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{На прыладу імпартаваны 1 пароль}one{На прыладу імпартаваны {NUM_PASSWORDS} пароль}few{На прыладу імпартаваны {NUM_PASSWORDS} паролі}many{На прыладу імпартавана {NUM_PASSWORDS} пароляў}other{На прыладу імпартаваны {NUM_PASSWORDS} пароля}}</translation> <translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645515095874728277">Пароль для гэтага ўліковага запісу ўжо захаваны на дадзенай прыладзе</translation> <translation id="2649045351178520408">ASCII з кадзіраваннем Base64, ланцужок сертыфікатаў</translation> <translation id="2652129567809778422">Выберыце пароль</translation> <translation id="2653033005692233957">Пошук не выкананы</translation> @@ -2150,6 +2154,7 @@ <translation id="2972581237482394796">&Узнавіць</translation> <translation id="2973324205039581528">Выключыць гук на сайце</translation> <translation id="2973537811036309675">Бакавая панэль</translation> +<translation id="2975761176769946178">Неабходна ўказаць URL-адрас</translation> <translation id="2976557544729462544">Для паўнацэннай работы некаторых прылад неабходна адключыць абмежаванне доступу да даных.</translation> <translation id="2977480621796371840">Выдаліць з групы</translation> <translation id="2979639724566107830">Адкрыць у новым акне</translation> @@ -2391,6 +2396,7 @@ <translation id="3227137524299004712">Мікрафон</translation> <translation id="3232754137068452469">Вэб-праграма</translation> <translation id="3233271424239923319">Стварыць рэзервовую копію файлаў і праграм Linux</translation> +<translation id="3234251228180563751">Даўжыня імені карыстальніка перавышае 1000 сімвалаў</translation> <translation id="3234978181857588512">Захаваць на прыладзе</translation> <translation id="3238192140106069382">Ідзе падключэнне і спраўджанне</translation> <translation id="3239373508713281971">Абмежаванне часу выдалена для праграмы "<ph name="APP_NAME" />"</translation> @@ -5208,6 +5214,7 @@ <translation id="5975792506968920132">Працэнт зараду акумулятара</translation> <translation id="5976160379964388480">Іншыя</translation> <translation id="5978277834170881274">&Выкарыстоўваць базавую праверку правапісу</translation> +<translation id="5978493744931296692">Адміністратар адключыў іншыя профілі</translation> <translation id="5979084224081478209">Праверыць паролі</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Вы зноў уключылі адно патэнцыйна шкоднае пашырэнне}one{Вы зноў уключылі {NUM_EXTENSIONS} патэнцыйна шкоднае пашырэнне}few{Вы зноў уключылі {NUM_EXTENSIONS} патэнцыйна шкодныя пашырэнні}many{Вы зноў уключылі {NUM_EXTENSIONS} патэнцыйна шкодных пашырэнняў}other{Вы зноў уключылі {NUM_EXTENSIONS} патэнцыйна шкоднага пашырэння}}</translation> <translation id="5979353814339191480">Гэты параметр прымяняецца да прылад Chromebook, якія выкарыстоўваюць план перадачы даных або падключаны да мабільнай сеткі праз USB-мадэм, а таксама пры падключэнні да партатыўнага хот-спота</translation> @@ -5372,6 +5379,7 @@ <translation id="6130692320435119637">Дадаць сетку Wi-Fi</translation> <translation id="6130887916931372608">Клавіша клавіятуры</translation> <translation id="6135823405800500595">Упэўніцеся, што тэлефон разблакіраваны, знаходзіцца паблізу і што на ім уключаны Bluetooth і Wi-Fi</translation> +<translation id="6135826623269483856">Сайты, якім забаронена кіраваць вокнамі на ўсіх дысплэях</translation> <translation id="6136114942382973861">Закрыць панэль спамповак</translation> <translation id="6136287496450963112">Ключ бяспекі не абаронены PIN-кодам. Каб кіраваць адбіткамі пальцаў, спачатку стварыце PIN-код.</translation> <translation id="6138680304137685902">Подпіс X9.62 ECDSA з SHA-384</translation> @@ -7383,6 +7391,7 @@ <ph name="BEGIN_PARAGRAPH3" />Гэты сэрвіс можна выключыць у Наладах.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Укладкі</translation> <translation id="8076835018653442223">Доступ да лакальных файлаў на прыладзе адключаны адміністратарам</translation> +<translation id="80798452873915119">Сайты могуць запытваць дазвол кіраваць вокнамі на ўсіх дысплэях</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Гэтым сеансам кіруе <ph name="MANAGER_NAME" />. Адміністратары могуць выдаліць ваш профіль, а таксама адсочваць сеткавы трафік.</translation> <translation id="8081989000209387414">Выключыць адладку ADB?</translation> @@ -7687,6 +7696,7 @@ <translation id="8371695176452482769">Гаварыце</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Выключыць гук сайта}one{Выключыць гук сайтаў}few{Выключыць гук сайтаў}many{Выключыць гук сайтаў}other{Выключыць гук сайтаў}}</translation> <translation id="8373652277231415614">Абагуленыя каталогі Crostini</translation> +<translation id="8374243500935816406">Не дазваляць сайтам кіраваць вокнамі на ўсіх дысплэях</translation> <translation id="8376137163494131156">Адпраўце нам водгук пра Google Cast.</translation> <translation id="8376384591331888629">У тым ліку староннія файлы cookie на гэтым сайце</translation> <translation id="8376451933628734023">Калі гэта вэб-праграма спрабуе выдаць сябе за іншую, выдаліце яе.</translation> @@ -7981,6 +7991,7 @@ <translation id="8670537393737592796">Каб хутка вяртацца сюды, усталюйце праграму "<ph name="APP_NAME" />", націснуўшы кнопку ўсталявання</translation> <translation id="867085395664725367">Узнікла часовая памылка сервера.</translation> <translation id="8673026256276578048">Пошук па ўсім інтэрнэце...</translation> +<translation id="867329473311423817">Сайты, якім дазволена кіраваць вокнамі на ўсіх дысплэях</translation> <translation id="8673383193459449849">Праблема з серверам</translation> <translation id="8674903726754070732">Ваш камп'ютар сканфігураваны з няправільным ідэнтыфікатарам апаратнага забеспячэння. Гэта не дае ўсталяваць апошнія выпраўленні сістэмы бяспекі для Chrome OS. Ваш камп'ютар <ph name="BEGIN_BOLD" />можа быць прыступным для атак зламыснікаў<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Усталёўшчык не змог знайсці адпаведнае месца для ўсталявання <ph name="DEVICE_OS" />.</translation> @@ -8001,6 +8012,7 @@ <translation id="8683081248374354009">Скінуць параметры групы</translation> <translation id="8688672835843460752">Даступна</translation> <translation id="8690129572193755009">Сайты могуць запытваць дазвол на кіраванне пратаколамі</translation> +<translation id="8692107307702113268">Даўжыня пароля перавышае 1000 сімвалаў</translation> <translation id="8695139659682234808">Дадаванне функцыі бацькоўскага кантролю па завяршэнні наладкі</translation> <translation id="8695825812785969222">Адкрыць &размяшчэнне...</translation> <translation id="8698269656364382265">Каб вярнуцца на папярэдні экран, правядзіце пальцам злева ў цэнтр.</translation> @@ -8284,6 +8296,7 @@ <translation id="8960638196855923532">Цяпер вы можаце праглядаць нядаўнія апавяшчэнні і праграмы з тэлефона</translation> <translation id="8962051932294470566">Адначасова можна абагульваць толькі адзін файл. Паўтарыце спробу, калі будзе завершана цяперашняя перадача.</translation> <translation id="8962083179518285172">Схаваць падрабязнасці</translation> +<translation id="8962863356073277855">URL-адрас павінен мець фармат https://www.example.com</translation> <translation id="8962918469425892674">Гэты сайт выкарыстоўвае датчыкі руху або святла.</translation> <translation id="8965037249707889821">Увядзіце стары пароль</translation> <translation id="89667524227025535">Адсканіруйце QR-код камерай прылады або ўвядзіце код актывацыі, атрыманы ад аператара</translation> @@ -8551,6 +8564,7 @@ <translation id="9220525904950070496">Выдаліць уліковы запіс</translation> <translation id="9220820413868316583">Адніміце палец і паўтарыце спробу.</translation> <translation id="922152298093051471">Наладзіць Chrome</translation> +<translation id="9222839025964079645">Не ўдалося імпартаваць наступную колькасць пароляў: <ph name="COUNT" /></translation> <translation id="923467487918828349">Паказаць усё</translation> <translation id="924818813611903184">Кіраванне моўнымі параметрамі ў наладах Chrome OS</translation> <translation id="929117907539171075">Пазасеткавыя даныя ва ўсталяванай праграме будуць таксама выдалены</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index b2b58405..187f2bf0 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -598,6 +598,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (гост)</translation> <translation id="1572266655485775982">Активиране на Wi-Fi</translation> <translation id="1572876035008611720">Въведете имейл адреса си</translation> +<translation id="1573117025466282241">Използване на телефона чрез QR код</translation> <translation id="1575741822946219011">Езици и въвеждане</translation> <translation id="1576594961618857597">Стандартен бял аватар</translation> <translation id="1578558981922970608">Принудително затваряне</translation> @@ -7537,6 +7538,7 @@ <translation id="820568752112382238">Най-посещавани сайтове</translation> <translation id="8206745257863499010">Музикант</translation> <translation id="8206859287963243715">Клетъчно</translation> +<translation id="8208216423136871611">Без запазване</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Ново известие}other{# нови известия}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Изтегля се файл}other{Изтеглят се файлове}}</translation> <translation id="8213449224684199188">Преминахте в режим за снимки</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index de5e489..96fe3fd 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -514,6 +514,7 @@ <translation id="1480663089572535854">'বেছে নিন' বিকল্পের জন্য অ্যাসাইনমেন্ট পরিবর্তন করতে আপনি ফিরে যেতে পারবেন। আপনি সব সময় 'সেটিংস' থেকে অটো-স্ক্যান বন্ধ করতে পারবেন।</translation> <translation id="1481537595330271162">ডিস্ক রিসাইজ করার সময় কোনও সমস্যা হয়েছে</translation> <translation id="1482626744466814421">এই ট্যাব বুকমার্ক করুন...</translation> +<translation id="1482772681918035149">পাসওয়ার্ড এডিট করুন</translation> <translation id="1483493594462132177">পাঠান</translation> <translation id="1484979925941077974">সাইট ব্লুটুথ ব্যবহার করছে</translation> <translation id="1485015260175968628">এটি এখন করতে পারে:</translation> @@ -528,6 +529,7 @@ <translation id="1500801317528437432">কাজ করবে না এমন Chrome অ্যাপের বিষয়ে আরও জানুন</translation> <translation id="150411034776756821"><ph name="SITE" /> সরান</translation> <translation id="1504551620756424144">শেয়ার করা ফোল্ডার, Windows-এর মধ্যে <ph name="BASE_DIR" />-এ পাওয়া যাবে।</translation> +<translation id="1505494256539862015">পাসওয়ার্ড এক্সপোর্ট করুন</translation> <translation id="1506061864768559482">সার্চ ইঞ্জিন</translation> <translation id="1507170440449692343">এই পৃষ্ঠাটিকে আপনার ক্যামেরা অ্যাক্সেস করা থেকে অবরুদ্ধ করা হয়েছে৷</translation> <translation id="1507246803636407672">এবং পরিত্যাগ</translation> @@ -2977,6 +2979,7 @@ <translation id="3778740492972734840">&ডেভেলপার টুল</translation> <translation id="3778868487658107119">প্রশ্ন করুন। কিছু করতে বলুন। এটি আপনার নিজস্ব Google যেটি সবসময় আপনাকে সাহায্য করে।</translation> <translation id="3781742599892759500">Linux-এ মাইক্রোফোনের অ্যাক্সেস</translation> +<translation id="3783889407390048282">Android-এ অ্যাক্সেস হারানো এড়াতে জায়গা খালি করুন।</translation> <translation id="3784472333786002075">ওয়েবসাইট যে ফাইলগুলি তৈরি করে তাকে কুকি বলা হয়। কুকি দুই ধরনের: আপনার ব্রাউজ করা ওয়েবসাইট ফার্স্ট-পার্টি কুকি তৈরি করে। অ্যাড্রেস বারে সাইটটি দেখা যায়। অন্যান্য সাইট থার্ড-পার্টি কুকি তৈরি করে। এই সাইটগুলিতে বিজ্ঞাপন এবং ছবির মতো কিছু কন্টেন্ট থাকে যা আপনি আপনার ভিজিট করা ওয়েবসাইটে দেখতে পান।</translation> <translation id="3785308913036335955">অ্যাপ্লিকেশানগুলির শর্টকাট দেখান</translation> <translation id="3785727820640310185">এই সাইটের জন্য সেভ করা পাসওয়ার্ড</translation> @@ -4291,6 +4294,7 @@ <translation id="5066100345385738837">ChromeOS সেটিংসে নিরাপদ ডিএনএস ম্যানেজ করুন</translation> <translation id="5067399438976153555">সর্বদা চালু</translation> <translation id="5067867186035333991"><ph name="HOST" /> আপনার মাইক্রোফোন অ্যাক্সেস করতে চায় কিনা জিজ্ঞাসা করুন</translation> +<translation id="5068553687099139861">পাসওয়ার্ড দেখুন</translation> <translation id="5068918910148307423">সম্প্রতি বন্ধ করা সাইটগুলিকে ডেটা পাঠানো ও গ্রহণ শেষ করতে মঞ্জুরি দেবেন না</translation> <translation id="5068919226082848014">পিৎজা</translation> <translation id="5070710277167211639">নেভিগেশনগুলি HTTPS-এ আপগ্রেড করুন এবং HTTPS-এ কাজ করে না এমন সাইট লোড করার আগে সতর্কবার্তা পান</translation> @@ -6446,6 +6450,7 @@ <translation id="7152478047064750137">এই এক্সটেনশনটির জন্য কোনও বিশেষ অনুমতির প্রয়োজন নেই</translation> <translation id="7154130902455071009">আপনার সূচনা পৃষ্ঠাকে এতে পরিবর্তন করুন: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">ক্যামেরা বা ফাইল থেকে বিদ্যমান ফটো</translation> +<translation id="7159953856712257647">ডিফল্ট হিসেবে ইনস্টল করা হয়েছে</translation> <translation id="7160182524506337403">আপনি এখন আপনার ফোনের বিজ্ঞপ্তি দেখতে পারেন</translation> <translation id="7163202347044721291">অ্যাক্টিভেশন কোড যাচাই করা হচ্ছে...</translation> <translation id="716640248772308851">" <ph name="EXTENSION" /> " নির্দিষ্ট করা অবস্থানে ছবি, ভিডিও এবং সাউন্ড ফাইলগুলি পড়তে পারে৷</translation> @@ -7545,6 +7550,7 @@ <translation id="820568752112382238">সবচেয়ে বেশিবার দেখা সাইট</translation> <translation id="8206745257863499010">ব্লুজস</translation> <translation id="8206859287963243715">সেলুলার</translation> +<translation id="8208216423136871611">সংরক্ষণ করবেন না</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{একটি নতুন বিজ্ঞপ্তি}one{#টি নতুন বিজ্ঞপ্তি}other{#টি নতুন বিজ্ঞপ্তি}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ডাউনলোড করা হচ্ছে}one{ডাউনলোডগুলি করা হচ্ছে}other{ডাউনলোডগুলি করা হচ্ছে}}</translation> <translation id="8213449224684199188">ফটো মোডটি চালু হয়েছে</translation> @@ -7657,6 +7663,7 @@ <translation id="8314835274931377415">অ্যাক্সেস পাল্টান সেটআপ চালু করতে চান?</translation> <translation id="8317582043908962055">P&DF টেক্সট শনাক্ত করুন</translation> <translation id="8317671367883557781">নেটওয়ার্ক সংযোগ যোগ করুন</translation> +<translation id="8317965619823678157">পাসওয়ার্ড কপি করুন</translation> <translation id="8318266828739827371">আপনার স্ক্রিনের কোনও অংশ বড় করে দেখতে, স্প্লিট স্ক্রিন ভিউ ব্যবহার করুন। 'ডক করা ম্যাগনিফায়ার' চালু বা বন্ধ করতে, 'Search + Ctrl + D' কী ব্যবহার করুন।</translation> <translation id="8319414634934645341">প্রসারিত কী ব্যবহার</translation> <translation id="8321837372750396788">এই <ph name="DEVICE_TYPE" />, <ph name="MANAGER" />-এর মাধ্যমে ম্যানেজ করা হবে।</translation> @@ -8585,6 +8592,7 @@ <translation id="929117907539171075">ইনস্টল করা অ্যাপের অফলাইন ডেটা মুছে ফেলা হবে</translation> <translation id="930268624053534560">বিস্তারিত টাইমস্ট্যাম্প</translation> <translation id="930893132043726269">বর্তমানে রোমিংয়ে আছে</translation> +<translation id="93140074055951850">Android অ্যাপ থামানো হয়েছে</translation> <translation id="932327136139879170">হোম</translation> <translation id="932508678520956232">প্রিন্ট সূচনা করা যায়নি</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{এই ফাইল নিরাপত্তা পরীক্ষা করার পক্ষে খুব বড়। আপনি সর্বাধিক ৫০ এমবি সাইজের ফাইল আপলোড করতে পারবেন।}one{এগুলির মধ্যে কিছু ফাইল নিরাপত্তা পরীক্ষা করার পক্ষে খুব বড়। আপনি সর্বাধিক ৫০ এমবি সাইজের ফাইল আপলোড করতে পারবেন।}other{এগুলির মধ্যে কিছু ফাইল নিরাপত্তা পরীক্ষা করার পক্ষে খুব বড়। আপনি সর্বাধিক ৫০ এমবি সাইজের ফাইল আপলোড করতে পারবেন।}}</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index bb32831..802e56e8 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -7548,6 +7548,7 @@ <translation id="820568752112382238">Najposjećenije web lokacije</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">Mobitel</translation> +<translation id="8208216423136871611">Ne spremaj</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Novo obavještenje}one{# novo obavještenje}few{# nova obavještenja}other{# novih obavještenja}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Preuzimanje je u toku}one{Preuzimanja su u toku}few{Preuzimanja su u toku}other{Preuzimanja su u toku}}</translation> <translation id="8213449224684199188">Ušli ste u način rada za fotografije</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 4f084b5e5..38870c6 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -598,6 +598,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (convidat)</translation> <translation id="1572266655485775982">Activa la Wi-Fi</translation> <translation id="1572876035008611720">Introdueix el correu electrònic</translation> +<translation id="1573117025466282241">Utilitza el telèfon amb un codi QR</translation> <translation id="1575741822946219011">Idiomes i introducció de text</translation> <translation id="1576594961618857597">Avatar blanc predeterminat</translation> <translation id="1578558981922970608">Força el tancament</translation> @@ -7521,6 +7522,7 @@ <translation id="820568752112382238">Els llocs web més visitats</translation> <translation id="8206745257863499010">Música</translation> <translation id="8206859287963243715">Cel·lular</translation> +<translation id="8208216423136871611">No desis</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Notificació nova}other{# notificacions noves}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Baixada en curs}other{Baixades en curs}}</translation> <translation id="8213449224684199188">S'ha entrat al mode de fotos</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 49c5be5..90d11dd3 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -194,6 +194,7 @@ <translation id="1174391930667737831">Centrum ochrany soukromí</translation> <translation id="117445914942805388">Chcete-li vymazat údaje o prohlížení ze všech synchronizovaných zařízení i z účtu Google, přejděte na <ph name="BEGIN_LINK" />nastavení synchronizace<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">Tisk...</translation> +<translation id="1176378369905028399">Heslo k tomuto účtu už je ve vašem Správci hesel Google (<ph name="USER_EMAIL" />) uloženo</translation> <translation id="1176471985365269981">Zákaz upravovat soubory a složky v zařízení</translation> <translation id="1177863135347784049">Vlastní</translation> <translation id="1178581264944972037">Pozastavit</translation> @@ -511,6 +512,7 @@ <translation id="1480663089572535854">Můžete se vrátit zpět a změnit přiřazení pro akci Vybrat. Automatické prohledávání můžete kdykoliv vypnout v sekci Nastavení.</translation> <translation id="1481537595330271162">Při změně velikosti disku došlo k chybě</translation> <translation id="1482626744466814421">Přidat tuto kartu do záložek...</translation> +<translation id="1482772681918035149">upravovat hesla</translation> <translation id="1483493594462132177">Odeslat</translation> <translation id="1484979925941077974">Web používá Bluetooth</translation> <translation id="1485015260175968628">Nyní může:</translation> @@ -525,6 +527,7 @@ <translation id="1500801317528437432">Další informace o nepodporovaných aplikacích pro Chrome</translation> <translation id="150411034776756821">Odebrat web <ph name="SITE" /></translation> <translation id="1504551620756424144">Sdílené složky jsou ve Windows k dispozici v adresáři <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">exportovat hesla</translation> <translation id="1506061864768559482">Vyhledávač</translation> <translation id="1507170440449692343">Přístup této stránky k vaší kameře je zablokován.</translation> <translation id="1507246803636407672">&Smazat</translation> @@ -599,6 +602,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (host)</translation> <translation id="1572266655485775982">Aktivovat Wi-Fi</translation> <translation id="1572876035008611720">Zadejte svůj e-mail</translation> +<translation id="1573117025466282241">Použít telefon s QR kódem</translation> <translation id="1575741822946219011">Jazyky a metody zadávání</translation> <translation id="1576594961618857597">Výchozí bílý avatar</translation> <translation id="1578558981922970608">Ukončit aplikaci</translation> @@ -796,6 +800,7 @@ <translation id="1745732479023874451">Spravovat kontakty</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}few{Otevřít a upravit # soubory v této webové aplikaci?}many{Otevřít a upravit # souboru v této webové aplikaci?}other{Otevřít a upravit # souborů v této webové aplikaci?}}</translation> <translation id="1748563609363301860">Heslo můžete uložit do účtu Google nebo jen do tohoto zařízení</translation> +<translation id="1749733017156547309">Heslo je povinné</translation> <translation id="1750172676754093297">Váš bezpečnostní klíč neumí ukládat otisky</translation> <translation id="1751249301761991853">Osobní</translation> <translation id="1751262127955453661">Dokud nezavřete všechny karty webu <ph name="ORIGIN" />, bude moci upravovat soubory ve složce <ph name="FOLDERNAME" /></translation> @@ -1789,6 +1794,7 @@ <translation id="2645047101481282803">Toto zařízení spravuje organizace <ph name="PROFILE_NAME" /></translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Do tohoto zařízení bylo importováno 1 heslo}few{Do tohoto zařízení byla importována {NUM_PASSWORDS} hesla}many{Do tohoto zařízení bylo importováno {NUM_PASSWORDS} hesla}other{Do tohoto zařízení bylo importováno {NUM_PASSWORDS} hesel}}</translation> <translation id="2645435784669275700">ChromeOS</translation> +<translation id="2645515095874728277">Heslo tohoto účtu už je v tomto zařízení uloženo</translation> <translation id="2649045351178520408">Soubor ASCII kódovaný Base64, řetězec certifikátů</translation> <translation id="2652129567809778422">Vyberte heslo</translation> <translation id="2653033005692233957">Vyhledávání se nezdařilo</translation> @@ -2149,6 +2155,7 @@ <translation id="2972581237482394796">&Opakovat</translation> <translation id="2973324205039581528">Ztlumit web</translation> <translation id="2973537811036309675">Boční panel</translation> +<translation id="2975761176769946178">Adresa URL je povinná</translation> <translation id="2976557544729462544">Některá zařízení vyžadují deaktivaci ochrany přístupu k datům, aby mohla fungovat správně nebo s plným výkonem.</translation> <translation id="2977480621796371840">Odebrat ze skupiny</translation> <translation id="2979639724566107830">Otevřít v novém okně</translation> @@ -2390,6 +2397,7 @@ <translation id="3227137524299004712">Mikrofon</translation> <translation id="3232754137068452469">Webová aplikace</translation> <translation id="3233271424239923319">Zálohovat aplikace a soubory systému Linux</translation> +<translation id="3234251228180563751">Uživatelské jméno má víc než 1000 znaků</translation> <translation id="3234978181857588512">Uložit do zařízení</translation> <translation id="3238192140106069382">Připojování a ověřování</translation> <translation id="3239373508713281971">U aplikace <ph name="APP_NAME" /> byl odstraněn časový limit</translation> @@ -2957,6 +2965,7 @@ <translation id="3778740492972734840">&Nástroje pro vývojáře</translation> <translation id="3778868487658107119">Můžete mu zadávat dotazy. Můžete mu udělovat příkazy. Je to váš osobní Google a je vám neustále k službám.</translation> <translation id="3781742599892759500">Přístup Linuxu k mikrofonu</translation> +<translation id="3783889407390048282">Uvolněte místo, abyste nepřišli o přístup k Androidu.</translation> <translation id="3784472333786002075">Cookies jsou soubory vytvářené webovými stránkami. Existují dva typy souborů cookie: Soubory cookie první strany jsou vytvářeny navštíveným webem. Web je uveden na adresním řádku. Soubory cookie třetích stran jsou vytvářeny ostatními weby. Tyto weby na navštívené stránce vlastní nějaký obsah, např. reklamy nebo obrázky.</translation> <translation id="3785308913036335955">Zobrazit zástupce aplikací</translation> <translation id="3785727820640310185">Uložená hesla pro tento web</translation> @@ -4268,6 +4277,7 @@ <translation id="5066100345385738837">Spravovat zabezpečené DNS v nastavení systému ChromeOS</translation> <translation id="5067399438976153555">Vždy zapnuto</translation> <translation id="5067867186035333991">Zobrazit dotaz, pokud bude chtít web <ph name="HOST" /> používat mikrofon</translation> +<translation id="5068553687099139861">zobrazovat hesla</translation> <translation id="5068918910148307423">Nepovolovat nedávno zavřeným webům dokončit odeslání a příjem dat</translation> <translation id="5068919226082848014">Pizza</translation> <translation id="5070710277167211639">Upgradovat navigaci na HTTPS a před načtením webů, které tento protokol nepodporují, zobrazit upozornění</translation> @@ -5203,6 +5213,7 @@ <translation id="5975792506968920132">Procento nabití baterie</translation> <translation id="5976160379964388480">Ostatní</translation> <translation id="5978277834170881274">&Používat základní kontrolu pravopisu</translation> +<translation id="5978493744931296692">Váš administrátor zakázal další profily</translation> <translation id="5979084224081478209">Zkontrolovat hesla</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Znovu jste zapnuli jedno potenciálně škodlivé rozšíření}few{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivá rozšíření}many{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivého rozšíření}other{Znovu jste zapnuli {NUM_EXTENSIONS} potenciálně škodlivých rozšíření}}</translation> <translation id="5979353814339191480">Tato možnost se týká Chromebooků s datovým tarifem, hardwarovým klíčem pro mobilní síť nebo tetheringu na přenosný hotspot</translation> @@ -6419,6 +6430,7 @@ <translation id="7152478047064750137">Toto rozšíření nevyžaduje žádná speciální oprávnění.</translation> <translation id="7154130902455071009">Změnit úvodní stránku na: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Stávající fotka z fotoaparátu nebo souboru</translation> +<translation id="7159953856712257647">Nainstalováno ve výchozím nastavení</translation> <translation id="7160182524506337403">Nyní můžete zobrazit oznámení v telefonu</translation> <translation id="7163202347044721291">Ověřování aktivačního kódu…</translation> <translation id="716640248772308851">Rozšíření <ph name="EXTENSION" /> může číst obrázky, video a zvukové soubory v povolených umístěních.</translation> @@ -7518,6 +7530,7 @@ <translation id="820568752112382238">Nejnavštěvovanější weby</translation> <translation id="8206745257863499010">Melodie</translation> <translation id="8206859287963243715">Mobil</translation> +<translation id="8208216423136871611">Neukládat</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nové oznámení}few{# nová oznámení}many{# nového oznámení}other{# nových oznámení}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Probíhá stahování}few{Probíhají stahování}many{Probíhají stahování}other{Probíhají stahování}}</translation> <translation id="8213449224684199188">Přešli jste do režimu fotek</translation> @@ -7630,6 +7643,7 @@ <translation id="8314835274931377415">Spustit nastavení přístupu pomocí přepínačů?</translation> <translation id="8317582043908962055">Rozpoznat text P&DF</translation> <translation id="8317671367883557781">Přidat připojení k síti</translation> +<translation id="8317965619823678157">kopírovat hesla</translation> <translation id="8318266828739827371">Pomocí rozdělené obrazovky můžete zobrazit zvětšenou oblast na obrazovce. Zabudovanou lupu zapnete a vypnete stisknutím kláves Hledat + Ctrl + D.</translation> <translation id="8319414634934645341">Rozšířené použití klíče</translation> <translation id="8321837372750396788">Toto zařízení <ph name="DEVICE_TYPE" /> bude spravováno doménou <ph name="MANAGER" />.</translation> @@ -7999,6 +8013,7 @@ <translation id="8683081248374354009">Resetovat skupinu</translation> <translation id="8688672835843460752">Dostupné</translation> <translation id="8690129572193755009">Weby mohou žádat o povolení zpracovávat protokoly</translation> +<translation id="8692107307702113268">Heslo má víc než 1000 znaků</translation> <translation id="8695139659682234808">Přidejte rodičovskou kontrolu po dokončení nastavení</translation> <translation id="8695825812785969222">&Otevřít umístění...</translation> <translation id="8698269656364382265">Na předchozí obrazovku se vrátíte přejetím prstem z levé strany obrazovky.</translation> @@ -8281,6 +8296,7 @@ <translation id="8960638196855923532">Nyní můžete zobrazit oznámení a aplikace v telefonu</translation> <translation id="8962051932294470566">Soubory lze sdílet pouze po jednom. Zkuste to znovu po dokončení aktuálního přenosu.</translation> <translation id="8962083179518285172">Skrýt podrobnosti</translation> +<translation id="8962863356073277855">Formát adresy URL musí být https://www.example.com</translation> <translation id="8962918469425892674">Tento web používá senzory pohybu nebo osvětlení.</translation> <translation id="8965037249707889821">Zadat staré heslo</translation> <translation id="89667524227025535">Pomocí fotoaparátu zařízení naskenujte QR kód nebo zadejte aktivační kód, který vám poskytl operátor</translation> @@ -8551,11 +8567,13 @@ <translation id="9220525904950070496">Odebrat účet</translation> <translation id="9220820413868316583">Zdvihněte prst a zkuste to znovu.</translation> <translation id="922152298093051471">Přizpůsobit Chrome</translation> +<translation id="9222839025964079645">Hesla nebyla importována (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Zobrazovat vše</translation> <translation id="924818813611903184">Spravovat jazyky v nastavení ChromeOS</translation> <translation id="929117907539171075">Budou vymazána i offline data v nainstalované aplikaci</translation> <translation id="930268624053534560">Podrobná časová razítka</translation> <translation id="930893132043726269">Roaming je aktivní</translation> +<translation id="93140074055951850">Aplikace pro Android byly zastaveny</translation> <translation id="932327136139879170">Domovská stránka</translation> <translation id="932508678520956232">Tisk nelze zahájit.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Tento soubor je na bezpečnostní kontrolu příliš velký. Můžete nahrát soubory maximálně do 50 MB.}few{Některé z těchto souborů jsou na bezpečnostní kontrolu příliš velké. Můžete nahrát soubory maximálně do 50 MB.}many{Některé z těchto souborů jsou na bezpečnostní kontrolu příliš velké. Můžete nahrát soubory maximálně do 50 MB.}other{Některé z těchto souborů jsou na bezpečnostní kontrolu příliš velké. Můžete nahrát soubory maximálně do 50 MB.}}</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb index 9bd7030..ef10195 100644 --- a/chrome/app/resources/generated_resources_cy.xtb +++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">Hyb Preifatrwydd</translation> <translation id="117445914942805388">I glirio'r data pori o'ch holl ddyfeisiau sy'n cael eu cysoni a'ch Cyfrif Google, <ph name="BEGIN_LINK" />ewch i'r gosodiadau cysoni<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Argraffu...</translation> +<translation id="1176378369905028399">Mae cyfrinair ar gyfer y cyfrif hwn eisoes wedi'i storio yn eich Rheolwr Cyfrineiriau Google (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">Ni chaniateir golygu ffeiliau na ffolderi ar eich dyfais</translation> <translation id="1177863135347784049">Personol</translation> <translation id="1178581264944972037">Seibio</translation> @@ -603,6 +604,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Gwestai)</translation> <translation id="1572266655485775982">Galluogi Wi-Fi</translation> <translation id="1572876035008611720">Rhowch eich e-bost</translation> +<translation id="1573117025466282241">Defnyddiwch ffôn gyda chod QR</translation> <translation id="1575741822946219011">Ieithoedd a mewnbynnau</translation> <translation id="1576594961618857597">Rhithffurf gwyn diofyn</translation> <translation id="1578558981922970608">Gorfodi i gau</translation> @@ -808,6 +810,7 @@ <translation id="1745732479023874451">Rheoli cysylltiadau</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}zero{Agor a golygu # ffeil yn yr ap gwe hwn?}two{Agor a golygu # ffeil yn yr ap gwe hwn?}few{Agor a golygu # ffeil yn yr ap gwe hwn?}many{Agor a golygu # o ffeiliau yn yr ap gwe hwn?}other{Agor a golygu # o ffeiliau yn yr ap gwe hwn?}}</translation> <translation id="1748563609363301860">Gallwch gadw'r cyfrinair hwn yn eich Cyfrif Google neu ar y ddyfais hon yn unig</translation> +<translation id="1749733017156547309">Mae angen cyfrinair</translation> <translation id="1750172676754093297">Ni all eich allwedd ddiogelwch storio olion bysedd</translation> <translation id="1751249301761991853">Personal</translation> <translation id="1751262127955453661">Bydd <ph name="ORIGIN" /> yn gallu golygu ffeiliau yn <ph name="FOLDERNAME" /> nes i chi gau pob tab ar gyfer y wefan hon</translation> @@ -1759,6 +1762,7 @@ <translation id="2602501489742255173">Sweipiwch i fyny i gychwyn arni</translation> <translation id="2603115962224169880">Glanhau'r cyfrifiadur</translation> <translation id="2603355571917519942">Mae Voice Match yn barod</translation> +<translation id="2604129989323098489">Mae gwefannau fel arfer yn gofyn am wybodaeth am eich sgriniau fel y gallant agor a gosod ffenestri yn ddeallus, fel dangos dogfennau neu gynnwys sgrîn lawn ochr yn ochr</translation> <translation id="2604255671529671813">Bu gwall cysylltiad rhwydwaith</translation> <translation id="2605668923777146443">Ewch i'r <ph name="LINK_BEGIN" />Gosodiadau<ph name="LINK_END" /> i weld eich dewisiadau ar gyfer Better Together.</translation> <translation id="2606246518223360146">Cysylltu Data</translation> @@ -1804,6 +1808,7 @@ <translation id="2645047101481282803">Rheolir eich dyfais gan <ph name="PROFILE_NAME" /></translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Mewnforiwyd 1 cyfrinair i'r ddyfais hon}zero{Mewnforiwyd {NUM_PASSWORDS} cyfrinair i'r ddyfais hon}two{Mewnforiwyd {NUM_PASSWORDS} gyfrinair i'r ddyfais hon}few{Mewnforiwyd {NUM_PASSWORDS} chyfrinair i'r ddyfais hon}many{Mewnforiwyd {NUM_PASSWORDS} chyfrinair i'r ddyfais hon}other{Mewnforiwyd {NUM_PASSWORDS} cyfrinair i'r ddyfais hon}}</translation> <translation id="2645435784669275700">ChromeOS</translation> +<translation id="2645515095874728277">Mae cyfrinair ar gyfer y cyfrif hwn eisoes wedi'i storio ar y ddyfais hon</translation> <translation id="2649045351178520408">Base64-encodiwyd ASCII, cadwyn tystysgrif</translation> <translation id="2652129567809778422">Dewiswch gyfrinair</translation> <translation id="2653033005692233957">Wedi methu â chwilio</translation> @@ -2164,6 +2169,7 @@ <translation id="2972581237482394796">&Ailwneud</translation> <translation id="2973324205039581528">Distewi Gwefan</translation> <translation id="2973537811036309675">Panel Ochr</translation> +<translation id="2975761176769946178">Mae angen URL</translation> <translation id="2976557544729462544">Mae rhai dyfeisiau'n gofyn i chi analluogi diogelwch mynediad data i weithio'n iawn neu ar berfformiad llawn.</translation> <translation id="2977480621796371840">Tynnu o'r grŵp</translation> <translation id="2979639724566107830">Agor mewn ffenestr newydd</translation> @@ -2405,6 +2411,7 @@ <translation id="3227137524299004712">Meicroffon</translation> <translation id="3232754137068452469">Ap Gwe</translation> <translation id="3233271424239923319">Gwneud copïau wrth gefn o apiau a ffeiliau Linux</translation> +<translation id="3234251228180563751">Mae'r enw defnyddiwr yn fwy na 1000 nod</translation> <translation id="3234978181857588512">Cadw i'r ddyfais</translation> <translation id="3238192140106069382">Wrthi'n cysylltu ac yn dilysu</translation> <translation id="3239373508713281971">Wedi tynnu'r terfyn amser ar gyfer <ph name="APP_NAME" /></translation> @@ -5223,6 +5230,7 @@ <translation id="5975792506968920132">Canran Pŵer y Batri</translation> <translation id="5976160379964388480">Eraill</translation> <translation id="5978277834170881274">&Defnyddio gwirio sillafu sylfaenol</translation> +<translation id="5978493744931296692">Mae eich gweinyddwr wedi analluogi proffiliau eraill</translation> <translation id="5979084224081478209">Gwirio cyfrineiriau</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Gwnaethoch droi 1 estyniad a allai fod yn niweidiol yn ôl ymlaen}zero{Gwnaethoch droi {NUM_EXTENSIONS} estyniad a allai fod yn niweidiol yn ôl ymlaen}two{Gwnaethoch droi {NUM_EXTENSIONS} estyniad a allai fod yn niweidiol yn ôl ymlaen}few{Gwnaethoch droi {NUM_EXTENSIONS} estyniad a allai fod yn niweidiol yn ôl ymlaen}many{Gwnaethoch droi {NUM_EXTENSIONS} estyniad a allai fod yn niweidiol yn ôl ymlaen}other{Gwnaethoch droi {NUM_EXTENSIONS} estyniad a allai fod yn niweidiol yn ôl ymlaen}}</translation> <translation id="5979353814339191480">Mae'r dewis hwn yn berthnasol i Chromebooks â chynllun data neu ddongl rhwydwaith symudol, neu pan fyddwch yn rhannu cysylltiad â phoethfan cludadwy</translation> @@ -5387,6 +5395,7 @@ <translation id="6130692320435119637">Ychwanegu Wi-Fi</translation> <translation id="6130887916931372608">Bysell bysellfwrdd</translation> <translation id="6135823405800500595">Gwnewch yn siŵr bod eich ffôn gerllaw, wedi'i ddatgloi a bod Bluetooth a Wi-Fi ymlaen</translation> +<translation id="6135826623269483856">Ni chaniateir i reoli ffenestri ar eich holl sgriniau</translation> <translation id="6136114942382973861">Cau'r bar lawrlwythiadau</translation> <translation id="6136287496450963112">Nid yw eich allwedd ddiogelwch yn cael ei amddiffyn gan PIN. I reoli olion bysedd, crëwch PIN yn gyntaf.</translation> <translation id="6138680304137685902">Llofnod X9.62 ECDSA â SHA-384</translation> @@ -7401,6 +7410,7 @@ <ph name="BEGIN_PARAGRAPH3" />Gallwch ddiffodd y gwasanaeth hwn yn y Gosodiadau.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Tabiau</translation> <translation id="8076835018653442223">Mae mynediad at ffeiliau lleol ar eich dyfais wedi'i analluogi gan eich gweinyddwr</translation> +<translation id="80798452873915119">Gall gwefannau ofyn i reoli ffenestri ar eich holl sgriniau</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Rheolir eich sesiwn gan <ph name="MANAGER_NAME" />. Gall gweinyddwyr ddileu eich proffil a hefyd monitro traffig eich rhwydwaith.</translation> <translation id="8081989000209387414">Analluogi dadfygio ADB?</translation> @@ -7705,6 +7715,7 @@ <translation id="8371695176452482769">Siaradwch nawr</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Distewi Gwefan}zero{Distewi Gwefannau}two{Distewi Gwefannau}few{Distewi Gwefannau}many{Distewi Gwefannau}other{Distewi Gwefannau}}</translation> <translation id="8373652277231415614">Cyfeiriaduron cyffredin Crostini</translation> +<translation id="8374243500935816406">Peidio â chaniatáu i wefannau reoli ffenestri ar eich holl sgriniau</translation> <translation id="8376137163494131156">Dywedwch wrthym beth sy'n digwydd gyda Google Cast.</translation> <translation id="8376384591331888629">Gan gynnwys cwcis trydydd parti ar y wefan hon</translation> <translation id="8376451933628734023">Os mae'r ap gwe yn ceisio eich twyllo i feddwl ei fod yn ap gwahanol, dadosodwch ef.</translation> @@ -7999,6 +8010,7 @@ <translation id="8670537393737592796">I ddychwelyd yma'n gyflym, gosodwch <ph name="APP_NAME" /> drwy glicio'r botwm gosod</translation> <translation id="867085395664725367">Bu gwall gweinydd dros dro.</translation> <translation id="8673026256276578048">Chwilio'r We...</translation> +<translation id="867329473311423817">Caniateir i reoli ffenestri ar eich holl sgriniau</translation> <translation id="8673383193459449849">Problem â'r gweinydd</translation> <translation id="8674903726754070732">Yn anffodus, mae eich cyfrifiadur wedi'i ffurfweddu â chaledwedd sydd wedi'i gamffurfio. Mae hyn yn atal ChromeOS rhag diweddaru gyda'r gwelliannau diogelwch diweddaraf ac <ph name="BEGIN_BOLD" />mae'n bosib y bydd eich cyfrifiadur yn agored i ymosodiadau maleisus<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Ni allai'r gosodwr ddod o hyd i gyrchfan dilys i osod <ph name="DEVICE_OS" />.</translation> @@ -8019,6 +8031,7 @@ <translation id="8683081248374354009">Ailosod grŵp</translation> <translation id="8688672835843460752">Ar gael</translation> <translation id="8690129572193755009">Gall gwefannau ofyn am drin protocolau</translation> +<translation id="8692107307702113268">Mae'r cyfrinair yn fwy na 1000 nod</translation> <translation id="8695139659682234808">Ychwanegu rheolaethau rhieni ar ôl gosod</translation> <translation id="8695825812785969222">Agor y &Lleoliad...</translation> <translation id="8698269656364382265">I ddychwelyd i'r sgrîn flaenorol, sweipiwch o'r ochr chwith.</translation> @@ -8303,6 +8316,7 @@ <translation id="8960638196855923532">Gallwch bellach weld hysbysiadau ac apiau eich ffôn</translation> <translation id="8962051932294470566">Dim ond un ffeil y gallwch ei rhannu ar y tro. Rhowch gynnig arall arni pan fydd y trosglwyddiad presennol wedi'i gwblhau.</translation> <translation id="8962083179518285172">Cuddio'r Manylion</translation> +<translation id="8962863356073277855">Dylai fformat yr URL fod https://www.example.com</translation> <translation id="8962918469425892674">Mae'r wefan hon yn defnyddio synwyryddion symudiad neu olau.</translation> <translation id="8965037249707889821">Rhowch yr hen gyfrinair</translation> <translation id="89667524227025535">Sganiwch God QR gan ddefnyddio camera eich dyfais neu rhowch y cod gweithredu a ddarperir gan eich cludwr</translation> @@ -8573,6 +8587,7 @@ <translation id="9220525904950070496">Tynnu cyfrif</translation> <translation id="9220820413868316583">Codwch eich bys ac yna rhowch gynnig arall arni.</translation> <translation id="922152298093051471">Personoleiddio Chrome</translation> +<translation id="9222839025964079645">Cyfrineiriau sydd heb eu mewnforio (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Dangos y Cyfan</translation> <translation id="924818813611903184">Rheoli ieithoedd yng Ngosodiadau ChromeOS</translation> <translation id="929117907539171075">Bydd data all-lein yn yr ap a osodwyd hefyd yn cael eu clirio</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 38819290..62121df 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1759,6 +1759,7 @@ <translation id="2602501489742255173">Stryg opad for at komme i gang</translation> <translation id="2603115962224169880">Ryd op på computeren</translation> <translation id="2603355571917519942">Voice Match er klar</translation> +<translation id="2604129989323098489">Websites beder typisk om oplysninger om dine skærme med henblik på at kunne åbne og placere vinduer på en smart måde, f.eks. ved at vise dokumenter eller indhold i fuld skærm side om side</translation> <translation id="2604255671529671813">Fejl i netværksforbindelsen</translation> <translation id="2605668923777146443">Gå til <ph name="LINK_BEGIN" />Indstillinger<ph name="LINK_END" /> for at se valgmulighederne for Better Together.</translation> <translation id="2606246518223360146">Tilknyt data</translation> @@ -5391,6 +5392,7 @@ <translation id="6130692320435119637">Tilføj Wi-Fi</translation> <translation id="6130887916931372608">Tastaturtast</translation> <translation id="6135823405800500595">Sørg for, at din telefon er i nærheden og låst op, og at Bluetooth og Wi-Fi er aktiveret</translation> +<translation id="6135826623269483856">Har ikke tilladelse til at administrere vinduer på alle dine skærme</translation> <translation id="6136114942382973861">Luk downloadlinje</translation> <translation id="6136287496450963112">Din sikkerhedsnøgle er ikke beskyttet med en pinkode. Du skal oprette en pinkode, før du kan administrere fingeraftryk.</translation> <translation id="6138680304137685902">X9.62 ECDSA-signatur med SHA-384</translation> @@ -5727,7 +5729,7 @@ <translation id="6468485451923838994">Skrifttyper</translation> <translation id="6468773105221177474"><ph name="FILE_COUNT" /> filer</translation> <translation id="6469557521904094793">Aktivér mobilnetværk</translation> -<translation id="6470823736074966819">Slå lyden fra for notifikationer</translation> +<translation id="6470823736074966819">Ignorer notifikationer</translation> <translation id="6472893788822429178">Vis knappen Startside</translation> <translation id="6474498546677193336">Delingen kunne ikke ophæves, fordi mappen stadig anvendes af en app. Delingen af mappen ophæves, næste gang Linux lukkes.</translation> <translation id="6474884162850599008">Fjern tilknytningen af din Google Drev-konto</translation> @@ -7399,6 +7401,7 @@ <ph name="BEGIN_PARAGRAPH3" />Du kan deaktivere denne tjeneste i Indstillinger.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Faner</translation> <translation id="8076835018653442223">Din administrator har deaktiveret adgangen til lokale filer på din enhed</translation> +<translation id="80798452873915119">Websites kan anmode om tilladelse til at administrere vinduer på alle dine skærme</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Din session administreres af <ph name="MANAGER_NAME" />. Administratorer kan slette din profil og overvåge din netværkstrafik.</translation> <translation id="8081989000209387414">Vil du deaktivere ADB-fejlretning?</translation> @@ -7538,6 +7541,7 @@ <translation id="820568752112382238">Mest besøgte websites</translation> <translation id="8206745257863499010">BB King</translation> <translation id="8206859287963243715">Mobil</translation> +<translation id="8208216423136871611">Gem ikke</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Ny notifikation}one{# ny notifikation}other{# nye notifikationer}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Downloaden er i gang}one{Downloaden er i gang}other{Downloadene er i gang}}</translation> <translation id="8213449224684199188">Fototilstand er aktiveret</translation> @@ -7703,6 +7707,7 @@ <translation id="8371695176452482769">Indtal nu</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Slå lyden fra på website}one{Slå lyden fra på website}other{Slå lyden fra på websites}}</translation> <translation id="8373652277231415614">Delte indekser i Crostini</translation> +<translation id="8374243500935816406">Tillad ikke, at websites administrerer vinduer på alle dine skærme</translation> <translation id="8376137163494131156">Fortæl os, hvad der sker med Google Cast.</translation> <translation id="8376384591331888629">Medtag tredjepartscookies på dette websites</translation> <translation id="8376451933628734023">Hvis webappen forsøger at narre dig til at tro, det er en anden app, skal du afinstallere den.</translation> @@ -7997,6 +8002,7 @@ <translation id="8670537393737592796">Installer <ph name="APP_NAME" /> ved at klikke på knappen til installation, så du hurtigt kan vende tilbage hertil</translation> <translation id="867085395664725367">Der opstod en midlertidig serverfejl.</translation> <translation id="8673026256276578048">Søg på nettet...</translation> +<translation id="867329473311423817">Har tilladelse til at administrere vinduer på alle dine skærme</translation> <translation id="8673383193459449849">Serverproblem</translation> <translation id="8674903726754070732">Din computer er desværre konfigureret med et hardware-id i forkert format. Dette forhindrer Chrome OS i at opdatere med de nyeste sikkerhedsrettelser, og din computer <ph name="BEGIN_BOLD" />kan være sårbar over for ondsindede angreb<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Installationsprogrammet kunne ikke finde en gyldig destination til installation af <ph name="DEVICE_OS" />.</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 377bda5..380c898 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -194,6 +194,7 @@ <translation id="1174391930667737831">Datenschutzzentrale</translation> <translation id="117445914942805388">Wenn du Browserdaten von allen deinen synchronisierten Geräten und aus deinem Google-Konto löschen möchtest, <ph name="BEGIN_LINK" />rufe die Synchronisierungseinstellungen auf<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Drucken...</translation> +<translation id="1176378369905028399">In deinem Google Passwortmanager (<ph name="USER_EMAIL" />) ist bereits ein Passwort für dieses Konto gespeichert</translation> <translation id="1176471985365269981">Dürfen keine Dateien oder Ordner auf meinem Gerät bearbeiten</translation> <translation id="1177863135347784049">Benutzerdefiniert</translation> <translation id="1178581264944972037">Pause</translation> @@ -791,6 +792,7 @@ <translation id="1745732479023874451">Kontakte verwalten</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{# Dateien in dieser Web-App öffnen und bearbeiten?}}</translation> <translation id="1748563609363301860">Du kannst dieses Passwort entweder in deinem Google-Konto oder nur auf diesem Gerät speichern</translation> +<translation id="1749733017156547309">Es ist ein Passwort erforderlich</translation> <translation id="1750172676754093297">Auf deinem Sicherheitsschlüssel können keine Fingerabdrücke gespeichert werden</translation> <translation id="1751249301761991853">Personalisierung</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> kann dann Dateien im Ordner <ph name="FOLDERNAME" /> bearbeiten, solange Tabs dieser Website geöffnet sind</translation> @@ -1783,6 +1785,7 @@ <translation id="2645047101481282803">Das Gerät wird von <ph name="PROFILE_NAME" /> verwaltet</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 Passwort auf dieses Gerät importiert}other{{NUM_PASSWORDS} Passwörter auf dieses Gerät importiert}}</translation> <translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645515095874728277">Auf diesem Gerät ist bereits ein Passwort für dieses Konto gespeichert</translation> <translation id="2649045351178520408">Base64-codierter ASCII-Code, Zertifikatkette</translation> <translation id="2652129567809778422">Passwort auswählen</translation> <translation id="2653033005692233957">Fehler bei der Suche</translation> @@ -2143,6 +2146,7 @@ <translation id="2972581237482394796">&Wiederholen</translation> <translation id="2973324205039581528">Website stummschalten</translation> <translation id="2973537811036309675">Seitenleiste</translation> +<translation id="2975761176769946178">Es ist eine URL erforderlich</translation> <translation id="2976557544729462544">Bei einigen Geräten musst du den Schutz vor Datenzugriff deaktivieren, damit sie problemlos und mit voller Leistung funktionieren.</translation> <translation id="2977480621796371840">Aus Gruppe entfernen</translation> <translation id="2979639724566107830">In neuem Fenster öffnen</translation> @@ -2384,6 +2388,7 @@ <translation id="3227137524299004712">Mikrofon</translation> <translation id="3232754137068452469">Web-App</translation> <translation id="3233271424239923319">Linux-Apps und -Dateien sichern</translation> +<translation id="3234251228180563751">Der Nutzername enthält mehr als 1.000 Zeichen</translation> <translation id="3234978181857588512">Auf Gerät speichern</translation> <translation id="3238192140106069382">Verbindung wird hergestellt und geprüft</translation> <translation id="3239373508713281971">Zeitlimit entfernt für <ph name="APP_NAME" /></translation> @@ -5198,6 +5203,7 @@ <translation id="5975792506968920132">Akkustand in %</translation> <translation id="5976160379964388480">Sonstige</translation> <translation id="5978277834170881274">&Einfache Rechtschreibprüfung verwenden</translation> +<translation id="5978493744931296692">Dein Administrator hat andere Profile deaktiviert</translation> <translation id="5979084224081478209">Passwörter prüfen</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Du hast 1 potenziell schädliche Erweiterung wieder aktiviert}other{Du hast {NUM_EXTENSIONS} potenziell schädliche Erweiterungen wieder aktiviert}}</translation> <translation id="5979353814339191480">Diese Option ist für Chromebooks relevant, die mit einem Datentarif oder einem Dongle für ein Mobilfunknetz verwendet werden oder per Tethering mit einem mobilen Hotspot verbunden sind</translation> @@ -7507,6 +7513,7 @@ <translation id="820568752112382238">Am häufigsten besuchte Websites</translation> <translation id="8206745257863499010">Blues</translation> <translation id="8206859287963243715">Mobil</translation> +<translation id="8208216423136871611">Nicht speichern</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Neue Benachrichtigung}other{# neue Benachrichtigungen}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Download wird ausgeführt}other{Downloads werden ausgeführt}}</translation> <translation id="8213449224684199188">Fotomodus aktiviert</translation> @@ -7986,6 +7993,7 @@ <translation id="8683081248374354009">Gruppe zurücksetzen</translation> <translation id="8688672835843460752">Verfügbar</translation> <translation id="8690129572193755009">Websites dürfen nachfragen, wenn sie Protokolle verarbeiten möchten</translation> +<translation id="8692107307702113268">Das Passwort enthält mehr als 1.000 Zeichen</translation> <translation id="8695139659682234808">Jugendschutzeinstellungen nach der Einrichtung hinzufügen</translation> <translation id="8695825812785969222">&Adresse öffnen...</translation> <translation id="8698269656364382265">Du gelangst zum vorherigen Bildschirm, indem du von der linken Seite zur Mitte wischst.</translation> @@ -8266,6 +8274,7 @@ <translation id="8960638196855923532">Du kannst jetzt die Benachrichtigungen und Apps von deinem Smartphone aufrufen</translation> <translation id="8962051932294470566">Du kannst nur jeweils eine Datei teilen. Versuche es noch einmal, wenn die aktuelle Übertragung abgeschlossen ist.</translation> <translation id="8962083179518285172">Details ausblenden</translation> +<translation id="8962863356073277855">Die URL muss das Format „https://www.beispiel.de“ haben</translation> <translation id="8962918469425892674">Diese Website nutzt Bewegungs- oder Lichtsensoren.</translation> <translation id="8965037249707889821">Altes Passwort eingeben</translation> <translation id="89667524227025535">Scanne den QR-Code mit deiner Kamera oder gib den Aktivierungscode deines Anbieters ein</translation> @@ -8536,6 +8545,7 @@ <translation id="9220525904950070496">Konto entfernen</translation> <translation id="9220820413868316583">Finger hochheben und dann Versuch wiederholen.</translation> <translation id="922152298093051471">Chrome anpassen</translation> +<translation id="9222839025964079645">Passwörter nicht importiert (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Alle anzeigen</translation> <translation id="924818813611903184">Sprachen in den Chrome OS-Einstellungen verwalten</translation> <translation id="929117907539171075">Offlinedaten in der installierten App werden auch gelöscht</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 9bc8c3a6d..619b3e78 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -7541,6 +7541,7 @@ <translation id="820568752112382238">Ιστότοποι με τις περισσότερες επισκέψεις</translation> <translation id="8206745257863499010">Μπλουζ</translation> <translation id="8206859287963243715">Κινητό</translation> +<translation id="8208216423136871611">Να μην γίνει αποθήκευση</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Νέα ειδοποίηση}other{# νέες ειδοποιήσεις}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Λήψη σε εξέλιξη}other{Λήψεις σε εξέλιξη}}</translation> <translation id="8213449224684199188">Έγινε είσοδος στη λειτουργία φωτογραφίας</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 002e78c..71b584c 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -7557,6 +7557,7 @@ <translation id="820568752112382238">Most-visited sites</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">Mobile</translation> +<translation id="8208216423136871611">Don't save</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{New notification}other{# new notifications}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Download is in progress}other{Downloads are in progress}}</translation> <translation id="8213449224684199188">Photo mode entered</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index f2afd4ca..22ab0b6 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -194,6 +194,7 @@ <translation id="1174391930667737831">Centro de privacidad</translation> <translation id="117445914942805388">Para borrar los datos de navegación de todos los dispositivos sincronizados y de tu Cuenta de Google, <ph name="BEGIN_LINK" />revisa la configuración de sincronización<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">Im&primir...</translation> +<translation id="1176378369905028399">Ya se almacenó una contraseña para esta cuenta en tu Administrador de contraseñas de Google (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">No pueden editar archivos ni carpetas del dispositivo</translation> <translation id="1177863135347784049">Personalizado</translation> <translation id="1178581264944972037">Detener</translation> @@ -791,6 +792,7 @@ <translation id="1745732479023874451">Administrar contactos</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{¿Quieres abrir y editar # archivos en la aplicación web?}}</translation> <translation id="1748563609363301860">Puedes guardar esta contraseña en tu Cuenta de Google o solo en este dispositivo</translation> +<translation id="1749733017156547309">Debes ingresar una contraseña</translation> <translation id="1750172676754093297">Tu llave de seguridad no puede almacenar huellas dactilares</translation> <translation id="1751249301761991853">Personal</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> podrá editar los archivos de <ph name="FOLDERNAME" /> hasta que cierres todas las pestañas de este sitio</translation> @@ -1738,6 +1740,7 @@ <translation id="2602501489742255173">Desliza hacia arriba para comenzar</translation> <translation id="2603115962224169880">Limpiar la computadora</translation> <translation id="2603355571917519942">Voice Match está listo</translation> +<translation id="2604129989323098489">Por lo general, los sitios solicitan información sobre tus pantallas para abrir y ubicar ventanas de manera inteligente, como mostrar documentos o contenido en pantalla completa en paralelo.</translation> <translation id="2604255671529671813">Error de conexión de red</translation> <translation id="2605668923777146443">Para ver tus opciones de Better Together, accede a la <ph name="LINK_BEGIN" />Configuración<ph name="LINK_END" />.</translation> <translation id="2606246518223360146">Vincular datos</translation> @@ -1783,6 +1786,7 @@ <translation id="2645047101481282803"><ph name="PROFILE_NAME" /> administra tu dispositivo.</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Se importó 1 contraseña a este dispositivo}other{Se importaron {NUM_PASSWORDS} contraseñas a este dispositivo}}</translation> <translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645515095874728277">Ya se almacenó una contraseña para esta cuenta en este dispositivo</translation> <translation id="2649045351178520408">Cadena de certificados ASCII con codificación Base64</translation> <translation id="2652129567809778422">Seleccionar contraseña</translation> <translation id="2653033005692233957">Error en la búsqueda</translation> @@ -2143,6 +2147,7 @@ <translation id="2972581237482394796">&Rehacer</translation> <translation id="2973324205039581528">Silenciar sitio</translation> <translation id="2973537811036309675">Panel lateral</translation> +<translation id="2975761176769946178">Debes proporcionar una URL</translation> <translation id="2976557544729462544">En algunos dispositivos, debes inhabilitar la protección de acceso a los datos para que funcionen correctamente o con el máximo rendimiento.</translation> <translation id="2977480621796371840">Quitar del grupo</translation> <translation id="2979639724566107830">Abrir en una ventana nueva</translation> @@ -2384,6 +2389,7 @@ <translation id="3227137524299004712">Micrófono</translation> <translation id="3232754137068452469">Aplicación web</translation> <translation id="3233271424239923319">Crear una copia de seguridad de los archivos y apps de Linux</translation> +<translation id="3234251228180563751">El nombre de usuario tiene más de 1,000 caracteres</translation> <translation id="3234978181857588512">Guardar en el dispositivo</translation> <translation id="3238192140106069382">Conectando y verificando</translation> <translation id="3239373508713281971">Se quitó el límite de tiempo para <ph name="APP_NAME" /></translation> @@ -5201,6 +5207,7 @@ <translation id="5975792506968920132">Porcentaje de carga de batería</translation> <translation id="5976160379964388480">Otros</translation> <translation id="5978277834170881274">&Usar el corrector ortográfico básico</translation> +<translation id="5978493744931296692">Tu administrador inhabilitó otros perfiles</translation> <translation id="5979084224081478209">Revisar contraseñas</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Volviste a activar 1 extensión potencialmente dañina}other{Volviste a activar {NUM_EXTENSIONS} extensiones potencialmente dañinas}}</translation> <translation id="5979353814339191480">Esta opción se aplica a las Chromebooks que tienen un plan de datos o una llave de red móvil, o que se conectan mediante un hotspot portátil</translation> @@ -5365,6 +5372,7 @@ <translation id="6130692320435119637">Agregar Wi-Fi</translation> <translation id="6130887916931372608">Tecla del teclado</translation> <translation id="6135823405800500595">Asegúrate de que el teléfono esté cerca y desbloqueado, y que el Bluetooth y el Wi-Fi estén encendidos</translation> +<translation id="6135826623269483856">No pueden administrar las ventanas de todas tus pantallas</translation> <translation id="6136114942382973861">Cerrar la barra de descargas</translation> <translation id="6136287496450963112">Tu llave de seguridad no está protegida con un PIN. Para administrar las huellas dactilares, crea uno.</translation> <translation id="6138680304137685902">Firma X9.62 ECDSA con SHA-384</translation> @@ -7372,6 +7380,7 @@ <ph name="BEGIN_PARAGRAPH3" />Se puede desactivar este servicio en Configuración.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Pestañas</translation> <translation id="8076835018653442223">El administrador inhabilitó el acceso a los archivos locales de tu dispositivo</translation> +<translation id="80798452873915119">Los sitios pueden solicitar permiso para administrar las ventanas de todas tus pantallas</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289"><ph name="MANAGER_NAME" /> administra tu sesión. Los administradores pueden borrar tu perfil y supervisar el tráfico de red.</translation> <translation id="8081989000209387414">¿Quieres inhabilitar la depuración de adb?</translation> @@ -7511,6 +7520,7 @@ <translation id="820568752112382238">Sitios más visitados</translation> <translation id="8206745257863499010">Musical</translation> <translation id="8206859287963243715">Celular</translation> +<translation id="8208216423136871611">No guardar</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Notificación nueva}other{# notificaciones nuevas}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Descarga en curso}other{Descargas en curso}}</translation> <translation id="8213449224684199188">Ingresaste al modo de foto</translation> @@ -7676,6 +7686,7 @@ <translation id="8371695176452482769">Hablar ahora</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Silenciar el sitio}other{Silenciar los sitios}}</translation> <translation id="8373652277231415614">Directorios compartidos de Crostini</translation> +<translation id="8374243500935816406">No permitir que los sitios administren las ventanas de todas tus pantallas</translation> <translation id="8376137163494131156">Infórmanos lo que sucede con Google Cast</translation> <translation id="8376384591331888629">Habilitar también cookies de terceros en este sitio</translation> <translation id="8376451933628734023">Si esta aplicación web intenta hacerse pasar por otra app, desinstálala.</translation> @@ -7970,6 +7981,7 @@ <translation id="8670537393737592796">Para volver a acceder a este sitio rápidamente, instala <ph name="APP_NAME" /> con el botón de instalación</translation> <translation id="867085395664725367">Se produjo un error temporal en el servidor.</translation> <translation id="8673026256276578048">Buscar en la Web...</translation> +<translation id="867329473311423817">Pueden administrar las ventanas de todas tus pantallas</translation> <translation id="8673383193459449849">Error del servidor</translation> <translation id="8674903726754070732">Desafortunadamente, la computadora está configurada con un identificador de hardware incorrecto. Esto impide que Chrome OS se actualice con las últimas correcciones de seguridad, y la computadora <ph name="BEGIN_BOLD" />puede quedar vulnerable a ataques maliciosos<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">El instalador no encontró un destino válido para instalar <ph name="DEVICE_OS" />.</translation> @@ -7990,6 +8002,7 @@ <translation id="8683081248374354009">Restablecer grupo</translation> <translation id="8688672835843460752">Disponible</translation> <translation id="8690129572193755009">Permitir que los sitios soliciten permiso para procesar protocolos</translation> +<translation id="8692107307702113268">La contraseña tiene más de 1,000 caracteres</translation> <translation id="8695139659682234808">Agrega los controles parentales cuando finalices la configuración</translation> <translation id="8695825812785969222">Abrir &ubicación...</translation> <translation id="8698269656364382265">Si quieres regresar a la pantalla anterior, desliza el dedo desde el lado izquierdo.</translation> @@ -8270,6 +8283,7 @@ <translation id="8960638196855923532">Ahora puedes ver las notificaciones y apps de tu teléfono</translation> <translation id="8962051932294470566">Puedes compartir solo un archivo a la vez. Vuelve a intentarlo cuando se complete la transferencia actual.</translation> <translation id="8962083179518285172">Ocultar detalles</translation> +<translation id="8962863356073277855">El formato de la URL debe ser https://www.example.com</translation> <translation id="8962918469425892674">Este sitio está usando los sensores de movimiento y luz.</translation> <translation id="8965037249707889821">Ingresa la contraseña anterior.</translation> <translation id="89667524227025535">Escanea un código QR con la cámara del dispositivo o ingresa el código de activación que te brinde tu proveedor.</translation> @@ -8540,6 +8554,7 @@ <translation id="9220525904950070496">Eliminar cuenta</translation> <translation id="9220820413868316583">Levanta el dedo y vuelve a intentarlo.</translation> <translation id="922152298093051471">Personalizar Chrome</translation> +<translation id="9222839025964079645">Contraseñas no importadas (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Mostrar todos</translation> <translation id="924818813611903184">Administra los idiomas en la configuración de Chrome OS</translation> <translation id="929117907539171075">También se borrarán los datos sin conexión de la app instalada</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index e71df0d..a27e81d 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -7520,6 +7520,7 @@ <translation id="820568752112382238">Sitios web más visitados</translation> <translation id="8206745257863499010">Música</translation> <translation id="8206859287963243715">Móvil</translation> +<translation id="8208216423136871611">No guardar</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Notificación nueva}other{# notificaciones nuevas}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Descarga en curso}other{Descargas en curso}}</translation> <translation id="8213449224684199188">Se ha cambiado al modo de foto</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index cf87934..663ca4dd 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">Privaatsuskeskus</translation> <translation id="117445914942805388">Sirvimisandmete kustutamiseks kõigist sünkroonitud seadmetest ja oma Google'i kontolt <ph name="BEGIN_LINK" />avage sünkroonimisseaded<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Prindi...</translation> +<translation id="1176378369905028399">Selle konto parool on teie Google'i paroolihaldurisse (<ph name="USER_EMAIL" />) juba talletatud</translation> <translation id="1176471985365269981">Pole lubatud muuta teie seadmes olevaid faile ega kaustu</translation> <translation id="1177863135347784049">Kohandatud</translation> <translation id="1178581264944972037">Peata</translation> @@ -600,6 +601,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Külaline)</translation> <translation id="1572266655485775982">WiFi lubamine</translation> <translation id="1572876035008611720">Sisestage oma e-posti aadress</translation> +<translation id="1573117025466282241">Telefoni kasutamine QR-koodiga</translation> <translation id="1575741822946219011">Keeled ja sisestusmeetodid</translation> <translation id="1576594961618857597">Valge vaikeavatar</translation> <translation id="1578558981922970608">Sundpeata</translation> @@ -797,6 +799,7 @@ <translation id="1745732479023874451">Kontaktide haldamine</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{Kas soovite selles veebirakenduses # faili avada ja neid redigeerida?}}</translation> <translation id="1748563609363301860">Saate selle parooli salvestada oma Google'i kontole või ainult sellesse seadmesse</translation> +<translation id="1749733017156547309">Parool on nõutav</translation> <translation id="1750172676754093297">Teie turvavõtmele ei saa sõrmejälgi salvestada</translation> <translation id="1751249301761991853">Isiklik</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> saab muuta kaustas <ph name="FOLDERNAME" /> olevaid faile, kuni sulgete kõik selle saidi vahelehed</translation> @@ -1793,6 +1796,7 @@ <translation id="2645047101481282803">Teie seadet haldab <ph name="PROFILE_NAME" /></translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 parool imporditi sellesse seadmesse}other{{NUM_PASSWORDS} parooli imporditi sellesse seadmesse}}</translation> <translation id="2645435784669275700">ChromeOS</translation> +<translation id="2645515095874728277">Selle konto parool on sellesse seadmesse juba talletatud</translation> <translation id="2649045351178520408">Base64 kodeeritud ASCII, sertifikaadiahel</translation> <translation id="2652129567809778422">Parooli valimine</translation> <translation id="2653033005692233957">Otsing ebaõnnestus</translation> @@ -2153,6 +2157,7 @@ <translation id="2972581237482394796">&Tee uuesti</translation> <translation id="2973324205039581528">Vaigista sait</translation> <translation id="2973537811036309675">Külgpaneel</translation> +<translation id="2975761176769946178">URL on nõutav</translation> <translation id="2976557544729462544">Mõni seade nõuab õigesti töötamiseks või maksimaalse jõudluse pakkumiseks, et keelaksite andmetele juurdepääsu kaitse.</translation> <translation id="2977480621796371840">Grupist eemaldamine</translation> <translation id="2979639724566107830">Ava uues aknas</translation> @@ -2394,6 +2399,7 @@ <translation id="3227137524299004712">Mikrofon</translation> <translation id="3232754137068452469">Veebirakendus</translation> <translation id="3233271424239923319">Linuxi rakenduste ja failide varundamine</translation> +<translation id="3234251228180563751">Kasutajanimi on pikem kui 1000 tähemärki</translation> <translation id="3234978181857588512">Salvesta seadmesse</translation> <translation id="3238192140106069382">Ühendamine ja kinnitamine</translation> <translation id="3239373508713281971">Rakenduse <ph name="APP_NAME" /> ajapiirang eemaldati</translation> @@ -5211,6 +5217,7 @@ <translation id="5975792506968920132">Aku laetuse protsent</translation> <translation id="5976160379964388480">Muud</translation> <translation id="5978277834170881274">&Kasuta lihtsat õigekirjakontrolli</translation> +<translation id="5978493744931296692">Teie administraator on muud profiilid keelanud</translation> <translation id="5979084224081478209">Kontrolli paroole</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Lülitasite 1 potentsiaalselt ohtliku laienduse uuesti sisse}other{Lülitasite {NUM_EXTENSIONS} potentsiaalselt ohtlikku laiendust uuesti sisse}}</translation> <translation id="5979353814339191480">See valik rakendub Chromebookidele, millel on andmesidepakett või mobiilsidevõrgu tongel, või kui võrguühendust jagatakse mobiilse kuumkohaga</translation> @@ -7523,6 +7530,7 @@ <translation id="820568752112382238">Enim külastatavad saidid</translation> <translation id="8206745257863499010">Bluusilik</translation> <translation id="8206859287963243715">Mobiil</translation> +<translation id="8208216423136871611">Ära salvesta</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Uus märguanne}other{# uut märguannet}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Allalaadimine on pooleli}other{Allalaadimised on pooleli}}</translation> <translation id="8213449224684199188">Fotorežiim aktiveeriti</translation> @@ -8004,6 +8012,7 @@ <translation id="8683081248374354009">Lähtesta grupp</translation> <translation id="8688672835843460752">Saadaval</translation> <translation id="8690129572193755009">Saidid saavad küsida luba protokollide käsitlemiseks</translation> +<translation id="8692107307702113268">Parool on pikem kui 1000 tähemärki</translation> <translation id="8695139659682234808">Lisage vanemlik järelevalve pärast seadistamist</translation> <translation id="8695825812785969222">Ava a&sukoht ...</translation> <translation id="8698269656364382265">Eelmisele ekraanikuvale naasmiseks pühkige vasakust servast.</translation> @@ -8284,6 +8293,7 @@ <translation id="8960638196855923532">Saate nüüd vaadata oma telefoni märguandeid ja rakendusi</translation> <translation id="8962051932294470566">Saate korraga jagada ainult ühte faili. Proovige uuesti, kui praegune ülekanne on lõpetatud.</translation> <translation id="8962083179518285172">Üksikasjade peitmine</translation> +<translation id="8962863356073277855">URL-i vorming peab olema https://www.example.com</translation> <translation id="8962918469425892674">Sait kasutab liikumis- või valgusandureid.</translation> <translation id="8965037249707889821">Sisestage vana parool</translation> <translation id="89667524227025535">Skannige QR-kood seadme kaameraga või sisestage operaatorilt saadud aktiveerimiskood</translation> @@ -8554,6 +8564,7 @@ <translation id="9220525904950070496">Konto eemaldamine</translation> <translation id="9220820413868316583">Tõstke sõrm andurilt ja proovige uuesti.</translation> <translation id="922152298093051471">Chrome'i kohandamine</translation> +<translation id="9222839025964079645">Paroole ei imporditud (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Kuva kõik</translation> <translation id="924818813611903184">Hallake keeli Chrome OS-i seadetes</translation> <translation id="929117907539171075">Kustutatakse ka installitud rakenduse võrguühenduseta andmed</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 13cb4c8..1584efa 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -194,6 +194,7 @@ <translation id="1174391930667737831">Pribatutasun-zentroa</translation> <translation id="117445914942805388">Sinkronizatutako gailu guztietako eta zure Google-ko kontuko arakatze-datuak garbitzeko, <ph name="BEGIN_LINK" />joan sinkronizazio-ezarpenetara<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">In&primatu…</translation> +<translation id="1176378369905028399">Dagoeneko gordeta dago Google-ren Pasahitz-kudeatzailea zerbitzuan (<ph name="USER_EMAIL" />) kontu honetarako pasahitz bat</translation> <translation id="1176471985365269981">Ezin dituzte editatu gailuko fitxategiak edo karpetak</translation> <translation id="1177863135347784049">Pertsonalizatua</translation> <translation id="1178581264944972037">Pausatu</translation> @@ -795,6 +796,7 @@ <translation id="1745732479023874451">Kudeatu kontaktuak</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{Sareko aplikazio honetan ireki eta editatu nahi dituzu # fitxategi horiek?}}</translation> <translation id="1748563609363301860">Google-ko kontuan edo gailu honetan bakarrik gorde dezakezu pasahitza</translation> +<translation id="1749733017156547309">Pasahitz bat behar da</translation> <translation id="1750172676754093297">Segurtasun-giltzak ezin du hatz-markarik gorde</translation> <translation id="1751249301761991853">Pertsonalak</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> webguneak <ph name="FOLDERNAME" /> karpetako fitxategiak editatzeko baimena izango du webguneko fitxa guztiak ixten dituzun arte</translation> @@ -1788,6 +1790,7 @@ <translation id="2645047101481282803"><ph name="PROFILE_NAME" /> da gailuaren kudeatzailea</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Pasahitz bat inportatu da gailu honetara}other{{NUM_PASSWORDS} pasahitz inportatu dira gailu honetara}}</translation> <translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645515095874728277">Dagoeneko gordeta dago gailuan kontu honetarako pasahitz bat</translation> <translation id="2649045351178520408">Base64 bidez kodetutako ASCII kodea, ziurtagiri-katea</translation> <translation id="2652129567809778422">Hautatu pasahitz bat</translation> <translation id="2653033005692233957">Ezin izan da bilatu</translation> @@ -2148,6 +2151,7 @@ <translation id="2972581237482394796">&Berregin</translation> <translation id="2973324205039581528">Desaktibatu webguneko audioa</translation> <translation id="2973537811036309675">Alboko panela</translation> +<translation id="2975761176769946178">URL bat behar da</translation> <translation id="2976557544729462544">Zenbait gailuk datuetarako sarbidearen babesa desgaitzeko eskatzen dute, behar bezala edo ahalik eta errendimendu handienarekin funtzionatu ahal izateko.</translation> <translation id="2977480621796371840">Kendu taldetik</translation> <translation id="2979639724566107830">Ireki beste leiho batean</translation> @@ -2389,6 +2393,7 @@ <translation id="3227137524299004712">Mikrofonoa</translation> <translation id="3232754137068452469">Sareko aplikazioa</translation> <translation id="3233271424239923319">Egin Linux aplikazioen eta fitxategien babeskopiak</translation> +<translation id="3234251228180563751">Erabiltzaile-izenak 1.000 karaktere baino gehiago ditu</translation> <translation id="3234978181857588512">Gorde gailuan</translation> <translation id="3238192140106069382">Konektatzen eta egiaztatzen</translation> <translation id="3239373508713281971"><ph name="APP_NAME" /> aplikazioaren denbora-muga kendu da</translation> @@ -5203,6 +5208,7 @@ <translation id="5975792506968920132">Bateriaren karga-ehunekoa</translation> <translation id="5976160379964388480">Gehiago</translation> <translation id="5978277834170881274">&Erabili oinarrizko ortografia-zuzentzailea</translation> +<translation id="5978493744931296692">Administratzaileak beste profilak desgaitu ditu</translation> <translation id="5979084224081478209">Egiaztatu pasahitzak</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Luzapen kaltegarri bat berriro aktibatu duzu}other{{NUM_EXTENSIONS} luzapen kaltegarri berriro aktibatu dituzu}}</translation> <translation id="5979353814339191480">Datu-tarifa bat edo sare mugikorreko unitate bat daukaten Chromebook-ekin erabil daiteke aukera hau, edo wifi-gune eramangarri baten bidez konexioa partekatzen denean</translation> @@ -7513,6 +7519,7 @@ <translation id="820568752112382238">Gehien bisitatutako webguneak</translation> <translation id="8206745257863499010">Blues-zalea</translation> <translation id="8206859287963243715">Konexio mugikorra</translation> +<translation id="8208216423136871611">Ez gorde</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Jakinarazpen berria}other{# jakinarazpen berri}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Deskarga abian da}other{Deskargak abian dira}}</translation> <translation id="8213449224684199188">Argazki moduan sartu zara</translation> @@ -7994,6 +8001,7 @@ <translation id="8683081248374354009">Berrezarri taldea</translation> <translation id="8688672835843460752">Erabilgarri</translation> <translation id="8690129572193755009">Webguneek protokoloak kudeatzea eska dezakete</translation> +<translation id="8692107307702113268">Pasahitzak 1.000 karaktere baino gehiago ditu</translation> <translation id="8695139659682234808">Gehitu guraso-murriztapenak konfiguratzen amaitzen duzunean</translation> <translation id="8695825812785969222">Ireki &kokapena…</translation> <translation id="8698269656364382265">Aurreko pantailara itzultzeko, pasatu hatza ezkerraldeko albotik erdialdera.</translation> @@ -8274,6 +8282,7 @@ <translation id="8960638196855923532">Orain, telefonoko jakinarazpen eta aplikazioak ikus ditzakezu</translation> <translation id="8962051932294470566">Fitxategi bakarra parteka dezakezu aldiko. Saiatu berriro oraingo transferentzia osatu denean.</translation> <translation id="8962083179518285172">Ezkutatu xehetasunak</translation> +<translation id="8962863356073277855">URLak https://www.adibidea.com formatuan egon behar du</translation> <translation id="8962918469425892674">Mugimenduaren edo argiaren sentsoreak erabiltzen ari da webgune hau.</translation> <translation id="8965037249707889821">Idatzi aurreko pasahitza</translation> <translation id="89667524227025535">Eskaneatu QR kode bat gailuaren kamera erabiliz edo idatzi operadoreak emandako aktibazio-kodea</translation> @@ -8544,6 +8553,7 @@ <translation id="9220525904950070496">Kendu kontua</translation> <translation id="9220820413868316583">Jaso hatza eta saiatu berriro.</translation> <translation id="922152298093051471">Pertsonalizatu Chrome</translation> +<translation id="9222839025964079645">Pasahitz batzuk ez dira inportatu (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Erakutsi guztiak</translation> <translation id="924818813611903184">Kudeatu hizkuntzak Chrome OS-ren ezarpenetan</translation> <translation id="929117907539171075">Garbitu egingo dira instalatutako aplikazioko konexiorik gabe erabiltzeko datu guztiak</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 6f02404e..5a90002 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -514,6 +514,7 @@ <translation id="1480663089572535854">میتوانید به عقب برگردید و کلید اختصاصیافته به کنش «انتخاب» را تغییر دهید. هرزمان بخواهید میتوانید اسکن خودکار را در تنظیمات خاموش کنید.</translation> <translation id="1481537595330271162">هنگام تغییر اندازه دیسک خطایی روی داد</translation> <translation id="1482626744466814421">نشانکگذاری این برگه…</translation> +<translation id="1482772681918035149">ویرایش گذرواژهها</translation> <translation id="1483493594462132177">ارسال</translation> <translation id="1484979925941077974">سایت درحال استفاده از بلوتوث است</translation> <translation id="1485015260175968628">هماکنون این میتواند:</translation> @@ -528,6 +529,7 @@ <translation id="1500801317528437432">درباره «برنامههای Chrome» پشتیبانینشده بیشتر بدانید</translation> <translation id="150411034776756821">حذف <ph name="SITE" /></translation> <translation id="1504551620756424144">پوشههای همرسانیشده در Windows در <ph name="BASE_DIR" /> دردسترس هستند.</translation> +<translation id="1505494256539862015">صادر کردن گذرواژهها</translation> <translation id="1506061864768559482">موتور جستجو</translation> <translation id="1507170440449692343">این صفحه از دسترسی به دوربین شما بازداشته شده است.</translation> <translation id="1507246803636407672">&انصراف</translation> @@ -599,6 +601,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (مهمان)</translation> <translation id="1572266655485775982">فعال کردن Wi-Fi</translation> <translation id="1572876035008611720">ایمیلتان را وارد کنید</translation> +<translation id="1573117025466282241">استفاده از تلفن برای اسکن رمزینه پاسخسریع</translation> <translation id="1575741822946219011">زبانها و ورودیها</translation> <translation id="1576594961618857597">چهرهنمای پیشفرض سفید</translation> <translation id="1578558981922970608">بستن اجباری</translation> @@ -948,6 +951,7 @@ <translation id="1864400682872660285">سردتر</translation> <translation id="1864454756846565995">دستگاه USB-C (درگاه عقب)</translation> <translation id="1865769994591826607">فقط اتصالات same-site</translation> +<translation id="186594096341696655">کاهش نرخ</translation> <translation id="186612162884103683">«<ph name="EXTENSION" />» میتواند تصاویر، ویدئوها و فایلهای صوتی را از مکانهای انتخاب شده بخوانید یا بنویسید.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> آماده تکمیل نصب است</translation> <translation id="1868553836791672080">بررسی گذرواژه در Chromium دردسترس نیست</translation> @@ -1139,6 +1143,7 @@ <translation id="2048554637254265991">خطایی در راهاندازی مدیر محتوی وجود داشت. لطفاً دوباره امتحان کنید.</translation> <translation id="2048653237708779538">کنش دردسترس نیست</translation> <translation id="2050339315714019657">عمودی</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{یک گذرواژه به «مدیر گذرواژه Google» وارد شد (<ph name="USER_EMAIL" />)}one{{NUM_PASSWORDS} گذرواژه به «مدیر گذرواژه Google» وارد شد (<ph name="USER_EMAIL" />)}other{{NUM_PASSWORDS} گذرواژه به «مدیر گذرواژه Google» وارد شد (<ph name="USER_EMAIL" />)}}</translation> <translation id="2052572566310583903">در دیگر دستگاههایتان نصب شده است</translation> <translation id="2053105195397337973">در تلاشیم روشهایی برای محدود کردن ردیابی پیدا کنیم که همزمان به سایتها امکان بدهند هرزآگهی و تقلب را متوقف کنند.</translation> <translation id="2053312383184521053">دادههای حالت بیکار</translation> @@ -1438,7 +1443,7 @@ <ph name="BR" /> <ph name="BR" /> <ph name="BEGIN_BOLD" />توجه:<ph name="END_BOLD" /> سیستم درطول پردازش مجدداً راهاندازی میشود.</translation> -<translation id="23030561267973084">«<ph name="EXTENSION_NAME" />» اجازههای تکمیلی درخواست کرده است.</translation> +<translation id="23030561267973084">«<ph name="EXTENSION_NAME" />» اجازههای جانبی درخواست کرده است.</translation> <translation id="23055578400314116">نام کاربری انتخاب کنید</translation> <translation id="2307462900900812319">پیکربندی شبکه</translation> <translation id="2307553512430195144">اگر موافقت کنید، «دستیار Google» در حالت آمادهبهکار منتظر میماند تا گفته شدن «Ok Google» را تشخیص دهد و میتواند تشخیص دهد که <ph name="SUPERVISED_USER_NAME" /> درحال صحبت کردن با Voice Match است. @@ -1912,6 +1917,7 @@ <translation id="2742448780373473567">نصب <ph name="DEVICE_OS" /> کل دادههای موجود در دستگاهتان را بازنویسی میکند.</translation> <translation id="274290345632688601">بازیابی برنامهها و فایلهای Linux</translation> <translation id="274318651891194348">درحال جستجوی صفحهکلید</translation> +<translation id="2743301740238894839">شروع</translation> <translation id="2743387203779672305">کپی در بریدهدان</translation> <translation id="2745080116229976798">وابستگی مشروط Microsoft</translation> <translation id="2747266560080989517">این فایل محتوای حساس یا خطرناک دارد. از مالک بخواهید مشکل را برطرف کند.</translation> @@ -2424,6 +2430,7 @@ <translation id="3255355328033513170">همه دادههای ذخیرهشده توسط <ph name="SITE_GROUP_NAME" /> و سایتهای زیرمجموعه آن حذف خواهند شد. این مورد کوکیها را شامل میشود. از سیستم این سایتها (ازجمله در برگههای باز) خارج خواهید شد.</translation> <translation id="3257733480216378006">به <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" /> اجازه داده شود؟</translation> <translation id="3259723213051400722">لطفاً دوباره امتحان کنید.</translation> +<translation id="3261090393424563833">افزایش نرخ</translation> <translation id="3261268979727295785">بعد از تکمیل راهاندازی، میتوانید کنترلهای والدین را برای فرزندان بزرگتر اضافه کنید. میتوانید اطلاعات را در کنترلهای والدین در برنامه «کاوش» پیدا کنید.</translation> <translation id="3262986719682892278">بسیار بزرگ است</translation> <translation id="3264544094376351444">قلم Sans-Serif</translation> @@ -2933,6 +2940,7 @@ <translation id="3747077776423672805">برای حذف برنامهها به «تنظیمات > فروشگاه Google Play > مدیریت اولویتهای Android > برنامهها یا مدیر برنامه» بروید. سپس روی برنامهای که میخواهید حذف نصب شود ضربه بزنید (ممکن است برای پیدا کردن برنامه نیاز باشد صفحه را تند بهراست یا چپ بکشید). سپس روی «حذف نصب» یا «غیرفعال کردن» ضربه بزنید.</translation> <translation id="3747603683749989726">امنیت پیشرفته روشن شود؟</translation> <translation id="3748706263662799310">گزارش یک اشکال</translation> +<translation id="3750304496241836236">برای وارد کردن گذرواژهها به «مدیر گذرواژه Google»، فایل CSV را انتخاب کنید</translation> <translation id="3750562496035670393">Chrome گذرواژهتان را در این دستگاه ذخیره کرده است، اما بهجای دستگاه میتوانید آن را در «حساب Google» خودتان ذخیره کنید. بدینترتیب، هرگاه به سیستم وارد شده باشید، همه گذرواژههای ذخیرهشده در «حساب Google» شما نیز دردسترس خواهد بود.</translation> <translation id="3752253558646317685">از فرزندتان بخواهید مدام انگشتش را بردارد تا اثر انگشت ذخیره شود</translation> <translation id="3753033997400164841">یکبار ذخیره کنید. همهجا استفاده کنید</translation> @@ -2972,6 +2980,7 @@ <translation id="3778740492972734840">ابزارهای &برنامه نویس</translation> <translation id="3778868487658107119">از آن سؤال بپرسید. بگویید کاری انجام دهد. این Google شخصی شما است و همیشه برای کمک آماده است.</translation> <translation id="3781742599892759500">دسترسی به میکروفون Linux</translation> +<translation id="3783889407390048282">برای اینکه دسترسی به Android را ازدست ندهید، فضا آزاد کنید.</translation> <translation id="3784472333786002075">کوکیها فایلهایی هستند که توسط وبسایتها ایجاد میشوند. دو نوع کوکی وجود دارد: کوکیهای شخص اول که توسط سایتی که بازدید میکنید ایجاد میشوند. این سایت در نوار نشانی نشان داده میشود. کوکیهای شخص ثالث که توسط سایتهای دیگر ایجاد میشوند. برخی از محتواها، مثل آگهیها یا تصاویر موجود در وبسایتی که بازدید میکنید، متعلق به این سایتها هستند.</translation> <translation id="3785308913036335955">نمایش میانبر «برنامهها»</translation> <translation id="3785727820640310185">گذرواژههای ذخیرهشده برای این سایت</translation> @@ -4104,6 +4113,7 @@ <translation id="4871370605780490696">افزودن نشانک</translation> <translation id="4871568871368204250">خاموش کردن همگامسازی</translation> <translation id="4871719318659334896">بستن گروه</translation> +<translation id="4872192066608821120">برای وارد کردن گذرواژهها، فایل CSV را انتخاب کنید</translation> <translation id="4873312501243535625">بررسیکننده فایل رسانهای</translation> <translation id="4876273079589074638">به مهندسان ما کمک کنید این خرابی را بررسی و برطرف کنند. در صورت امکان مراحل را دقیق فهرست کنید. هیچ جزئیاتی بیاهمیت نیست!</translation> <translation id="4876895919560854374">قفل و باز کردن قفل صفحه</translation> @@ -4285,6 +4295,7 @@ <translation id="5066100345385738837">مدیریت ساناد امن در تنظیمات ChromeOS</translation> <translation id="5067399438976153555">همیشه روشن</translation> <translation id="5067867186035333991">اگر <ph name="HOST" /> میخواهد به میکروفن شما دسترسی داشته باشد از من سوال شود</translation> +<translation id="5068553687099139861">نمایش گذرواژهها</translation> <translation id="5068918910148307423">به سایتهای اخیراً بستهشده امکان داده نشود ارسال و دریافت داده را تکمیل کنند</translation> <translation id="5068919226082848014">پیتزا</translation> <translation id="5070710277167211639">پیمایشها به HTTPS ارتقا مییابند و پیشاز بارگیری سایتهایی که از HTTPS پشتیبانی نمیکنند، هشدار دریافت میکنید</translation> @@ -5447,6 +5458,7 @@ <translation id="6206199626856438589">از سیستم سایتهای نشاندادهشده (ازجمله در برگههای باز) خارج خواهید شد</translation> <translation id="6206311232642889873">&کپی تصویر</translation> <translation id="6207200176136643843">بازنشانی به سطح بزرگنمایی پیشفرض</translation> +<translation id="6207806976844244951">ذخیره در «مدیر گذرواژه Google» (<ph name="EMAIL" />)</translation> <translation id="6207937957461833379">کشور/منطقه</translation> <translation id="6208382900683142153">کدهای اطمینان حریم خصوصی را در وب بهبود میبخشد و نمیتوان از آنها برای پی بردن به هویت شما استفاده کرد.</translation> <translation id="6208521041562685716">داده تلفن همراه درحال فعال شدن است</translation> @@ -5686,6 +5698,7 @@ <translation id="6436610005579237680">برای دریافت پاسخهای متناسبتر، به «دستیار Google» اجازه دهید هنگامی که سؤالی میپرسید به نماگرفتی از محتوای روی صفحه دسترسی داشته باشد. ممکن است «دستیار» از اطلاعات مربوط به آهنگها یا ویدیوهای درحال پخش هم استفاده کند.</translation> <translation id="6436778875248895551">سرپرستتان افزونه «<ph name="EXTENSION_NAME" />» را مسدود کرده است</translation> <translation id="6438234780621650381">بازنشانی تنظیمات</translation> +<translation id="6438475350605608554">درحال وارد کردن گذرواژهها در برگه دیگری هستید</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - پخش خودکار</translation> <translation id="6442187272350399447">معرکه</translation> <translation id="6442445294758185945">بهروزرسانی بارگیری نشد. لطفاً بعداً دوباره امتحان کنید.</translation> @@ -5696,6 +5709,7 @@ <translation id="6446213738085045933">ایجاد میانبر دسک تاپ</translation> <translation id="6447842834002726250">کوکیها</translation> <translation id="6450876761651513209">تغییر تنظیمات مربوط به حریم خصوصی شما</translation> +<translation id="645119363824354176">برای وارد کردن گذرواژهها به این دستگاه، فایل CSV را انتخاب کنید</translation> <translation id="6451344358166983408">سایت یا صفحه</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> و ۱ برگه دیگر}one{<ph name="PAGE_TITLE" /> و # برگه دیگر}other{<ph name="PAGE_TITLE" /> و # برگه دیگر}}</translation> <translation id="6451689256222386810">اگر عبارت عبورتان را فراموش کردهاید یا میخواهید این تنظیم را تغییر دهید، <ph name="BEGIN_LINK" />همگامسازی را بازنشانی کنید<ph name="END_LINK" />.</translation> @@ -5961,6 +5975,7 @@ <translation id="6691936601825168937">&ارسال کردن</translation> <translation id="6693745645188488741">{COUNT,plural, =1{۱ صفحه}one{{COUNT} صفحه}other{{COUNT} صفحه}}</translation> <translation id="6694430008315398925">راهاندازی Steam</translation> +<translation id="6697172646384837537">مکان وارد کردن گذرواژهها را انتخاب کنید</translation> <translation id="6697492270171225480">نمایش پیشنهادهای صفحههای مشابه وقتی صفحهای پیدا نمیشود</translation> <translation id="6697690052557311665">برای همرسانی، روی پوشهای در برنامه Files کلیک راست کنید، سپس «همرسانی با Linux» را انتخاب کنید.</translation> <translation id="6698810901424468597">خواندن و تغییر دادههایتان در <ph name="WEBSITE_1" /> و <ph name="WEBSITE_2" /></translation> @@ -6058,6 +6073,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">اسکن خودکار به شما اجازه میدهد بهطور خودکار بین موارد موجود در صفحه جابهجا شوید. وقتی موردی برجسته میشود، با فشار دادن «انتخاب» آن را فعال کنید.</translation> <translation id="6795884519221689054">پاندا</translation> +<translation id="6796509790850723820">پرداز زدن</translation> <translation id="6797493596609571643">اوه، مشکلی روی داد.</translation> <translation id="6798420440063423019">چون چندینبار پین اشتباه وارد شده، کلید امنیتی قفل شده است. باید کلید امنیتی را بازنشانی کنید.</translation> <translation id="679845623837196966">نمایش «فهرست خواندن»</translation> @@ -6301,7 +6317,7 @@ <translation id="7004499039102548441">برگههای جدید</translation> <translation id="7004562620237466965">فقط کشف رمز</translation> <translation id="7004969808832734860">تا <ph name="DISCOUNT_UP_TO_AMOUNT" /> تخفیف</translation> -<translation id="7005496624875927304">اجازههای تکمیلی</translation> +<translation id="7005496624875927304">اجازههای جانبی</translation> <translation id="7005812687360380971">عدم موفقیت</translation> <translation id="7005848115657603926">محدوده صفحه معتبر نیست، از <ph name="EXAMPLE_PAGE_RANGE" /> استفاده کنید</translation> <translation id="7006438259896942210">این حساب (<ph name="USER_EMAIL_ADDRESS" />) را <ph name="PROFILE_NAME" /> مدیریت میکند</translation> @@ -6438,6 +6454,7 @@ <translation id="7152478047064750137">این افزونه به مجوز خاصی نیاز ندارد</translation> <translation id="7154130902455071009">تغییر صفحه شروعتان به: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">عکس موجود از دوربین یا فایل</translation> +<translation id="7159953856712257647">نصبشده بهطور پیشفرض</translation> <translation id="7160182524506337403">اکنون میتوانید اعلانهای تلفنتان را مشاهده کنید</translation> <translation id="7163202347044721291">درحال راستیآزمایی کد فعالسازی…</translation> <translation id="716640248772308851">«<ph name="EXTENSION" />» میتواند تصاویر، ویدئوها و فایلهای صوتی موجود در مکانهای انتخاب شده را بخواند.</translation> @@ -6600,6 +6617,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> اکنون در حالت تمام صفحه است.</translation> <translation id="7340650977506865820">سایت درحال همرسانی صفحهنمایش شما است</translation> <translation id="7340757554212515731">گزارشهای خرابی و دادههای استفاده و عیبیابی را بهطور خودکار به Google ارسال میکند</translation> +<translation id="734088800888587319">سنجههای شبکه</translation> <translation id="7341834142292923918">میخواهد به این سایت دسترسی پیدا کند</translation> <translation id="7343372807593926528">لطفاً قبلاز ارسال بازخورد، مشکل را شرح دهید.</translation> <translation id="7344585835349671209">مدیریت گواهینامههای HTTPS/SSL در دستگاه</translation> @@ -7537,6 +7555,7 @@ <translation id="820568752112382238">سایتهایی که بیشتر بازدید شده</translation> <translation id="8206745257863499010">بلوزی</translation> <translation id="8206859287963243715">سلولی</translation> +<translation id="8208216423136871611">ذخیره نشود</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{اعلان جدید}one{# اعلان جدید}other{# اعلان جدید}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{بارگیری درحال انجام است}one{بارگیری درحال انجام است}other{بارگیری درحال انجام است}}</translation> <translation id="8213449224684199188">به حالت عکسبرداری وارد شد</translation> @@ -7649,6 +7668,7 @@ <translation id="8314835274931377415">راهاندازی «دسترسی کلیدی» شروع شود؟</translation> <translation id="8317582043908962055">شناسایی نوشتار P&DF</translation> <translation id="8317671367883557781">افزودن اتصال شبکه</translation> +<translation id="8317965619823678157">کپی کردن گذرواژهها</translation> <translation id="8318266828739827371">از نمای صفحهٔ دونیمه برای دیدن ناحیه درشتنماییشده در صفحهنمایش استفاده کنید. از کلیدهای «جستجو + مهار + D» برای روشن و خاموش کردن ذرهبین متصل استفاده کنید.</translation> <translation id="8319414634934645341">کاربرد کلید توسعه یافته</translation> <translation id="8321837372750396788">این <ph name="DEVICE_TYPE" /> توسط <ph name="MANAGER" /> مدیریت میشود.</translation> @@ -7875,7 +7895,7 @@ <translation id="8551588720239073785">تنظیمات تاریخ و ساعت</translation> <translation id="8553342806078037065">مدیریت افراد دیگر</translation> <translation id="8554899698005018844">زبانی موجود نیست</translation> -<translation id="855604308879080518">به برنامههای Android اجازه دهید به دستگاههای USB در این Chromebook دسترسی داشته باشند. هربار دستگاه USB را وصل کنید، اجازه درخواست خواهد شد. هرکدام از برنامههای Android بهصورت جداگانه اجازههای بیشتری درخواست خواهند کرد.</translation> +<translation id="855604308879080518">به برنامههای Android اجازه دهید به دستگاههای USB در این Chromebook دسترسی داشته باشند. هربار دستگاه USB را وصل کنید، اجازه درخواست خواهد شد. هرکدام از برنامههای Android بهصورت جداگانه اجازههای جانبی درخواست خواهند کرد.</translation> <translation id="8557022314818157177">کلید امنیتی را تازمانیکه اثرانگشت ثبت شود، لمس کنید</translation> <translation id="8557180006508471423">روشن کردن «Google Chrome» در خدمات مکان در Mac</translation> <translation id="8557856025359704738">بارگیری بعدی در تاریخ <ph name="NEXT_DATE_DOWNLOAD" /> انجام میشود.</translation> @@ -8443,6 +8463,7 @@ <translation id="9088917181875854783">لطفاً تأیید کنید که این گذرکلید در دستگاه "<ph name="DEVICE_NAME" />" نشان داده میشود:</translation> <translation id="9089416786594320554">روشهای ورودی</translation> <translation id="9090044809052745245">نحوه نمایش دستگاه شما به دیگران</translation> +<translation id="9093470422440389061">سنجههای عملکرد WiFi</translation> <translation id="9094033019050270033">بهروزرسانی گذرواژه</translation> <translation id="9094038138851891550">نام کاربری نامعتبر است</translation> <translation id="9094859731829297286">مطمئنید میخواهید حجم مشخصی از دیسک را به Linux اختصاص دهید؟</translation> @@ -8577,6 +8598,7 @@ <translation id="929117907539171075">دادههای آفلاین برنامههای نصبشده هم حذف خواهد شد</translation> <translation id="930268624053534560">مهرهای زمان با جزئیات</translation> <translation id="930893132043726269">درحالحاضر فراگردی میشود</translation> +<translation id="93140074055951850">برنامههای Android متوقف شدند</translation> <translation id="932327136139879170">منزل</translation> <translation id="932508678520956232">نمیتوان چاپ کردن را آغاز کرد.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{این فایل برای بررسی امنیتی بسیار بزرگ است. فایلهای تا حداکثر ۵۰ مگابایت را میتوانید بارگذاری کنید.}one{بعضی از این فایلها برای بررسی امنیتی بسیار بزرگ است. فایلهای تا حداکثر ۵۰ مگابایت را میتوانید بارگذاری کنید.}other{بعضی از این فایلها برای بررسی امنیتی بسیار بزرگ است. فایلهای تا حداکثر ۵۰ مگابایت را میتوانید بارگذاری کنید.}}</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 05d43e2..929cf10 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">Tietosuojakeskus</translation> <translation id="117445914942805388">Jos haluat poistaa selailutiedot kaikilta synkronoiduilta laitteiltasi ja Google-tililtäsi, <ph name="BEGIN_LINK" />siirry synronointiasetuksiin<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">Tulo&sta...</translation> +<translation id="1176378369905028399">Tämän tilin salasana on jo tallennettu Googlen Salasanoihin (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">Laitteen tiedostojen tai kansioiden muokkaaminen kielletty</translation> <translation id="1177863135347784049">Muokattu</translation> <translation id="1178581264944972037">Tauko</translation> @@ -804,6 +805,7 @@ <translation id="1745732479023874451">Ylläpidä kontakteja</translation> <translation id="1748283190377208783">{0,plural, =1{käyttämätön monikko}other{Haluatko avata ja muokata # tiedostoa tässä verkkosovelluksessa?}}</translation> <translation id="1748563609363301860">Voit tallentaa tämän salasanan Google-tilillesi tai vain tälle laitteelle</translation> +<translation id="1749733017156547309">Salasana on pakollinen</translation> <translation id="1750172676754093297">Tähän suojausavaimeen ei voi tallentaa sormenjälkiä</translation> <translation id="1751249301761991853">Henkilökohtainen</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> voi muokata kansion <ph name="FOLDERNAME" /> tiedostoja, kunnes suljet sivuston kaikki välilehdet</translation> @@ -1755,6 +1757,7 @@ <translation id="2602501489742255173">Aloita pyyhkäisemällä ylös</translation> <translation id="2603115962224169880">Puhdista tietokone</translation> <translation id="2603355571917519942">Voice Match on valmiina</translation> +<translation id="2604129989323098489">Sivustot pyytävät yleensä tietoa näytöistäsi, jotta ne voivat avata ja sijoittaa ikkunoita älykkäästi, esimerkiksi näyttää dokumentteja tai koko näytön sisältöä vierekkäin</translation> <translation id="2604255671529671813">Verkkoyhteysvirhe</translation> <translation id="2605668923777146443">Katso Better Together ‑vaihtoehdot <ph name="LINK_BEGIN" />asetuksista<ph name="LINK_END" />.</translation> <translation id="2606246518223360146">Yhdistä tiedot</translation> @@ -1800,6 +1803,7 @@ <translation id="2645047101481282803"><ph name="PROFILE_NAME" /> ylläpitää laitettasi</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 salasana siirretty tälle laitteelle}other{{NUM_PASSWORDS} salasanaa siirretty tälle laitteelle}}</translation> <translation id="2645435784669275700">Chrome-käyttöjärjestelmä</translation> +<translation id="2645515095874728277">Tilin salasana on jo tallennettu tälle laitteelle</translation> <translation id="2649045351178520408">Base64-koodattu ASCII, varmenneketju</translation> <translation id="2652129567809778422">Valitse salasana</translation> <translation id="2653033005692233957">Haku epäonnistui</translation> @@ -2160,6 +2164,7 @@ <translation id="2972581237482394796">&Tee uudelleen</translation> <translation id="2973324205039581528">Mykistä sivusto</translation> <translation id="2973537811036309675">Sivupaneeli</translation> +<translation id="2975761176769946178">URL-osoite vaaditaan</translation> <translation id="2976557544729462544">Jotkin laitteet edellyttävät datan käyttösuojan poistamista käytöstä, jotta ne toimivat oikein tai täydellä teholla.</translation> <translation id="2977480621796371840">Poista ryhmästä</translation> <translation id="2979639724566107830">Avaa uudessa ikkunassa</translation> @@ -2401,6 +2406,7 @@ <translation id="3227137524299004712">Mikrofoni</translation> <translation id="3232754137068452469">Verkkosovellus</translation> <translation id="3233271424239923319">Varmuuskopioi Linux-sovellukset ja ‑tiedostot</translation> +<translation id="3234251228180563751">Käyttäjänimi sisältää yli 1000 merkkiä</translation> <translation id="3234978181857588512">Tallenna laitteelle</translation> <translation id="3238192140106069382">Yhdistetään ja tarkistetaan</translation> <translation id="3239373508713281971">Aikaraja poistettu: <ph name="APP_NAME" /></translation> @@ -5216,6 +5222,7 @@ <translation id="5975792506968920132">Akun varaus prosentteina</translation> <translation id="5976160379964388480">Muut</translation> <translation id="5978277834170881274">&Käytä tavallista oikeinkirjoituksen tarkistusta</translation> +<translation id="5978493744931296692">Järjestelmänvalvoja on poistanut muut profiilit käytöstä</translation> <translation id="5979084224081478209">Tarkista salasanat</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Laitoit 1 mahdollisesti haitallisen laajennuksen takaisin päälle}other{Laitoit {NUM_EXTENSIONS} mahdollisesti haitallista laajennusta takaisin päälle}}</translation> <translation id="5979353814339191480">Tämä vaihtoehto koskee Chromebookeja, joissa on datapaketin tai mobiiliverkon tikku, tai yhteyden jakamista kannettavaan hotspotiin</translation> @@ -5380,6 +5387,7 @@ <translation id="6130692320435119637">Lisää Wi-Fi-yhteys</translation> <translation id="6130887916931372608">Näppäimistön näppäin</translation> <translation id="6135823405800500595">Varmista, että puhelimesi on lähellä, sen lukitus on avattuna ja Bluetooth‑ ja Wi-Fi‑yhteydet ovat päällä</translation> +<translation id="6135826623269483856">Ikkunoiden hallinnointi kielletty kaikilla näytöillä</translation> <translation id="6136114942382973861">Sulje latauspalkki</translation> <translation id="6136287496450963112">Suojausavaintasi ei ole suojattu PIN-koodilla. Luo PIN-koodi, jotta voit ylläpitää sormenjälkiä.</translation> <translation id="6138680304137685902">X9.62 ECDSA ‑allekirjoitus, jossa on SHA-384</translation> @@ -7386,6 +7394,7 @@ <ph name="BEGIN_PARAGRAPH3" />Voit poistaa tämän palvelun käytöstä asetuksissa.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Välilehdet</translation> <translation id="8076835018653442223">Järjestelmänvalvojasi on estänyt sinua käyttämästä laitteellesi tallennettuja tiedostoja.</translation> +<translation id="80798452873915119">Sivustot voivat pyytää lupaa hallinnoida ikkunoita kaikilla näytöillä</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289"><ph name="MANAGER_NAME" /> ylläpitää tätä istuntoa. Järjestelmänvalvojat voivat poistaa profiilisi ja seurata verkkoliikennettäsi.</translation> <translation id="8081989000209387414">Poistetaanko ADB-virheenkorjaus käytöstä?</translation> @@ -7525,6 +7534,7 @@ <translation id="820568752112382238">Useimmin vieraillut sivustot</translation> <translation id="8206745257863499010">Muusikko</translation> <translation id="8206859287963243715">Matkapuhelin</translation> +<translation id="8208216423136871611">Älä tallenna</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Uusi ilmoitus}other{# uutta ilmoitusta}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Lataus on käynnissä}other{Latauksia on käynnissä}}</translation> <translation id="8213449224684199188">Valokuvatilaan siirrytty</translation> @@ -7690,6 +7700,7 @@ <translation id="8371695176452482769">Puhu nyt</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Mykistä sivusto}other{Mykistä sivustot}}</translation> <translation id="8373652277231415614">Crostinin jaetut hakemistot</translation> +<translation id="8374243500935816406">Älä salli sivustojen hallinnoida ikkunoita kaikilla näytöillä</translation> <translation id="8376137163494131156">Kerro meille, mitä Google Castin kanssa tapahtuu</translation> <translation id="8376384591331888629">Mukaan lukien kolmannen osapuolen evästeet tällä sivustolla</translation> <translation id="8376451933628734023">Jos tämä verkkosovellus yrittää huijata sinua luulemaan, että se on jokin toinen sovellus, poista se.</translation> @@ -7984,6 +7995,7 @@ <translation id="8670537393737592796">Asenna <ph name="APP_NAME" /> klikkaamalla asennuspainiketta, niin pääset takaisin tähän nopeasti</translation> <translation id="867085395664725367">Väliaikainen palvelinvirhe</translation> <translation id="8673026256276578048">Haku verkosta...</translation> +<translation id="867329473311423817">Ikkunoiden hallinnointi sallittu kaikilla näytöillä</translation> <translation id="8673383193459449849">Palvelinvirhe</translation> <translation id="8674903726754070732">Tietokoneesi on valitettavasti määritetty virheellisellä laitteistotunnuksella. Tämän takia Chrome-käyttöjärjestelmä ei voi asentaa uusimpia tietoturvapäivityksiä ja tietokoneesi <ph name="BEGIN_BOLD" />voi altistua hyökkäyksille<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Asennusohjelma ei löytänyt sopivaa paikkaa, johon <ph name="DEVICE_OS" /> voitaisiin asentaa.</translation> @@ -8004,6 +8016,7 @@ <translation id="8683081248374354009">Nollaa ryhmä</translation> <translation id="8688672835843460752">Saatavilla</translation> <translation id="8690129572193755009">Sivustot voivat pyytää lupaa käsitellä protokollia</translation> +<translation id="8692107307702113268">Salasana sisältää yli 1000 merkkiä</translation> <translation id="8695139659682234808">Lisää lapsilukko käyttöönoton jälkeen</translation> <translation id="8695825812785969222">&Avaa sijainti...</translation> <translation id="8698269656364382265">Voit palata edelliselle näytölle pyyhkäisemällä vasemmasta reunasta.</translation> @@ -8284,6 +8297,7 @@ <translation id="8960638196855923532">Voit nyt nähdä puhelimen ilmoitukset ja sovellukset</translation> <translation id="8962051932294470566">Voit jakaa vain yhden tiedoston kerrallaan. Yritä uudelleen, kun tämänhetkinen siirto on valmis.</translation> <translation id="8962083179518285172">Piilota tiedot</translation> +<translation id="8962863356073277855">URL-osoitteen muodon pitäisi olla https://www.example.com</translation> <translation id="8962918469425892674">Tämä sivusto käyttää liikkeen- tai valontunnistimia.</translation> <translation id="8965037249707889821">Syötä vanha salasana</translation> <translation id="89667524227025535">Skannaa QR-koodi laitteen kameralla tai lisää operaattorisi antama aktivointikoodi.</translation> @@ -8554,6 +8568,7 @@ <translation id="9220525904950070496">Poista tili</translation> <translation id="9220820413868316583">Nosta sormi ja yritä uudelleen.</translation> <translation id="922152298093051471">Yksilöi Chromea</translation> +<translation id="9222839025964079645">Salasanoja ei ole tuotu (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Näytä kaikki</translation> <translation id="924818813611903184">Muuta kielivalintoja Chrome-käyttöjärjestelmän asetuksista</translation> <translation id="929117907539171075">Myös asennetussa sovelluksessa oleva offline-data poistetaan</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index a127e49..868d9db10 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -602,6 +602,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Bisita)</translation> <translation id="1572266655485775982">I-enable ang Wi-Fi</translation> <translation id="1572876035008611720">Ilagay ang iyong email</translation> +<translation id="1573117025466282241">Gamitin ang telepono gamit ang QR code</translation> <translation id="1575741822946219011">Mga wika at input</translation> <translation id="1576594961618857597">Default na puting avatar</translation> <translation id="1578558981922970608">Puwersahang pagsara</translation> @@ -7542,6 +7543,7 @@ <translation id="820568752112382238">Mga pinakamadalas bisitahing site</translation> <translation id="8206745257863499010">Musika</translation> <translation id="8206859287963243715">Cellular</translation> +<translation id="8208216423136871611">Huwag mag-save</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Bagong notification}one{# bagong notification}other{# na bagong notification}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Kasalukuyang isinasagawa ang pag-download}one{Kasalukuyang isinasagawa ang mga pag-download}other{Kasalukuyang isinasagawa ang mga pag-download}}</translation> <translation id="8213449224684199188">Nailagay sa photo mode</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 2b8e4577..8b77014 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -7532,6 +7532,7 @@ <translation id="820568752112382238">Sites les plus visités</translation> <translation id="8206745257863499010">Mélodie</translation> <translation id="8206859287963243715">Cellulaire</translation> +<translation id="8208216423136871611">Ne pas enregistrer</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nouvelle notification}one{# nouvelle notification}other{# nouvelles notifications}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Téléchargement en cours…}one{Téléchargement en cours…}other{Téléchargements en cours…}}</translation> <translation id="8213449224684199188">Mode photo activé</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index ac981d0a..31e8d01 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -599,6 +599,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (invité)</translation> <translation id="1572266655485775982">Activation du Wi-Fi</translation> <translation id="1572876035008611720">Saisissez votre adresse e-mail</translation> +<translation id="1573117025466282241">Utiliser le téléphone avec un code QR</translation> <translation id="1575741822946219011">Langues et modes de saisie</translation> <translation id="1576594961618857597">Avatar blanc par défaut</translation> <translation id="1578558981922970608">Forcer la fermeture</translation> @@ -7527,6 +7528,7 @@ <translation id="820568752112382238">Sites les plus consultés</translation> <translation id="8206745257863499010">Musique</translation> <translation id="8206859287963243715">Mobile</translation> +<translation id="8208216423136871611">Ne pas enregistrer</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nouvelle notification}one{# nouvelle notification}other{# nouvelles notifications}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Téléchargement en cours}one{Téléchargement en cours}other{Téléchargements en cours}}</translation> <translation id="8213449224684199188">Mode Photo activé</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index bc479b7..affd554 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -7509,6 +7509,7 @@ <translation id="820568752112382238">Sitios máis visitados</translation> <translation id="8206745257863499010">Tipo blues</translation> <translation id="8206859287963243715">Móbil</translation> +<translation id="8208216423136871611">Non gardar</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{1 notificación nova}other{# notificacións novas}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{A descarga está en curso}other{As descargas están en curso}}</translation> <translation id="8213449224684199188">Iniciouse o modo de foto</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index 760f92f..cf36843 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -596,6 +596,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (અતિથિ)</translation> <translation id="1572266655485775982">વાઇ-ફાઇ ચાલુ</translation> <translation id="1572876035008611720">તમારું ઇમેઇલ દાખલ કરો</translation> +<translation id="1573117025466282241">QR કોડ સ્કૅન કરવા માટે ફોનનો ઉપયોગ કરો</translation> <translation id="1575741822946219011">ભાષાઓ અને ઇનપુટ</translation> <translation id="1576594961618857597">ડિફોલ્ટ સફેદ અવતાર</translation> <translation id="1578558981922970608">ફરજિયાત બંધ</translation> @@ -1741,6 +1742,7 @@ <translation id="2602501489742255173">શરૂ કરવા માટે ઉપર સ્વાઇપ કરો</translation> <translation id="2603115962224169880">કમ્પ્યુટર સાફ કરો</translation> <translation id="2603355571917519942">Voice Match તૈયાર છે</translation> +<translation id="2604129989323098489">સાઇટ સામાન્ય રીતે તમારા ડિસ્પ્લે વિશેની માહિતી માગે છે, જેથી તેઓ ઇન્ટેલિજન્ટ રીતે વિન્ડો ખોલી શકે અને તેને મૂકી શકે, જેમ કે દસ્તાવેજો અથવા પૂર્ણ-સ્ક્રીન કન્ટેન્ટને એકબીજાની આજુબાજુમાં બતાવવા</translation> <translation id="2604255671529671813">નેટવર્ક કનેક્શનમાં ભૂલ</translation> <translation id="2605668923777146443">Better Together સુવિધાના તમારા વિકલ્પો જોવા માટે <ph name="LINK_BEGIN" />સેટિંગ<ph name="LINK_END" /> પર જાઓ.</translation> <translation id="2606246518223360146">ડેટાને લિંક કરો</translation> @@ -5374,6 +5376,7 @@ <translation id="6130692320435119637">વાઇ-ફાઇ ઉમેરો</translation> <translation id="6130887916931372608">કીબોર્ડની કી</translation> <translation id="6135823405800500595">ખાતરી કરો કે તમારો ફોન નજીકમાં, અનલૉક કરેલો હોય તેમજ તેમાં બ્લૂટૂથ અને વાઇ-ફાઇની સેવા ચાલુ કરવામાં આવી હોય</translation> +<translation id="6135826623269483856">તમારા બધા ડિસ્પ્લે પર વિન્ડો મેનેજ કરવાની મંજૂરી નથી</translation> <translation id="6136114942382973861">ડાઉનલોડ બાર બંધ કરો</translation> <translation id="6136287496450963112">તમારી 'સિક્યુરિટી કી' પિન વડે સુરક્ષિત નથી. ફિંગરપ્રિન્ટ મેનેજ કરવા માટે, પહેલાં પિન બનાવો.</translation> <translation id="6138680304137685902">SHA-384 સાથે X9.62 ECDSA સહી</translation> @@ -7377,6 +7380,7 @@ <ph name="BEGIN_PARAGRAPH3" />તમે સેટિંગમાંથી આ સેવા બંધ કરી શકશો.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">ટૅબ્સ</translation> <translation id="8076835018653442223">તમારા ઍડમિનિસ્ટ્રેટરે તમારા ડિવાઇસ પર સ્થાનિક ફાઇલોનો ઍક્સેસ બંધ કરેલો છે</translation> +<translation id="80798452873915119">સાઇટ તમારા બધા ડિસ્પ્લે પર વિન્ડો મેનેજ કરવા માટે કહી શકે છે</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289"><ph name="MANAGER_NAME" /> દ્વારા તમારું સત્ર મેનેજ થાય છે. ઍડમિનિસ્ટ્રેટર તમારી પ્રોફાઇલ ડિલીટ કરી શકે છે અને તમારા નેટવર્કનો ટ્રાફિક પણ મોનિટર કરી શકે છે.</translation> <translation id="8081989000209387414">ADB ડિબગીંગ બંધ કરીએ?</translation> @@ -7516,6 +7520,7 @@ <translation id="820568752112382238">સૌથી વધુ મુલાકાત લેવાયેલી સાઇટ</translation> <translation id="8206745257863499010">બ્લુસી</translation> <translation id="8206859287963243715">સેલ્યુલર</translation> +<translation id="8208216423136871611">સાચવશો નહીં</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{નવું નોટિફિકેશન}one{# નવું નોટિફિકેશન}other{# નવા નોટિફિકેશન}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ડાઉનલોડ ચાલુ છે}one{ડાઉનલોડ ચાલુ છે}other{ડાઉનલોડ ચાલુ છે}}</translation> <translation id="8213449224684199188">ફોટો મોડ પર સ્વિચ કર્યું</translation> @@ -7681,6 +7686,7 @@ <translation id="8371695176452482769">હવે બોલો</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{સાઇટને મ્યૂટ કરો}one{સાઇટને મ્યૂટ કરો}other{સાઇટને મ્યૂટ કરો}}</translation> <translation id="8373652277231415614">Crostiniએ શેર કરેલી ડિરેક્ટરી</translation> +<translation id="8374243500935816406">સાઇટને તમારા બધા ડિસ્પ્લે પર વિન્ડો મેનેજ કરવાની મંજૂરી આપશો નહીં</translation> <translation id="8376137163494131156">Google Cast માં શું થઈ રહ્યું છે તે અમને જણાવો.</translation> <translation id="8376384591331888629">આ સાઇટ પરની ત્રીજા પક્ષની કુકી શામેલ છે</translation> <translation id="8376451933628734023">જો આ વેબ ઍપ તમને તે કોઈ બીજી ઍપ છે તેવું મનાવવાનો છળપૂર્વક પ્રયાસ કરતી હોય, તો તેને અનઇન્સ્ટૉલ કરો.</translation> @@ -7975,6 +7981,7 @@ <translation id="8670537393737592796">અહીં ઝડપથી પરત ફરવા માટે, 'ઇન્સ્ટૉલ કરો' બટન પર ક્લિક કરીને <ph name="APP_NAME" /> ઇન્સ્ટૉલ કરો</translation> <translation id="867085395664725367">સર્વરની અસ્થાયી ભૂલ આવી.</translation> <translation id="8673026256276578048">વેબ પર શોધો...</translation> +<translation id="867329473311423817">તમારા બધા ડિસ્પ્લે પર વિન્ડો મેનેજ કરવાની મંજૂરી છે</translation> <translation id="8673383193459449849">સર્વર સમસ્યા</translation> <translation id="8674903726754070732">કમનસીબે, તમારું કમ્પ્યુટર દૂષિત હાર્ડવેર ID સાથે કન્ફિગર કરવામાં આવ્યું છે. આ ChromeOSને નવીનતમ સુરક્ષા સુધારાની સાથે અપડેટ થતું અટકાવે છે અને તમારું કમ્પ્યુટર <ph name="BEGIN_BOLD" />દુર્ભાવનાપૂર્ણ હુમલાઓ પ્રત્યે સંવેદનશીલ હોઈ શકે છે<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533"><ph name="DEVICE_OS" /> ઇન્સ્ટૉલ કરવા માટે, ઇન્સ્ટૉલર માન્ય નિર્ધારિત સ્થાન શોધી શક્યું નથી.</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 743d05be..fc2885d 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -514,6 +514,7 @@ <translation id="1480663089572535854">आप पीछे जाकर, “चुनें” के लिए असाइन किया गया स्विच बदल सकते हैं. आप जब चाहें, सेटिंग में जाकर अपने-आप स्कैन होने की सुविधा को बंद कर सकते हैं.</translation> <translation id="1481537595330271162">डिस्क का साइज़ बदलते समय गड़बड़ी हुई</translation> <translation id="1482626744466814421">इस टैब को बुकमार्क करें...</translation> +<translation id="1482772681918035149">पासवर्ड में बदलाव करना</translation> <translation id="1483493594462132177">भेजें</translation> <translation id="1484979925941077974">साइट ब्लूटूथ का इस्तेमाल कर रही है</translation> <translation id="1485015260175968628">यह अब निम्न कर सकता है:</translation> @@ -528,6 +529,7 @@ <translation id="1500801317528437432">ऐसे 'Chrome ऐप्स' के बारे में ज़्यादा जानें जो अब उपलब्ध नहीं हैं</translation> <translation id="150411034776756821"><ph name="SITE" /> को निकालें</translation> <translation id="1504551620756424144">शेयर किए गए फ़ोल्डर, Windows में <ph name="BASE_DIR" /> पर उपलब्ध हैं.</translation> +<translation id="1505494256539862015">पासवर्ड एक्सपोर्ट करना</translation> <translation id="1506061864768559482">सर्च इंजन</translation> <translation id="1507170440449692343">इस पेज को आपका कैमरा ऐक्सेस करने से अवरोधित कर दिया गया है.</translation> <translation id="1507246803636407672">&छोड़ें</translation> @@ -2976,6 +2978,7 @@ <translation id="3778740492972734840">&डेवलपर टूल</translation> <translation id="3778868487658107119">इससे प्रश्न पूछें. इसे कुछ काम करने को कहें. यह आपका व्यक्तिगत Google है, जो हमेशा सहायता के लिए तैयार रहता है.</translation> <translation id="3781742599892759500">Linux में माइक्रोफ़ोन का ऐक्सेस</translation> +<translation id="3783889407390048282">डिवाइस का स्टोरेज खाली करें, ताकि आप Android का ऐक्सेस न खोएं.</translation> <translation id="3784472333786002075">कुकी ऐसी फ़ाइलें होती हैं जिन्हें वेबसाइटें बनाती हैं. कुकी दो तरह की होती हैं: पहले पक्ष की कुकी वह साइट बनाती है जिस पर आप जाते हैं. यह साइट, पता बार में दिखती है. तीसरे पक्ष की कुकी, अन्य साइटें बनाती हैं. इन साइटों पर विज्ञापन या इमेज जैसी कुछ ऐसी चीज़ें होती हैं जो उस वेबसाइट पर दिखती हैं जिस पर आप जाते हैं.</translation> <translation id="3785308913036335955">ऐप्स शॉर्टकट दिखाएं</translation> <translation id="3785727820640310185">इस साइट के लिए सेव किए गए पासवर्ड</translation> @@ -4288,6 +4291,7 @@ <translation id="5066100345385738837">ChromeOS की सेटिंग में सुरक्षित डीएनएस मैनेज करें</translation> <translation id="5067399438976153555">हमेशा चालू</translation> <translation id="5067867186035333991">अगर <ph name="HOST" /> आपका कैमरा एक्सेस करना चाहे, तो इसके लिए पूछें</translation> +<translation id="5068553687099139861">पासवर्ड दिखाना</translation> <translation id="5068918910148307423">हाल ही में बंद की गई साइट को डेटा भेजने और पाने की प्रकिया को पूरा करने की अनुमति न दें</translation> <translation id="5068919226082848014">पिज़्ज़ा</translation> <translation id="5070710277167211639">नेविगेशन को एचटीटीपीएस पर अपग्रेड करें. ऐसा करने से, आपको उन साइटों को लोड करने से पहले चेतावनी मिलेगी जो एचटीटीपीएस पर काम नहीं करतीं</translation> @@ -6438,6 +6442,7 @@ <translation id="7152478047064750137">इस एक्सटेंशन को कोई खास अनुमति नहीं चाहिए</translation> <translation id="7154130902455071009">अपना आरंभ पेज इसमें बदलें: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">कैमरा या फ़ाइल से मौजूदा फ़ोटो</translation> +<translation id="7159953856712257647">डिफ़ॉल्ट रूप से इंस्टॉल किया गया</translation> <translation id="7160182524506337403">अब आपके पास अपने फ़ोन की सूचनाएं देखने का विकल्प है</translation> <translation id="7163202347044721291">ऐक्टिवेशन कोड की पुष्टि की जा रही है...</translation> <translation id="716640248772308851">"<ph name="EXTENSION" />" चेक किए गए स्थानों में चित्रों, वीडियो, और ध्वनि फ़ाइलों को पढ़ सकता है.</translation> @@ -7537,6 +7542,7 @@ <translation id="820568752112382238">सबसे ज़्यादा देखी गई साइटें</translation> <translation id="8206745257863499010">ब्लुसी</translation> <translation id="8206859287963243715">सेलुलर</translation> +<translation id="8208216423136871611">न सेव करें</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{नई सूचना}one{# नई सूचना}other{# नई सूचनाएं}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{डाउनलोड जारी है}one{डाउनलोड जारी हैं}other{डाउनलोड जारी हैं}}</translation> <translation id="8213449224684199188">आप फ़ोटो मोड में हैं</translation> @@ -7649,6 +7655,7 @@ <translation id="8314835274931377415">क्या आप ऐक्सेस का तरीका बदलने वाले स्विच का सेट अप शुरू करना चाहते हैं?</translation> <translation id="8317582043908962055">PDF टेक्स्ट की पहचान करें</translation> <translation id="8317671367883557781">नेटवर्क कनेक्शन जोड़ें</translation> +<translation id="8317965619823678157">पासवर्ड कॉपी करना</translation> <translation id="8318266828739827371">स्क्रीन का ज़ूम इन किया गया हिस्सा देखने के लिए, स्प्लिट स्क्रीन व्यू का इस्तेमाल करें. स्क्रीन पर कर्सर वाले हिस्से को बड़ा करके दिखाने की सुविधा को चालू या बंद करने के लिए, Search + Ctrl + D का इस्तेमाल करें.</translation> <translation id="8319414634934645341">विस्तृत कुंजी उपयोग</translation> <translation id="8321837372750396788">इस <ph name="DEVICE_TYPE" /> को <ph name="MANAGER" /> प्रबंधित करेगा.</translation> @@ -8577,6 +8584,7 @@ <translation id="929117907539171075">इंस्टॉल किए गए ऐप्लिकेशन में मौजूद ऑफ़लाइन डेटा को भी मिटा दिया जाएगा</translation> <translation id="930268624053534560">विवरणों के साथ टाइमस्टैम्प</translation> <translation id="930893132043726269">फ़िलहाल, रोमिंग में है</translation> +<translation id="93140074055951850">Android ऐप्लिकेशन को रोका गया</translation> <translation id="932327136139879170">होम बटन</translation> <translation id="932508678520956232">प्रिंटिंग आरंभ नहीं कर सका.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{यह फ़ाइल बहुत बड़ी है, इसलिए इसकी सुरक्षा जांच नहीं की जा सकती. आप 50 एमबी तक की फ़ाइलें अपलोड कर सकते हैं.}one{इनमें से कुछ फ़ाइलें बहुत बड़ी हैं, इसलिए इनकी सुरक्षा जांच नहीं की जा सकती. आप 50 एमबी तक की फ़ाइलें अपलोड कर सकते हैं.}other{इनमें से कुछ फ़ाइलें बहुत बड़ी हैं, इसलिए इनकी सुरक्षा जांच नहीं की जा सकती. आप 50 एमबी तक की फ़ाइलें अपलोड कर सकते हैं.}}</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 450f6ada..ea6262a 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -7532,6 +7532,7 @@ <translation id="820568752112382238">Najposjećenije web-lokacije</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">Mobitel</translation> +<translation id="8208216423136871611">Ne spremaj</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nova obavijest}one{# nova obavijest}few{# nove obavijesti}other{# novih obavijesti}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Preuzimanje u tijeku}one{Preuzimanja u tijeku}few{Preuzimanja u tijeku}other{Preuzimanja u tijeku}}</translation> <translation id="8213449224684199188">Ušli ste u način fotografije</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 79e1b76..2b8a1bc 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -601,6 +601,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (vendég)</translation> <translation id="1572266655485775982">Wi-Fi engedélyezése</translation> <translation id="1572876035008611720">Adja meg e-mail-címét</translation> +<translation id="1573117025466282241">Telefon használata QR-kóddal</translation> <translation id="1575741822946219011">Nyelvek és beviteli módszerek</translation> <translation id="1576594961618857597">Alapértelmezett fehér avatar</translation> <translation id="1578558981922970608">Bezárás most</translation> @@ -7538,6 +7539,7 @@ <translation id="820568752112382238">Leggyakrabban felkeresett webhelyek</translation> <translation id="8206745257863499010">Énekes</translation> <translation id="8206859287963243715">Mobil</translation> +<translation id="8208216423136871611">Ne mentse</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Új értesítés}other{# új értesítés}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Letöltés folyamatban}other{Letöltések folyamatban}}</translation> <translation id="8213449224684199188">Fotó mód bekapcsolva</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 5705129..9c9c435 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -194,6 +194,7 @@ <translation id="1174391930667737831">Գաղտնիության հանգույց</translation> <translation id="117445914942805388">Այցելությունների պատմությունը բոլոր համաժամացված սարքերից և Google հաշվից ջնջելու համար <ph name="BEGIN_LINK" />անցեք համաժամացման կարգավորումներ<ph name="END_LINK" />:</translation> <translation id="1175364870820465910">&Տպել…</translation> +<translation id="1176378369905028399">Այս հաշվի գաղտնաբառն արդեն պահված է Google գաղտնաբառերի կառավարիչում (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">Չի թույլատրվում ձեր սարքում խմբագրել ֆայլեր և պանակներ</translation> <translation id="1177863135347784049">Անհատականացված</translation> <translation id="1178581264944972037">Դադար</translation> @@ -511,6 +512,7 @@ <translation id="1480663089572535854">Դուք կարող եք հետ գնալ և փոխել «Ընտրել» գործողության նշանակումը։ Ավտոմատ սկանավորումը կարող եք ցանկացած ժամանակ անջատել կարգավորումներում։</translation> <translation id="1481537595330271162">Չհաջողվեց փոխել սկավառակի չափը</translation> <translation id="1482626744466814421">Էջանշել այս ներդիրը...</translation> +<translation id="1482772681918035149">փոփոխել գաղտնաբառերը</translation> <translation id="1483493594462132177">Ուղարկել</translation> <translation id="1484979925941077974">Կայքն օգտագործում է Bluetooth-ը</translation> <translation id="1485015260175968628">Այժմ կարող է.</translation> @@ -525,6 +527,7 @@ <translation id="1500801317528437432">Իմանալ ավելին Chrome-ի չաջակցվող հավելվածների մասին</translation> <translation id="150411034776756821">Հեռացնել <ph name="SITE" /> կայքը</translation> <translation id="1504551620756424144">Ընդհանուր պանակները Windows-ում հասանելի են այստեղ՝ <ph name="BASE_DIR" />։</translation> +<translation id="1505494256539862015">արտահանել գաղտնաբառերը</translation> <translation id="1506061864768559482">Որոնողական համակարգ</translation> <translation id="1507170440449692343">Այս էջին արգելված է օգտագործել ձեր տեսախցիկը:</translation> <translation id="1507246803636407672">&Հրաժարվել</translation> @@ -599,6 +602,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (հյուր)</translation> <translation id="1572266655485775982">Միացնել Wi-Fi-ը</translation> <translation id="1572876035008611720">Մուտքագրեք հասցեն</translation> +<translation id="1573117025466282241">Օգտագործել հեռախոսը QR կոդի միջոցով</translation> <translation id="1575741822946219011">Լեզուներ և ներածման մեթոդներ</translation> <translation id="1576594961618857597">Կանխադրված սպիտակ ավատար</translation> <translation id="1578558981922970608">Ստիպողաբար փակել</translation> @@ -796,6 +800,7 @@ <translation id="1745732479023874451">Կառավարել կոնտակտները</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}one{Ուզո՞ւմ եք բացել և փոփոխել # ֆայլ այս վեբ հավելվածում։}other{Ուզո՞ւմ եք բացել և փոփոխել # ֆայլ այս վեբ հավելվածում։}}</translation> <translation id="1748563609363301860">Դուք կարող եք պահել այս գաղտնաբառը ձեր Google հաշվում կամ միայն այս սարքում</translation> +<translation id="1749733017156547309">Պահանջվում է նշել գաղտնաբառ</translation> <translation id="1750172676754093297">Անվտանգության բանալին չի կարող մատնահետքեր պահել</translation> <translation id="1751249301761991853">Անձնական կարգավորումներ</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> կայքը կկարողանա փոփոխել <ph name="FOLDERNAME" /> պանակի ֆայլերը, մինչև չփակեք այս կայքի բոլոր ներդիրները</translation> @@ -1743,6 +1748,7 @@ <translation id="2602501489742255173">Սկսելու համար մատը սահեցրեք վերև</translation> <translation id="2603115962224169880">Մաքրեք համակարգիչը</translation> <translation id="2603355571917519942">Voice Match-ը պատրաստ է</translation> +<translation id="2604129989323098489">Կայքը սովորաբար ուղարկում է ձեր էկրանների մասին տեղեկությունների հարցում, որպեսզի կարողանա խելացի կերպով բացել և տեղադրել պատուհաններ, օրինակ՝ կողք կողքի ցույց տալ փաստաթղթեր կամ լիաէկրան բովանդակություն</translation> <translation id="2604255671529671813">Ցանցի միացման սխալ</translation> <translation id="2605668923777146443">Better Together ռեժիմի ընտրանքները տեսնելու համար անցեք <ph name="LINK_BEGIN" />Կարգավորումներ<ph name="LINK_END" />։</translation> <translation id="2606246518223360146">Կցել տվյալները</translation> @@ -1788,6 +1794,7 @@ <translation id="2645047101481282803">Ձեր սարքը կառավարվում է <ph name="PROFILE_NAME" /> տիրույթի կողմից</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 գաղտնաբառ ներմուծվեց այս սարք}one{{NUM_PASSWORDS} գաղտնաբառ ներմուծվեց այս սարք}other{{NUM_PASSWORDS} գաղտնաբառ ներմուծվեց այս սարք}}</translation> <translation id="2645435784669275700">ChromeOS</translation> +<translation id="2645515095874728277">Այս հաշվի գաղտնաբառն արդեն պահված է այս սարքում</translation> <translation id="2649045351178520408">Base64-գաղտնագրված ASCII, վկայագրերի շղթա</translation> <translation id="2652129567809778422">Ընտրել գաղտնաբառ</translation> <translation id="2653033005692233957">Չհաջողվեց որոնել</translation> @@ -2148,6 +2155,7 @@ <translation id="2972581237482394796">&Վերարկել</translation> <translation id="2973324205039581528">Անջատել կայքի ձայնը</translation> <translation id="2973537811036309675">Կողային վահանակ</translation> +<translation id="2975761176769946178">Պահանջվում է նշել URL</translation> <translation id="2976557544729462544">Որոշ սարքերի պատշաճ աշխատանքի համար անհրաժեշտ է, որ անջատեք տվյալների հասանելիության պաշտպանությունը։</translation> <translation id="2977480621796371840">Հեռացնել խմբից</translation> <translation id="2979639724566107830">Բացել նոր պատուհանում</translation> @@ -2389,6 +2397,7 @@ <translation id="3227137524299004712">Խոսափող</translation> <translation id="3232754137068452469">Վեբ ծրագիր</translation> <translation id="3233271424239923319">Լինուքսի հավելվածների ու ֆայլերի պահուստավորում</translation> +<translation id="3234251228180563751">Օգտանունը պարունակում է ավելի քան 1000 նիշ</translation> <translation id="3234978181857588512">Պահել սարքում</translation> <translation id="3238192140106069382">Միացում և ստուգում</translation> <translation id="3239373508713281971"><ph name="APP_NAME" /> հավելվածի համար ժամանակի սահմանաչափը հեռացվել է</translation> @@ -2955,6 +2964,7 @@ <translation id="3778740492972734840">&Մշակողի գործիքներ</translation> <translation id="3778868487658107119">Տվեք հարցեր և առաջադրանքներ: Ձեր անձնական Google Օգնականը միշտ պատրաստ է օգնել ձեզ:</translation> <translation id="3781742599892759500">Խոսափողի օգտագործման թույլտվություն Լինուքսում</translation> +<translation id="3783889407390048282">Տարածք ազատեք, որպեսզի Android-ը ձեզ հասանելի մնա։</translation> <translation id="3784472333786002075">Քուքիները ֆայլեր են, որոնք ստեղծվում են կայքերի կողմից։ Քուքիների երկու տեսակ կա. առաջին կողմի քուքիները ստեղծվում են ձեր այցելած կայքի կողմից։ Կայքը ցուցադրվում է հասցեագոտում։ Երրորդ կողմի քուքիները ստեղծվում են այլ կայքերի կողմից։ Այս կայքերն ունեն որոշակի բովանդակություն, օր․՝ գովազդ կամ պատկերներ, որոնք դուք տեսնում եք ձեր այցելած կայքում։</translation> <translation id="3785308913036335955">Ցուցադրել հավելվածների դյուրանցումը</translation> <translation id="3785727820640310185">Այս կայքի պահված գաղտնաբառերը</translation> @@ -4267,6 +4277,7 @@ <translation id="5066100345385738837">Ապահով DNS սերվերի կառավարում ChromeOS-ի կարգավորումներում</translation> <translation id="5067399438976153555">Միշտ միացված</translation> <translation id="5067867186035333991">Հարցնել, երբ <ph name="HOST" />-ն ուզում է օգտագործել խոսափողը</translation> +<translation id="5068553687099139861">ցուցադրել գաղտնաբառերը</translation> <translation id="5068918910148307423">Թույլ չտալ վերջերս փակված կայքերին ավարտել տվյալների ուղարկումն ու ստացումը</translation> <translation id="5068919226082848014">Պիցցա</translation> <translation id="5070710277167211639">Օգտագործել HTTPS հաղորդակարգը և նախազգուշացնել, երբ բեռնվող կայքերը չեն աջակցում այն</translation> @@ -5204,6 +5215,7 @@ <translation id="5975792506968920132">Մարտկոցի լիցքավորման տոկոսը</translation> <translation id="5976160379964388480">Այլ</translation> <translation id="5978277834170881274">&Օգտագործել հիմնական ուղղագրիչը</translation> +<translation id="5978493744931296692">Ադմինիստրատորն անջատել է այլ պրոֆիլները</translation> <translation id="5979084224081478209">Ստուգել գաղտնաբառերը</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Դուք նորից 1 վտանգավոր ընդլայնում եք միացրել}one{Դուք նորից {NUM_EXTENSIONS} վտանգավոր ընդլայնում եք միացրել}other{Դուք նորից {NUM_EXTENSIONS} վտանգավոր ընդլայնում եք միացրել}}</translation> <translation id="5979353814339191480">Այս պարամետրը կիրառվում է Chromebook սարքերում, որոնք ունեն բջջային ինտերնետի սակագնային պլան կամ մոդեմ, ինչպես նաև շարժական թեժ կետին միանալիս։</translation> @@ -5368,6 +5380,7 @@ <translation id="6130692320435119637">Ավելացնել Wi-Fi</translation> <translation id="6130887916931372608">Ստեղնաշարի ստեղն</translation> <translation id="6135823405800500595">Համոզվեք, որ ձեր հեռախոսը մոտակայքում է, ապակողպված, և որ Bluetooth-ն ու Wi-Fi-ը միացված են</translation> +<translation id="6135826623269483856">Չի թույլատրվում կառավարել պատուհանները բոլոր էկրաններին</translation> <translation id="6136114942382973861">Փակել ներբեռնումների գոտին</translation> <translation id="6136287496450963112">Անվտանգության բանալին պաշտպանված չէ PIN-ով: Մատնահետքերը կառավարելու համար նախ ստեղծեք PIN կոդ:</translation> <translation id="6138680304137685902">X9.62 ECDSA ստորագրություն SHA-384-ով</translation> @@ -6417,6 +6430,7 @@ <translation id="7152478047064750137">Այս ընդլայնումը հատուկ թույլտվություն չի պահանջում</translation> <translation id="7154130902455071009">Դարձնել <ph name="START_PAGE" />-ը սկզբնական էջը</translation> <translation id="7155171745945906037">Առկա լուսանկար խցիկից կամ ֆայլից</translation> +<translation id="7159953856712257647">Տեղադրված է ըստ կանխադրման</translation> <translation id="7160182524506337403">Այժմ դուք կարող եք դիտել ձեր հեռախոսի ծանուցումները</translation> <translation id="7163202347044721291">Ակտիվացման կոդը ստուգվում է…</translation> <translation id="716640248772308851">«<ph name="EXTENSION" />» ընդլայնումը կարող է նշված պանակներում կարդալ պատկերները, տեսանյութերը և ձայնային ֆայլերը:</translation> @@ -7374,6 +7388,7 @@ <ph name="BEGIN_PARAGRAPH3" />Այս ծառայությունը կարող եք անջատել Կարգավորումներում:<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Ներդիրներ</translation> <translation id="8076835018653442223">Ադմինիստրատորն արգելափակել է ձեր սարքի տեղային ֆայլերի օգտագործումը</translation> +<translation id="80798452873915119">Կայքերը կարող են հայցել պատուհանները բոլոր էկրաններին կառավարելու թույլտվություն</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Ձեր աշխատաշրջանը կառավարվում է <ph name="MANAGER_NAME" />-ի կողմից։ Ադմինիստրատորները կարող են ջնջել ձեր պրոֆիլը, ինչպես նաև վերահսկել ձեր ցանցի թրաֆիկը։</translation> <translation id="8081989000209387414">Անջատե՞լ ADB վրիպազերծումը</translation> @@ -7513,6 +7528,7 @@ <translation id="820568752112382238">Հաճախ այցելած կայքեր</translation> <translation id="8206745257863499010">Բլյուզ</translation> <translation id="8206859287963243715">Բջջային</translation> +<translation id="8208216423136871611">Չպահել</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Նոր ծանուցում}one{# նոր ծանուցում}other{# նոր ծանուցում}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Ներբեռնումն ընթացքում է}one{Ներբեռնումն ընթացքում է}other{Ներբեռնումներն ընթացքում են}}</translation> <translation id="8213449224684199188">Լուսանկարելու ռեժիմը միացավ</translation> @@ -7625,6 +7641,7 @@ <translation id="8314835274931377415">Սկսե՞լ Switch Access-ի կարգավորումը</translation> <translation id="8317582043908962055">Ճանաչել PDF տեքստը</translation> <translation id="8317671367883557781">Ավելացնել ցանցային կապ</translation> +<translation id="8317965619823678157">պատճենել գաղտնաբառերը</translation> <translation id="8318266828739827371">Տրոհման դիտակերպի միջոցով դիտեք ձեր էկրանի խոշորացված հատվածը։ Օգտագործեք Որոնում + Ctrl + D դյուրանցումը՝ ամրացված խոշորացույցը միացնելու և անջատելու համար։</translation> <translation id="8319414634934645341">Բանալու ընդարձակված օգտագործում</translation> <translation id="8321837372750396788"><ph name="DEVICE_TYPE" /> սարքը կկառավարվի <ph name="MANAGER" />-ի կողմից։</translation> @@ -7678,6 +7695,7 @@ <translation id="8371695176452482769">Խոսեք հիմա</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Անջատել կայքի ձայնը}one{Անջատել կայքի ձայնը}other{Անջատել կայքերի ձայնը}}</translation> <translation id="8373652277231415614">Crostini-ի ընդհանուր գրացուցակներ</translation> +<translation id="8374243500935816406">Չթույլատրել կայքերին կառավարել պատուհանները բոլոր էկրաններին</translation> <translation id="8376137163494131156">Նկարագրեք Google Cast-ի հետ կապված խնդիրը</translation> <translation id="8376384591331888629">Ներառել երրորդ կողմի քուքիներն այս կայքում</translation> <translation id="8376451933628734023">Եթե այս վեբ հավելվածը փորձում է խաբեությամբ համոզել, որ այն մեկ այլ հավելված է, անմիջապես ապատեղադրեք այն։</translation> @@ -7972,6 +7990,7 @@ <translation id="8670537393737592796">Այս էջն արագ բացելու համար տեղադրեք <ph name="APP_NAME" /> հավելվածը՝ սեղմելով «Տեղադրել» կոճակը</translation> <translation id="867085395664725367">Սերվերի սխալ առաջացավ։</translation> <translation id="8673026256276578048">Search the Web...</translation> +<translation id="867329473311423817">Թույլատրվում է կառավարել պատուհանները բոլոր էկրաններին</translation> <translation id="8673383193459449849">Սերվերի խնդիր</translation> <translation id="8674903726754070732">Ձեր համակարգիչը կազմաձևված է սարքակազմի սխալ ID-ով։ Սա թույլ չի տալիս, որպեսզի ChromeOS-ը ստանա անվտանգության վերջին թարմացումները, և ձեր համակարգիչը <ph name="BEGIN_BOLD" />կարող է վնասաբեր հարձակումների թիրախ դառնալ<ph name="END_BOLD" />։</translation> <translation id="8675704450909805533">Տեղադրիչին չհաջողվեց համապատասխան վայր գտնել <ph name="DEVICE_OS" />-ի տեղադրման համար։</translation> @@ -7992,6 +8011,7 @@ <translation id="8683081248374354009">Զրոյացնել խմբի կարգավորումները</translation> <translation id="8688672835843460752">Հասանելի</translation> <translation id="8690129572193755009">Կայքերը կարող են հաղորդակարգերը մշակելու թույլտվություն հայցել</translation> +<translation id="8692107307702113268">Գաղտնաբառը պարունակում է ավելի քան 1000 նիշ</translation> <translation id="8695139659682234808">Ավելացրեք ծնողական վերահսկողությունը՝ կարգավորումն ավարտելուց հետո</translation> <translation id="8695825812785969222">Բացել &հասցեն…</translation> <translation id="8698269656364382265">Նախորդ էկրան վերադառնալու համար սահեցրեք ձախ կողմից։</translation> @@ -8273,6 +8293,7 @@ <translation id="8960638196855923532">Այժմ դուք կարող եք դիտել ձեր հեռախոսի ծանուցումներն ու հավելվածները</translation> <translation id="8962051932294470566">Դուք միաժամանակ կարող եք կիսվել միայն մեկ ֆայլով։ Նորից փորձեք, երբ ընթացիկ փոխանցումն ավարտվի։</translation> <translation id="8962083179518285172">Թաքցնել մանրամասները</translation> +<translation id="8962863356073277855">URL-ն անհրաժեշտ է նշել հետևյալ ձևաչափով՝ https://www.example.com</translation> <translation id="8962918469425892674">Այս կայքն օգտագործում է շարժման և լուսավորության տվիչներ:</translation> <translation id="8965037249707889821">Մուտքագրեք հին գաղտնաբառը</translation> <translation id="89667524227025535">Սկանավորեք QR կոդը սարքի տեսախցիկի միջոցով կամ մուտքագրեք օպերատորի տրամադրած ակտիվացման կոդը</translation> @@ -8543,11 +8564,13 @@ <translation id="9220525904950070496">Հեռացնել հաշիվը</translation> <translation id="9220820413868316583">Բարձրացրեք մատը և նորից փորձեք։</translation> <translation id="922152298093051471">Անհատականացնել Chrome-ը</translation> +<translation id="9222839025964079645">Չներմուծված գաղտնաբառեր (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Ցույց տալ բոլորը</translation> <translation id="924818813611903184">Կառավարել լեզուները ChromeOS-ի կարգավորումներում</translation> <translation id="929117907539171075">Տեղադրված հավելվածից պահված տվյալները նույնպես կջնջվեն</translation> <translation id="930268624053534560">Մանրամասն ժամադրոշմներ</translation> <translation id="930893132043726269">Այս պահին ռոումինգում է</translation> +<translation id="93140074055951850">Android-ի համար նախատեսված հավելվածների աշխատանքը դադարեցվել է</translation> <translation id="932327136139879170">Գլխավոր էջ</translation> <translation id="932508678520956232">Չհաջողվեց սկսել տպումը:</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Այս ֆայլը չափազանց մեծ է անվտանգության ստուգման համար։ Դուք կարող եք վերբեռնել մինչև 50 ՄԲ չափի ֆայլեր։}one{Այս ֆայլերից որոշները չափազանց մեծ են անվտանգության ստուգման համար։ Դուք կարող եք վերբեռնել մինչև 50 ՄԲ չափի ֆայլեր։}other{Այս ֆայլերից որոշները չափազանց մեծ են անվտանգության ստուգման համար։ Դուք կարող եք վերբեռնել մինչև 50 ՄԲ չափի ֆայլեր։}}</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 5525924d..c336f1e6 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -601,6 +601,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Tamu)</translation> <translation id="1572266655485775982">Wi-Fi aktif</translation> <translation id="1572876035008611720">Masukkan email Anda</translation> +<translation id="1573117025466282241">Gunakan ponsel dengan kode QR</translation> <translation id="1575741822946219011">Bahasa dan input</translation> <translation id="1576594961618857597">Avatar putih default</translation> <translation id="1578558981922970608">Tutup paksa</translation> @@ -7539,6 +7540,7 @@ <translation id="820568752112382238">Situs yang paling sering dikunjungi</translation> <translation id="8206745257863499010">Jazzy</translation> <translation id="8206859287963243715">Seluler</translation> +<translation id="8208216423136871611">Jangan simpan</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Notifikasi baru}other{# notifikasi baru}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Proses download sedang berlangsung}other{Proses download sedang berlangsung}}</translation> <translation id="8213449224684199188">Masuk ke mode foto</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index d097be2..e413dbe 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -7542,6 +7542,7 @@ <translation id="820568752112382238">Mest heimsóttu vefsvæðin</translation> <translation id="8206745257863499010">Blúsaður</translation> <translation id="8206859287963243715">Farsímakerfi</translation> +<translation id="8208216423136871611">Ekki vista</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Ný tilkynning}one{# ný tilkynning}other{# nýjar tilkynningar}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Niðurhal er í gangi}one{Niðurhal er í gangi}other{Niðurhal er í gangi}}</translation> <translation id="8213449224684199188">Myndastilling valin</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index 4f3bf32..df9e008 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -7521,6 +7521,7 @@ <translation id="820568752112382238">Siti più visitati</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">Cellulare</translation> +<translation id="8208216423136871611">Non salvare</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nuova notifica}other{# nuove notifiche}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Download in corso}other{Download in corso}}</translation> <translation id="8213449224684199188">Modalità foto attivata</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 85661e3..35428f74 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -599,6 +599,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (אורח)</translation> <translation id="1572266655485775982">הפעלת Wi-Fi</translation> <translation id="1572876035008611720">יש להזין את כתובת האימייל</translation> +<translation id="1573117025466282241">שימוש בטלפון עם קוד QR</translation> <translation id="1575741822946219011">שפות ושיטות קלט</translation> <translation id="1576594961618857597">דמות ברירת מחדל לבנה</translation> <translation id="1578558981922970608">אילוץ סגירה</translation> @@ -1755,6 +1756,7 @@ <translation id="2602501489742255173">יש להחליק כלפי מעלה כדי להתחיל</translation> <translation id="2603115962224169880">ניקוי המחשב</translation> <translation id="2603355571917519942">התכונה Voice Match מוכנה</translation> +<translation id="2604129989323098489">לרוב, אתרים מבקשים מידע על המסכים שלך כדי לפתוח ולמקם חלונות בצורה חכמה, למשל להציג מסמכים או תוכן במסך מלא אחד לצד השני</translation> <translation id="2604255671529671813">שגיאת חיבור רשת</translation> <translation id="2605668923777146443">כדי לראות את האפשרויות של Better Together יש לעבור אל <ph name="LINK_BEGIN" />ההגדרות<ph name="LINK_END" />.</translation> <translation id="2606246518223360146">קישור נתונים</translation> @@ -3806,6 +3808,7 @@ <translation id="4579581181964204535">לא ניתן להעביר את <ph name="HOST_NAME" />.</translation> <translation id="4579876313423027742">כדי לעבור להתראות של הדפדפן, נכנסים אל <ph name="LINK_BEGIN" />הגדרות הדפדפן Chrome<ph name="LINK_END" /></translation> <translation id="4580596421317071374">הסיסמאות נשמרות ב<ph name="GOOGLE_PASSWORD_MANAGER" /> במכשיר הזה.</translation> +<translation id="4580626299762849806">לא ניתן לייבא את הסיסמאות. צריך לבדוק את הקובץ <ph name="FILENAME" /> ולוודא שהפורמט שלו תקין.</translation> <translation id="4581774856936278355">שגיאה בזמן השחזור של Linux</translation> <translation id="4582297591746054421">אתרים קוראים בדרך כלל את הלוח כדי לתמוך בתכונות כמו שמירה על עיצוב הטקסט שהועתק אליו</translation> <translation id="4582563038311694664">איפוס כל ההגדרות</translation> @@ -4570,6 +4573,7 @@ <translation id="5350293332385664455">כיבוי של Google Assistant</translation> <translation id="535123479159372765">הטקסט הועתק ממכשיר אחר</translation> <translation id="5352033265844765294">הטבעת חותמת זמן</translation> +<translation id="5352257124367865087">ניהול של הרשאות האתר</translation> <translation id="5353252989841766347">ייצוא סיסמאות מ-Chrome</translation> <translation id="5355099869024327351">מתן הרשאה ל-Assistant להציג הודעות</translation> <translation id="5355191726083956201">מופעלת הגנה משופרת</translation> @@ -5071,6 +5075,7 @@ <translation id="5843706793424741864">פרנהייט</translation> <translation id="5844574845205796324">קבלת הצעות לתוכן חדש ומעניין</translation> <translation id="5846200638699387931">שגיאה בתחביר המציין את הקשר: <ph name="ERROR_LINE" /></translation> +<translation id="5846504156837627898">ניהול של הרשאות האתר</translation> <translation id="5846807460505171493">התקנה של עדכונים ואפליקציות. המשך מהווה את הסכמתך לכך שהמכשיר הזה עשוי גם להוריד ולהתקין באופן אוטומטי עדכונים ואפליקציות מ-Google, מהספק שלך ומיצרן המכשיר, וייתכן שהדבר יתבצע תוך שימוש בחבילת הגלישה. חלק מהאפליקציות האלו עשויות לכלול רכישות מהאפליקציה.</translation> <translation id="5849212445710944278">כבר נוספה</translation> <translation id="5851868085455377790">מנפיק</translation> @@ -5111,6 +5116,7 @@ <translation id="5877064549588274448">הערוץ שונה. יש להפעיל מחדש את המכשיר להחלת השינויים.</translation> <translation id="5877584842898320529">המדפסת שבחרת אינה זמינה או שאינה מותקנת כראוי. <ph name="BR" /> יש לבדוק את המדפסת או לנסות לבחור מדפסת אחרת.</translation> <translation id="5878945009165002849">חסימה של בקשות כניסה משירותי זיהוי</translation> +<translation id="5882449899683447569">משהו השתבש והסיסמאות שלך לא יובאו.</translation> <translation id="5882919346125742463">רשתות מוכרות</translation> <translation id="5883356647197510494">ההרשאות הבאות נחסמו אוטומטית: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">הכרטיסייה הזו מחוברת להתקן USB.</translation> @@ -5380,6 +5386,7 @@ <translation id="6130692320435119637">הוספת Wi-Fi</translation> <translation id="6130887916931372608">מקש במקלדת</translation> <translation id="6135823405800500595">יש לוודא שהטלפון נמצא בקרבת מקום, שהוא לא נעול ושה-Bluetooth וה-Wi-Fi פועלים</translation> +<translation id="6135826623269483856">אין הרשאה לנהל את החלונות בכל המסכים</translation> <translation id="6136114942382973861">סגירת סרגל ההורדות</translation> <translation id="6136287496450963112">מפתח האבטחה שלך אינו מוגן באמצעות קוד אימות. כדי לנהל טביעות אצבע, יש ליצור תחילה קוד אימות.</translation> <translation id="6138680304137685902">חתימת X9.62 ECDSA עם SHA-384</translation> @@ -5637,6 +5644,7 @@ <translation id="6398715114293939307">הסרה של חנות Google Play</translation> <translation id="6398765197997659313">יציאה ממסך מלא</translation> <translation id="6399774419735315745">מרגלת</translation> +<translation id="6400360390396538896">תמיד ב-<ph name="ORIGIN" /></translation> <translation id="6401458660421980302">כדי לשלוח את הכרטיסייה הזו למכשיר אחר, צריך להיכנס ל-Chrome במכשיר האחר</translation> <translation id="6401597285454423070">המחשב שלך מכיל התקן אבטחה מסוג Trusted Platform Module (TPM), המשמש ליישום תכונות אבטחה קריטיות רבות ב-ChromeOS. במרכז העזרה של Chromebook מפורט מידע נוסף: https://support.google.com/chromebook/?p=tpm</translation> <translation id="6404187344102273690">גיימינג ב-Chromebook</translation> @@ -7389,6 +7397,7 @@ <ph name="BEGIN_PARAGRAPH3" />אפשר לכבות את השירות הזה ב'הגדרות'.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">כרטיסיות</translation> <translation id="8076835018653442223">מנהל המערכת ביטל את הגישה לקבצים מקומיים במכשיר שלך</translation> +<translation id="80798452873915119">אתרים יכולים לבקש הרשאה לנהל את החלונות בכל המסכים</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">הסשן שלך מנוהל על ידי <ph name="MANAGER_NAME" />. האדמינים יכולים למחוק את הפרופיל שלך ולעקוב אחר התנועה שלך ברשת.</translation> <translation id="8081989000209387414">להשבית ניפוי באגים באמצעות ADB?</translation> @@ -7530,6 +7539,7 @@ <translation id="820568752112382238">האתרים שאליהם נכנסת בתדירות הגבוהה ביותר</translation> <translation id="8206745257863499010">בלוז</translation> <translation id="8206859287963243715">סלולארי</translation> +<translation id="8208216423136871611">אל תשמור</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{התראה חדשה}two{# התראות חדשות}many{# התראות חדשות}other{# התראות חדשות}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{הורדה מתבצעת}two{הורדות מתבצעות}many{הורדות מתבצעות}other{הורדות מתבצעות}}</translation> <translation id="8213449224684199188">עברת למצב תמונות</translation> @@ -7695,6 +7705,7 @@ <translation id="8371695176452482769">דיבור עכשיו</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{השתקת האתר}two{השתקת האתרים}many{השתקת האתרים}other{השתקת האתרים}}</translation> <translation id="8373652277231415614">ספריות משותפות של Crostini</translation> +<translation id="8374243500935816406">לאתרים אין הרשאה לנהל את החלונות בכל המסכים</translation> <translation id="8376137163494131156">מהי הבעיה שבה נתקלת ב-Google Cast?</translation> <translation id="8376384591331888629">כולל קובצי cookie של צד שלישי באתר זה</translation> <translation id="8376451933628734023">אם אפליקציית האינטרנט הזו מנסה להטעות אותך ולחשוב שמדובר באפליקציה אחרת, צריך להסיר אותה.</translation> @@ -7989,6 +8000,7 @@ <translation id="8670537393737592796">כדי לחזור לכאן במהירות, יש ללחוץ על לחצן ההתקנה ולהתקין את <ph name="APP_NAME" /></translation> <translation id="867085395664725367">התרחשה שגיאת שרת זמנית.</translation> <translation id="8673026256276578048">חיפוש באינטרנט...</translation> +<translation id="867329473311423817">יד הרשאה לנהל את החלונות בכל המסכים</translation> <translation id="8673383193459449849">יש בעיה בשרת</translation> <translation id="8674903726754070732">לצערנו, המחשב שלך מוגדר באמצעות מזהה חומרה פגום. המצב הזה מונע מ-ChromeOS להתקין את עדכוני האבטחה האחרונים, <ph name="BEGIN_BOLD" />ויכול להיות שהמחשב שלך יהיה חשוף להתקפות זדוניות<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">מנהל ההתקנה לא מצא יעד תקין להתקנה של <ph name="DEVICE_OS" />.</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 2a66163f..879c5c6 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -598,6 +598,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" />(ゲスト)</translation> <translation id="1572266655485775982">Wi-Fi の有効化</translation> <translation id="1572876035008611720">メールアドレスを入力してください</translation> +<translation id="1573117025466282241">QR コードでスマートフォンを使用する</translation> <translation id="1575741822946219011">言語と入力方法</translation> <translation id="1576594961618857597">デフォルトの白のアバター</translation> <translation id="1578558981922970608">強制終了</translation> @@ -7501,6 +7502,7 @@ <translation id="820568752112382238">よくアクセスするサイト</translation> <translation id="8206745257863499010">ブルース</translation> <translation id="8206859287963243715">携帯電話</translation> +<translation id="8208216423136871611">保存しない</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{新しい通知}other{# 件の新しい通知}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ダウンロードが進行中です}other{ダウンロードが進行中です}}</translation> <translation id="8213449224684199188">写真モードに切り替えました</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index af697b3..898b172 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -941,6 +941,7 @@ <translation id="1864400682872660285">უფრო ცივი</translation> <translation id="1864454756846565995">USB-C მოწყობილობა (უკანა პორტი)</translation> <translation id="1865769994591826607">მხოლოდ იმავე საიტის კავშირები</translation> +<translation id="186594096341696655">სიხშირის შემცირება</translation> <translation id="186612162884103683">„<ph name="EXTENSION" />“-ს შეუძლია გამოსახულებების, ვიდეოს და ხმოვანი ფაილების წაკითხვა და ჩაწერა დაფიქსირებულ ადგილებში.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> მზად არის ინსტალაციის დასასრულებლად</translation> <translation id="1868553836791672080">პაროლების შემოწმება მიუწვდომელია Chromium-ში</translation> @@ -1132,6 +1133,7 @@ <translation id="2048554637254265991">კონტეინერების მმართველის გაშვება ვერ მოხერხდა. ცადეთ ხელახლა.</translation> <translation id="2048653237708779538">ქმედება მიუწვდომელია</translation> <translation id="2050339315714019657">პორტრეტი</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{თქვენს Google პაროლების მმართველში (<ph name="USER_EMAIL" />) იმპორტირებულია 1პაროლი}other{თქვენს Google პაროლების მმართველში (<ph name="USER_EMAIL" />) იმპორტირებულია {NUM_PASSWORDS} პაროლი}}</translation> <translation id="2052572566310583903">თქვენს სხვა მოწყობილობებზე დაინსტალირებული</translation> <translation id="2053105195397337973">ჩვენ ვმუშაობთ ახალ ხერხებზე, რომელთა მეშვეობითაც შეიზღუდება თვალის მიდევნების მექანიზმები, საიტებს კი მაინც ექნება სარეკლამო სპამისა და თაღლითობის აღკვეთის შესაძლებლობა</translation> <translation id="2053312383184521053">უმოქმედო მდგომარეობის მონაცემები</translation> @@ -1745,6 +1747,7 @@ <translation id="2602501489742255173">დასაწყებად გადაფურცლეთ ზემოთ</translation> <translation id="2603115962224169880">კომპიუტერის გასუფთავება</translation> <translation id="2603355571917519942">Voice Match მზადაა</translation> +<translation id="2604129989323098489">საიტები, როგორც წესი, ითხოვს ინფორმაციას თქვენი ეკრანების შესახებ, რომ ფანჯრები უფრო გონივრულად გაიხსნას და დაისვას, მაგალითად, გვერდიგვერდ გამოჩნდეს დოკუმენტები ან სრულ ეკრანზე მოცემული კონტენტი</translation> <translation id="2604255671529671813">ქსელთან კავშირის შეცდომა</translation> <translation id="2605668923777146443">Better Together-თან დაკავშირებული ვარიანტების სანახავად გადადით <ph name="LINK_BEGIN" />პარამეტრებზე<ph name="LINK_END" />.</translation> <translation id="2606246518223360146">მონაცემების მიბმა</translation> @@ -1901,6 +1904,7 @@ <translation id="2742448780373473567"><ph name="DEVICE_OS" />-ის ინსტალაციის შემთხვევაში, თქვენს მოწყობილობაზე შენახული ყველა მონაცემი გადაიწერება.</translation> <translation id="274290345632688601">მიმდინარეობს Linux აპებისა და ფაილების აღდგენა</translation> <translation id="274318651891194348">მიმდინარეობს კლავიატურის ძიება</translation> +<translation id="2743301740238894839">დაწყება</translation> <translation id="2743387203779672305">კოპირება გაცვლის ბუფერში</translation> <translation id="2745080116229976798">Microsoft-ის კვალიფიცირებული სუბორდინაცია</translation> <translation id="2747266560080989517">ეს ფაილი შეიცავს სენსიტიურ ან სახიფათო კონტენტს. სთხოვეთ მის მფლობელს აღნიშნულის გამოსწორება.</translation> @@ -2413,6 +2417,7 @@ <translation id="3255355328033513170"><ph name="SITE_GROUP_NAME" />-ისა და მისი ქვესაიტების მიერ შენახული ყველა მონაცემი წაიშლება. ეს მოიცავს ქუქი-ჩანაწერებსაც. თქვენ გამოხვალთ აღნიშნული საიტებიდან, მათ შორის, გახსნილ ჩანართებზე.</translation> <translation id="3257733480216378006">გსურთ, დაუშვათ <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" />?</translation> <translation id="3259723213051400722">გთხოვთ, ცადოთ ხელახლა.</translation> +<translation id="3261090393424563833">სიხშირის გაზრდა</translation> <translation id="3261268979727295785">უფროსი ასაკის ბავშვებისთვის მშობელთა მიერ კონტროლის დამატებას დაყენების დასრულების შემდეგ შეძლებთ. მშობელთა მიერ კონტროლის შესახებ დამატებით ინფორმაცია ხელმისაწვდომია აპში „გაცნობა“.</translation> <translation id="3262986719682892278">ზედმეტად დიდი</translation> <translation id="3264544094376351444">Sans-serif შრიფტი</translation> @@ -2922,6 +2927,7 @@ <translation id="3747077776423672805">აპების ამოსაშლელად გადადით აქ: პარამეტრები > Google Play Store > Android პარამეტრების მართვა > აპები ან აპლიკაციების მენეჯერი. შემდეგ შეეხეთ აპს, რომლის დეინსტალაციაც გსურთ (აპის საპოვნელად შეიძლება დაგჭირდეთ მარჯვნივ ან მარცხნივ გადაფურცვლა). ბოლოს კი შეეხეთ დეინსტალაციას ან გათიშვას.</translation> <translation id="3747603683749989726">გსურთ, ჩართოთ გაძლიერებული უსაფრთხოება?</translation> <translation id="3748706263662799310">ხარვეზის შესახებ შეტყობინება</translation> +<translation id="3750304496241836236">პაროლების თქვენს Google პაროლების მმართველში იმპორტირებისთვის აირჩიეთ CSV ფაილი</translation> <translation id="3750562496035670393">Chrome-მა შეინახა თქვენი პაროლი ამ მოწყობილობაზე, თუმცა, სურვილისამებრ, მისი შენახვა თქვენს Google ანგარიშშიც შეგიძლიათ. თქვენს Google ანგარიშში შენახული პაროლები ხელმისაწვდომი იქნება ყველგან, სადაც შესული იქნებით სისტემაში.</translation> <translation id="3752253558646317685">თითის ანაბეჭდის შესანახად სთხოვეთ თქვენს ბავშვს, აუშვას ხოლმე თითი</translation> <translation id="3753033997400164841">შეინახეთ ერთხელ. გამოიყენეთ ყველგან</translation> @@ -4093,6 +4099,7 @@ <translation id="4871370605780490696">სანიშნის დამატება</translation> <translation id="4871568871368204250">სინქრონიზაციის გამორთვა</translation> <translation id="4871719318659334896">ჯგუფის დახურვა</translation> +<translation id="4872192066608821120">პაროლების იმპორტირებისთვის აირჩიეთ CSV ფაილი</translation> <translation id="4873312501243535625">მედია ფაილების შემმოწმებელი</translation> <translation id="4876273079589074638">ხელი შეუწყვეთ ჩვენს ინჟინრებს, შეისწავლონ და გამოასწორონ ავარიულად გათიშვის მიზეზი. შეძლებისდაგვარად, ზუსტად ჩამოთვალეთ ყველა ეტაპი. ყოველი დეტალი მნიშვნელოვანია!</translation> <translation id="4876895919560854374">ეკრანის ჩაკეტვა და გახსნა</translation> @@ -5378,6 +5385,7 @@ <translation id="6130692320435119637">Wi-Fi ქსელის დამატება</translation> <translation id="6130887916931372608">კლავიატურის კლავიში</translation> <translation id="6135823405800500595">დარწმუნდით, რომ ტელეფონი ახლოს გაქვთ, განბლოკილია და მასზე ჩართულია Bluetooth/Wi-Fi</translation> +<translation id="6135826623269483856">აკრძალული აქვს ფანჯრების მართვა თქვენს ყველა ეკრანზე</translation> <translation id="6136114942382973861">ჩამოტვირთვების ზოლის დახურვა</translation> <translation id="6136287496450963112">თქვენი უსაფრთხოების გასაღები არ არის დაცული PIN-კოდით. თითის ანაბეჭდების სამართავად, პირველ რიგში, შექმენით PIN-კოდი.</translation> <translation id="6138680304137685902">X9.62 ECDSA ხელმოწერა SHA-384-ით</translation> @@ -5436,6 +5444,7 @@ <translation id="6206199626856438589">თქვენ გამოხვალთ ნაჩვენები საიტებიდან, მათ შორის, გახსნილ ჩანართებზე</translation> <translation id="6206311232642889873">გამოსახულების &კოპირება</translation> <translation id="6207200176136643843">მასშტაბირების ნაგულისხმევ დონეზე გადაყენება</translation> +<translation id="6207806976844244951">Google პაროლების მმართველში (<ph name="EMAIL" />) შენახვა</translation> <translation id="6207937957461833379">ქვეყანა/რეგიონი</translation> <translation id="6208382900683142153">ნდობის ჟეტონები ვებში კონფიდენციალურობის დაცვას უწყობს ხელს, ხოლო მათი მეშვეობით თქვენი ვინაობის დადგენა ვერ მოხერხდება.</translation> <translation id="6208521041562685716">მიმდინარეობს მობილური ინტერნეტის გააქტიურება</translation> @@ -5675,6 +5684,7 @@ <translation id="6436610005579237680">თქვენს ინტერესებზე მეტად მორგებული პასუხები რომ მიიღოთ, დართეთ Google ასისტენტს თქვენი ეკრანის ანაბეჭდზე წვდომის ნებართვა თქვენ მიერ შეკითხვების დასმისას. თქვენმა ასისტენტმა, შესაძლოა, გამოიყენოს იმ სიმღერების ან ვიდეოების შესახებ ინფორმაციაც, რომლებიც გაშვებულია.</translation> <translation id="6436778875248895551">გაფართოება „<ph name="EXTENSION_NAME" />“ დაბლოკილია თქვენი ადმინისტრატორის მიერ</translation> <translation id="6438234780621650381">პარამეტრების აღდგენა</translation> +<translation id="6438475350605608554">პაროლების იმპორტირებას უკვე ახორციელებთ სხვა ჩანართში</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> — უკრავს აუდიო</translation> <translation id="6442187272350399447">შესანიშნავი</translation> <translation id="6442445294758185945">განახლების ჩამოტვირთვა ვერ მოხერხდა. ცადეთ მოგვიანებით.</translation> @@ -5685,6 +5695,7 @@ <translation id="6446213738085045933">შექმენით დესკტოპის მალსახმობი</translation> <translation id="6447842834002726250">ქუქი ფაილები</translation> <translation id="6450876761651513209">შეცვალეთ თქვენი პირადი პარამეტრები შესაბამისი აწყობით</translation> +<translation id="645119363824354176">პაროლების ამ მოწყობილობაში იმპორტირებისთვის აირჩიეთ CSV ფაილი</translation> <translation id="6451344358166983408">საიტი ან გვერდი</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> და 1 სხვა ჩანართი}other{<ph name="PAGE_TITLE" /> და # სხვა ჩანართი}}</translation> <translation id="6451689256222386810">თუ დაგავიწყდათ თქვენი საიდუმლო ფრაზა, ან ამ პარამეტრის შეცვლა გსურთ, <ph name="BEGIN_LINK" />გადააყენეთ სინქრონიზაცია<ph name="END_LINK" />.</translation> @@ -5948,6 +5959,7 @@ <translation id="6691936601825168937">&გადამისამართება</translation> <translation id="6693745645188488741">{COUNT,plural, =1{1 გვერდი}other{{COUNT} გვერდი}}</translation> <translation id="6694430008315398925">მიმდინარეობს Steam-ის დაყენება</translation> +<translation id="6697172646384837537">აირჩიეთ, სად გსურთ თქვენი პაროლების იმპორტირება</translation> <translation id="6697492270171225480">მსგავსი გვერდების შემოთავაზებების ჩვენება, როცა გვერდი ვერ მოიძებნება</translation> <translation id="6697690052557311665">გასაზიარებლად დააწკაპუნეთ მარჯვენა ღილაკით საქაღალდეს ფაილების აპში, შემდეგ კი აირჩიეთ — „Linux-თან გაზიარება“.</translation> <translation id="6698810901424468597">წაიკითხეთ და შეცვალეთ თქვენი მონაცემები <ph name="WEBSITE_1" /> და <ph name="WEBSITE_2" />-ზე</translation> @@ -6045,6 +6057,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">ავტომატური სკანირება საშუალებას გაძლევთ, ავტომატურად გადაადგილდეთ ეკრანზე არსებულ ერთეულებს შორის. მის გასააქტიურებლად დააჭირეთ „არჩევას“, როცა ერთეული გამოყოფილია.</translation> <translation id="6795884519221689054">პანდა</translation> +<translation id="6796509790850723820">ვიზუალიზაცია</translation> <translation id="6797493596609571643">უი! შეცდომა მოხდა.</translation> <translation id="6798420440063423019">უსაფრთხოების ეს გასაღები დაბლოკილია არასწორი PIN-კოდის ზედმეტად ბევრჯერ შეყვანის გამო. საჭირო იქნება უსაფრთხოების გასაღების გადაყენება.</translation> <translation id="679845623837196966">საკითხავი სიის ჩვენება</translation> @@ -6588,6 +6601,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> ახლა სრულეკრანიან რეჟიმშია.</translation> <translation id="7340650977506865820">საიტი აზიარებს თქვენს ეკრანს</translation> <translation id="7340757554212515731">ავტომატურად უგზავნის Google-ს ავარიულად გათიშვის ანგარიშებს, ასევე, დიაგნოსტიკისა და გამოყენების მონაცემებს</translation> +<translation id="734088800888587319">ქსელის მეტრიკა</translation> <translation id="7341834142292923918">ითხოვს წვდომას ამ საიტზე</translation> <translation id="7343372807593926528">გამოხმაურებამდე აღწერეთ პრობლემა.</translation> <translation id="7344585835349671209">HTTPS/SSL სერტიფიკატების მართვა თქვენს მოწყობილობაზე</translation> @@ -7384,6 +7398,7 @@ <ph name="BEGIN_PARAGRAPH3" />ამ სერვისის გამორთვა შეგიძლიათ პარამეტრებიდან.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">ჩანართები</translation> <translation id="8076835018653442223">თქვენს მოწყობილობაზე არსებულ ადგილობრივ ფაილებზე წვდომა გათიშულია თქვენი ადმინისტრატორის მიერ</translation> +<translation id="80798452873915119">საიტებს შეუძლია თქვენს ყველა ეკრანზე ფანჯრების მართვის მოთხოვნა</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">თქვენს სესიას მართავს <ph name="MANAGER_NAME" />. ადმინისტრატორებს შეუძლიათ თქვენი პროფილის წაშლა და თქვენი ქსელის ტრაფიკზე დაკვირვება.</translation> <translation id="8081989000209387414">გსურთ ADB გამართვის გამორთვა?</translation> @@ -7523,6 +7538,7 @@ <translation id="820568752112382238">ყველაზე ხშირად მონახულებადი საიტები</translation> <translation id="8206745257863499010">ბლუზი</translation> <translation id="8206859287963243715">ფიჭური</translation> +<translation id="8208216423136871611">არ შეინახო</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{ახალი შეტყობინება}other{# ახალი შეტყობინება}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{მიმდინარეობს ჩამოტვირთვა}other{მიმდინარეობს ჩამოტვირთვები}}</translation> <translation id="8213449224684199188">გაშვებულია ფოტო რეჟიმი</translation> @@ -7689,6 +7705,7 @@ <translation id="8371695176452482769">ილაპარაკეთ</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{საიტის დადუმება}other{საიტების დადუმება}}</translation> <translation id="8373652277231415614">Crostini-ს გაზიარებული კატალოგები</translation> +<translation id="8374243500935816406">თქვენს ყველა ეკრანზე ფანჯრების მართვის აკრძალვა საიტებისთვის</translation> <translation id="8376137163494131156">გვაცნობეთ, რა სჭირს Google Cast-ს.</translation> <translation id="8376384591331888629">ამ საიტზე მესამე მხარის ქუქი-ჩანაწერების ჩათვლით</translation> <translation id="8376451933628734023">თუ თვლით, რომ ეს ვებ-აპი ცდილობს, სხვა აპად გაასაღოს თავი, გირჩევთ მის დეინსტალაციას.</translation> @@ -7983,6 +8000,7 @@ <translation id="8670537393737592796">აქ უფრო სწრაფად რომ დაბრუნდეთ ხოლმე, დააინსტალირეთ <ph name="APP_NAME" /> — ამისთვის დააწკაპუნეთ ინსტალაციის ღილაკზე</translation> <translation id="867085395664725367">წარმოიშვა სერვერთან დაკავშირებული დროებითი შეცდომა.</translation> <translation id="8673026256276578048">ძიება ინტერნეტში…</translation> +<translation id="867329473311423817">დაშვებული აქვს ფანჯრების მართვა თქვენს ყველა ეკრანზე</translation> <translation id="8673383193459449849">სერვერის პრობლემა</translation> <translation id="8674903726754070732">სამწუხაროდ, თქვენი კომპიუტერი კონფიგურირებულია დეფორმირებული აპარატურის ID-ს გამოყენებით. ეს ხელს უშლის ChromeOS-ის განახლებას უსაფრთხოების უახლესი ჩასწორებებით და თქვენი კომპიუტერი <ph name="BEGIN_BOLD" />შეიძლება გახდეს მავნე პროგრამების მიერ განხორციელებული შეტევების ობიექტი<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">ინსტალატორმა ვერ იპოვა დანიშნულების სათანადო ადგილი, <ph name="DEVICE_OS" /> რომ დააინსტალიროს.</translation> @@ -8427,6 +8445,7 @@ <translation id="9088917181875854783">გთხოვთ დაადასტეროთ „<ph name="DEVICE_NAME" />“-ზე ნაჩვენები პაროლი.</translation> <translation id="9089416786594320554">შეყვანის მეთოდები</translation> <translation id="9090044809052745245">როგორ ჩანს თქვენი მოწყობილობა სხვებისთვის</translation> +<translation id="9093470422440389061">Wi-Fi-ს წარმადობის მეტრიკა</translation> <translation id="9094033019050270033">პაროლის განახლება</translation> <translation id="9094038138851891550">მომხმარებლის სახელი არასწორია</translation> <translation id="9094859731829297286">ნამდვილად გსურთ Linux-ისთვის დისკზე მეხსიერების ფიქსირებული მოცულობის დარეზერვება?</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 2c477a0..518dba5c 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -595,6 +595,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (қонақ)</translation> <translation id="1572266655485775982">Wi-Fi желісін қосу</translation> <translation id="1572876035008611720">Электрондық пошта мекенжайын енгізіңіз</translation> +<translation id="1573117025466282241">Телефонмен QR кодын сканерлеңіз.</translation> <translation id="1575741822946219011">Тілдер және енгізу әдістері</translation> <translation id="1576594961618857597">Әдепкі ақ түсті аватар</translation> <translation id="1578558981922970608">Қолмен жабу</translation> @@ -1740,6 +1741,7 @@ <translation id="2602501489742255173">Бастау үшін жоғары қарай сырғытыңыз.</translation> <translation id="2603115962224169880">Компьютерді тазалау</translation> <translation id="2603355571917519942">Voice Match дайын</translation> +<translation id="2604129989323098489">Сайттар әдетте терезелерді өз бетімен аша және орналастыра алуы, соның ішінде құжаттарды көрсетуі немесе мазмұнды толық экранға шығаруы үшін дисплейлер туралы ақпарат сұрайды.</translation> <translation id="2604255671529671813">Желімен байланыс қатесі</translation> <translation id="2605668923777146443">Better Together опцияларын көру үшін <ph name="LINK_BEGIN" />Параметрлер<ph name="LINK_END" /> бөліміне өтіңіз.</translation> <translation id="2606246518223360146">Деректерді байланыстыру</translation> @@ -5368,6 +5370,7 @@ <translation id="6130692320435119637">Wi-Fi желісін қосу</translation> <translation id="6130887916931372608">Перне</translation> <translation id="6135823405800500595">Телефоныңыз жақын тұрғанына, оның құлпы ашық және Bluetooth, Wi-Fi функциясы қосулы екеніне көз жеткізіңіз.</translation> +<translation id="6135826623269483856">Барлық дисплейде терезелерді басқаруға рұқсат берілмейді.</translation> <translation id="6136114942382973861">Жүктеп алынғандар жолағын жабу</translation> <translation id="6136287496450963112">Қауіпсіздік кілтіңіз PIN кодымен қорғалмаған. Саусақ іздерін басқару үшін алдымен PIN кодын жасаңыз.</translation> <translation id="6138680304137685902">X9.62 ECDSA, SHA-384 алгоритмімен қол қою</translation> @@ -7373,6 +7376,7 @@ <ph name="BEGIN_PARAGRAPH3" />Бұл қызметті "Параметрлер" бөлімінен өшіруге болады.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Қойындылар</translation> <translation id="8076835018653442223">Әкімші құрылғыңызда жергілікті файлдарға кіруге тыйым салған</translation> +<translation id="80798452873915119">Сайттар барлық дисплейде терезелерді басқаруды сұрай алады.</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Сеансты <ph name="MANAGER_NAME" /> басқарады. Әкімшілер профильді жоя және желі трафигін қадағалай алады.</translation> <translation id="8081989000209387414">ADB түзетуін өшіру қажет пе?</translation> @@ -7512,6 +7516,7 @@ <translation id="820568752112382238">Көп кіретін сайттар</translation> <translation id="8206745257863499010">Блюз</translation> <translation id="8206859287963243715">Ұялы</translation> +<translation id="8208216423136871611">Сақтамау</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Жаңа хабарландыру}other{# жаңа хабарландыру}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Файл жүктеп алынуда}other{Файлдар жүктеп алынуда}}</translation> <translation id="8213449224684199188">Фото режимі қосылды</translation> @@ -7677,6 +7682,7 @@ <translation id="8371695176452482769">Айта беріңіз</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Сайттың дыбысын өшіру}other{Сайттардың дыбысын өшіру}}</translation> <translation id="8373652277231415614">Crostini ортақ каталогтері</translation> +<translation id="8374243500935816406">Сайттарға барлық дисплейде терезелерді басқаруға рұқсат бермеу</translation> <translation id="8376137163494131156">Google Cast құрылғысына не болып жатқанын хабарлаңыз</translation> <translation id="8376384591331888629">Осы сайттағы үшінші тараптың cookie файлдарын қоса</translation> <translation id="8376451933628734023">Егер бұл веб-қолданба өзінің басқа қолданба екеніне сізді сендіргісі келсе, оны жойып тастаңыз.</translation> @@ -7971,6 +7977,7 @@ <translation id="8670537393737592796">Осы жерге жылдам оралу үшін орнату түймесін басып, <ph name="APP_NAME" /> қолданбасын орнатыңыз.</translation> <translation id="867085395664725367">Серверде уақытша қате шықты.</translation> <translation id="8673026256276578048">Ғаламтордан іздеу…</translation> +<translation id="867329473311423817">Барлық дисплейде терезелерді басқаруға рұқсат беріледі.</translation> <translation id="8673383193459449849">Сервер ақауы</translation> <translation id="8674903726754070732">Өкінішке орай, компьютеріңіз бұзылған жабдық идентификаторымен конфигурацияланған. Бұл жайт ChromeOS жүйесінің соңғы қауіпсіздік түзетулерімен жаңартылуына кедергі жасайды және компьютеріңіз <ph name="BEGIN_BOLD" />зиянды шабуылдардан қорғана алмауы мүмкін<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Орнатушы <ph name="DEVICE_OS" /> орнату үшін белгіленген жарамды жер таба алмады.</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index 1595b3c..8752b0a 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -513,6 +513,7 @@ <translation id="1480663089572535854">អ្នកអាចត្រឡប់ក្រោយ ដើម្បីប្ដូរការកំណត់សម្រាប់ “ជ្រើសរើស”។ អ្នកអាចបិទការស្កេនដោយស្វ័យប្រវត្តិនៅក្នុងការកំណត់បានជានិច្ច។</translation> <translation id="1481537595330271162">មានបញ្ហាក្នុងការប្ដូរទំហំថាស</translation> <translation id="1482626744466814421">ចំណាំផ្ទាំងនេះ...</translation> +<translation id="1482772681918035149">កែពាក្យសម្ងាត់</translation> <translation id="1483493594462132177">ផ្ញើ</translation> <translation id="1484979925941077974">គេហទំព័រកំពុងប្រើប៊្លូធូស</translation> <translation id="1485015260175968628">ឥឡូវនេះវាអាច៖</translation> @@ -527,6 +528,7 @@ <translation id="1500801317528437432">ស្វែងយល់បន្ថែមអំពីកម្មវិធី Chrome ដែលមិនអាចប្រើបាន</translation> <translation id="150411034776756821">លុប <ph name="SITE" /></translation> <translation id="1504551620756424144">មានថតដែលបានចែករំលែកនៅក្នុង Windows នៅ <ph name="BASE_DIR" />។</translation> +<translation id="1505494256539862015">នាំចេញពាក្យសម្ងាត់</translation> <translation id="1506061864768559482">ម៉ាស៊ីនស្វែងរក</translation> <translation id="1507170440449692343">ទំព័រនេះត្រូវបានរារាំងពីការចូលប្រើកាមេរ៉ារបស់អ្នក។</translation> <translation id="1507246803636407672">កម្ចាត់</translation> @@ -2976,6 +2978,7 @@ <translation id="3778740492972734840">ឧបករណ៍អ្នកអភិវឌ្ឍន៍</translation> <translation id="3778868487658107119">សួរសំណួរ និងប្រាប់វាឲ្យធ្វើកិច្ចការ។ វាជា Google ផ្ទាល់ខ្លួនរបស់អ្នក ដែលត្រៀមជួយអ្នកជានិច្ច។</translation> <translation id="3781742599892759500">ការចូលប្រើមីក្រូហ្វូនសម្រាប់ Linux</translation> +<translation id="3783889407390048282">សូមសម្អាតឱ្យសល់ទំហំផ្ទុក ដើម្បីជៀសវាងកុំឱ្យបាត់បង់សិទ្ធិចូលប្រើប្រាស់ Android។</translation> <translation id="3784472333786002075">ខូគីគឺជាឯកសារដែលបង្កើតដោយគេហទំព័រ។ ខូគីមានពីរប្រភេទ៖ ខូគីភាគីទីមួយបង្កើតដោយគេហទំព័រដែលអ្នកចូលមើល។ គេហទំព័រនេះបង្ហាញនៅលើរបារអាសយដ្ឋាន។ ខូគីភាគីទីបីបង្កើតដោយគេហទំព័រផ្សេងទៀត។ គេហទំព័រទាំងនេះគឺជាម្ចាស់នៃខ្លឹមសារមួយចំនួន ដូចជាការផ្សាយពាណិជ្ជកម្ម ឬរូបភាព ដែលអ្នកឃើញនៅលើគេហទំព័រដែលអ្នកចូលមើលជាដើម។</translation> <translation id="3785308913036335955">បង្ហាញផ្លូវកាត់កម្មវិធី</translation> <translation id="3785727820640310185">បានរក្សាទុកពាក្យសម្ងាត់សម្រាប់ទំព័រនេះ</translation> @@ -4289,6 +4292,7 @@ <translation id="5066100345385738837">គ្រប់គ្រង DNS សុវត្ថិភាពនៅក្នុងការកំណត់ ChromeOS</translation> <translation id="5067399438976153555">បើកជានិច្ច</translation> <translation id="5067867186035333991">សួរប្រសិនបើ <ph name="HOST" /> ចង់ចូលប្រើម៉ៃក្រូហ្វូនរបស់អ្នក</translation> +<translation id="5068553687099139861">បង្ហាញពាក្យសម្ងាត់</translation> <translation id="5068918910148307423">មិនអនុញ្ញាតឲ្យគេហទំព័រដែលទើបបិទថ្មីៗបញ្ចប់ការផ្ញើ ឬទទួលទិន្នន័យទេ</translation> <translation id="5068919226082848014">ភីហ្សា</translation> <translation id="5070710277167211639">ប្ដូរការរុករកទៅជា HTTPS និងព្រមានអ្នក មុនពេលផ្ទុកគេហទំព័រដែលមិនស្គាល់ HTTPS</translation> @@ -6441,6 +6445,7 @@ <translation id="7152478047064750137">កម្មវិធីបន្ថែមនេះមិនតម្រូវឱ្យមានការអនុញ្ញាតពិសេសទេ</translation> <translation id="7154130902455071009">ប្តូរទំព័រចាប់ផ្តើមរបស់អ្នកទៅ៖ <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">រូបភាពពីកាមេរ៉ា និងឯកសារដែលមានស្រាប់</translation> +<translation id="7159953856712257647">បានដំឡើងតាមលំនាំដើម</translation> <translation id="7160182524506337403">ឥឡូវនេះ អ្នកអាចមើលការជូនដំណឹងលើទូរសព្ទរបស់អ្នកបានហើយ</translation> <translation id="7163202347044721291">កំពុងផ្ទៀងផ្ទាត់លេខកូដបើកដំណើរការ...</translation> <translation id="716640248772308851">"<ph name="EXTENSION" />" មិនអាចអានឯកសាររូបភាព វីដេអូ និងសម្លេងនៅក្នុងទីតាំងដែលបានពិនិត្យទេ។</translation> @@ -7540,6 +7545,7 @@ <translation id="820568752112382238">គេហទំព័រដែលចូលមើលញឹកញាប់បំផុត</translation> <translation id="8206745257863499010">ប៊្លូស៊ី</translation> <translation id="8206859287963243715">ប្រព័ន្ធទូរស័ព្ទ</translation> +<translation id="8208216423136871611">កុំរក្សាទុក</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{ការជូនដំណឹងថ្មី}other{ការជូនដំណឹងថ្មីៗ #}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ការទាញយកកំពុងដំណើរការ}other{ការទាញយកកំពុងដំណើរការ}}</translation> <translation id="8213449224684199188">បានចូលមុខងាររូបថត</translation> @@ -7652,6 +7658,7 @@ <translation id="8314835274931377415">ចាប់ផ្ដើមរៀបចំមុខងារប្រើឧបករណ៍ចុចឬ?</translation> <translation id="8317582043908962055">ស្គាល់អត្ថបទ P&DF</translation> <translation id="8317671367883557781">បន្ថែមការតភ្ជាប់បណ្តាញ</translation> +<translation id="8317965619823678157">ចម្លងពាក្យសម្ងាត់</translation> <translation id="8318266828739827371">ប្រើប្រាស់ទិដ្ឋភាពបំបែកអេក្រង់ ដើម្បីមើលឃើញតំបន់ដែលបានពង្រីកនៃអេក្រង់របស់អ្នក។ ប្រើប្រាស់ Search + Ctrl + D ដើម្បីបើក និងបិទកែវពង្រីកដាក់ពីលើ។</translation> <translation id="8319414634934645341">ការប្រើប្រាស់សោបន្ថែម</translation> <translation id="8321837372750396788"><ph name="DEVICE_TYPE" /> នេះនឹងស្ថិតក្រោមការគ្រប់គ្រងរបស់ <ph name="MANAGER" />។</translation> @@ -8580,6 +8587,7 @@ <translation id="929117907539171075">ទិន្នន័យដែលបានផ្ទុកក្នុងឧបករណ៍របស់កម្មវិធីដែលបានដំឡើងក៏នឹងត្រូវសម្អាតផងដែរ</translation> <translation id="930268624053534560">តែមពេលវេលាលម្អិត</translation> <translation id="930893132043726269">កំពុងរ៉ូមីង</translation> +<translation id="93140074055951850">កម្មវិធី Android ត្រូវបានបញ្ឈប់</translation> <translation id="932327136139879170">ទំព័រដើម</translation> <translation id="932508678520956232">មិនអាចផ្តួចផ្តើមការបោះពុម្ពទេ។</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{ឯកសារនេះធំពេកសម្រាប់ការពិនិត្យសុវត្ថិភាព។ អ្នកអាចបង្ហោះឯកសាររហូតដល់ 50 MB។}other{ឯកសារមួយចំនួនក្នុងចំណោមឯកសារទាំងនេះធំពេកសម្រាប់ការពិនិត្យសុវត្ថិភាព។ អ្នកអាចបង្ហោះឯកសាររហូតដល់ 50 MB។}}</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index d55bff6..6ac56e9 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -7533,6 +7533,7 @@ <translation id="820568752112382238">ಹೆಚ್ಚು ಭೇಟಿ ನೀಡಿರುವ ಸೈಟ್ಗಳು</translation> <translation id="8206745257863499010">ಬ್ಲೂಸಿ</translation> <translation id="8206859287963243715">ಸೆಲ್ಯುಲಾರ್</translation> +<translation id="8208216423136871611">ಉಳಿಸಬೇಡಿ</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{ಹೊಸ ಅಧಿಸೂಚನೆ}one{# ಹೊಸ ಅಧಿಸೂಚನೆಗಳು}other{# ಹೊಸ ಅಧಿಸೂಚನೆಗಳು}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ಡೌನ್ಲೋಡ್ ಪ್ರಗತಿಯಲ್ಲಿದೆ}one{ಡೌನ್ಲೋಡ್ಗಳು ಪ್ರಗತಿಯಲ್ಲಿವೆ}other{ಡೌನ್ಲೋಡ್ಗಳು ಪ್ರಗತಿಯಲ್ಲಿವೆ}}</translation> <translation id="8213449224684199188">ಫೋಟೋ ಮೋಡ್ ನಮೂದಿಸಲಾಗಿದೆ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 3642a91..4c50bb6 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -601,6 +601,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" />(게스트)</translation> <translation id="1572266655485775982">Wi-Fi 사용</translation> <translation id="1572876035008611720">이메일을 입력하세요.</translation> +<translation id="1573117025466282241">QR 코드로 휴대전화 사용</translation> <translation id="1575741822946219011">언어 및 입력</translation> <translation id="1576594961618857597">기본 흰색 아바타</translation> <translation id="1578558981922970608">강제 종료</translation> @@ -5985,7 +5986,7 @@ <translation id="671619610707606484">사이트에서 저장한 <ph name="TOTAL_USAGE" />의 데이터가 삭제됩니다.</translation> <translation id="6716798148881908873">네트워크 연결이 끊어졌습니다. 네트워크 연결을 확인하거나 다른 Wi-Fi 네트워크를 사용해 보세요.</translation> <translation id="671928215901716392">화면 잠금</translation> -<translation id="6721744718589119342">이메일로 추가 정보나 새로운 소식을 전송하도록 허용</translation> +<translation id="6721744718589119342">이메일로 추가 정보나 새로운 소식을 전송할 수 있습니다</translation> <translation id="6721972322305477112">파일(&F)</translation> <translation id="672208878794563299">사이트에서 나중에 다시 요청합니다.</translation> <translation id="6723661294526996303">북마크 및 설정 가져오기...</translation> @@ -7539,6 +7540,7 @@ <translation id="820568752112382238">자주 방문한 사이트</translation> <translation id="8206745257863499010">음악</translation> <translation id="8206859287963243715">휴대전화</translation> +<translation id="8208216423136871611">저장하지 않음</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{새 알림}other{새 알림 #개}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{다운로드 진행 중}other{다운로드 진행 중}}</translation> <translation id="8213449224684199188">사진 모드 시작됨</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index d206b9e..1ea8a81 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">Купуялык борбору</translation> <translation id="117445914942805388">Бардык шайкештирилген түзмөктөрүңүздөгү жана Google аккаунтуңуздагы серептөө дайындарын тазалоо үчүн <ph name="BEGIN_LINK" />шайкештирүү жөндөөлөрүнө өтүңүз<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Басып чыгаруу…</translation> +<translation id="1176378369905028399">Бул аккаунттун сырсөзү Сырсөздөрдү башкаргычка (<ph name="USER_EMAIL" />) мурунтан эле сакталган</translation> <translation id="1176471985365269981">Түзмөгүңүздөгү файлдарды же папкаларды түзөтө албайт</translation> <translation id="1177863135347784049">Өзгөчөлөштүрүлгөн</translation> <translation id="1178581264944972037">Бир азга токтотуу</translation> @@ -805,6 +806,7 @@ <translation id="1745732479023874451">Байланыштарды башкаруу</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{# файлды ушул веб-колдонмодо ачып, түзөтөсүзбү?}}</translation> <translation id="1748563609363301860">Бул сырсөздү Google аккаунтуңузда же ушул түзмөктө гана сактап койсоңуз болот</translation> +<translation id="1749733017156547309">Сырсөз талап кылынат</translation> <translation id="1750172676754093297">Коопсуздук ачкычыңызда манжаларыңыздын издерин сактоого болбойт</translation> <translation id="1751249301761991853">Жеке</translation> <translation id="1751262127955453661">Бул сайттын бардык өтмөктөрү жабылмайынча <ph name="ORIGIN" /> сайты <ph name="FOLDERNAME" /> папкасындагы файлдарды түзөтө алат</translation> @@ -1756,6 +1758,7 @@ <translation id="2602501489742255173">Баштоо үчүн, өйдө сүрүп коюңуз</translation> <translation id="2603115962224169880">Компьютерди тазалоо</translation> <translation id="2603355571917519942">Voice Match даяр</translation> +<translation id="2604129989323098489">Адатта сайттар документтерди же толук экрандагы контентти жанаша көрсөтүү сыяктуу терезелерди ачып, аракеттерди акылуу жолдор менен аткаруу үчүн экрандарыңыз жөнүндө маалыматты сурашат</translation> <translation id="2604255671529671813">Тармакка туташуу катасы</translation> <translation id="2605668923777146443">Better Together функциясынын параметрлерин көрүү үчүн <ph name="LINK_BEGIN" />Жөндөөлөргө<ph name="LINK_END" /> өтүңүз.</translation> <translation id="2606246518223360146">Дайындарды байланыштыруу</translation> @@ -1801,6 +1804,7 @@ <translation id="2645047101481282803">Түзмөгүңүз <ph name="PROFILE_NAME" /> тарабынан башкарылууда</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 сырсөз ушул түзмөккө импорттолду}other{{NUM_PASSWORDS} сырсөз ушул түзмөккө импорттолду}}</translation> <translation id="2645435784669275700">ChromeOS</translation> +<translation id="2645515095874728277">Бул аккаунттун сырсөзү ушул түзмөккө мурунтан эле сакталган</translation> <translation id="2649045351178520408">Base64 менен коддолгон ASCII, тастыктама чынжыры</translation> <translation id="2652129567809778422">Сырсөздү тандоо</translation> <translation id="2653033005692233957">Издөө катасы</translation> @@ -2161,6 +2165,7 @@ <translation id="2972581237482394796">&Кайталоо</translation> <translation id="2973324205039581528">Сайттын үнүн басуу</translation> <translation id="2973537811036309675">Капталдагы тилке</translation> +<translation id="2975761176769946178">URL талап кылынат</translation> <translation id="2976557544729462544">Айрым түзмөктөрдүн туура иштеши же майнаптуулугун жогорулатуу үчүн дайын-даректерге кирүүнү коргоо функциясын өчүрүү талап кылынат.</translation> <translation id="2977480621796371840">Топтон алып салуу</translation> <translation id="2979639724566107830">Жаңы терезеде ачуу</translation> @@ -2402,6 +2407,7 @@ <translation id="3227137524299004712">Микрофон</translation> <translation id="3232754137068452469">Веб колдонмо</translation> <translation id="3233271424239923319">Linux колдонмолору менен файлдарынын камдык көчүрмөлөрүн сактоо</translation> +<translation id="3234251228180563751">Колдонуучунун аты 1000 символдон ашып кетти</translation> <translation id="3234978181857588512">Түзмөккө сактоо</translation> <translation id="3238192140106069382">Туташууга жана текшерүүгө аракет кылып жатат</translation> <translation id="3239373508713281971"><ph name="APP_NAME" /> үчүн коюлган чектөө өчүрүлдү</translation> @@ -5220,6 +5226,7 @@ <translation id="5975792506968920132">Батарея кубатынын пайызы</translation> <translation id="5976160379964388480">Башкалар</translation> <translation id="5978277834170881274">Негизги орфографиялык текшерүү функциясын колдонуу</translation> +<translation id="5978493744931296692">Администраторуңуз башка профилдерди өчүрүп койду</translation> <translation id="5979084224081478209">Сырсөздөрдү текшерүү</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{1 мүмкүн болгон кооптуу кеңейтүүнү кайра күйгүздүңүз}other{{NUM_EXTENSIONS} мүмкүн болгон кооптуу кеңейтүүнү кайра күйгүздүңүз}}</translation> <translation id="5979353814339191480">Бул параметр тарифтик план же мобилдик тармак ачкычы менен иштеген, же болбосо көчмө байланыш түйүнүнө туташкан Chromebook түзмөктөрүнө колдонулат</translation> @@ -5384,6 +5391,7 @@ <translation id="6130692320435119637">Wi-Fi кошуу</translation> <translation id="6130887916931372608">Баскычтоп баскычы</translation> <translation id="6135823405800500595">Телефонуңуз жакын жерде турганын жана анын кулпусу ачык болуп, Bluetooth менен Wi-Fi күйгүзүлгөнүн текшериңиз</translation> +<translation id="6135826623269483856">Сайттарга бардык экрандардагы терезелерди тескөөгө тыюу салынган</translation> <translation id="6136114942382973861">Жүктөлүп алынгандар тилкесин жабуу</translation> <translation id="6136287496450963112">Коопсуздук ачкычы PIN код менен корголгон эмес. Манжа издерин башкаруу үчүн адегенде PIN код түзүңүз.</translation> <translation id="6138680304137685902">X9.62 ECDSA Колтамгасы SHA-384 менен</translation> @@ -7390,6 +7398,7 @@ <ph name="BEGIN_PARAGRAPH3" />Бул кызматты жөндөөлөрдөн өчүрсөңүз болот.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Өтмөктөр</translation> <translation id="8076835018653442223">Түзмөгүңүздөгү файлдарды пайдалануу мүмкүнчүлүгүн администраторуңуз өчүрүп койгон</translation> +<translation id="80798452873915119">Сайттар бардык экрандардагы терезелерди тескөөнү сурана алышат</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Сеансты <ph name="MANAGER_NAME" /> башкарат. Администраторлор профилиңизди өчүрүп, тармактын трафигин көзөмөлдөй алышат.</translation> <translation id="8081989000209387414">ADB аркылуу мүчүлүштүктөрдү аныктоо өчүрүлсүнбү?</translation> @@ -7529,6 +7538,7 @@ <translation id="820568752112382238">Эң көп кирген сайттар</translation> <translation id="8206745257863499010">Блюз</translation> <translation id="8206859287963243715">Уюктук</translation> +<translation id="8208216423136871611">Сакталбасын</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Жаңы билдирме}other{# жаңы билдирме}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Жүктөлүп алынууда}other{Жүктөлүп алынууда}}</translation> <translation id="8213449224684199188">Сүрөт режими киргизилди</translation> @@ -7694,6 +7704,7 @@ <translation id="8371695176452482769">Сүйлөңүз</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Сайттын үнүн басуу}other{Сайттардын үнүн басуу}}</translation> <translation id="8373652277231415614">Crostini'нин бөлүшүлгөн каталогдору</translation> +<translation id="8374243500935816406">Сайттарга бардык экрандардагы терезелерди тескөөгө тыюу салуу</translation> <translation id="8376137163494131156">Google Cast тууралуу пикир билдириңиз.</translation> <translation id="8376384591331888629">Бул сайттагы үчүнчү тараптын cookie файлдары камтылган</translation> <translation id="8376451933628734023">Эгер бул веб колдонмо шектүү иштеп жатса, аны чыгарып салыңыз.</translation> @@ -7988,6 +7999,7 @@ <translation id="8670537393737592796">Бул жерге тезирээк кайтуу үчүн <ph name="APP_NAME" /> колдонмосун орнотуңуз</translation> <translation id="867085395664725367">Серверде убактылуу ката кетти.</translation> <translation id="8673026256276578048">Желеден издөө…</translation> +<translation id="867329473311423817">Бардык экрандардагы терезелерди тескей алат</translation> <translation id="8673383193459449849">Сервер көйгөйү</translation> <translation id="8674903726754070732">Тилекке каршы, компьютериңиз туура эмес форматтагы аппараттык камсыздоонун идентификатору менен конфигурацияланган. Ушундан улам, ChromeOS эң акыркы коопсуздук чаралары менен жаңыртылбагандыктан, компьютериңиз <ph name="BEGIN_BOLD" />зыянкеч чабуулдардан коргоно албай калышы мүмкүн<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Орноткуч <ph name="DEVICE_OS" /> тутуму орнотула турган жерди тапкан жок.</translation> @@ -8008,6 +8020,7 @@ <translation id="8683081248374354009">Топту баштапкы абалга келтирүү</translation> <translation id="8688672835843460752">Бош</translation> <translation id="8690129572193755009">Cайттар сиздин уруксатыңыз менен протоколдорду иштете алат</translation> +<translation id="8692107307702113268">Сырсөз 1000 символдон ашып кетти</translation> <translation id="8695139659682234808">Жөндөгөндөн кийин Ата-эненин көзөмөлүн кошуу</translation> <translation id="8695825812785969222">Жайгашкан жерди &ачуу…</translation> <translation id="8698269656364382265">Мурунку экранга кайтуу үчүн экранды сол капталына сүрүңүз.</translation> @@ -8288,6 +8301,7 @@ <translation id="8960638196855923532">Телефонуңуздагы билдирмелерди жана колдонмолорду көрө аласыз</translation> <translation id="8962051932294470566">Бир маалда бир файлды гана өткөрө аласыз. Учурдагы файл өткөрүлүп бүткөндөн кийин кайра аракет кылыңыз.</translation> <translation id="8962083179518285172">Чоо-жайды жашыруу</translation> +<translation id="8962863356073277855">URL форматы https://www.example.com болушу керек</translation> <translation id="8962918469425892674">Бул сайт кыймыл же жарык сенсорлорун колдонуп жатат.</translation> <translation id="8965037249707889821">Эски сырсөздү киргизүү</translation> <translation id="89667524227025535">Түзмөктөгү камеранын жардамы менен QR кодун скандаңыз же байланыш операторуңуз берген жандандыруу кодун киргизиңиз</translation> @@ -8558,6 +8572,7 @@ <translation id="9220525904950070496">Аккаунтту өчүрүү</translation> <translation id="9220820413868316583">Көтөрүп, кайталап көрүңүз.</translation> <translation id="922152298093051471">Chrome'ду ыңгайлаштыруу</translation> +<translation id="9222839025964079645">Сырсөздөр (<ph name="COUNT" />) өткөрүлүп алынган жок</translation> <translation id="923467487918828349">Баарын көрсөтүү</translation> <translation id="924818813611903184">ChromeOS параметрлеринен тилдерди башкаруу</translation> <translation id="929117907539171075">Орнотулган колдонмодогу оффлайн маалымат да тазаланат</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 6c2c9d0f..f08cf2f 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -7536,6 +7536,7 @@ <translation id="820568752112382238">ເວັບໄຊທີ່ເຂົ້າເບິ່ງຫຼາຍທີ່ສຸດ</translation> <translation id="8206745257863499010">ບລູຊີ</translation> <translation id="8206859287963243715">ເຊວລູລາ</translation> +<translation id="8208216423136871611">ຢ່າບັນທຶກ</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{ການແຈ້ງເຕືອນໃໝ່}other{ການແຈ້ງເຕືອນໃໝ່ # ລາຍການ}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ການດາວໂຫຼດພວມດຳເນີນຢູ່}other{ການດາວໂຫຼດພວມດຳເນີນຢູ່}}</translation> <translation id="8213449224684199188">ເຂົ້າໂໝດຮູບພາບແລ້ວ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index c7fbed6..32f7038 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -604,6 +604,7 @@ <translation id="1572139610531470719">„<ph name="WINDOW_TITLE" />“ (svečias)</translation> <translation id="1572266655485775982">Įgalinti „Wi-Fi“</translation> <translation id="1572876035008611720">Įveskite savo el. pašto adresą</translation> +<translation id="1573117025466282241">Naudoti telefoną su QR kodu</translation> <translation id="1575741822946219011">Kalbos ir įvestys</translation> <translation id="1576594961618857597">Numatytasis baltas pseudoportretas</translation> <translation id="1578558981922970608">Priverstinai uždaryti</translation> @@ -7549,6 +7550,7 @@ <translation id="820568752112382238">Dažniausiai lankomos svetainės</translation> <translation id="8206745257863499010">Bliuzas</translation> <translation id="8206859287963243715">Mobilusis</translation> +<translation id="8208216423136871611">Neišsaugoti</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Naujas pranešimas}one{# naujas pranešimas}few{# nauji pranešimai}many{# naujo pranešimo}other{# naujų pranešimų}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Vykdomas atsisiuntimas}one{Vykdomi atsisiuntimai}few{Vykdomi atsisiuntimai}many{Vykdomi atsisiuntimai}other{Vykdomi atsisiuntimai}}</translation> <translation id="8213449224684199188">Įjungtas nuotraukų režimas</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 632ffd6..7c778d1c 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -941,6 +941,7 @@ <translation id="1864400682872660285">Vēsāks</translation> <translation id="1864454756846565995">USB-C ierīce (aizmugurējā pieslēgvieta)</translation> <translation id="1865769994591826607">Tikai vienas vietnes savienojumi</translation> +<translation id="186594096341696655">Samazināt frekvenci</translation> <translation id="186612162884103683">“<ph name="EXTENSION" />” var lasīt un rakstīt attēlus, videoklipus un skaņu failus atzīmētajās vietās.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> var pabeigt instalēšanu</translation> <translation id="1868553836791672080">Paroļu pārbaude nav pieejama pārlūkā Chromium.</translation> @@ -1132,6 +1133,7 @@ <translation id="2048554637254265991">Startējot konteineru pārvaldnieku, radās kļūda. Lūdzu, mēģiniet vēlreiz.</translation> <translation id="2048653237708779538">Darbība nav pieejama</translation> <translation id="2050339315714019657">Portrets</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{Google paroļu pārvaldniekā tika importēta viena parole (<ph name="USER_EMAIL" />)}zero{Google paroļu pārvaldniekā tika importētas {NUM_PASSWORDS} paroles (<ph name="USER_EMAIL" />)}one{Google paroļu pārvaldniekā tika importēta {NUM_PASSWORDS} parole (<ph name="USER_EMAIL" />)}other{Google paroļu pārvaldniekā tika importētas {NUM_PASSWORDS} paroles (<ph name="USER_EMAIL" />)}}</translation> <translation id="2052572566310583903">Instalēta citās jūsu ierīcēs</translation> <translation id="2053105195397337973">Mēs pētām iespējas ierobežot izsekošanu, vienlaikus ļaujot vietnēs novērst nevēlamas reklāmas un krāpšanu.</translation> <translation id="2053312383184521053">Dati par neaktīvu stāvokli</translation> @@ -1902,6 +1904,7 @@ <translation id="2742448780373473567">Instalējot operētājsistēmu <ph name="DEVICE_OS" />, tiks pārrakstīti visi dati jūsu ierīcē.</translation> <translation id="274290345632688601">Linux lietotņu un failu atjaunošana</translation> <translation id="274318651891194348">Notiek tastatūras meklēšana…</translation> +<translation id="2743301740238894839">Sākt</translation> <translation id="2743387203779672305">Kopēt starpliktuvē</translation> <translation id="2745080116229976798">Microsoft pilnīga pakārtotība</translation> <translation id="2747266560080989517">Šis fails ietver sensitīvu vai bīstamu saturu. Lūdziet faila īpašniekam to labot.</translation> @@ -2414,6 +2417,7 @@ <translation id="3255355328033513170">Tiks dzēsti visi dati, kas tiek glabāti vietņu grupā <ph name="SITE_GROUP_NAME" /> un visās pakārtotajās vietnēs. Tas attiecas arī uz sīkfailiem. Jūs tiksiet izrakstīts no šīm vietnēm, tostarp atvērtajās cilnēs.</translation> <translation id="3257733480216378006">Vai atļaut paplašinājumus (skaits: <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" />)?</translation> <translation id="3259723213051400722">Lūdzu, mēģiniet vēlreiz.</translation> +<translation id="3261090393424563833">Palielināt frekvenci</translation> <translation id="3261268979727295785">Vecākiem bērniem varat pievienot vecāku kontroli pēc iestatīšanas pabeigšanas. Informāciju par vecāku kontroli varat atrast lietotnē Izpēte.</translation> <translation id="3262986719682892278">Par lielu</translation> <translation id="3264544094376351444">Sans-Serif fonts</translation> @@ -2923,6 +2927,7 @@ <translation id="3747077776423672805">Lai noņemtu lietotnes, pārejiet uz sadaļu Iestatījumi > Google Play veikals > Pārvaldīt Android preferences > Lietotnes vai Lietojumprogrammu pārvaldnieks. Pēc tam pieskarieties lietotnei, kuru vēlaties atinstalēt (iespējams, būs jāvelk pa labi vai pa kreisi, lai atrastu lietotni). Pēc tam pieskarieties vienumam Atinstalēt vai Atspējot.</translation> <translation id="3747603683749989726">Vai ieslēgt uzlaboto aizsardzību?</translation> <translation id="3748706263662799310">Ziņot par blusu</translation> +<translation id="3750304496241836236">Lai Google paroļu pārvaldniekā importētu paroles, atlasiet CSV failu</translation> <translation id="3750562496035670393">Pārlūks Chrome paroli saglabāja šajā ierīcē, taču varat to saglabāt arī savā Google kontā. Tādējādi visas Google kontā saglabātās paroles būs pieejamas, kad būsiet pierakstījies.</translation> <translation id="3752253558646317685">Bērnam ir jāturpina pacelt pirksts, lai saglabātu pirksta nospiedumu.</translation> <translation id="3753033997400164841">Saglabājiet vienreiz, izmantojiet it visur</translation> @@ -4093,6 +4098,7 @@ <translation id="4871370605780490696">Pievienot grāmatzīmi</translation> <translation id="4871568871368204250">Sinhronizācijas izslēgšana</translation> <translation id="4871719318659334896">Aizvērt grupu</translation> +<translation id="4872192066608821120">Lai importētu paroles, atlasiet CSV failu</translation> <translation id="4873312501243535625">Multivides failu pārbaudītājs</translation> <translation id="4876273079589074638">Palīdziet mūsu inženieriem izpētīt un novērst šo avāriju. Ja varat, norādiet konkrētas darbības (jo detalizētāk, jo labāk).</translation> <translation id="4876895919560854374">Bloķēt un atbloķēt ekrānu</translation> @@ -5433,6 +5439,7 @@ <translation id="6206199626856438589">Jūs tiksiet izrakstīts no parādītajām vietnēm, tostarp atvērtajās cilnēs.</translation> <translation id="6206311232642889873">Kopēt &attēlu</translation> <translation id="6207200176136643843">Atiestatīt noklusējuma tālummaiņas līmeni</translation> +<translation id="6207806976844244951">Saglabāt Google paroļu pārvaldniekā (<ph name="EMAIL" />)</translation> <translation id="6207937957461833379">Valsts/reģions</translation> <translation id="6208382900683142153">Uzticamības marķieri uzlabo konfidencialitāti tīmeklī. Tos nevar izmantot, lai uzzinātu, kas jūs esat.</translation> <translation id="6208521041562685716">Tiek aktivizēti mobilie dati</translation> @@ -5672,6 +5679,7 @@ <translation id="6436610005579237680">Lai saņemtu pielāgotākas atbildes, ļaujiet Google asistentam piekļūt ekrānā redzamās informācijas ekrānuzņēmumam, kad uzdodat jautājumus. Asistents var arī izmantot informāciju par atskaņotajām dziesmām vai videoklipiem.</translation> <translation id="6436778875248895551">Jūsu administrators bloķēja paplašinājumu “<ph name="EXTENSION_NAME" />”.</translation> <translation id="6438234780621650381">Iestatījumu atiestatīšana</translation> +<translation id="6438475350605608554">Jūs citā cilnē jau importējat paroles</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> — audio atskaņošana</translation> <translation id="6442187272350399447">Smaidiņš</translation> <translation id="6442445294758185945">Nevarēja lejupielādēt atjauninājumu. Lūdzu, vēlāk mēģiniet vēlreiz.</translation> @@ -5682,6 +5690,7 @@ <translation id="6446213738085045933">Izveidot darbvirsmas saīsni</translation> <translation id="6447842834002726250">Sīkfaili</translation> <translation id="6450876761651513209">Mainīt konfidencialitātes iestatījumus</translation> +<translation id="645119363824354176">Lai importētu paroles šajā ierīcē, atlasiet CSV failu</translation> <translation id="6451344358166983408">Vietne vai lapa</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> un vēl 1 cilne}zero{<ph name="PAGE_TITLE" /> un vēl # cilnes}one{<ph name="PAGE_TITLE" /> un vēl # cilne}other{<ph name="PAGE_TITLE" /> un vēl # cilnes}}</translation> <translation id="6451689256222386810">Ja esat aizmirsis ieejas frāzi vai vēlaties mainīt šo iestatījumu, <ph name="BEGIN_LINK" />atiestatiet sinhronizāciju<ph name="END_LINK" />.</translation> @@ -5949,6 +5958,7 @@ <translation id="6691936601825168937">Pārsūtīt</translation> <translation id="6693745645188488741">{COUNT,plural, =1{1 lapa}zero{{COUNT} lapu}one{{COUNT} lapa}other{{COUNT} lapas}}</translation> <translation id="6694430008315398925">Steam iestatīšana</translation> +<translation id="6697172646384837537">Atlasiet, kur importēt paroles</translation> <translation id="6697492270171225480">Ja lapu neizdotas atrast, rāda ieteikumus par līdzīgām lapām</translation> <translation id="6697690052557311665">Lai koplietotu mapi, lietotnē Faili noklikšķiniet ar peles labo pogu uz mapes un pēc tam atlasiet vienumu “Koplietot ar sistēmu Linux”.</translation> <translation id="6698810901424468597">Lasīt un mainīt jūsu datus vietnēs <ph name="WEBSITE_1" /> un <ph name="WEBSITE_2" /></translation> @@ -6046,6 +6056,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">Ja ir ieslēgta automātiskā pārlūkošana, pārvietošanās pa vienumiem ekrānā notiek automātiski. Kad vienums ir izcelts, nospiediet slēdzi “Atlasīt”, lai vienumu aktivizētu.</translation> <translation id="6795884519221689054">Panda</translation> +<translation id="6796509790850723820">Atveidot</translation> <translation id="6797493596609571643">Šķiet, ka radās kļūda.</translation> <translation id="6798420440063423019">Drošības atslēga ir bloķēta, jo pārāk daudz reižu ievadīts nepareizs PIN. Jums būs jāatiestata drošības atslēga.</translation> <translation id="679845623837196966">Rādīt lasīšanas sarakstu</translation> @@ -6588,6 +6599,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> tagad ir redzams pilnekrāna režīmā.</translation> <translation id="7340650977506865820">Vietne kopīgo jūsu ekrānu.</translation> <translation id="7340757554212515731">Google serveriem tiek automātiski nosūtīti avāriju pārskati, kā arī diagnostikas un lietojuma dati.</translation> +<translation id="734088800888587319">Tīkla rādītāji</translation> <translation id="7341834142292923918">Vēlas piekļūt šai vietnei</translation> <translation id="7343372807593926528">Pirms atsauksmes nosūtīšanas aprakstiet problēmu.</translation> <translation id="7344585835349671209">Pārvaldiet HTTPS/SSL sertifikātus savā ierīcē</translation> @@ -7525,6 +7537,7 @@ <translation id="820568752112382238">Biežāk apmeklētās vietnes</translation> <translation id="8206745257863499010">Blūzs</translation> <translation id="8206859287963243715">Mobilais tālrunis</translation> +<translation id="8208216423136871611">Nesaglabāt</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Jauns paziņojums}zero{# jaunu paziņojumu}one{# jauns paziņojums}other{# jauni paziņojumi}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Notiek lejupielāde}zero{Notiek lejupielāde}one{Notiek lejupielāde}other{Notiek lejupielāde}}</translation> <translation id="8213449224684199188">Ievadīts foto režīms</translation> @@ -8432,6 +8445,7 @@ <translation id="9088917181875854783">Pārbaudiet, vai ieejas atslēga ir redzama ierīcē <ph name="DEVICE_NAME" />:</translation> <translation id="9089416786594320554">Ievades metodes</translation> <translation id="9090044809052745245">Citiem redzamais ierīces nosaukums</translation> +<translation id="9093470422440389061">Wi-Fi veiktspējas dati</translation> <translation id="9094033019050270033">Atjaunināt paroli</translation> <translation id="9094038138851891550">Lietotājvārds nav derīgs</translation> <translation id="9094859731829297286">Vai tiešām vēlaties rezervēt noteikta lieluma disku operētājsistēmā Linux?</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index ccb26f45..57cecede 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -955,6 +955,7 @@ <translation id="1864400682872660285">Поладни</translation> <translation id="1864454756846565995">USB-Ц уред (задна порта)</translation> <translation id="1865769994591826607">Само врски од истиот сајт</translation> +<translation id="186594096341696655">Намали ја фреквенцијата</translation> <translation id="186612162884103683">„<ph name="EXTENSION" />“ може да чита слики, видео и аудиодатотеки на означените локации.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> е подготвен да ја комплетира инсталацијата</translation> <translation id="1868553836791672080">Проверката на лозинки не е достапна во Chromium</translation> @@ -1146,6 +1147,7 @@ <translation id="2048554637254265991">Грешка при стартувањето на управувачот со контејнери. Обидете се повторно.</translation> <translation id="2048653237708779538">Дејството не е достапно</translation> <translation id="2050339315714019657">Портрет</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{1 лозинка е увезена во вашиот Google Password Manager (<ph name="USER_EMAIL" />)}one{{NUM_PASSWORDS} лозинка се увезени во вашиот Google Password Manager (<ph name="USER_EMAIL" />)}other{{NUM_PASSWORDS} лозинки се увезени во вашиот Google Password Manager (<ph name="USER_EMAIL" />)}}</translation> <translation id="2052572566310583903">Инсталирана на вашите други уреди</translation> <translation id="2053105195397337973">Истражуваме начини како да го намалиме следењето, а притоа да им овозможуваме на сајтовите да ги сопрат спамот и измамите со реклами.</translation> <translation id="2053312383184521053">Податоци во состојба на неактивност</translation> @@ -1919,6 +1921,7 @@ <translation id="2742448780373473567">Инсталирањето на <ph name="DEVICE_OS" /> ќе ги презапише сите податоци на вашиот уред.</translation> <translation id="274290345632688601">Се враќаат апликациите и датотеките на Linux</translation> <translation id="274318651891194348">Се пребарува тастатура</translation> +<translation id="2743301740238894839">Започни</translation> <translation id="2743387203779672305">Копирај на клип-табла</translation> <translation id="2745080116229976798">Квалификувана подреденост на Microsoft</translation> <translation id="2747266560080989517">Датотекава содржи чувствителни или опасни содржини. Побарајте од сопственикот да ја поправи.</translation> @@ -2431,6 +2434,7 @@ <translation id="3255355328033513170">Сите податоци складирани од <ph name="SITE_GROUP_NAME" /> и сите подредени сајтови ќе се избришат. Ова ги опфаќа и колачињата. Ќе ве одјавиме од овие сајтови, вклучително и од отворените картички.</translation> <translation id="3257733480216378006">Да се дозволи <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" />?</translation> <translation id="3259723213051400722">Обидете се повторно.</translation> +<translation id="3261090393424563833">Зголеми ја фреквенцијата</translation> <translation id="3261268979727295785">За постари деца, може да додадете родителски контроли откако ќе завршите со поставувањето. Информации за родителските контроли ќе најдете во апликацијата Explore.</translation> <translation id="3262986719682892278">Преголема</translation> <translation id="3264544094376351444">Фонт Sans-Serif</translation> @@ -2940,6 +2944,7 @@ <translation id="3747077776423672805">За да ги отстраните апликациите, одете во „Поставки > Google Play Store > Управувајте со поставките за Android > Апликации“ или „Управникот со апликации“. Потоа допрете ја апликацијата што сакате да ја деинсталирате (можеби ќе треба да повлечете десно или лево за да ја најдете). Потоа допрете „Деинсталирај“ или „Оневозможи“.</translation> <translation id="3747603683749989726">Да се вклучи подобрената безбедност?</translation> <translation id="3748706263662799310">Пријавете грешка</translation> +<translation id="3750304496241836236">За да ги увезете лозинките во вашиот Google Password Manager, изберете CSV-датотека</translation> <translation id="3750562496035670393">Chrome ја зачува лозинката на уредов, но може да ја зачувате на вашата сметка на Google наместо тоа. Потоа, сите лозинки во вашата сметка на Google ќе бидат исто така достапни додека сте најавени.</translation> <translation id="3752253558646317685">Кажете му на детето постојано да го крева прстот за да се зачува отпачатокот</translation> <translation id="3753033997400164841">Складирајте еднаш. Користете насекаде</translation> @@ -4112,6 +4117,7 @@ <translation id="4871370605780490696">Додајте обележувач</translation> <translation id="4871568871368204250">Исклучување синхронизација</translation> <translation id="4871719318659334896">Затвори ја групата</translation> +<translation id="4872192066608821120">За да ги увезете лозинките, изберете CSV-датотека</translation> <translation id="4873312501243535625">Проверувач на медиумска датотека</translation> <translation id="4876273079589074638">Помогнете им на нашите инженери да го истражат и поправат падот. Наведете ги прецизните чекори ако можете. Сите детали се важни.</translation> <translation id="4876895919560854374">Заклучи го и отклучи го екранот</translation> @@ -5456,6 +5462,7 @@ <translation id="6206199626856438589">Ќе ве одјавиме од прикажаните сајтови, вклучително и од отворените картички.</translation> <translation id="6206311232642889873">Коп&ирај слика</translation> <translation id="6207200176136643843">Ресетирај на стандардно ниво на зумирање</translation> +<translation id="6207806976844244951">Зачувај во Google Password Manager (<ph name="EMAIL" />)</translation> <translation id="6207937957461833379">Држава/Регион</translation> <translation id="6208382900683142153">Токените за доверба ја подобруваат приватноста на интернет и не може да се користат за ваша идентификација.</translation> <translation id="6208521041562685716">Мобилниот интернет се активира</translation> @@ -5695,6 +5702,7 @@ <translation id="6436610005579237680">За да добивате одговори што се приспособени на вас, дозволете му на „Помошникот на Google“ да пристапува до она што е на вашиот екран кога поставувате прашања. Вашиот „Помошник“ може да користи и податоци за песните или видеата што се пуштени.</translation> <translation id="6436778875248895551">Екстензијата „<ph name="EXTENSION_NAME" />“ е блокирана од администраторот</translation> <translation id="6438234780621650381">Ресетирај ги поставките</translation> +<translation id="6438475350605608554">Веќе ги увезувате лозинките во друга картичка</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - пуштено е аудио</translation> <translation id="6442187272350399447">Супер</translation> <translation id="6442445294758185945">Не може да се преземе ажурирањето. Обидете се подоцна.</translation> @@ -5705,6 +5713,7 @@ <translation id="6446213738085045933">Создајте кратенка за работна површина</translation> <translation id="6447842834002726250">Колачиња</translation> <translation id="6450876761651513209">Променете ги поставките поврзани со приватноста</translation> +<translation id="645119363824354176">За да ги увезете лозинките на овој уред, изберете CSV-датотека</translation> <translation id="6451344358166983408">Сајт или страница</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> и уште 1 картичка}one{<ph name="PAGE_TITLE" /> и уште # картичка}other{<ph name="PAGE_TITLE" /> и уште # картички}}</translation> <translation id="6451689256222386810">Ако сте ја заборавиле лозинката или сакате да ја промените поставкава, <ph name="BEGIN_LINK" />ресетирајте го синхронизирањето<ph name="END_LINK" /></translation> @@ -5970,6 +5979,7 @@ <translation id="6691936601825168937">&Напред</translation> <translation id="6693745645188488741">{COUNT,plural, =1{1 страница}one{{COUNT} страница}other{{COUNT} страници}}</translation> <translation id="6694430008315398925">Се поставува Steam</translation> +<translation id="6697172646384837537">Изберете каде да се увезат лозинките</translation> <translation id="6697492270171225480">Прикажувај предлози за слични страници кога страницата не може да се најде</translation> <translation id="6697690052557311665">За да споделите, кликнете со десен клик на папка во апликацијата „Папки“, потоа изберете „Сподели со Linux“.</translation> <translation id="6698810901424468597">Прочитајте ги и променете ги вашите податоци на <ph name="WEBSITE_1" /> и <ph name="WEBSITE_2" /></translation> @@ -6067,6 +6077,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">Автоматското скенирање ви дозволува да се движите автоматски низ ставките на екранот. Кога некоја ставка е нагласена, притиснете „Избери“ за да ја активирате.</translation> <translation id="6795884519221689054">Панда</translation> +<translation id="6796509790850723820">Прикажи</translation> <translation id="6797493596609571643">Упс, нешто не е во ред.</translation> <translation id="6798420440063423019">Безбедносниот клуч е заклучен бидејќи внесовте погрешен PIN премногу пати. Ќе треба да го ресетирате безбедносниот клуч.</translation> <translation id="679845623837196966">Прикажи го списокот за читање</translation> @@ -6610,6 +6621,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> е на цел екран сега.</translation> <translation id="7340650977506865820">Сајтот го споделува вашиот екран</translation> <translation id="7340757554212515731">Автоматски испраќа извештаи за падовите, како и дијагностички податоци и податоци за користењето во Google</translation> +<translation id="734088800888587319">Метрика на мрежата</translation> <translation id="7341834142292923918">Сака пристап до сајтов</translation> <translation id="7343372807593926528">Опишете го проблемот пред да испратите повратни информации.</translation> <translation id="7344585835349671209">Управувајте со сертификатите за HTTPS/SSL на уредот</translation> @@ -7547,6 +7559,7 @@ <translation id="820568752112382238">Најпосетувани веб-сајтови</translation> <translation id="8206745257863499010">Блузист</translation> <translation id="8206859287963243715">Мобилен</translation> +<translation id="8208216423136871611">Не зачувувај</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Ново известување}one{# ново известување}other{# нови известувања}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Преземањето е во тек}one{Преземањата се во тек}other{Преземањата се во тек}}</translation> <translation id="8213449224684199188">Влеговте во режим на фотографија</translation> @@ -8457,6 +8470,7 @@ <translation id="9088917181875854783">Потврдете дали оваа лозинка е прикажана на „<ph name="DEVICE_NAME" />“:</translation> <translation id="9089416786594320554">Влезни методи</translation> <translation id="9090044809052745245">Како вашиот уред се појавува кај другите</translation> +<translation id="9093470422440389061">Метрика за изведбата на Wi-Fi</translation> <translation id="9094033019050270033">Ажурирај ја лозинката</translation> <translation id="9094038138851891550">Погрешно корисничко име</translation> <translation id="9094859731829297286">Дали сигурно сакате да резервирате фиксна големина на дискот за Linux?</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index aea4b64..608d2b25 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -512,6 +512,7 @@ <translation id="1480663089572535854">“തിരഞ്ഞെടുക്കുക” എന്നതിനുള്ള അസൈൻമെന്റ് മാറ്റാൻ നിങ്ങൾക്ക് തിരികെ പോകാം. ക്രമീകരണത്തിൽ എപ്പോൾ വേണമെങ്കിലും സ്വയമേവ-സ്കാൻ ചെയ്യൽ ഓഫാക്കാനുമാകും.</translation> <translation id="1481537595330271162">ഡിസ്ക്കിന്റെ വലുപ്പം മാറ്റുന്നതിൽ പിശക്</translation> <translation id="1482626744466814421">ഈ ടാബ് ബുക്ക്മാർക്ക് ചെയ്യുക...</translation> +<translation id="1482772681918035149">പാസ്വേഡുകൾ എഡിറ്റ് ചെയ്യുക</translation> <translation id="1483493594462132177">അയയ്ക്കുക</translation> <translation id="1484979925941077974">സൈറ്റ് Bluetooth ഉപയോഗിക്കുന്നു</translation> <translation id="1485015260175968628">ഇതിന് ഇപ്പോൾ ആക്സസ്സുചെയ്യാൻ കഴിയുന്നത്:</translation> @@ -526,6 +527,7 @@ <translation id="1500801317528437432">പിന്തുണയ്ക്കാത്ത Chrome ആപ്പുകളെക്കുറിച്ച് കൂടുതലറിയുക</translation> <translation id="150411034776756821"><ph name="SITE" /> നീക്കംചെയ്യുക</translation> <translation id="1504551620756424144">പങ്കിട്ട ഫോൾഡറുകൾ Windows-ലെ <ph name="BASE_DIR" /> എന്നതിൽ ലഭ്യമാണ്.</translation> +<translation id="1505494256539862015">പാസ്വേഡുകൾ എക്സ്പോർട്ട് ചെയ്യുക</translation> <translation id="1506061864768559482">തിരയൽ യന്ത്രം</translation> <translation id="1507170440449692343">നിങ്ങളുടെ ക്യാമറ ആക്സസ്സുചെയ്യുന്നതിൽ നിന്ന് ഈ പേജിനെ തടഞ്ഞു.</translation> <translation id="1507246803636407672">&നിരസിക്കുക</translation> @@ -2960,6 +2962,7 @@ <translation id="3778740492972734840">&ഡെവലപ്പര് ഉപകരണങ്ങള്</translation> <translation id="3778868487658107119">അതിനോട് ചോദ്യങ്ങൾ ചോദിക്കുക. ആവശ്യമുള്ള കാര്യങ്ങൾ ചെയ്യാൻ പറയുക. ഇത് എപ്പോഴും സഹായിക്കാൻ സന്നദ്ധമായ, നിങ്ങളുടെ വ്യക്തിഗത Google ആണ്.</translation> <translation id="3781742599892759500">Linux-നുള്ള മൈക്രോഫോൺ ആക്സസ്</translation> +<translation id="3783889407390048282">Android-ലേക്ക് ആക്സസ് നഷ്ടപ്പെടാതിരിക്കാൻ ഇടം സൃഷ്ടിക്കുക.</translation> <translation id="3784472333786002075">വെബ്സൈറ്റുകൾ സൃഷ്ടിക്കുന്ന ഫയലുകളാണ് കുക്കികൾ. രണ്ട് തരത്തിലുള്ള കുക്കികളുണ്ട്: ആദ്യ കക്ഷി കുക്കികളെ സൃഷ്ടിക്കുന്നത് നിങ്ങൾ സന്ദർശിക്കുന്ന സൈറ്റാണ്. വിലാസ ബാറിൽ സൈറ്റ് കാണാം. മൂന്നാം കക്ഷി കുക്കികളെ സൃഷ്ടിക്കുന്നത് മറ്റ് സൈറ്റുകളാണ്. നിങ്ങൾ സന്ദർശിക്കുന്ന വെബ്സൈറ്റിൽ കാണുന്ന പരസ്യങ്ങളോ ചിത്രങ്ങളോ പോലുള്ള ചില ഉള്ളടക്കം ഈ സൈറ്റുകളുടെ ഉടമസ്ഥതയിലാണ്.</translation> <translation id="3785308913036335955">ആപ്പുകളുടെ കുറുക്കുവഴി കാണിക്കുക</translation> <translation id="3785727820640310185">ഈ സൈറ്റിനായി സംരക്ഷിച്ച പാസ്വേഡുകൾ</translation> @@ -4271,6 +4274,7 @@ <translation id="5066100345385738837">ChromeOS ക്രമീകരണത്തിൽ സുരക്ഷിത DNS മാനേജ് ചെയ്യുക</translation> <translation id="5067399438976153555">എല്ലായ്പ്പോഴും ഓണാക്കുക</translation> <translation id="5067867186035333991"><ph name="HOST" />-ന് നിങ്ങളുടെ മൈക്രോഫോൺ ആക്സസ് ചെയ്യണോ എന്ന് ചോദിക്കുക</translation> +<translation id="5068553687099139861">പാസ്വേഡുകൾ കാണിക്കുക</translation> <translation id="5068918910148307423">അടുത്തിടെ അടച്ച സൈറ്റുകളെ, ഡാറ്റ അയയ്ക്കുന്നതും സ്വീകരിക്കുന്നതും പൂർത്തിയാക്കാൻ അനുവദിക്കരുത്</translation> <translation id="5068919226082848014">പിസ്സ</translation> <translation id="5070710277167211639">നാവിഗേഷനുകൾ HTTPS-ലേക്ക് അപ്ഗ്രേഡ് ചെയ്യുക, അതിനെ പിന്തുണയ്ക്കാത്ത സൈറ്റുകൾ ലോഡ് ചെയ്യുന്നതിന് മുമ്പ് നിങ്ങൾക്ക് മുന്നറിയിപ്പ് ലഭിക്കും</translation> @@ -6424,6 +6428,7 @@ <translation id="7152478047064750137">ഈ വിപുലീകരണത്തിന് പ്രത്യേക അനുമതികളൊന്നും ആവശ്യമില്ല</translation> <translation id="7154130902455071009">നിങ്ങളുടെ ആരംഭ പേജ് ഇതായി മാറ്റുക: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">ക്യാമറയിൽ നിന്നോ ഫയലിൽ നിന്നോ ഉള്ള നിലവിലെ ഫോട്ടോ</translation> +<translation id="7159953856712257647">ഡിഫോൾട്ട് ആയി ഇൻസ്റ്റാൾ ചെയ്തത്</translation> <translation id="7160182524506337403">നിങ്ങളുടെ ഫോണിലെ അറിയിപ്പുകൾ ഇപ്പോൾ കാണാനാകും</translation> <translation id="7163202347044721291">സജീവമാക്കൽ കോഡ് പരിശോധിച്ചുറപ്പിക്കുന്നു...</translation> <translation id="716640248772308851">"<ph name="EXTENSION" />" എന്നതിന് ചെക്ക് ചെയ്ത ലൊക്കേഷനുകളിൽ ചിത്രങ്ങളും വീഡിയോകളും ശബ്ദ ഫയലുകളും റീഡ് ചെയ്യാനാകും.</translation> @@ -7523,6 +7528,7 @@ <translation id="820568752112382238">ഏറ്റവും കൂടുതൽ സന്ദർശിച്ച സൈറ്റുകൾ</translation> <translation id="8206745257863499010">ബ്ലൂസി</translation> <translation id="8206859287963243715">സെല്ലുലാര്</translation> +<translation id="8208216423136871611">സംരക്ഷിക്കരുത്</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{പുതിയ അറിയിപ്പ്}other{# പുതിയ അറിയിപ്പുകൾ}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ഡൗൺലോഡ് പുരോഗമിക്കുന്നു}other{ഡൗൺലോഡുകൾ പുരോഗമിക്കുന്നു}}</translation> <translation id="8213449224684199188">ഫോട്ടോ മോഡിലേക്ക് പ്രവേശിച്ചു</translation> @@ -7635,6 +7641,7 @@ <translation id="8314835274931377415">സ്വിച്ച് ആക്സസ് സജ്ജീകരണം ആരംഭിക്കണോ?</translation> <translation id="8317582043908962055">P&DF ടെക്സ്റ്റ് തിരിച്ചറിയുക</translation> <translation id="8317671367883557781">നെറ്റ്വർക്ക് കണക്ഷൻ ചേർക്കുക</translation> +<translation id="8317965619823678157">പാസ്വേഡുകൾ പകർത്തുക</translation> <translation id="8318266828739827371">നിങ്ങളുടെ സ്ക്രീനിന്റെ മാഗ്നിഫൈ ചെയ്ത ഏരിയ കാണാൻ സ്ക്രീൻ വിഭജന മോഡ് കാഴ്ച ഉപയോഗിക്കുക. ഡോക്ക് ചെയ്ത മാഗ്നിഫയർ ഓണാക്കാനും ഓഫാക്കാനും Search + Ctrl + D ഉപയോഗിക്കുക.</translation> <translation id="8319414634934645341">വിപുലീകരിച്ച കീ ഉപയോഗം</translation> <translation id="8321837372750396788">ഈ <ph name="DEVICE_TYPE" /> മാനേജ് ചെയ്യുന്നത് <ph name="MANAGER" /> ആണ്.</translation> @@ -8561,6 +8568,7 @@ <translation id="929117907539171075">ഇൻസ്റ്റാൾ ചെയ്ത ആപ്പിലുള്ള ഓഫ്ലൈൻ ഡാറ്റയും മായ്ക്കും</translation> <translation id="930268624053534560">മുഴുവൻ വിവരങ്ങളുമടങ്ങിയ ടൈംസ്റ്റാമ്പുകൾ</translation> <translation id="930893132043726269">നിലവിൽ റോമിംഗിലാണ്</translation> +<translation id="93140074055951850">Android ആപ്പുകൾ പ്രവർത്തനം നിർത്തി</translation> <translation id="932327136139879170">ഹോം</translation> <translation id="932508678520956232">അച്ചടിക്കല് ആരംഭിക്കാന് കഴിഞ്ഞില്ല.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{ഈ ഫയൽ സുരക്ഷാപരിശോധനയ്ക്ക് വളരെ വലുതാണ്. 50 MB വരെയുള്ള ഫയലുകൾ നിങ്ങൾക്ക് അപ്ലോഡ് ചെയ്യാം.}other{ഈ ഫയലുകളിൽ ചിലത് സുരക്ഷാപരിശോധനയ്ക്ക് വളരെ വലുതാണ്. 50 MB വരെയുള്ള ഫയലുകൾ നിങ്ങൾക്ക് അപ്ലോഡ് ചെയ്യാം.}}</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 1c5f15d..1550809f 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -950,6 +950,7 @@ <translation id="1864400682872660285">Хүйтэн</translation> <translation id="1864454756846565995">USB-C төхөөрөмж (ард талын порт)</translation> <translation id="1865769994591826607">Зөвхөн ижил сайтын холболтод</translation> +<translation id="186594096341696655">Хурдыг бууруулах</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" нь шалгагдсан байршлуудад зураг, видео, дууны файлуудыг уншиж, бичиж чадна.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> нь таны суулгалтыг бүрэн дуусгахад бэлэн байна.</translation> <translation id="1868553836791672080">Chromium дээр нууц үг шалгах боломжгүй</translation> @@ -1141,6 +1142,7 @@ <translation id="2048554637254265991">Контейнерын менежерийг эхлүүлэхэд алдаа гарлаа. Дахин оролдоно уу.</translation> <translation id="2048653237708779538">Үйлдэл боломжгүй байна</translation> <translation id="2050339315714019657">Хөрөг зураг</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{Таны Google Password Manager (<ph name="USER_EMAIL" />)-т 1 нууц үг импорт хийсэн}other{Таны Google Password Manager (<ph name="USER_EMAIL" />)-т {NUM_PASSWORDS} нууц үг импорт хийсэн}}</translation> <translation id="2052572566310583903">Таны бусад төхөөрөмж дээр суулгасан</translation> <translation id="2053105195397337973">Бид сайтуудад зарын спам болон залиланг зогсоох боломжийг олгохын зэрэгцээ хяналтыг хязгаарлах аргуудыг судалж байна.</translation> <translation id="2053312383184521053">Идэвхгүй хэлбэрийн өгөгдөл</translation> @@ -1914,6 +1916,7 @@ <translation id="2742448780373473567"><ph name="DEVICE_OS" />-г суулгаснаар таны төхөөрөмж дээрх бүх өгөгдлийг дарж бичнэ.</translation> <translation id="274290345632688601">Linux аппууд болон файлуудыг сэргээж байна</translation> <translation id="274318651891194348">Гар хайж байна</translation> +<translation id="2743301740238894839">Эхлүүлэх</translation> <translation id="2743387203779672305">Завсрын түр санах самбар луу хуулах</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> <translation id="2747266560080989517">Энэ файл эмзэг эсвэл аюултай контенттой байна. Өмчлөгчөөс нь үүнийг засахыг хүснэ үү.</translation> @@ -2426,6 +2429,7 @@ <translation id="3255355328033513170"><ph name="SITE_GROUP_NAME" />-н хадгалсан бүх өгөгдөл болон дотор нь байгаа бүх сайтыг устгана. Үүнд күүки багтана. Та эдгээр сайтаас гарах бөгөөд үүнд нээлттэй табын сайтууд мөн багтана.</translation> <translation id="3257733480216378006"><ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" />-г зөвшөөрөх үү?</translation> <translation id="3259723213051400722">Дахин оролдоно уу.</translation> +<translation id="3261090393424563833">Хурдыг нэмэгдүүлэх</translation> <translation id="3261268979727295785">Тохируулгыг дуусгасны дараа та том хүүхдэд зориулж эцэг эхийн хяналт нэмж болно. Судлах апп дээрээс та эцэг эхийн хяналттай холбоотой мэдээллийг олж авах боломжтой.</translation> <translation id="3262986719682892278">Хэт том байна</translation> <translation id="3264544094376351444">Sans-serif фонт</translation> @@ -2935,6 +2939,7 @@ <translation id="3747077776423672805">Аппуудыг устгахын тулд Тохиргоо > Google Play Дэлгүүр > Android-н сонголтыг удирдах > Апп эсвэл Аппын менежер хэсэгт очно уу. Дараа нь устгахыг хүссэн аппаа товшино уу (та аппыг олохын тулд баруун эсвэл зүүн тийш шудрах шаардлагатай байж болзошгүй). Дараа нь Устгах эсвэл Идэвхгүй болгох гэснийг товшино уу.</translation> <translation id="3747603683749989726">Сайжруулсан хамгаалалтыг асаах уу?</translation> <translation id="3748706263662799310">Алдааг мэдээлэх</translation> +<translation id="3750304496241836236">Өөрийн Google Password Manager-т нууц үг импорт хийхийн тулд CSV файл сонгоно уу</translation> <translation id="3750562496035670393">Chrome таны нууц үгийг энэ төхөөрөмжид хадгалсан хэдий ч та үүнийг оронд нь Google Бүртгэлдээ хадгалах боломжтой. Дараа нь таны Google Бүртгэл дэх бүх нууц үг таныг нэвтэрсэн үед мөн боломжтой байх болно.</translation> <translation id="3752253558646317685">Хурууны хээг хадгалахын тулд хүүхдийнхээ хурууг хөндийрүүлсэн хэвээр байлгана уу</translation> <translation id="3753033997400164841">Нэг удаа хадгалаад. Хүссэн газраа ашиглаарай</translation> @@ -4106,6 +4111,7 @@ <translation id="4871370605780490696">Хадгалагдсан холбоос нэмэх</translation> <translation id="4871568871368204250">Синкийг унтраах</translation> <translation id="4871719318659334896">Бүлгийг хаах</translation> +<translation id="4872192066608821120">Нууц үгнүүдийг импорт хийхийн тулд CSV файл сонгоно уу</translation> <translation id="4873312501243535625">Медиа файл шалгагч</translation> <translation id="4876273079589074638">Манай инженерүүдэд гэмтлийн асуудлын тодруулж, засахад нь тусална уу. Боломжтой бол дэлгэрэнгүй тайлбарлана уу. Бидэнд бүх нарийвчилсан мэдээлэл хэрэг болно.</translation> <translation id="4876895919560854374">Дэлгэцийг түгжих, түгжээг гаргах</translation> @@ -5450,6 +5456,7 @@ <translation id="6206199626856438589">Таныг үзүүлсэн сайтуудаас гаргах бөгөөд үүнд нээлттэй табуудынх багтана</translation> <translation id="6206311232642889873">Зургийг хуулах</translation> <translation id="6207200176136643843">Томруулах өгөгдмөл түвшинд тохируулах</translation> +<translation id="6207806976844244951">Google Password Manager (<ph name="EMAIL" />)-т хадгалах</translation> <translation id="6207937957461833379">Улс / бүс</translation> <translation id="6208382900683142153">Итгэмжлэгдсэн токен нь веб дээрх нууцлалыг сайжруулах бөгөөд үүнийг таныг хэн болохыг олж мэдэхэд ашиглах боломжгүй.</translation> <translation id="6208521041562685716">Мобайл датаг идэвхжүүлж байна</translation> @@ -5689,6 +5696,7 @@ <translation id="6436610005579237680">Өөрт илүү тохирсон хариу авахын тулд асуулт асуух үедээ Google Туслахад таны дэлгэц дээрх зүйлийн дэлгэцийн агшинд хандахыг зөвшөөрнө үү. Таны Туслах мөн тоглуулж буй дуу эсвэл видеоны талаарх мэдээллийг ашиглаж магадгүй.</translation> <translation id="6436778875248895551"><ph name="EXTENSION_NAME" />" өргөтгөлийг танай администратор блоклосон байна</translation> <translation id="6438234780621650381">Тохиргоог дахин тохируулах</translation> +<translation id="6438475350605608554">Та нууц үгнүүдийг өөр табд аль хэдийн импорт хийж байна</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - Аудио тоглуулж байна</translation> <translation id="6442187272350399447">Гайхалтай</translation> <translation id="6442445294758185945">Шинэчлэлтийг татаж чадсангүй. Дараа дахин оролдоно уу.</translation> @@ -5699,6 +5707,7 @@ <translation id="6446213738085045933">Дэлгэц дээрх холбоос үүсгэх</translation> <translation id="6447842834002726250">Cookies</translation> <translation id="6450876761651513209">Нууцлалтай холбоотой тохиргоог өөрчлөх</translation> +<translation id="645119363824354176">Энэ төхөөрөмжид нууц үг импорт хийхийн тулд CSV файл сонгоно уу</translation> <translation id="6451344358166983408">Сайт эсвэл хуудас</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> болон бусад 1 таб}other{<ph name="PAGE_TITLE" /> болон бусад # таб}}</translation> <translation id="6451689256222386810">Хэрэв та нэвтрэх үгээ мартсан, эсвэл энэ тохиргоог өөрчлөх бол <ph name="BEGIN_LINK" />синкийг дахин тохируулна уу<ph name="END_LINK" />.</translation> @@ -5962,6 +5971,7 @@ <translation id="6691936601825168937">Forward</translation> <translation id="6693745645188488741">{COUNT,plural, =1{1 хуудас}other{{COUNT} хуудас}}</translation> <translation id="6694430008315398925">Steam-г тохируулж байна</translation> +<translation id="6697172646384837537">Нууц үгнүүдээ хаана импорт хийхээ сонгоно уу</translation> <translation id="6697492270171225480">Хуудас олдоогүй үед төстэй хуудсын зөвлөмжийг харуулах</translation> <translation id="6697690052557311665">Хуваалцахын тулд Файлс аппын фолдерын баруун талыг товшоод, дараа нь "Linux-тэй хуваалцах" гэснийг сонгоно уу.</translation> <translation id="6698810901424468597"><ph name="WEBSITE_1" /> болон <ph name="WEBSITE_2" /> дахь мэдээллээ уших, өөрчлөх</translation> @@ -6059,6 +6069,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">Автоматаар скан хийх онцлог нь танд дэлгэц дээрх зүйлс хооронд автоматаар шилжих боломжийг олгоно. Зүйлийг тодруулсан үед нь идэвхжүүлэхийн тулд “Сонгох” дээр дарна уу.</translation> <translation id="6795884519221689054">Хулсны баавгай</translation> +<translation id="6796509790850723820">Рэндэрлэх</translation> <translation id="6797493596609571643">Өө, ямар нэг зүйл ажиллахаа больсон байна.</translation> <translation id="6798420440063423019">ПИН-г хэт олон удаа буруу оруулсан тул аюулгүй байдлын түлхүүрийг түгжсэн байна. Та аюулгүй байдлын түлхүүрийг шинэчлэх шаардлагатай.</translation> <translation id="679845623837196966">Унших жагсаалтыг харуулах</translation> @@ -6602,6 +6613,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> нь одоо дэлгэц дүүрэн харагдаж байна.</translation> <translation id="7340650977506865820">Сайт таны дэлгэцийг хуваалцаж байна</translation> <translation id="7340757554212515731">Гэмтлийн тайлан болон оношилгоо, ашиглалтын өгөгдлийг Google-д автоматаар илгээнэ</translation> +<translation id="734088800888587319">Сүлжээний хэмжигдэхүүн</translation> <translation id="7341834142292923918">Энэ сайтад хандахыг хүсэж байна</translation> <translation id="7343372807593926528">Санал хүсэлтийг илгээхийн өмнө асуудлыг тайлбарлана уу.</translation> <translation id="7344585835349671209">Өөрийн төхөөрөмж дээрх HTTPS/SSL сертификатуудыг удирдаарай</translation> @@ -7537,6 +7549,7 @@ <translation id="820568752112382238">Хамгийн их зочилсон сайт</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">Үүрэн холбоо</translation> +<translation id="8208216423136871611">Бүү хадгал</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Шинэ мэдэгдэл}other{# шинэ мэдэгдэл}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Татаж байна}other{Татаж байна}}</translation> <translation id="8213449224684199188">Зургийн горимыг оруулсан</translation> @@ -8441,6 +8454,7 @@ <translation id="9088917181875854783">Энэхүү түлхүүр үг нь <ph name="DEVICE_NAME" /> дээр харагдаж байгаа гэдгийг баталгаажуулна уу:</translation> <translation id="9089416786594320554">Оролтын аргууд</translation> <translation id="9090044809052745245">Таны төхөөрөмж бусдад хэрхэн харагддаг вэ?</translation> +<translation id="9093470422440389061">WiFi-н гүйцэтгэлийн хэмжигдэхүүн</translation> <translation id="9094033019050270033">Нууц үг шинэчлэх</translation> <translation id="9094038138851891550">Хэрэглэгчийн нэр буруу</translation> <translation id="9094859731829297286">Та Linux-т тогтсон хэмжээтэй дискийг хадгалахдаа итгэлтэй байна уу?</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index c5b0329..f32a3a6 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -7535,6 +7535,7 @@ <translation id="820568752112382238">सर्वाधिक भेट दिलेल्या साइट</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">सेल्यूलर</translation> +<translation id="8208216423136871611">सेव्ह करू नका</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{नवीन सूचना}other{# नवीन सूचना}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{डाउनलोड सुरू आहे}other{डाउनलोड सुरू आहेत}}</translation> <translation id="8213449224684199188">फोटो मोड टाकला</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 5fef12f..63170c88b 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">Hab Privasi</translation> <translation id="117445914942805388">Untuk mengosongkan data semakan imbas daripada semua peranti tersegerak dan Akaun Google anda, <ph name="BEGIN_LINK" />lawati tetapan penyegerakan<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Cetak...</translation> +<translation id="1176378369905028399">Kata laluan untuk akaun ini telah pun disimpan pada Google Password Manager anda (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">Tidak dibenarkan untuk mengedit fail atau folder pada peranti anda</translation> <translation id="1177863135347784049">Tersuai</translation> <translation id="1178581264944972037">Jeda</translation> @@ -602,6 +603,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Tetamu)</translation> <translation id="1572266655485775982">Wi-Fi didayakan</translation> <translation id="1572876035008611720">Masukkan e-mel anda</translation> +<translation id="1573117025466282241">Gunakan telefon dengan kod QR</translation> <translation id="1575741822946219011">Bahasa dan masukan</translation> <translation id="1576594961618857597">Avatar putih lalai</translation> <translation id="1578558981922970608">Tutup paksa</translation> @@ -807,6 +809,7 @@ <translation id="1745732479023874451">Urus kenalan</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{Buka dan edit # fail dalam apl web ini?}}</translation> <translation id="1748563609363301860">Anda boleh menyimpan kata laluan ini dalam Akaun Google anda atau pada peranti ini sahaja</translation> +<translation id="1749733017156547309">Kata laluan diperlukan</translation> <translation id="1750172676754093297">Kekunci keselamatan anda tidak boleh menyimpan cap jari</translation> <translation id="1751249301761991853">Peribadi</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> akan dapat mengedit fail dalam <ph name="FOLDERNAME" /> sehinggalah anda menutup semua tab bagi tapak ini</translation> @@ -1804,6 +1807,7 @@ <translation id="2645047101481282803">Peranti anda diurus oleh <ph name="PROFILE_NAME" /></translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 kata laluan diimport ke peranti ini}other{{NUM_PASSWORDS} kata laluan diimport ke peranti ini}}</translation> <translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645515095874728277">Kata laluan untuk akaun ini telah pun disimpan pada peranti ini</translation> <translation id="2649045351178520408">Base64 terkod ASCII, rangkaian sijil</translation> <translation id="2652129567809778422">Pilih kata laluan</translation> <translation id="2653033005692233957">Carian gagal</translation> @@ -2164,6 +2168,7 @@ <translation id="2972581237482394796">&Buat Semula</translation> <translation id="2973324205039581528">Redam Laman</translation> <translation id="2973537811036309675">Panel Sisi</translation> +<translation id="2975761176769946178">URL diperlukan</translation> <translation id="2976557544729462544">Sesetengah peranti menghendaki perlindungan akses data dilumpuhkan agar dapat berfungsi dengan baik atau memberikan prestasi maksimum.</translation> <translation id="2977480621796371840">Alih keluar daripada kumpulan</translation> <translation id="2979639724566107830">Buka dalam tetingkap baharu</translation> @@ -2405,6 +2410,7 @@ <translation id="3227137524299004712">Mikrofon</translation> <translation id="3232754137068452469">Apl Web</translation> <translation id="3233271424239923319">Sandarkan apl dan fail Linux</translation> +<translation id="3234251228180563751">Nama pengguna melebihi 1000 aksara</translation> <translation id="3234978181857588512">Simpan pada peranti</translation> <translation id="3238192140106069382">Menyambung dan mengesahkan</translation> <translation id="3239373508713281971">Had masa dialih keluar untuk <ph name="APP_NAME" /></translation> @@ -5225,6 +5231,7 @@ <translation id="5975792506968920132">Peratusan Cas Bateri</translation> <translation id="5976160379964388480">Lain-lain</translation> <translation id="5978277834170881274">&Gunakan semak ejaan asas</translation> +<translation id="5978493744931296692">Pentadbir anda telah melumpuhkan profil lain</translation> <translation id="5979084224081478209">Semak kata laluan</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Anda telah menghidupkan semula 1 sambungan yang mungkin berbahaya}other{Anda telah menghidupkan semula {NUM_EXTENSIONS} sambungan yang mungkin berbahaya}}</translation> <translation id="5979353814339191480">Pilihan ini digunakan untuk Chromebook yang mempunyai pelan data atau anak kunci rangkaian mudah alih, atau apabila ditambatkan kepada tempat liputan mudah alih</translation> @@ -7538,6 +7545,7 @@ <translation id="820568752112382238">Tapak yang paling kerap dilawati</translation> <translation id="8206745257863499010">Sayu</translation> <translation id="8206859287963243715">Selular</translation> +<translation id="8208216423136871611">Jangan simpan</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Pemberitahuan baharu}other{# pemberitahuan baharu}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Muat turun sedang berlangsung}other{Muat turun sedang berlangsung}}</translation> <translation id="8213449224684199188">Mod foto dimasukkan</translation> @@ -8021,6 +8029,7 @@ <translation id="8683081248374354009">Tetapkan semula kumpulan</translation> <translation id="8688672835843460752">Tersedia</translation> <translation id="8690129572193755009">Laman boleh meminta untuk mengendalikan protokol</translation> +<translation id="8692107307702113268">Kata laluan melebihi 1000 aksara</translation> <translation id="8695139659682234808">Tambah kawalan ibu bapa selepas persediaan</translation> <translation id="8695825812785969222">Buka &Lokasi...</translation> <translation id="8698269656364382265">Untuk kembali ke skrin sebelumnya, leret dari sebelah kiri.</translation> @@ -8301,6 +8310,7 @@ <translation id="8960638196855923532">Kini anda dapat melihat pemberitahuan dan apl telefon anda</translation> <translation id="8962051932294470566">Anda hanya boleh berkongsi satu fail pada satu-satu masa. Cuba lagi apabila pemindahan semasa sudah selesai nanti.</translation> <translation id="8962083179518285172">Sembunyikan Butiran</translation> +<translation id="8962863356073277855">Format URL hendaklah https://www.example.com</translation> <translation id="8962918469425892674">Tapak ini menggunakan penderia gerakan atau cahaya.</translation> <translation id="8965037249707889821">Masukkan kata laluan lama</translation> <translation id="89667524227025535">Imbas Kod QR menggunakan kamera peranti atau masukkan kod pengaktifan yang disediakan oleh pembawa anda</translation> @@ -8571,6 +8581,7 @@ <translation id="9220525904950070496">Alih keluar akaun</translation> <translation id="9220820413868316583">Angkat kemudian cuba lagi.</translation> <translation id="922152298093051471">Sesuaikan Chrome</translation> +<translation id="9222839025964079645">Kata laluan tidak diimport (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Tunjukkan Semua</translation> <translation id="924818813611903184">Urus bahasa dalam tetapan Chrome OS</translation> <translation id="929117907539171075">Data luar talian dalam apl yang dipasang juga akan dipadamkan</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index 96e1f486..0120f6f 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">ကိုယ်ရေးအချက်အလက်လုံခြုံမှု မဏ္ဍိုင်</translation> <translation id="117445914942805388">ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာများကို သင်စင့်ခ်လုပ်ထားသော စက်အားလုံးနှင့် သင့် Google အကောင့်မှ ရှင်းထုတ်ရန် <ph name="BEGIN_LINK" />စင့်ခ်ဆက်တင်များတွင် ဝင်ကြည့်ပါ<ph name="END_LINK" />။</translation> <translation id="1175364870820465910">&ပရင့်ထုတ်ရန်...</translation> +<translation id="1176378369905028399">ဤအကောင့်အတွက် စကားဝှက်ကို သင်၏ ‘Google စကားဝှက်မန်နေဂျာ’ (<ph name="USER_EMAIL" />) တွင် သိမ်းထားပြီးပြီ</translation> <translation id="1176471985365269981">သင့်စက်ပေါ်ရှိ ဖိုင် (သို့) ဖိုင်တွဲများကို တည်းဖြတ်ရန် ခွင့်ပြုမထားပါ</translation> <translation id="1177863135347784049">စိတ်ကြိုက်</translation> <translation id="1178581264944972037">ဆိုင်းငံ့ထားရန်</translation> @@ -807,6 +808,7 @@ <translation id="1745732479023874451">အဆက်အသွယ်များ စီမံခန့်ခွဲရန်</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{ဤဝဘ်အက်ပ်တွင် ဖိုင် # ဖိုင်ကို ဖွင့်ပြီးတည်းဖြတ်မလား။}}</translation> <translation id="1748563609363301860">ဤစကားဝှက်ကို သင့် Google Account တွင် သို့မဟုတ် ဤစက်တွင်သာ သိမ်းပါ</translation> +<translation id="1749733017156547309">စကားဝှက်လိုအပ်သည်</translation> <translation id="1750172676754093297">သင့်လုံခြုံရေးကီးတွင် လက်ဗွေရာများ သိမ်း၍မရပါ</translation> <translation id="1751249301761991853">ကိုယ်ပိုင်</translation> <translation id="1751262127955453661">ဤဝဘ်ဆိုက်အတွက် တဘ်များအားလုံးကို မပိတ်မချင်း <ph name="ORIGIN" /> သည် <ph name="FOLDERNAME" /> ရှိ ဖိုင်များကို တည်းဖြတ်နိုင်ပါမည်</translation> @@ -1757,6 +1759,7 @@ <translation id="2602501489742255173">စတင်ရန် အပေါ်သို့ ပွတ်ဆွဲပါ</translation> <translation id="2603115962224169880">ကွန်ပျူတာကို ရှင်းလင်းခြင်း</translation> <translation id="2603355571917519942">Voice Match အသင့်ဖြစ်ပြီ</translation> +<translation id="2604129989323098489">မှတ်တမ်းများ (သို့) ဖန်သားပြင်အပြည့် အကြောင်းအရာများကို ဘေးတိုက် ယှဉ်ပြခြင်းကဲ့သို့ ဝင်းဒိုးများဖွင့်ပြီး မှန်ကန်စွာ နေရာချနိုင်ရန် သင့်ဖန်သားပြင်ဆိုင်ရာ အချက်အလက်များကို ဝဘ်ဆိုက်များက ပုံမှန်အားဖြင့် တောင်းဆိုတတ်သည်</translation> <translation id="2604255671529671813">ကွန်ရက် ချိတ်ဆက်မှု အမှား</translation> <translation id="2605668923777146443">Better Together အတွက် သင့်ရွေးချယ်စရာများ ကြည့်ရန် <ph name="LINK_BEGIN" />ဆက်တင်များ<ph name="LINK_END" /> သို့ သွားပါ။</translation> <translation id="2606246518223360146">ဒေတာများကို လင့်ခ်ချိတ်ရန်</translation> @@ -1802,6 +1805,7 @@ <translation id="2645047101481282803">သင့်စက်ပစ္စည်းကို <ph name="PROFILE_NAME" /> က စီမံခန့်ခွဲသည်</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{ဤစက်သို့ စကားဝှက် ၁ ခု ထည့်သွင်းလိုက်သည်}other{ဤစက်သို့ စကားဝှက် {NUM_PASSWORDS} ခု ထည့်သွင်းလိုက်သည်}}</translation> <translation id="2645435784669275700">ChromeOS</translation> +<translation id="2645515095874728277">ဤအကောင့်အတွက် စကားဝှက်ကို ယခုစက်တွင် သိမ်းထားပြီးပြီ</translation> <translation id="2649045351178520408">Base64-ကုဒ်သွင်းထား ASCII၊ လက်မှတ် ကွင်းဆက်</translation> <translation id="2652129567809778422">စကားဝှက်ရွေးခြင်း</translation> <translation id="2653033005692233957">ရှာဖွေ၍မရပါ</translation> @@ -2162,6 +2166,7 @@ <translation id="2972581237482394796">&ပြန်လုပ်ရန်</translation> <translation id="2973324205039581528">ဝဘ်ဆိုက် အသံပိတ်ရန်</translation> <translation id="2973537811036309675">ဘေးအကန့်</translation> +<translation id="2975761176769946178">URL လိုအပ်သည်</translation> <translation id="2976557544729462544">စက်အချို့ မှန်ကန်စွာအလုပ်လုပ်ရန် (သို့) စွမ်းဆောင်ရည်အပြည့် အလုပ်လုပ်ရန်အတွက် ဒေတာသုံးခွင့်အကာအကွယ်ကို ပိတ်ရန် လိုအပ်သည်။</translation> <translation id="2977480621796371840">အဖွဲ့မှ ဖယ်ရှားပါ</translation> <translation id="2979639724566107830">ဝင်းဒိုးအသစ်တွင် ဖွင့်ပါ</translation> @@ -2403,6 +2408,7 @@ <translation id="3227137524299004712">မိုက်ခရိုဖုန်း</translation> <translation id="3232754137068452469">ဝဘ် အက်ပ်</translation> <translation id="3233271424239923319">Linux အက်ပ်နှင့် ဖိုင်များ အရန်သိမ်းသည်</translation> +<translation id="3234251228180563751">အသုံးပြုသူအမည်က စာလုံးရေ ၁၀၀၀ ထက်များနေသည်</translation> <translation id="3234978181857588512">စက်တွင်သိမ်းရန်</translation> <translation id="3238192140106069382">ချိတ်ဆက်ပြီး စိစစ်နေသည်</translation> <translation id="3239373508713281971"><ph name="APP_NAME" /> အတွက် အချိန်ကန့်သတ်ချက် ဖယ်ရှားလိုက်သည်</translation> @@ -5221,6 +5227,7 @@ <translation id="5975792506968920132">ဘက်ထရီ အားသွင်းမှု ရာခိုင်နှုန်း</translation> <translation id="5976160379964388480">အခြားများ</translation> <translation id="5978277834170881274">&အခြေခံ စာလုံးပေါင်းစစ်ဆေးခြင်းကို အသုံးပြုရန်</translation> +<translation id="5978493744931296692">သင်၏စီမံခန့်ခွဲသူက အခြားပရိုဖိုင်များကို ပိတ်ထားသည်</translation> <translation id="5979084224081478209">စကားဝှက်များ စစ်ဆေးရန်</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{သင်သည် အန္တရာယ်ရှိနိုင်သော နောက်ဆက်တွဲ ၁ ခုကို ပြန်ဖွင့်လိုက်သည်}other{သင်သည် အန္တရာယ်ရှိနိုင်သော နောက်ဆက်တွဲ {NUM_EXTENSIONS} ခုကို ပြန်ဖွင့်လိုက်သည်}}</translation> <translation id="5979353814339191480">ဒေတာအစီအစဉ် (သို့) မိုဘိုင်းကွန်ရက် ဒွန်ဂယ်ပါသော Chromebook များ (သို့) ခရီးဆောင်ဟော့စပေါ့နှင့် မိုဘိုင်းဖုန်းသုံး ချိတ်ဆက်မျှဝေသည့်အခါ ဤရွေးချယ်မှု သက်ရောက်ပါသည်</translation> @@ -5385,6 +5392,7 @@ <translation id="6130692320435119637">Wi-Fi ထည့်ရန်</translation> <translation id="6130887916931372608">ကီးဘုတ်ခလုတ်</translation> <translation id="6135823405800500595">သင့်ဖုန်းသည် အနီးတွင်ရှိပြီး လော့ခ်ဖွင့်ထားကာ ဘလူးတုသ်နှင့် Wi-Fi ဖွင့်ထားကြောင်း သေချာပါစေ</translation> +<translation id="6135826623269483856">သင့်ဖန်သားပြင်အားလုံးတွင် ဝင်းဒိုးများစီမံခြင်းကို ခွင့်ပြုမထားသည်များ</translation> <translation id="6136114942382973861">ဒေါင်းလုဒ်ဘား ပိတ်ရန်</translation> <translation id="6136287496450963112">သင့်လုံခြုံရေးကီးကို ပင်နံပါတ်ဖြင့် ကာကွယ်မထားပါ။ လက်ဗွေများစီမံရန် ပင်နံပါတ်တစ်ခု ဦးစွာသတ်မှတ်ပါ။</translation> <translation id="6138680304137685902">SHA-384 ဖြင့် X9.62 ECDSA လက်မှတ်</translation> @@ -7391,6 +7399,7 @@ <ph name="BEGIN_PARAGRAPH3" />၎င်းကို 'ဆက်တင်များ' တွင် ပိတ်နိုင်သည်။<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">တဘ်များ</translation> <translation id="8076835018653442223">သင်၏စီမံအုပ်ချုပ်သူက သင့်စက်အတွင်းရှိဖိုင်များ သုံးခွင့်ကို ပိတ်ထားသည်</translation> +<translation id="80798452873915119">သင့်ဖန်သားပြင်အားလုံးတွင် ဝင်းဒိုးများစီမံရန်အတွက် ဝဘ်ဆိုက်များကို တောင်းဆိုခွင့်ပြုရန်</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">သင့်စက်ရှင်ကို <ph name="MANAGER_NAME" /> က စီမံသည်။ စီမံခန့်ခွဲသူများက သင့်ပရိုဖိုင်ကို ဖျက်နိုင်သကဲ့သို့ သင့်ကွန်ရက်ဒေတာ စီးဆင်းမှုကိုလည်း စောင့်ကြည့်နိုင်သည်။</translation> <translation id="8081989000209387414">ADB အမှားရှာပြင်ခြင်းကို ပိတ်လိုပါသလား။</translation> @@ -7530,6 +7539,7 @@ <translation id="820568752112382238">အများဆုံး ဝင်ကြည့်ထားသော ဝဘ်ဆိုက်များ</translation> <translation id="8206745257863499010">အပြာရောင်ဂီတသင်္ကေတ</translation> <translation id="8206859287963243715">ဆဲလ်လူလာ</translation> +<translation id="8208216423136871611">မသိမ်းဆည်းပါနှင့်</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{အကြောင်းကြားချက်အသစ်}other{အကြောင်းကြားချက်အသစ် # ခု}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ဒေါင်းလုဒ် လုပ်နေဆဲဖြစ်သည်}other{ဒေါင်းလုဒ်များ လုပ်နေဆဲဖြစ်သည်}}</translation> <translation id="8213449224684199188">ဓာတ်ပုံမုဒ်သို့ ပြောင်းလိုက်ပါပြီ</translation> @@ -7696,6 +7706,7 @@ <translation id="8371695176452482769">ယခုပြောပါ</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{ဝဘ်ဆိုက် ဖျောက်ထားရန်}other{ဝဘ်ဆိုက်များ ဖျောက်ထားရန်}}</translation> <translation id="8373652277231415614">Crostini မျှဝေထားသော ဖိုင်လမ်းညွှန်များ</translation> +<translation id="8374243500935816406">သင့်ဖန်သားပြင်အားလုံးတွင် ဝင်းဒိုးများစီမံရန်အတွက် ဝဘ်ဆိုက်များကို ခွင့်မပြုရန်</translation> <translation id="8376137163494131156">Google Cast တွင် ဘာဖြစ်နေသည်ကို ပြောပြပါ။</translation> <translation id="8376384591331888629">ဤဝဘ်ဆိုက်ရှိ ပြင်ပကုမ္ပဏီကွတ်ကီးများ အပါအဝင်</translation> <translation id="8376451933628734023">ဤဝဘ်အက်ပ်သည် အခြားအက်ပ်တစ်ခုဖြစ်ကြောင်း တွေးထင်စေရန် သင့်အားလှည့်စားနေပါက ၎င်းကို ဖယ်ရှားပါ။</translation> @@ -7990,6 +8001,7 @@ <translation id="8670537393737592796">ဤနေရာသို့ အမြန်ပြန်လာရန်အတွက် ထည့်သွင်းရန်ခလုတ်ကို နှိပ်ပြီး <ph name="APP_NAME" /> ကို ထည့်သွင်းပါ</translation> <translation id="867085395664725367">ဆာဗာ ယာယီအမှားအယွင်းရှိနေသည်။</translation> <translation id="8673026256276578048">ဝဘ်မှာ ရှာရန်...</translation> +<translation id="867329473311423817">သင့်ဖန်သားပြင်အားလုံးတွင် ဝင်းဒိုးများစီမံရန်အတွက် ခွင့်ပြုထားသည်များ</translation> <translation id="8673383193459449849">ဆာဗာပြဿနာ</translation> <translation id="8674903726754070732">သင့်ကွန်ပျူတာကို ပျက်ယွင်းနေသည့် ကွန်ပျူတာဆိုင်ရာ စက်ပစ္စည်း ID ဖြင့် စီစဉ်သတ်မှတ်ထားပါသည်။ ၎င်းက ChromeOS အား နောက်ဆုံးထုတ် လုံခြုံရေးပြင်ဆင်မှုများ အပ်ဒိတ်လုပ်ခြင်းမှ ဟန့်တားလျက်ရှိပြီး သင့်ကွန်ပျူတာသည် <ph name="BEGIN_BOLD" />အန္တရာယ်ရှိသောတိုက်ခိုက်မှုများကို ခုခံနိုင်မည်မဟုတ်ပါ<ph name="END_BOLD" />။</translation> <translation id="8675704450909805533">ထည့်သွင်းသည့်ပရိုဂရမ်က <ph name="DEVICE_OS" /> ထည့်သွင်းရန် မှန်ကန်သည့်နေရာကို ရှာမတွေ့ပါ။</translation> @@ -8010,6 +8022,7 @@ <translation id="8683081248374354009">အဖွဲ့ကို ပြင်ဆင်သတ်မှတ်ရန်</translation> <translation id="8688672835843460752">ရနိုင်သည်</translation> <translation id="8690129572193755009">ပရိုတိုကောများ စီမံရန် ဝဘ်ဆိုက်များက ခွင့်တောင်းနိုင်သည်</translation> +<translation id="8692107307702113268">စကားဝှက်က စာလုံးရေ ၁၀၀၀ ထက်များနေသည်</translation> <translation id="8695139659682234808">စနစ်ထည့်သွင်းပြီးပါက မိဘအထိန်းအချုပ်များထည့်ရန်</translation> <translation id="8695825812785969222">တည်နေရာ &ဖွင့်ရန်...</translation> <translation id="8698269656364382265">ယခင်ဖန်သားပြင်သို့ ပြန်သွားရန် ဘယ်ဘက်မှ ပွတ်ဆွဲပါ။</translation> @@ -8290,6 +8303,7 @@ <translation id="8960638196855923532">သင့်ဖုန်း၏ အကြောင်းကြားချက်နှင့် အက်ပ်များကို ယခု ကြည့်နိုင်ပြီ</translation> <translation id="8962051932294470566">တစ်ကြိမ်တွင် ဖိုင်တစ်ခုသာ မျှဝေနိုင်သည်။ လက်ရှိပြောင်းရွှေ့မှု ပြီးသည့်အခါ ထပ်စမ်းကြည့်ပါ။</translation> <translation id="8962083179518285172">အသေးစိတ်များ ဝှက်ထားရန်</translation> +<translation id="8962863356073277855">URL ဖော်မက်သည် https://www.example.com ဖြစ်ရမည်</translation> <translation id="8962918469425892674">ဤဝဘ်ဆိုက်သည် လှုပ်ရှားမှု သို့မဟုတ် အလင်းရောင် အာရုံခံကိရိယာကို အသုံးပြုနေသည်။</translation> <translation id="8965037249707889821">လျှို့ဝှက်စကားလုံး ရိုက်ထည့်ရန်</translation> <translation id="89667524227025535">စက်ကင်မရာသုံး၍ QR ကုဒ်ကို စကင်ဖတ်ပါ (သို့) သင်၏မိုဘိုင်းဖုန်းကုမ္ပဏီက ပို့ထားသည့် စသုံးရန်ကုဒ်ကို ထည့်ပါ</translation> @@ -8560,6 +8574,7 @@ <translation id="9220525904950070496">အကောင့်ကို ဖယ်ရှားရန်</translation> <translation id="9220820413868316583">မ လိုက်ပြီး ထပ်လုပ်ကြည့်ပါ။</translation> <translation id="922152298093051471">Chrome ကို စိတ်ကြိုက်ပြင်ရန်</translation> +<translation id="9222839025964079645">စကားဝှက်များ ထည့်သွင်းမထားပါ (<ph name="COUNT" />)</translation> <translation id="923467487918828349">အားလုံးပြ</translation> <translation id="924818813611903184">ChromeOS ဆက်တင်များတွင် ဘာသာစကားများကို စီမံရန်</translation> <translation id="929117907539171075">ထည့်သွင်းထားသည့် အက်ပ်အတွင်းရှိ အော့ဖ်လိုင်းဒေဝာများကိုလည်း ရှင်းလင်းလိုက်ပါမည်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 7130a13..356ded4 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -509,6 +509,7 @@ <translation id="1480663089572535854">तपाईं पछाडि फर्केर “चयन” गर्ने कार्यका निम्ति असाइन गरिएको स्विच बदल्न सक्नुहुन्छ। तपाईं जुनसुकै बेला सेटिङमा गई अटो-स्क्यान गर्ने सुविधा अफ गर्न सक्नुहुन्छ।</translation> <translation id="1481537595330271162">डिस्कको आकार बदल्ने क्रममा त्रुटि भयो</translation> <translation id="1482626744466814421">यस ट्याबमा पुस्तक चिन्ह लगाउनुहोस्...</translation> +<translation id="1482772681918035149">पासवर्डहरू बदल्नुहोस्</translation> <translation id="1483493594462132177">पठाउनुहोस्</translation> <translation id="1484979925941077974">साइटले ब्लुटुथ प्रयोग गर्दै छ</translation> <translation id="1485015260175968628">यसले अब गर्न सक्छ:</translation> @@ -523,6 +524,7 @@ <translation id="1500801317528437432">Chrome का चलाउन नमिल्ने एपहरूका बारेमा थप जान्नुहोस्</translation> <translation id="150411034776756821"><ph name="SITE" /> हटाउनुहोस्</translation> <translation id="1504551620756424144">साझा फोल्डरहरू Windows को <ph name="BASE_DIR" /> मा उपलब्ध हुन्छन्।</translation> +<translation id="1505494256539862015">पासवर्डहरू एक्स्पोर्ट गर्नुहोस्</translation> <translation id="1506061864768559482">सर्च इन्जिन</translation> <translation id="1507170440449692343">यो पृष्ठलाई तपाईंको क्यामेरा पहुँच गर्नबाट ब्लक गरिएको छ।</translation> <translation id="1507246803636407672">&नकार्नुहोस्</translation> @@ -2959,6 +2961,7 @@ <translation id="3778740492972734840">&विकासकर्ता उपकरणहरू</translation> <translation id="3778868487658107119">यसलाई प्रश्नहरू सोध्नुहोस्। यसलाई कार्यहरू गर्न अह्राउनुहोस्। यो मद्दतका लागि सधैँ तत्पर तपाईंको व्यक्तिगत Google हो।</translation> <translation id="3781742599892759500">Linux लाई माइक्रोफोन प्रयोग गर्न दिने सेटिङ</translation> +<translation id="3783889407390048282">तपाईं Android चलाउने अनुमति गुमाउन चाहनुहुन्न भने भण्डारणमा ठाउँ खाली गर्नुहोस्।</translation> <translation id="3784472333786002075">कुकीहरू भनेका वेबसाइटहरूले सिर्जना गर्ने फाइल हुन्। कुकीहरू दुई प्रकारका हुन्छन्: तपाईं जाने साइटले प्राथमिक श्रोतका कुकीहरू बनाउँछ। यो साइट ठेगाना पट्टीमा देखाइन्छ। अन्य साइटहरूले तेस्रो पक्षीय कुकीहरू सिर्जना गर्छन्। तपाईं जाने वेबसाइटमा तपाईंले देख्ने विज्ञापन वा फोटो जस्ता केही सामग्री यी साइटहरूको स्वामित्वमा रहन्छन्।</translation> <translation id="3785308913036335955">एप्स शर्टकट देखाउनुहोस्</translation> <translation id="3785727820640310185">यस साइटका लागि सुरक्षित गरिएका पासवर्डहरू</translation> @@ -4270,6 +4273,7 @@ <translation id="5066100345385738837">ChromeOS का सेटिङमा गई Secure DNS व्यवस्थापन गर्नुहोस्</translation> <translation id="5067399438976153555">सधैं सक्रिय</translation> <translation id="5067867186035333991"><ph name="HOST" /> तपाईंको माइक्रोफोनको पहुँच गर्न चाहन्छ कि चाहँदैन भनि सोध्नुहोस्</translation> +<translation id="5068553687099139861">पासवर्डहरू देखाइयोस्</translation> <translation id="5068918910148307423">हालसालै बन्द गरिएका साइटहरूलाई डेटा पठाउने र प्राप्त गर्ने कार्य सम्पन्न गर्न अनुमति नदिनुहोस्</translation> <translation id="5068919226082848014">पिजा</translation> <translation id="5070710277167211639">वेबपेजहरू लोड गर्न HTTPS प्रयोग गरियोस् र HTTPS प्रयोग गर्न नमिल्ने साइटहरू लोड गर्नुअघि मलाई चेतावनी दिइयोस्</translation> @@ -6420,6 +6424,7 @@ <translation id="7152478047064750137">यस विस्तारलाई कुनै विशेष अनुमति चाहिँदैन</translation> <translation id="7154130902455071009">आफ्नो सुरुवात पृष्ठलाई यसमा परिवर्तन गर्नुहोस्: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">क्यामेरा वा फाइलको विद्यमान तस्बिर</translation> +<translation id="7159953856712257647">स्वतः इन्स्टल गरिएको</translation> <translation id="7160182524506337403">तपाईं अब आफ्नो फोनका सूचनाहरू हेर्न सक्नुहुन्छ</translation> <translation id="7163202347044721291">सक्रिय गर्ने कोड पुष्टि गरिँदै छ...</translation> <translation id="716640248772308851">"<ph name="EXTENSION" />" ले चेक गरिएको स्थानहरूमा फोटो, भिडियो, र आवाज पढ्न सक्छ।</translation> @@ -7519,6 +7524,7 @@ <translation id="820568752112382238">सबैभन्दा बढी हेरिएका साइटहरू</translation> <translation id="8206745257863499010">ब्लुजी</translation> <translation id="8206859287963243715">सेल्युलर</translation> +<translation id="8208216423136871611">बचत नगर्नुहोस्</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{नयाँ सूचना}other{# वटा नयाँ सूचना}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{डाउनलोड हुँदैछ}other{डाउनलोड हुँदैछन्}}</translation> <translation id="8213449224684199188">तस्बिर मोडमा प्रवेश गरियो</translation> @@ -7631,6 +7637,7 @@ <translation id="8314835274931377415">"स्विच एक्सेस" सेटअप गर्न थाल्ने हो?</translation> <translation id="8317582043908962055">P&DF मा भएको टेक्स्ट चिन्नुहोस्</translation> <translation id="8317671367883557781">नेटवर्क जडान थप्नुहोस्</translation> +<translation id="8317965619823678157">पासवर्डहरू कपी गर्नुहोस्</translation> <translation id="8318266828739827371">स्क्रिनको जुन भाग जुम इन गरिएको छ त्यो भाग हेर्न स्प्लिट स्क्रिन भ्यू प्रयोग गर्नुहोस्। डक गरिएको म्याग्निफायर अन र अफ गर्न Search + Ctrl + D थिच्नुहोस्।</translation> <translation id="8319414634934645341">विस्तारित कुञ्जी प्रयोग</translation> <translation id="8321837372750396788"><ph name="MANAGER" /> ले यो <ph name="DEVICE_TYPE" /> व्यवस्थापन गर्ने छ।</translation> @@ -8558,6 +8565,7 @@ <translation id="929117907539171075">स्थापना गरिएको एपमा रहेको अफलाइन डेटा पनि हटाइने छ</translation> <translation id="930268624053534560">विस्तृत टाइमस्ट्याम्पहरू</translation> <translation id="930893132043726269">हाल रोमिङ नेटवर्क प्रयोग गरिँदै छ</translation> +<translation id="93140074055951850">Android एपहरूले काम गर्न छाडेका छन्</translation> <translation id="932327136139879170">गृहपृष्ठ</translation> <translation id="932508678520956232">प्रिन्ट प्रारम्भ गर्न सकेन।</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{यो फाइल सुरक्षासम्बन्धी जाँच गर्नै नसकिने गरी ठुलो छ। तपाईं बढीमा ५० एम.बि. सम्मका फाइलहरू अपलोड गर्न सक्नुहुन्छ।}other{यीमध्ये केही फाइलहरू सुरक्षासम्बन्धी जाँच गर्नै नसकिने गरी ठुला छन्। तपाईं बढीमा ५० एम.बि. सम्मका फाइलहरू अपलोड गर्न सक्नुहुन्छ।}}</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index 11a24de..64853bb9 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -510,6 +510,7 @@ <translation id="1480663089572535854">Je kunt teruggaan om de toewijzing voor Selecteren te wijzigen. Je kunt Automatische scan altijd uitzetten via Instellingen.</translation> <translation id="1481537595330271162">Fout bij aanpassen van schijfgrootte</translation> <translation id="1482626744466814421">Bookmark toevoegen voor dit tabblad…</translation> +<translation id="1482772681918035149">wachtwoorden bewerken</translation> <translation id="1483493594462132177">Verzenden</translation> <translation id="1484979925941077974">Site gebruikt Bluetooth</translation> <translation id="1485015260175968628">De app/extensie kan nu het volgende doen:</translation> @@ -524,6 +525,7 @@ <translation id="1500801317528437432">Meer informatie over niet-ondersteunde Chrome-apps</translation> <translation id="150411034776756821"><ph name="SITE" /> verwijderen</translation> <translation id="1504551620756424144">Gedeelde mappen zijn beschikbaar in Windows in <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">wachtwoorden exporteren</translation> <translation id="1506061864768559482">Zoekmachine</translation> <translation id="1507170440449692343">Deze pagina heeft geen toegang tot je camera.</translation> <translation id="1507246803636407672">&Annuleren</translation> @@ -2961,6 +2963,7 @@ <translation id="3778740492972734840">&Hulpprogramma's voor ontwikkelaars</translation> <translation id="3778868487658107119">Je kunt de Assistent vragen stellen en opdrachten geven. De Assistent is je eigen persoonlijke Google dat altijd klaarstaat om je te helpen.</translation> <translation id="3781742599892759500">Microfoontoegang voor Linux</translation> +<translation id="3783889407390048282">Maak ruimte vrij om te voorkomen dat je de toegang tot Android kwijtraakt.</translation> <translation id="3784472333786002075">Cookies zijn bestanden die worden gemaakt door websites. Er zijn twee typen cookies: first-party cookies worden gemaakt door de site die je bezoekt. Je vindt de site in de adresbalk. Cookies van derden (third-party cookies) worden gemaakt door andere sites. Deze sites zijn eigenaar van een deel van de content (zoals advertenties of afbeeldingen) die je ziet op de website die je bezoekt.</translation> <translation id="3785308913036335955">Snelle link voor apps bekijken</translation> <translation id="3785727820640310185">Opgeslagen wachtwoorden voor deze site</translation> @@ -4271,6 +4274,7 @@ <translation id="5066100345385738837">Beveiligde DNS beheren in de instellingen van Chrome OS</translation> <translation id="5067399438976153555">Altijd aan</translation> <translation id="5067867186035333991">Vragen of <ph name="HOST" /> toegang wil tot je microfoon</translation> +<translation id="5068553687099139861">wachtwoorden tonen</translation> <translation id="5068918910148307423">Niet toestaan dat onlangs gesloten sites het verzenden en ontvangen van gegevens voltooien</translation> <translation id="5068919226082848014">Pizza</translation> <translation id="5070710277167211639">Upgrade navigaties naar HTTPS en krijg een waarschuwing als er sites worden geladen die dit niet ondersteunen</translation> @@ -6417,6 +6421,7 @@ <translation id="7152478047064750137">De extensie vereist geen speciale rechten</translation> <translation id="7154130902455071009">Je homepage wijzigen in: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Bestaande foto van camera of uit bestand</translation> +<translation id="7159953856712257647">Standaard geïnstalleerd</translation> <translation id="7160182524506337403">Je kunt nu de meldingen van je telefoon bekijken</translation> <translation id="7163202347044721291">Activeringscode verifiëren...</translation> <translation id="716640248772308851">'<ph name="EXTENSION" />' kan afbeeldingen, video- en geluidsbestanden lezen op de gecontroleerde locaties.</translation> @@ -7514,6 +7519,7 @@ <translation id="820568752112382238">Meest bezochte sites</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">Mobiel</translation> +<translation id="8208216423136871611">Niet opslaan</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nieuwe melding}other{# nieuwe meldingen}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Download wordt uitgevoerd}other{Downloads worden uitgevoerd}}</translation> <translation id="8213449224684199188">Fotomodus geopend</translation> @@ -7626,6 +7632,7 @@ <translation id="8314835274931377415">Instellen van Toegang via schakelaar starten?</translation> <translation id="8317582043908962055">P&df-tekst herkennen</translation> <translation id="8317671367883557781">Netwerkverbinding toevoegen</translation> +<translation id="8317965619823678157">wachtwoorden kopiëren</translation> <translation id="8318266828739827371">Gebruik een gesplitste schermweergave om het vergrote gedeelte van je scherm te bekijken. Gebruik Zoeken + Ctrl + D om het vastgezette vergrootglas aan en uit te zetten.</translation> <translation id="8319414634934645341">Uitgebreid sleutelgebruik</translation> <translation id="8321837372750396788">Deze <ph name="DEVICE_TYPE" /> wordt beheerd door <ph name="MANAGER" />.</translation> @@ -8554,6 +8561,7 @@ <translation id="929117907539171075">Offline gegevens in de geïnstalleerde app worden ook gewist</translation> <translation id="930268624053534560">Gedetailleerde tijdstempels</translation> <translation id="930893132043726269">Roaming staat momenteel aan</translation> +<translation id="93140074055951850">Android-apps zijn gestopt</translation> <translation id="932327136139879170">Homepage</translation> <translation id="932508678520956232">Kan afdrukken niet starten.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Dit bestand is te groot voor een beveiligingscontrole. Je kunt bestanden tot 50 MB uploaden.}other{Sommige van deze bestanden zijn te groot voor een beveiligingscontrole. Je kunt bestanden tot 50 MB uploaden.}}</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 50cabde..f432af6 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -513,6 +513,7 @@ <translation id="1480663089572535854">Du kan gå tilbake for å endre tilordningen for «Velg». Du kan når som helst slå av automatisk skanning i innstillingene.</translation> <translation id="1481537595330271162">Feil ved endring av diskstørrelse</translation> <translation id="1482626744466814421">Bokmerk denne fanen</translation> +<translation id="1482772681918035149">endre passord</translation> <translation id="1483493594462132177">Send</translation> <translation id="1484979925941077974">Nettstedet bruker Bluetooth</translation> <translation id="1485015260175968628">Den har allerede følgende tilgang:</translation> @@ -527,6 +528,7 @@ <translation id="1500801317528437432">Finn ut mer om Chrome-apper som ikke støttes</translation> <translation id="150411034776756821">Fjern <ph name="SITE" /></translation> <translation id="1504551620756424144">Delte mapper er tilgjengelige i Windows i <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">eksportere passord</translation> <translation id="1506061864768559482">Søkemotor</translation> <translation id="1507170440449692343">Kameraet er blokkert for denne siden.</translation> <translation id="1507246803636407672">&amp;Forkast</translation> @@ -598,6 +600,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (gjest)</translation> <translation id="1572266655485775982">Slå på Wi-Fi</translation> <translation id="1572876035008611720">Skriv inn e-postadressen din</translation> +<translation id="1573117025466282241">Bruk telefonen med en QR-kode</translation> <translation id="1575741822946219011">Språk og inndatametoder</translation> <translation id="1576594961618857597">Hvitt standardbrukerbilde</translation> <translation id="1578558981922970608">Tving avslutning</translation> @@ -2969,6 +2972,7 @@ <translation id="3778740492972734840">&Utviklerverktøy</translation> <translation id="3778868487658107119">Still den spørsmål. Be den gjøre ting. Den er din personlige Google – alltid klar til å hjelpe.</translation> <translation id="3781742599892759500">Mikrofontilgang i Linux</translation> +<translation id="3783889407390048282">Frigjør plass for å unngå å miste tilgangen til Android.</translation> <translation id="3784472333786002075">Informasjonskapsler er filer som opprettes av nettsteder. Det finnes to typer informasjonskapsler: Informasjonskapsler fra førstepart opprettes av nettstedet du besøker. Nettstedet vises i adressefeltet. Informasjonskapsler fra tredjeparter opprettes av andre nettsteder. Disse nettstedene eier noe av innholdet, for eksempel annonser eller bilder, som du ser på nettstedet du besøker.</translation> <translation id="3785308913036335955">Vis appsnarveien</translation> <translation id="3785727820640310185">Lagrede passord for dette nettstedet</translation> @@ -4279,6 +4283,7 @@ <translation id="5066100345385738837">Administrer sikker DNS i ChromeOS-innstillingene</translation> <translation id="5067399438976153555">Alltid på</translation> <translation id="5067867186035333991">Spør om <ph name="HOST" /> vil bruke mikrofonen din</translation> +<translation id="5068553687099139861">vise passord</translation> <translation id="5068918910148307423">Ikke tillat at nylig lukkede nettsteder fullfører sending og mottak av data</translation> <translation id="5068919226082848014">Pizza</translation> <translation id="5070710277167211639">Oppgrader navigeringer til HTTPS og bli varslet før innlasting av nettsteder som ikke støtter dette</translation> @@ -6429,6 +6434,7 @@ <translation id="7152478047064750137">Denne utvidelsen krever ingen spesielle tillatelser</translation> <translation id="7154130902455071009">endre startsiden din til: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Eksisterende bilde fra kamera eller fil</translation> +<translation id="7159953856712257647">Installert som standard</translation> <translation id="7160182524506337403">Nå kan du se varsler på telefonen</translation> <translation id="7163202347044721291">Bekrefter aktiveringskoden …</translation> <translation id="716640248772308851">«<ph name="EXTENSION" />» kan lese bilder, videofiler og lydfiler i mappene som står oppført.</translation> @@ -7528,6 +7534,7 @@ <translation id="820568752112382238">Mest besøkte nettsteder</translation> <translation id="8206745257863499010">Plystre</translation> <translation id="8206859287963243715">Mobil</translation> +<translation id="8208216423136871611">Ikke lagre</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nytt varsel}other{# nye varsler}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Nedlasting pågår}other{Nedlastinger pågår}}</translation> <translation id="8213449224684199188">Fotomodus er aktivert</translation> @@ -7640,6 +7647,7 @@ <translation id="8314835274931377415">Vil du starte konfigureringen av brytertilgang?</translation> <translation id="8317582043908962055">Gjenkjenn P&DF-tekst</translation> <translation id="8317671367883557781">Legg til nettverkstilkobling</translation> +<translation id="8317965619823678157">kopiere passord</translation> <translation id="8318266828739827371">Bruk en delt skjermvisning for å se det forstørrede området på skjermen. Bruk søketasten + Ctrl + D for å slå på og av dokket lupe.</translation> <translation id="8319414634934645341">Utvidet bruk av nøkkel</translation> <translation id="8321837372750396788">Denne <ph name="DEVICE_TYPE" />-enheten kommer til å bli administrert av <ph name="MANAGER" />.</translation> @@ -8567,6 +8575,7 @@ <translation id="929117907539171075">Frakoblede data i installerte apper blir også slettet</translation> <translation id="930268624053534560">Detaljerte tidsstempler</translation> <translation id="930893132043726269">Roamer for øyeblikket</translation> +<translation id="93140074055951850">Android-apper ble stoppet</translation> <translation id="932327136139879170">Gå til startsiden</translation> <translation id="932508678520956232">Kan ikke starte utskrift.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Denne filen er for stor til at en sikkerhetssjekk kan utføres. Du kan laste opp filer på opptil 50 MB.}other{Noen av disse filene er for store til at en sikkerhetssjekk kan utføres. Du kan laste opp filer på opptil 50 MB.}}</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 9d618558..3e4c1bb 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -953,6 +953,7 @@ <translation id="1864400682872660285">ਵਧੇਰੇ ਹਲਕਾ</translation> <translation id="1864454756846565995">USB-C ਡੀਵਾਈਸ (ਪਿਛਲਾ ਪੋਰਟ)</translation> <translation id="1865769994591826607">ਸਿਰਫ਼ ਸਮਰੂਪ-ਸਾਈਟ ਕਨੈਕਸ਼ਨ</translation> +<translation id="186594096341696655">ਸੈਂਪਲ ਰੇਟ ਘਟਾਓ</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" ਸਹੀ ਦਾ ਨਿਸ਼ਾਨ ਲਗਾਏ ਹੋਏ ਨਿਰਧਾਰਿਤ ਸਥਾਨਾਂ ਵਿੱਚ ਚਿੱਤਰ, ਵੀਡਿਓ ਅਤੇ ਅਵਾਜ਼ ਫਾਈਲਾਂ ਪੜ੍ਹ ਅਤੇ ਲਿਖ ਸਕਦਾ ਹੈ।</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> ਆਪਣੀ ਇੰਸਟੌਲੇਸ਼ਨ ਪੂਰੀ ਕਰਨ ਲਈ ਤਿਆਰ ਹੈ</translation> <translation id="1868553836791672080">Chromium ਵਿੱਚ ਪਾਸਵਰਡ ਜਾਂਚ ਉਪਲਬਧ ਨਹੀਂ ਹੈ</translation> @@ -1144,6 +1145,7 @@ <translation id="2048554637254265991">ਕੰਟੇਨਰ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਵੇਲੇ ਗੜਬੜ ਹੋਈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="2048653237708779538">ਕਾਰਵਾਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ</translation> <translation id="2050339315714019657">ਪੋਰਟਰੇਟ</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{ਤੁਹਾਡੇ Google Password Manager (<ph name="USER_EMAIL" />) ਵਿੱਚ 1 ਪਾਸਵਰਡ ਆਯਾਤ ਕੀਤਾ ਗਿਆ}one{ਤੁਹਾਡੇ Google Password Manager (<ph name="USER_EMAIL" />) ਵਿੱਚ {NUM_PASSWORDS} ਪਾਸਵਰਡ ਆਯਾਤ ਕੀਤਾ ਗਿਆ}other{ਤੁਹਾਡੇ Google Password Manager (<ph name="USER_EMAIL" />) ਵਿੱਚ {NUM_PASSWORDS} ਪਾਸਵਰਡ ਆਯਾਤ ਕੀਤੇ ਗਏ}}</translation> <translation id="2052572566310583903">ਤੁਹਾਡੇ ਦੂਜੇ ਡੀਵਾਈਸਾਂ 'ਤੇ ਸਥਾਪਤ ਕੀਤੀਆਂ ਗਈਆਂ</translation> <translation id="2053105195397337973">ਅਸੀਂ ਸਾਈਟਾਂ ਨੂੰ ਵਿਗਿਆਪਨ ਸੰਬੰਧੀ ਸਪੈਮ ਅਤੇ ਧੋਖਾਧੜੀ ਰੋਕਣ ਯੋਗ ਬਣਾਉਂਦੇ ਹੋਏ ਟਰੈਕਿੰਗ ਨੂੰ ਪ੍ਰਤਿਬੰਧਿਤ ਕਰਨ ਦੇ ਤਰੀਕਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰ ਰਹੇ ਹਾਂ।</translation> <translation id="2053312383184521053">ਨਿਸ਼ਕਿਰਿਆ ਸਥਿਤੀ ਡਾਟਾ</translation> @@ -1917,6 +1919,7 @@ <translation id="2742448780373473567"><ph name="DEVICE_OS" /> ਨੂੰ ਸਥਾਪਤ ਕਰਨ ਨਾਲ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਸਾਰਾ ਡਾਟਾ ਓਵਰਰਾਈਟ ਹੋ ਜਾਵੇਗਾ।</translation> <translation id="274290345632688601">Linux ਐਪਾਂ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੁੜ-ਬਹਾਲ ਕੀਤੀਆਂ ਜਾ ਰਹੀਆਂ ਹਨ</translation> <translation id="274318651891194348">ਕੀ-ਬੋਰਡ ਖੋਜਿਆ ਜਾ ਰਿਹਾ ਹੈ</translation> +<translation id="2743301740238894839">ਸ਼ੁਰੂ ਕਰੋ</translation> <translation id="2743387203779672305">ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> <translation id="2747266560080989517">ਇਸ ਫ਼ਾਈਲ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ। ਇਸ ਦੇ ਮਾਲਕ ਨੂੰ ਸਹੀ ਕਰਨ ਲਈ ਕਹੋ।</translation> @@ -2428,6 +2431,7 @@ <translation id="3255355328033513170"><ph name="SITE_GROUP_NAME" /> ਅਤੇ ਇਸਦੇ ਅਧੀਨ ਕਿਸੇ ਵੀ ਸਾਈਟ ਵੱਲੋਂ ਸਟੋਰ ਕੀਤਾ ਸਾਰਾ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਇਸ ਵਿੱਚ ਕੁਕੀਜ਼ ਸ਼ਾਮਲ ਹਨ। ਖੁੱਲ੍ਹੀਆਂ ਟੈਬਾਂ ਸਮੇਤ, ਤੁਹਾਨੂੰ ਇਹਨਾਂ ਸਾਈਟਾਂ ਤੋਂ ਸਾਈਨ-ਆਊਟ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ।</translation> <translation id="3257733480216378006">ਕੀ <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" /> ਨੂੰ ਆਗਿਆ ਦੇਣੀ ਹੈ?</translation> <translation id="3259723213051400722">ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> +<translation id="3261090393424563833">ਸੈਂਪਲ ਰੇਟ ਵਧਾਓ</translation> <translation id="3261268979727295785">ਵੱਡੇ ਬੱਚਿਆਂ ਲਈ, ਇੱਕ ਵਾਰ ਸੈੱਟਅੱਪ ਪੂਰਾ ਕਰਨ ਤੋਂ ਬਾਅਦ ਤੁਸੀਂ ਮਾਪਿਆਂ ਦੇ ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ। ਤੁਸੀਂ Explore ਐਪ ਵਿੱਚ ਮਾਪਿਆਂ ਦੇ ਕੰਟਰੋਲ ਬਾਰੇ ਜਾਣਕਾਰੀ ਲੱਭ ਸਕਦੇ ਹੋ।</translation> <translation id="3262986719682892278">ਬਹੁਤ ਵੱਡੀ</translation> <translation id="3264544094376351444">Sans-serif ਫੌਂਟ</translation> @@ -2937,6 +2941,7 @@ <translation id="3747077776423672805">ਐਪਾਂ ਨੂੰ ਹਟਾਉਣ ਲਈ, ਸੈਟਿੰਗਾਂ > Google Play Store > Android ਤਰਜੀਹਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ > ਐਪਾਂ ਜਾਂ ਐਪਲੀਕੇਸ਼ਨ ਪ੍ਰਬੰਧਕ 'ਤੇ ਜਾਓ। ਫਿਰ ਉਸ ਐਪ 'ਤੇ ਟੈਪ ਕਰੋ ਜਿਸਨੂੰ ਤੁਸੀਂ ਅਣਸਥਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ (ਐਪ ਨੂੰ ਲੱਭਣ ਲਈ ਤੁਹਾਨੂੰ ਸੱਜੇ ਜਾਂ ਖੱਬੇ ਸਵਾਈਪ ਕਰਨਾ ਪੈ ਸਕਦਾ ਹੈ)। ਫਿਰ 'ਅਣਸਥਾਪਤ ਕਰੋ' ਜਾਂ 'ਬੰਦ ਕਰੋ' 'ਤੇ ਟੈਪ ਕਰੋ।</translation> <translation id="3747603683749989726">ਕੀ ਵਿਸਤ੍ਰਿਤ ਸੁਰੱਖਿਆ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਹੈ?</translation> <translation id="3748706263662799310">ਬੱਗ ਦੀ ਰਿਪੋਰਟ ਕਰੋ</translation> +<translation id="3750304496241836236">ਆਪਣੇ Google Password Manager ਵਿੱਚ ਪਾਸਵਰਡ ਆਯਾਤ ਕਰਨ ਲਈ, CSV ਫ਼ਾਈਲ ਚੁਣੋ</translation> <translation id="3750562496035670393">Chrome ਨੇ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰ ਲਿਆ ਹੈ, ਪਰ ਤੁਸੀਂ ਇਸਦੀ ਬਜਾਏ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕਰ ਸਕਦੇ ਹੋ। ਫਿਰ, ਤੁਹਾਡੇ ਸਾਈਨ-ਇਨ ਹੋਣ ਵੇਲੇ ਸਾਰੇ ਪਾਸਵਰਡ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਉਪਲਬਧ ਹੋਣਗੇ।</translation> <translation id="3752253558646317685">ਫਿੰਗਰਪ੍ਰਿੰਟ ਨੂੰ ਰੱਖਿਅਤ ਕਰਨ ਲਈ ਆਪਣੇ ਬੱਚੇ ਤੋਂ ਉਸਦੀ ਉਂਗਲ ਨੂੰ ਸਪਰਸ਼ ਕਰਵਾਉਂਦੇ ਰਹੋ</translation> <translation id="3753033997400164841">ਇੱਕ ਵਾਰ ਸਟੋਰ ਕਰੋ। ਹਰ ਜਗ੍ਹਾ ਵਰਤੋ</translation> @@ -4108,6 +4113,7 @@ <translation id="4871370605780490696">ਬੁੱਕਮਾਰਕ ਸ਼ਾਮਿਲ ਕਰੋ</translation> <translation id="4871568871368204250">ਸਿੰਕ ਬੰਦ ਕਰੋ</translation> <translation id="4871719318659334896">ਗਰੁੱਪ ਬੰਦ ਕਰੋ</translation> +<translation id="4872192066608821120">ਪਾਸਵਰਡ ਆਯਾਤ ਕਰਨ ਲਈ, CSV ਫ਼ਾਈਲ ਚੁਣੋ</translation> <translation id="4873312501243535625">ਮੀਡੀਆ ਫਾਈਲ ਚੈਕਰ</translation> <translation id="4876273079589074638">ਇਸ ਕ੍ਰੈਸ਼ ਨੂੰ ਸਥਿਰ ਕਰਨ ਅਤੇ ਇਸਨੂੰ ਠੀਕ ਕਰਨ ਵਿੱਚ ਸਾਡੇ ਇੰਜੀਨੀਅਰਾਂ ਦੀ ਮਦਦ ਕਰੋ। ਜੇਕਰ ਹੋ ਸਕਦਾ ਹੈ ਤਾਂ ਠੀਕ ਕਾਰਵਾਈ ਨੂੰ ਸੂਚੀਬੱਧ ਕਰੋ। ਕੋਈ ਵੀ ਵੇਰਵਾ ਛੋਟਾ ਨਹੀਂ ਹੁੰਦਾ!</translation> <translation id="4876895919560854374">ਸਕ੍ਰੀਨ ਨੂੰ ਲਾਕ ਅਤੇ ਅਣਲਾਕ ਕਰੋ</translation> @@ -5451,6 +5457,7 @@ <translation id="6206199626856438589">ਖੁੱਲ੍ਹੀਆਂ ਟੈਬਾਂ ਸਮੇਤ, ਤੁਹਾਨੂੰ ਦਿਖਾਈਆਂ ਗਈਆਂ ਸਾਈਟਾਂ ਤੋਂ ਸਾਈਨ-ਆਊਟ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> <translation id="6206311232642889873">ਚਿੱਤਰ ਕਾ&ਪੀ ਕਰੋ</translation> <translation id="6207200176136643843">ਪੂਰਵ-ਨਿਰਧਾਰਤ ਜ਼ੂਮ ਪੱਧਰ 'ਤੇ ਰੀਸੈੱਟ ਕਰੋ</translation> +<translation id="6207806976844244951">Google Password Manager (<ph name="EMAIL" />) ਵਿੱਚ ਰੱਖਿਅਤ ਕਰੋ</translation> <translation id="6207937957461833379">ਦੇਸ਼ / ਖੇਤਰ</translation> <translation id="6208382900683142153">ਟਰੱਸਟ ਟੋਕਨ ਵੈੱਬ 'ਤੇ ਪਰਦੇਦਾਰੀ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਂਦੇ ਹਨ ਅਤੇ ਉਨ੍ਹਾਂ ਦੀ ਵਰਤੋਂ ਤੁਹਾਡੇ ਬਾਰੇ ਪਤਾ ਲਗਾਉਣ ਲਈ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।</translation> <translation id="6208521041562685716">ਮੋਬਾਈਲ ਡਾਟਾ ਕਿਰਿਆਸ਼ੀਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> @@ -5690,6 +5697,7 @@ <translation id="6436610005579237680">ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਵਾਲ ਪੁੱਛੇ ਜਾਣ 'ਤੇ ਆਪਣੇ ਲਈ ਜ਼ਿਆਦਾ ਵਿਉਂਤਬੱਧ ਜਵਾਬ ਪ੍ਰਾਪਤ ਕਰਨ ਵਾਸਤੇ, Google Assistant ਨੂੰ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ 'ਤੇ ਦਿੱਤੀ ਜਾਣਕਾਰੀ ਦੇ ਸਕ੍ਰੀਨਸ਼ਾਟ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿਓ। ਤੁਹਾਡੀ Assistant ਚੱਲ ਰਹੇ ਗੀਤਾਂ ਜਾਂ ਵੀਡੀਓ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ ਵੀ ਵਰਤ ਸਕਦੀ ਹੈ।</translation> <translation id="6436778875248895551">ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ "<ph name="EXTENSION_NAME" />" ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਬਲਾਕ ਕਰ ਦਿੱਤਾ</translation> <translation id="6438234780621650381">ਸੈਟਿੰਗਾਂ ਰੀਸੈੱਟ ਕਰੋ</translation> +<translation id="6438475350605608554">ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਕਿਸੇ ਹੋਰ ਟੈਬ ਵਿੱਚ ਪਾਸਵਰਡ ਆਯਾਤ ਕਰ ਰਹੇ ਹੋ</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - ਆਡੀਓ ਚਲਾਉਣਾ</translation> <translation id="6442187272350399447">ਸ਼ਾਨਦਾਰ</translation> <translation id="6442445294758185945">ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> @@ -5700,6 +5708,7 @@ <translation id="6446213738085045933">ਡੈਸਕਟਾਪ ਸ਼ਾਰਟਕੱਟ ਬਣਾਓ</translation> <translation id="6447842834002726250">ਕੁਕੀਜ਼</translation> <translation id="6450876761651513209">ਆਪਣੀਆਂ ਪ੍ਰਾਈਵੇਸੀ-ਸੰਬੰਧਿਤ ਸੈਟਿੰਗਾਂ ਬਦਲੋ</translation> +<translation id="645119363824354176">ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਪਾਸਵਰਡ ਆਯਾਤ ਕਰਨ ਲਈ, CSV ਫ਼ਾਈਲ ਚੁਣੋ</translation> <translation id="6451344358166983408">ਸਾਈਟ ਜਾਂ ਪੰਨਾ</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> ਅਤੇ 1 ਹੋਰ ਟੈਬ}other{<ph name="PAGE_TITLE" /> ਅਤੇ # ਹੋਰ ਟੈਬਾਂ}}</translation> <translation id="6451689256222386810">ਜੇਕਰ ਤੁਸੀਂ ਆਪਣਾ ਪਾਸਫਰੇਜ਼ ਭੁੱਲ ਗਏ ਹੋ ਜਾਂ ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਬਦਲਣਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ <ph name="BEGIN_LINK" />ਸਿੰਕ ਰੀਸੈੱਟ ਕਰੋ<ph name="END_LINK" />।</translation> @@ -5966,6 +5975,7 @@ <translation id="6691936601825168937">&ਫਾਰਵਰਡ</translation> <translation id="6693745645188488741">{COUNT,plural, =1{1 ਪੰਨਾ}one{{COUNT} ਪੰਨਾ}other{{COUNT} ਪੰਨੇ}}</translation> <translation id="6694430008315398925">Steam ਦਾ ਸੈੱਟਅੱਪ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> +<translation id="6697172646384837537">ਆਪਣੇ ਪਾਸਵਰਡ ਆਯਾਤ ਕਰਨ ਲਈ ਕੋਈ ਥਾਂ ਚੁਣੋ</translation> <translation id="6697492270171225480">ਜਦੋਂ ਕੋਈ ਪੰਨਾ ਮਿਲ ਨਾ ਰਿਹਾ ਹੋਵੇ ਤਾਂ ਮਿਲਦੇ-ਜੁਲਦੇ ਪੰਨਿਆਂ ਦੇ ਸੁਝਾਅ ਦਿਖਾਓ</translation> <translation id="6697690052557311665">ਸਾਂਝਾ ਕਰਨ ਲਈ, Files ਐਪ ਵਿੱਚ ਕਿਸੇ ਫੋਲਡਰ 'ਤੇ ਸੱਜਾ-ਕਲਿੱਕ ਕਰੋ, ਫਿਰ "Linux ਨਾਲ ਸਾਂਝਾ ਕਰੋ" ਚੁਣੋ।</translation> <translation id="6698810901424468597"><ph name="WEBSITE_1" /> ਅਤੇ <ph name="WEBSITE_2" /> ਤੇ ਆਪਣਾ ਡਾਟਾ ਪੜ੍ਹੋ ਅਤੇ ਬਦਲੋ</translation> @@ -6063,6 +6073,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">'ਸਵੈ-ਸਕੈਨ' ਵਿਸ਼ੇਸ਼ਤਾ ਤੁਹਾਨੂੰ ਸਕ੍ਰੀਨ 'ਤੇ ਆਈਟਮਾਂ ਵਿਚਾਲੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਜਾਣ ਦਿੰਦੀ ਹੈ। ਕੋਈ ਆਈਟਮ ਉਜਾਗਰ ਕੀਤੇ ਜਾਣ 'ਤੇ, ਉਸਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰਨ ਲਈ “ਚੁਣੋ” ਦਬਾਓ।</translation> <translation id="6795884519221689054">ਪਾਂਡਾ</translation> +<translation id="6796509790850723820">ਰੈਂਡਰ ਕਰੋ</translation> <translation id="6797493596609571643">ਓਹੋ, ਕੋਈ ਗੜਬੜ ਹੋ ਗਈ।</translation> <translation id="6798420440063423019">ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਲਾਕ ਹੋ ਗਈ ਹੈ ਕਿਉਂਕਿ ਗਲਤ ਪਿੰਨ ਬਹੁਤ ਵਾਰ ਦਾਖਲ ਕੀਤਾ ਗਿਆ। ਤੁਹਾਨੂੰ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਨੂੰ ਰੀਸੈੱਟ ਕਰਨਾ ਪਵੇਗਾ।</translation> <translation id="679845623837196966">ਪੜ੍ਹਨ-ਸੂਚੀ ਦਿਖਾਓ</translation> @@ -6605,6 +6616,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> ਹੁਣ ਪੂਰੀ ਸਕ੍ਰੀਨ ਹੈ।</translation> <translation id="7340650977506865820">ਸਾਈਟ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਨੂੰ ਸਾਂਝਾ ਕਰ ਰਹੀ ਹੈ</translation> <translation id="7340757554212515731">Google ਨੂੰ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਕ੍ਰੈਸ਼ ਰਿਪੋਰਟਾਂ ਦੇ ਨਾਲ-ਨਾਲ ਤਸ਼ਖੀਸੀ ਅਤੇ ਵਰਤੋਂ ਡਾਟਾ ਭੇਜਦਾ ਹੈ</translation> +<translation id="734088800888587319">ਨੈੱਟਵਰਕ ਮਾਪਕ</translation> <translation id="7341834142292923918">ਇਸ ਸਾਈਟ ਤੱਕ ਪਹੁੰਚ ਕਰਨਾ ਚਾਹੁੰਦੀ ਹੈ</translation> <translation id="7343372807593926528">ਵਿਚਾਰ ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ ਕਿਰਪਾ ਕਰਕੇ ਸਮੱਸਿਆ ਦਾ ਵਰਣਨ ਕਰੋ।</translation> <translation id="7344585835349671209">ਆਪਣੇ ਡੀਵਾਈਸ 'ਤੇ HTTPS/SSL ਸਰਟੀਫਿਕੇਟਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> @@ -7541,6 +7553,7 @@ <translation id="820568752112382238">ਸਭ ਤੋਂ ਵੱਧ ਦੇਖੀਆਂ ਗਈਆਂ ਸਾਈਟਾਂ</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">Cellular</translation> +<translation id="8208216423136871611">ਸੁਰੱਖਿਅਤ ਨਾ ਕਰੋ</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{ਨਵੀਂ ਸੂਚਨਾ}one{# ਨਵੀਂ ਸੂਚਨਾ}other{# ਨਵੀਆਂ ਸੂਚਨਾਵਾਂ}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ਡਾਊਨਲੋਡ ਪ੍ਰਗਤੀ ਵਿੱਚ ਹੈ}one{ਡਾਊਨਲੋਡ ਪ੍ਰਗਤੀ ਵਿੱਚ ਹੈ}other{ਡਾਊਨਲੋਡ ਪ੍ਰਗਤੀ ਵਿੱਚ ਹਨ}}</translation> <translation id="8213449224684199188">ਫ਼ੋਟੋ ਮੋਡ ਵਿੱਚ ਦਾਖਲ ਹੋਏ</translation> @@ -8447,6 +8460,7 @@ <translation id="9088917181875854783">ਕਿਰਪਾ ਕਰਕੇ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਇਹ ਪਾਸਕੁੰਜੀ "<ph name="DEVICE_NAME" />" ਤੇ ਦਿਖਾਈ ਜਾਂਦੀ ਹੈ:</translation> <translation id="9089416786594320554">ਇਨਪੁਟ ਵਿਧੀਆਂ</translation> <translation id="9090044809052745245">ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਦੂਜਿਆਂ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਦਾ ਦਿਸਦਾ ਹੈ</translation> +<translation id="9093470422440389061">ਵਾਈ-ਫਾਈ ਕਾਰਗੁਜ਼ਾਰੀ ਮਾਪਕ</translation> <translation id="9094033019050270033">ਪਾਸਵਰਡ ਅੱਪਡੇਟ ਕਰੋ</translation> <translation id="9094038138851891550">ਅਵੈਧ ਵਰਤੋਂਕਾਰ ਨਾਮ</translation> <translation id="9094859731829297286">ਕੀ ਤੁਸੀਂ ਪੱਕਾ Linux ਲਈ ਸਥਿਰ ਆਕਾਰ ਦੀ ਡਿਸਕ ਰਾਖਵੀਂ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 6844ad95..8d8598e 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -7511,6 +7511,7 @@ <translation id="820568752112382238">Najczęściej odwiedzane strony</translation> <translation id="8206745257863499010">Bluesowy</translation> <translation id="8206859287963243715">Komórka</translation> +<translation id="8208216423136871611">Nie zapisuj</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nowe powiadomienie}few{# nowe powiadomienia}many{# nowych powiadomień}other{# nowego powiadomienia}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Trwa pobieranie pliku}few{Trwa pobieranie plików}many{Trwa pobieranie plików}other{Trwa pobieranie plików}}</translation> <translation id="8213449224684199188">Włączono tryb fotografowania</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 00466f7e..c3d1e53 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -514,6 +514,7 @@ <translation id="1480663089572535854">Você pode voltar para mudar a atribuição da ação "Selecionar". Desative a leitura automática nas Configurações quando quiser.</translation> <translation id="1481537595330271162">Erro ao redimensionar o disco</translation> <translation id="1482626744466814421">Adicionar esta guia aos favoritos...</translation> +<translation id="1482772681918035149">editar as senhas</translation> <translation id="1483493594462132177">Enviar</translation> <translation id="1484979925941077974">O site está usando o Bluetooth</translation> <translation id="1485015260175968628">Ele agora pode:</translation> @@ -528,6 +529,7 @@ <translation id="1500801317528437432">Saiba mais sobre os apps do Chrome sem suporte</translation> <translation id="150411034776756821">Remover <ph name="SITE" /></translation> <translation id="1504551620756424144">As pastas compartilhadas estão disponíveis no Windows em <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">exportar as senhas</translation> <translation id="1506061864768559482">Mecanismo de pesquisa</translation> <translation id="1507170440449692343">Esta página foi impedida de acessar sua câmera.</translation> <translation id="1507246803636407672">&Descartar</translation> @@ -2978,6 +2980,7 @@ <translation id="3778740492972734840">Ferramentas do &desenvolvedor</translation> <translation id="3778868487658107119">Faça perguntas ou diga a ele o que fazer. É o seu Google pessoal, sempre pronto para ajudar.</translation> <translation id="3781742599892759500">Acesso ao microfone no Linux</translation> +<translation id="3783889407390048282">Libere espaço para não perder o acesso ao Android.</translation> <translation id="3784472333786002075">Os cookies são arquivos criados pelos sites. Há dois tipos de cookies: os primários são criados pelo site que você visita. Esse é o site exibido na barra de endereço. Os cookies de terceiros são criados por outros sites. Esses sites possuem uma parte do conteúdo, como anúncios ou imagens, que você vê na página da Web visitada.</translation> <translation id="3785308913036335955">Mostrar atalho para aplicativos</translation> <translation id="3785727820640310185">Senhas salvas para este site</translation> @@ -3372,7 +3375,7 @@ <translation id="4138598238327913711">No momento, a verificação gramatical está disponível apenas para o inglês</translation> <translation id="413915106327509564"><ph name="WINDOW_TITLE" />: dispositivo HID conectado</translation> <translation id="4139326893730851150">Atualizações de firmware</translation> -<translation id="4142052906269098341">Desbloqueie o <ph name="DEVICE_TYPE" /> com seu smartphone. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> +<translation id="4142052906269098341">Desbloquear o <ph name="DEVICE_TYPE" /> com seu smartphone. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="4142518881503042940">Salve impressoras detectadas no perfil ou adicione uma nova impressora. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="4144218403971135344">Tenha uma melhor qualidade de vídeo e economize bateria. Os vídeos serão reproduzidos apenas na tela compatível com Cast.</translation> <translation id="4144468798716165316">Comandos rápidos</translation> @@ -3856,7 +3859,7 @@ <translation id="4623189117674524348">Falha do sistema ao autorizar o acesso à API para este dispositivo.</translation> <translation id="4625078469366263107">Ativar app</translation> <translation id="4627427111733173920">Cookies bloqueados</translation> -<translation id="4627442949885028695">Continuar de outro dispositivo</translation> +<translation id="4627442949885028695">Continue de outro dispositivo</translation> <translation id="4628762811416793313">A configuração do contêiner Linux não foi concluída. Tente novamente.</translation> <translation id="4629521233550547305">Abrir perfil <ph name="PROFILE_NAME" /></translation> <translation id="4632655012900268062">Personalizar cards</translation> @@ -4291,6 +4294,7 @@ <translation id="5066100345385738837">Gerenciar o DNS seguro nas configurações do ChromeOS</translation> <translation id="5067399438976153555">Sempre ativado</translation> <translation id="5067867186035333991">Perguntar se <ph name="HOST" /> deseja acessar seu microfone</translation> +<translation id="5068553687099139861">mostrar as senhas</translation> <translation id="5068918910148307423">Não permitir que sites fechados recentemente concluam o envio e o recebimento de dados</translation> <translation id="5068919226082848014">Pizza</translation> <translation id="5070710277167211639">Fazer upgrade das navegações para HTTPS e enviar um aviso antes de carregar sites que não são compatíveis com esse protocolo</translation> @@ -6445,6 +6449,7 @@ <translation id="7152478047064750137">Esta extensão não requer permissões especiais</translation> <translation id="7154130902455071009">Alterar sua página inicial para: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Foto existente na câmera ou em arquivo</translation> +<translation id="7159953856712257647">Instalada por padrão</translation> <translation id="7160182524506337403">Agora, você pode ver as notificações do seu smartphone</translation> <translation id="7163202347044721291">Verificando código de ativação…</translation> <translation id="716640248772308851">"<ph name="EXTENSION" />" pode ler imagens, vídeos e arquivos de som nos locais marcados.</translation> @@ -7545,6 +7550,7 @@ <translation id="820568752112382238">Sites mais visitados</translation> <translation id="8206745257863499010">Chorinho</translation> <translation id="8206859287963243715">Celular</translation> +<translation id="8208216423136871611">Não salvar</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nova notificação}one{# nova notificação}other{# novas notificações}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{O download está em andamento}one{O download está em andamento}other{Os downloads estão em andamento}}</translation> <translation id="8213449224684199188">Alterado para o modo de foto</translation> @@ -7657,6 +7663,7 @@ <translation id="8314835274931377415">Iniciar a configuração do acesso com interruptor?</translation> <translation id="8317582043908962055">Reconhecer texto em P&DF</translation> <translation id="8317671367883557781">Adicionar conexão de rede</translation> +<translation id="8317965619823678157">copiar as senhas</translation> <translation id="8318266828739827371">Use a tela dividida para ver a área ampliada da sua tela. Use Pesquisa + Ctrl + D para ativar e desativar a lupa em área fixa.</translation> <translation id="8319414634934645341">Uso estendido de chave</translation> <translation id="8321837372750396788">Este <ph name="DEVICE_TYPE" /> será gerenciado por <ph name="MANAGER" />.</translation> @@ -8585,6 +8592,7 @@ <translation id="929117907539171075">Os dados off-line em apps instalados também serão removidos</translation> <translation id="930268624053534560">Timestamps detalhados</translation> <translation id="930893132043726269">Está em roaming no momento</translation> +<translation id="93140074055951850">Os apps Android foram interrompidos</translation> <translation id="932327136139879170">Início</translation> <translation id="932508678520956232">Não foi possível iniciar a impressão.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Esse arquivo é grande demais para uma verificação de segurança. É possível fazer upload de arquivos de até 50 MB.}one{O arquivo é grande demais para uma verificação de segurança. É possível fazer upload de arquivos de até 50 MB.}other{Alguns dos arquivos são grandes demais para uma verificação de segurança. É possível fazer upload de arquivos de até 50 MB.}}</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index a361bbe..694525f 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -7531,6 +7531,7 @@ <translation id="820568752112382238">Sites mais visitados</translation> <translation id="8206745257863499010">Bluesy</translation> <translation id="8206859287963243715">Telemóvel</translation> +<translation id="8208216423136871611">Não guardar</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nova notificação}other{# novas notificações}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Transferência em curso}other{Transferências em curso}}</translation> <translation id="8213449224684199188">Entrou no modo de foto</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 5e18ca6..a76bd1f 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -7526,6 +7526,7 @@ <translation id="820568752112382238">Cele mai accesate site-uri</translation> <translation id="8206745257863499010">Albăstrel</translation> <translation id="8206859287963243715">Celular</translation> +<translation id="8208216423136871611">Nu salva</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Notificare nouă}few{# notificări noi}other{# de notificări noi}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Descărcarea este în desfășurare}few{Descărcările sunt în desfășurare}other{Descărcările sunt în desfășurare}}</translation> <translation id="8213449224684199188">Modul foto a fost activat</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 488667a4..b47da96 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -194,6 +194,7 @@ <translation id="1174391930667737831">Центр конфиденциальности</translation> <translation id="117445914942805388">Чтобы удалить данные о работе в браузере со всех синхронизированных устройств и из аккаунта Google, перейдите в <ph name="BEGIN_LINK" />настройки синхронизации<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Печать...</translation> +<translation id="1176378369905028399">Пароль этого аккаунта уже хранится в Google Менеджере паролей (<ph name="USER_EMAIL" />).</translation> <translation id="1176471985365269981">Сайты, которым запрещено изменять файлы и папки на устройстве:</translation> <translation id="1177863135347784049">Персонализированные</translation> <translation id="1178581264944972037">Пауза</translation> @@ -796,6 +797,7 @@ <translation id="1745732479023874451">Управление контактами</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}one{Использовать это веб-приложение для просмотра и редактирования # файла?}few{Использовать это веб-приложение для просмотра и редактирования # файлов?}many{Использовать это веб-приложение для просмотра и редактирования # файлов?}other{Использовать это веб-приложение для просмотра и редактирования # файла?}}</translation> <translation id="1748563609363301860">Вы можете сохранить пароль в аккаунте Google или только на этом устройстве.</translation> +<translation id="1749733017156547309">Необходимо указать пароль.</translation> <translation id="1750172676754093297">На этом электронном ключе не сохраняются цифровые отпечатки.</translation> <translation id="1751249301761991853">Персональные настройки</translation> <translation id="1751262127955453661">Сайт <ph name="ORIGIN" /> сможет изменять файлы в папке "<ph name="FOLDERNAME" />", пока вы не закроете все вкладки этого сайта.</translation> @@ -1743,6 +1745,7 @@ <translation id="2602501489742255173">Чтобы начать, проведите по экрану вверх.</translation> <translation id="2603115962224169880">Удаление вредоносного ПО с компьютера</translation> <translation id="2603355571917519942">Функция Voice Match настроена</translation> +<translation id="2604129989323098489">Сайты обычно запрашивают информацию о ваших экранах, чтобы правильно открывать и размещать окна, например для показа документов в полноэкранном режиме или рядом друг с другом.</translation> <translation id="2604255671529671813">Ошибка подключения к сети</translation> <translation id="2605668923777146443">Чтобы посмотреть параметры режима Better Together, откройте <ph name="LINK_BEGIN" />Настройки<ph name="LINK_END" />.</translation> <translation id="2606246518223360146">Связать данные</translation> @@ -1788,6 +1791,7 @@ <translation id="2645047101481282803">Вашим устройством управляет администратор домена <ph name="PROFILE_NAME" />.</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 пароль импортирован на это устройство}one{{NUM_PASSWORDS} пароль импортирован на это устройство}few{{NUM_PASSWORDS} пароля импортировано на это устройство}many{{NUM_PASSWORDS} паролей импортировано на это устройство}other{{NUM_PASSWORDS} пароля импортировано на это устройство}}</translation> <translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645515095874728277">Пароль аккаунта уже хранится на этом устройстве.</translation> <translation id="2649045351178520408">ASCII с кодировкой Base64, цепочка сертификатов</translation> <translation id="2652129567809778422">Выберите пароль</translation> <translation id="2653033005692233957">Ошибка поиска</translation> @@ -2148,6 +2152,7 @@ <translation id="2972581237482394796">&Повторить</translation> <translation id="2973324205039581528">Отключить звук на сайте</translation> <translation id="2973537811036309675">Боковая панель</translation> +<translation id="2975761176769946178">Необходимо указать URL.</translation> <translation id="2976557544729462544">Для корректной работы некоторых устройств необходимо отключить ограничение доступа к данным</translation> <translation id="2977480621796371840">Удалить из группы</translation> <translation id="2979639724566107830">Открыть в новом окне</translation> @@ -2389,6 +2394,7 @@ <translation id="3227137524299004712">Микрофон</translation> <translation id="3232754137068452469">Веб-приложение</translation> <translation id="3233271424239923319">Выполнить резервное копирование приложений и файлов Linux</translation> +<translation id="3234251228180563751">В имени пользователя более 1000 символов.</translation> <translation id="3234978181857588512">Сохранить на устройстве</translation> <translation id="3238192140106069382">Подключение и проверка…</translation> <translation id="3239373508713281971">Для приложения "<ph name="APP_NAME" />" снято ограничение времени использования.</translation> @@ -3350,7 +3356,7 @@ <translation id="4138598238327913711">Проверка грамматики пока доступна только на английском языке.</translation> <translation id="413915106327509564"><ph name="WINDOW_TITLE" /> – подключено HID-устройство</translation> <translation id="4139326893730851150">Обновления встроенного ПО</translation> -<translation id="4142052906269098341">Снимать блокировку <ph name="DEVICE_TYPE" /> с помощью телефона. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> +<translation id="4142052906269098341">Разблокировка устройства <ph name="DEVICE_TYPE" /> с помощью телефона. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> <translation id="4142518881503042940">Сохраните найденные принтеры в своем профиле или добавьте новый принтер. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> <translation id="4144218403971135344">С помощью этой функции вы улучшите качество видео и продлите время работы от батареи. Видео будет воспроизводиться только на экранах с поддержкой Cast.</translation> <translation id="4144468798716165316">Быстрые команды</translation> @@ -5206,6 +5212,7 @@ <translation id="5975792506968920132">Процент зарядки батареи</translation> <translation id="5976160379964388480">Другое</translation> <translation id="5978277834170881274">&Использовать базовую проверку правописания</translation> +<translation id="5978493744931296692">Администратор отключил возможность использовать другие профили</translation> <translation id="5979084224081478209">Проверить пароли</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Вы снова включили 1 потенциально опасное расширение.}one{Вы снова включили {NUM_EXTENSIONS} потенциально опасное расширение.}few{Вы снова включили {NUM_EXTENSIONS} потенциально опасных расширения.}many{Вы снова включили {NUM_EXTENSIONS} потенциально опасных расширений.}other{Вы снова включили {NUM_EXTENSIONS} потенциально опасного расширения.}}</translation> <translation id="5979353814339191480">Этот параметр применяется в устройствах Chromebook, у которых есть тарифный план на мобильный Интернет или USB-модем, а также при подключении к мобильной точке доступа.</translation> @@ -5370,6 +5377,7 @@ <translation id="6130692320435119637">Добавить сеть Wi-Fi</translation> <translation id="6130887916931372608">Клавиша</translation> <translation id="6135823405800500595">Убедитесь, что телефон находится рядом, он разблокирован и на нем включены Bluetooth и Wi-Fi.</translation> +<translation id="6135826623269483856">Сайты, которым запрещено управление окнами на всех ваших экранах</translation> <translation id="6136114942382973861">Закрыть панель загрузок</translation> <translation id="6136287496450963112">Ваш электронный ключ не защищен PIN-кодом. Чтобы управлять отпечатками пальцев, создайте PIN-код.</translation> <translation id="6138680304137685902">Подпись ECDSA X9.62 с SHA-384</translation> @@ -7382,6 +7390,7 @@ <ph name="BEGIN_PARAGRAPH3" />Вы можете отключить эту функцию в настройках.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Вкладки</translation> <translation id="8076835018653442223">Доступ к локальным файлам на вашем устройстве отключен администратором.</translation> +<translation id="80798452873915119">Разрешить сайтам запрашивать управление окнами на всех ваших экранах</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Сеансом управляет <ph name="MANAGER_NAME" />. Администраторы могут удалять профили и следить за сетевым трафиком.</translation> <translation id="8081989000209387414">Отключить отладку с ADB?</translation> @@ -7521,6 +7530,7 @@ <translation id="820568752112382238">Часто открываемые сайты</translation> <translation id="8206745257863499010">Блюз</translation> <translation id="8206859287963243715">Сотовый</translation> +<translation id="8208216423136871611">Не сохранять</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Новое уведомление}one{# новое уведомление}few{# новых уведомления}many{# новых уведомлений}other{# нового уведомления}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Выполняется скачивание}one{Выполняется скачивание}few{Выполняется скачивание}many{Выполняется скачивание}other{Выполняется скачивание}}</translation> <translation id="8213449224684199188">Включён режим фотосъёмки</translation> @@ -7686,6 +7696,7 @@ <translation id="8371695176452482769">Говорите</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Отключить звук на сайте}one{Отключить звук на сайтах}few{Отключить звук на сайтах}many{Отключить звук на сайтах}other{Отключить звук на сайтах}}</translation> <translation id="8373652277231415614">Общие каталоги Crostini</translation> +<translation id="8374243500935816406">Запретить сайтам управление окнами на всех ваших экранах</translation> <translation id="8376137163494131156">Отправьте нам отзыв о Google Cast</translation> <translation id="8376384591331888629">В том числе сторонние файлы cookie на сайте</translation> <translation id="8376451933628734023">Если разработчики пытаются выдать это веб-приложение за другое, удалите его.</translation> @@ -7980,6 +7991,7 @@ <translation id="8670537393737592796">Для удобства дальнейшего использования установите "<ph name="APP_NAME" />", нажав кнопку установки</translation> <translation id="867085395664725367">Произошла ошибка сервера.</translation> <translation id="8673026256276578048">Поиск в Интернете...</translation> +<translation id="867329473311423817">Сайты, которым разрешено управление окнами на всех ваших экранах</translation> <translation id="8673383193459449849">Неполадка сервера</translation> <translation id="8674903726754070732">В настройках компьютера указан неверный аппаратный идентификатор устройства. Chrome OS не сможет устанавливать обновления системы безопасности для защиты компьютера от <ph name="BEGIN_BOLD" />вредоносных атак<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Не удалось найти подходящее место назначения для установки <ph name="DEVICE_OS" />.</translation> @@ -8000,6 +8012,7 @@ <translation id="8683081248374354009">Сбросить настройки группы</translation> <translation id="8688672835843460752">Свободно</translation> <translation id="8690129572193755009">Разрешить сайтам отправлять запрос на обработку протоколов</translation> +<translation id="8692107307702113268">В пароле более 1000 символов.</translation> <translation id="8695139659682234808">Включите родительский контроль после настройки</translation> <translation id="8695825812785969222">Открыть &адрес...</translation> <translation id="8698269656364382265">Чтобы вернуться на предыдущий экран, проведите слева направо.</translation> @@ -8283,6 +8296,7 @@ <translation id="8960638196855923532">Теперь вы можете просматривать уведомления и приложения с телефона</translation> <translation id="8962051932294470566">За раз можно поделиться только одним файлом. Повторите попытку, когда завершится текущая передача данных.</translation> <translation id="8962083179518285172">Скрыть детали</translation> +<translation id="8962863356073277855">URL необходимо указать в формате https://www.example.com.</translation> <translation id="8962918469425892674">Этот сайт использует датчики движения и освещенности</translation> <translation id="8965037249707889821">Введите старый пароль</translation> <translation id="89667524227025535">Отсканируйте QR-код с помощью камеры устройства или введите код активации, предоставленный вашим оператором связи.</translation> @@ -8553,6 +8567,7 @@ <translation id="9220525904950070496">Удалить аккаунт</translation> <translation id="9220820413868316583">Поднимите палец и попробуйте ещё раз.</translation> <translation id="922152298093051471">Настроить Chrome</translation> +<translation id="9222839025964079645">Неимпортированных паролей: <ph name="COUNT" /></translation> <translation id="923467487918828349">Показать все</translation> <translation id="924818813611903184">Управление языковыми параметрами в настройках Chrome OS</translation> <translation id="929117907539171075">Офлайн-данные в установленном приложении будут также удалены.</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 1883c82..e980ba8 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">පෞද්ගලිකත්ව මධ්යස්ථානය</translation> <translation id="117445914942805388">ඔබේ සියලුම සමමුහුර්ත කළ උපාංගවලින් සහ ඔබේ Google ගිණුමෙන් බ්රවුස් කිරීමේ දත්ත හිස් කිරීමට, <ph name="BEGIN_LINK" />සමමුහුර්ත සැකසීම් වෙත පැමිණෙන්න<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&මුද්රණය...</translation> +<translation id="1176378369905028399">මෙම ගිණුම සඳහා මුරපදයක් දැනටමත් ඔබේ Google මුරපද කළමනාකරු (<ph name="USER_EMAIL" />) තුළ ගබඩා කර ඇත</translation> <translation id="1176471985365269981">ඔබගේ උපාංගයෙහි ගොනු සහ ෆෝල්ඩර සංස්කරණය කිරීමට ඉඩ නොදේ</translation> <translation id="1177863135347784049">සැකසුම්</translation> <translation id="1178581264944972037">විරාමය</translation> @@ -794,6 +795,7 @@ <translation id="1745732479023874451">සම්බන්ධතා කළමනාකරණය කරන්න</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}one{මෙම වෙබ් යෙදුමේ ගොනු #ක් විවෘත කර සංස්කරණය කරන්නද?}other{මෙම වෙබ් යෙදුමේ ගොනු #ක් විවෘත කර සංස්කරණය කරන්නද?}}</translation> <translation id="1748563609363301860">ඔබට මෙම මුරපදය ඔබේ Google ගිණුම තුළ හෝ මෙම උපාංගයේ පමණක් සුරකිය හැක</translation> +<translation id="1749733017156547309">මුරපදයක් අවශ්යයි</translation> <translation id="1750172676754093297">ඔබේ ආරක්ෂක යතුරට ඇඟිලි සලකුණු ගබඩා කළ නොහැක.</translation> <translation id="1751249301761991853">පුද්ගලික</translation> <translation id="1751262127955453661">මෙම වෙබ් අඩවිය සඳහා වන පටිති සියල්ල වසන තෙක් <ph name="ORIGIN" /> හට <ph name="FOLDERNAME" /> තුළ ඇති ගොනු සංස්කරණ කිරීමට හැකි වෙයි</translation> @@ -1745,6 +1747,7 @@ <translation id="2602501489742255173">පටන් ගැනීමට උඩට ස්වයිප් කරන්න</translation> <translation id="2603115962224169880">පරිගණකය පිරිසිදු කරන්න</translation> <translation id="2603355571917519942">Voice Match සූදානම්</translation> +<translation id="2604129989323098489">අඩවි සාමාන්යයෙන් ඔබේ සංදර්ශක පිළිබඳ තොරතුරු විමසා සිටින අතර එමගින් ඔවුන්ට ලේඛන හෝ පූර්ණ තිර අන්තර්ගතය පසෙකින් පෙන්වීම වැනි, බුද්ධිමත්ව කවුළු විවෘත කර තැබීමට හැක</translation> <translation id="2604255671529671813">ජාල සබැඳුම් දෝෂය</translation> <translation id="2605668923777146443">Better Together සඳහා ඔබගේ විකල්ප බැලීමට, <ph name="LINK_BEGIN" />සැකසීම්<ph name="LINK_END" /> වෙත යන්න.</translation> <translation id="2606246518223360146">සබැඳි දත්ත</translation> @@ -1790,6 +1793,7 @@ <translation id="2645047101481282803">ඔබගේ උපාංගය <ph name="PROFILE_NAME" /> විසින් කළමනාකරණය කෙරේ.</translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{මෙම උපාංගයට 1 මුරපදයක් ආයාත කර ඇත}one{මෙම උපාංගයට මුරපද {NUM_PASSWORDS}ක් ආයාත කර ඇත}other{මෙම උපාංගයට මුරපද {NUM_PASSWORDS}ක් ආයාත කර ඇත}}</translation> <translation id="2645435784669275700">ChromeOS</translation> +<translation id="2645515095874728277">මෙම ගිණුම සඳහා මුරපදයක් දැනටමත් මෙම උපාංගයෙහි ගබඩා කර ඇත</translation> <translation id="2649045351178520408">මූල64-සංකේතිත ASCII, සහතික මාලාව</translation> <translation id="2652129567809778422">මුරපදය තෝරන්න</translation> <translation id="2653033005692233957">සෙවීම අසමත් විය</translation> @@ -2150,6 +2154,7 @@ <translation id="2972581237482394796">&නැවත කරන්න</translation> <translation id="2973324205039581528">අඩවිය නිහඬ කරන්න</translation> <translation id="2973537811036309675">පැති පැනලය</translation> +<translation id="2975761176769946178">URL එකක් අවශ්ය වේ</translation> <translation id="2976557544729462544">නිසියාකාරව හෝ පූර්ණ කාර්ය සාධනයෙන් යුතුව ක්රියා කිරීමට සමහර උපාංගවලට ඔබ දත්ත ප්රවේශ ආරක්ෂාව අබල කිරීම අවශ්ය වේ.</translation> <translation id="2977480621796371840">කණ්ඩායමෙන් ඉවත් කරන්න</translation> <translation id="2979639724566107830">නව කවුළුවක විවෘත කරන්න</translation> @@ -2391,6 +2396,7 @@ <translation id="3227137524299004712">මයික්රෆෝනය:</translation> <translation id="3232754137068452469">වෙබ් යෙදුම</translation> <translation id="3233271424239923319">ලිනක්ස් යෙදුම් සහ ගොනු උපස්ථ කරන්න</translation> +<translation id="3234251228180563751">පරිශීලක නම අනුලකුණු 1000කට වඩා වැඩියි</translation> <translation id="3234978181857588512">උපාංගය වෙත සුරකින්න</translation> <translation id="3238192140106069382">සම්බන්ධ කරමින් සහ සත්යාපනය කරමින්</translation> <translation id="3239373508713281971"><ph name="APP_NAME" /> සඳහා වන කාල සීමාව</translation> @@ -5210,6 +5216,7 @@ <translation id="5975792506968920132">බැටරි ආරෝපක ප්රතිශතය</translation> <translation id="5976160379964388480">වෙනත්</translation> <translation id="5978277834170881274">&මූලික අක්ෂර වින්යාස පරීක්ෂාව භාවිත කරන්න</translation> +<translation id="5978493744931296692">ඔබේ පරිපාලකයා වෙනත් පැතිකඩ අබල කර ඇත</translation> <translation id="5979084224081478209">මුරපද පරීක්ෂා කරන්න</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{ඔබ 1 හානිකර විය හැකි දිගුවක් ආපසු සක්රීය කර ඇත}one{ඔබ හානිකර විය හැකි දිගු {NUM_EXTENSIONS} ක් ආපසු සක්රීය කර ඇත}other{ඔබ හානිකර විය හැකි දිගු {NUM_EXTENSIONS} ක් ආපසු සක්රීය කර ඇත}}</translation> <translation id="5979353814339191480">මෙම විකල්පය දත්ත සැලැස්මක් හෝ ජංගම ජාල ඩොංගලයක් සහිත Chromebooks සඳහා හෝ අතේ ගෙන යා හැකි හොට්ස්පොට් එකකට සම්බන්ධ වන විට අදාළ වේ</translation> @@ -5374,6 +5381,7 @@ <translation id="6130692320435119637">Wi-Fi එක් කරන්න</translation> <translation id="6130887916931372608">යතුරු පුවරු යතුර</translation> <translation id="6135823405800500595">ඔබගේ දුරකථනය ළඟ තිබෙන බව, අගුලු හැර ඇති බව, බ්ලූටූත් සහ Wi-Fi ක්රියාත්මක කර ඇති බව සහතික කර ගන්න</translation> +<translation id="6135826623269483856">ඔබේ සියලු සංදර්ශකවල කවුළු කළමනාකරණය කිරීමට ඉඩ නොදෙයි</translation> <translation id="6136114942382973861">බාගැනීම් තීරුව වසන්න</translation> <translation id="6136287496450963112">ඔබගේ ආරක්ෂක යතුර PIN අංකයකින් ආරක්ෂා නොකෙරේ. ඇඟිලි සලකුණු කළමනාකරණය කිරීමට, පළමුව PIN එකක් තනන්න.</translation> <translation id="6138680304137685902">SHA-384 සහිත X9.62 ECDSA අත්සන</translation> @@ -7378,6 +7386,7 @@ <ph name="BEGIN_PARAGRAPH3" />ඔබට සැකසීම්වල මෙම සේවාව ක්රියාවිරහිත කළ හැකිය.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">පටිති</translation> <translation id="8076835018653442223">ඔබේ උපාංගයේ ස්ථානීය ගොනුවලට ප්රවේශය ඔබේ පරිපාලක අබල කර ඇත</translation> +<translation id="80798452873915119">ඔබේ සියලු සංදර්ශකවල කවුළු කළමනාකරණය කිරීමට අඩවිවලට විමසිය හැක</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">ඔබගේ සැසිය <ph name="MANAGER_NAME" /> විසින් කළමනාකරණය කෙරේ. පරිපාලකයින්ට ඔබගේ පැතිකඩ මැකීමට සහ ඔබගේ ජාල තදබදය නිරීක්ෂණය කිරීමටද හැකිය.</translation> <translation id="8081989000209387414">ADB නිදොස් කිරීම අබල කරන්නද?</translation> @@ -7517,6 +7526,7 @@ <translation id="820568752112382238">වැඩියෙන් පැමිණි වෙබ් අඩවි</translation> <translation id="8206745257863499010">බ්ලූසි</translation> <translation id="8206859287963243715">සෙලියුලර්</translation> +<translation id="8208216423136871611">සුරකින්න එපා</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{නව දැනුම්දීම}one{නව දැනුම්දීම් #}other{නව දැනුම්දීම් #}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{බාගැනීම ක්රියාවේ පවතියි}one{බාගැනීම් ක්රියාවේ පවතියි}other{බාගැනීම් ක්රියාවේ පවතියි}}</translation> <translation id="8213449224684199188">ඡායාරූප ප්රකාරය ඇතුළු කෙරිණි</translation> @@ -7682,6 +7692,7 @@ <translation id="8371695176452482769">දැන් පවසන්න</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{වෙබ් අඩවිය නිහඬ කරන්න}one{වෙබ් අඩවි නිහඬ කරන්න}other{වෙබ් අඩවි නිහඬ කරන්න}}</translation> <translation id="8373652277231415614">Crostini බෙදාගත් නාමාවලි</translation> +<translation id="8374243500935816406">ඔබේ සියලු සංදර්ශකවල කවුළු කළමනාකරණය කිරීමට අඩවිවලට ඉඩ නොදෙන්න</translation> <translation id="8376137163494131156">Google Cast සමඟ සිදුවන දේ ගැන අපට කියන්න.</translation> <translation id="8376384591331888629">මෙම අඩවියෙහි තෙවන පාර්ශ්ව කුකි ඇතුළුව</translation> <translation id="8376451933628734023">මෙම වෙබ් යෙදුම එය වෙනත් යෙදුමක් යැයි සිතීමට ඔබව රැවටීමට උත්සාහ කරන්නේ නම්, එය අස්ථාපනය කරන්න.</translation> @@ -7976,6 +7987,7 @@ <translation id="8670537393737592796">ඉක්මනින් ආපසු මෙහි පැමිණීමට, ස්ථාපනය කරන්න බොත්තම එබීමෙන් <ph name="APP_NAME" /> ස්ථාපනය කරන්න</translation> <translation id="867085395664725367">තාවකාලික සේවාදායක දෝෂයක් ඇති විය.</translation> <translation id="8673026256276578048">ජාලයේ සොයන්න...</translation> +<translation id="867329473311423817">ඔබේ සියලු සංදර්ශකවල කවුළු කළමනාකරණය කිරීමට ඉඩ ඇත</translation> <translation id="8673383193459449849">සර්වර ගැටළුව</translation> <translation id="8674903726754070732">අවාසනාවකට, ඔබගේ පරිගණකය විකෘති වූ දෘඪාංග ID එකක් සමගින් වින්යාස කර තිබේ. මෙය ChromeOS නවතම ආරක්ෂක විසඳුම්වලින් යාවත්කාලීන වීම වළක්වන අතර ඔබගේ පරිගණකය <ph name="BEGIN_BOLD" />අනිෂ්ට ප්රහාරවලට ලක් වීමට ඉඩ තිබේ<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">ස්ථාපකයට <ph name="DEVICE_OS" /> ස්ථාපනය කිරීමට වලංගු ගමනාන්තයක් සොයා ගැනීමට නොහැකි විය.</translation> @@ -7996,6 +8008,7 @@ <translation id="8683081248374354009">සමූහය යළි සකසන්න</translation> <translation id="8688672835843460752">තිබේ</translation> <translation id="8690129572193755009">අඩවි ප්රොටොකෝල හැසිරවීමට ඉල්ලිය හැකිය</translation> +<translation id="8692107307702113268">මුරපදය අනුලකුණු 1000කට වඩා වැඩියි</translation> <translation id="8695139659682234808">පිහිටුවීමෙන් පසු මාපිය පාලන එක් කරන්න</translation> <translation id="8695825812785969222">ස්ථානය විවෘත කරන්න (&L)...</translation> <translation id="8698269656364382265">පෙර තිරයට ආපසු යාමට, වම් පැත්තෙන් ස්වයිප් කරන්න.</translation> @@ -8277,6 +8290,7 @@ <translation id="8960638196855923532">ඔබට දැන් ඔබගේ දුරකථනයේ දැනුම්දීම් සහ යෙදුම් බැලිය හැකිය</translation> <translation id="8962051932294470566">ඔබට වරකට එක් ගොනුවක් පමණක් බෙදා ගත හැකිය. වත්මන් මාරුව අවසන් වූ විට නැවත උත්සාහ කරන්න.</translation> <translation id="8962083179518285172">විස්තර සඟවන්න</translation> +<translation id="8962863356073277855">URL ආකෘතිය https://www.example.com විය යුතු වේ</translation> <translation id="8962918469425892674">මෙම අඩවිය චලන හෝ ආලෝක සංවේදක භාවිතා කරයි.</translation> <translation id="8965037249707889821">පැරණි රහස් වචනය ඇතුළු කරන්න</translation> <translation id="89667524227025535">උපාංග කැමරාව භාවිතයෙන් QR කේතයක් ස්කෑන් කරන්න හෝ ඔබගේ වාහකය විසින් සපයන ලද සක්රිය කිරීමේ කේතය ඇතුළත් කරන්න</translation> @@ -8547,6 +8561,7 @@ <translation id="9220525904950070496">ගිනුම ඉවත් කරන්න</translation> <translation id="9220820413868316583">ඔසවා යළි උත්සාහ කරන්න.</translation> <translation id="922152298093051471">Chrome අභිරුචිකරණය කරන්න</translation> +<translation id="9222839025964079645">මුරපද ආයාත කර නැත (<ph name="COUNT" />)</translation> <translation id="923467487918828349">සියල්ල පෙන්වන්න</translation> <translation id="924818813611903184">ChromeOS සැකසීම් තුළ භාෂා කළමනාකරණය කරන්න</translation> <translation id="929117907539171075">ස්ථාපිත යෙදුමේ නොබැඳි දත්ත ද හිස් කෙරේ</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 6445c39..25234e2 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -512,6 +512,7 @@ <translation id="1480663089572535854">Môžete sa vrátiť a zmeniť pridelenie prepínača akcii Vybrať. Automatické prehľadávanie môžete kedykoľvek vypnúť v Nastaveniach.</translation> <translation id="1481537595330271162">Pri menení veľkosti disku sa vyskytla chyba</translation> <translation id="1482626744466814421">Pridať kartu medzi záložky…</translation> +<translation id="1482772681918035149">upraviť heslá</translation> <translation id="1483493594462132177">Odoslať</translation> <translation id="1484979925941077974">Web používa Bluetooth</translation> <translation id="1485015260175968628">Teraz môže:</translation> @@ -526,6 +527,7 @@ <translation id="1500801317528437432">Ďalšie informácie o nepodporovaných aplikáciách pre Chrome</translation> <translation id="150411034776756821">Odstrániť <ph name="SITE" /></translation> <translation id="1504551620756424144">Zdieľané priečinky sú k dispozícii v systéme Windows v adresári <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">exportovať heslá</translation> <translation id="1506061864768559482">Vyhľadávač</translation> <translation id="1507170440449692343">Táto stránka má zablokovaný prístup ku kamere.</translation> <translation id="1507246803636407672">&Zahodiť</translation> @@ -600,6 +602,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (hosť)</translation> <translation id="1572266655485775982">Povolenie Wi‑Fi</translation> <translation id="1572876035008611720">Zadajte svoj e-mail</translation> +<translation id="1573117025466282241">Použiť telefón s QR kódom</translation> <translation id="1575741822946219011">Jazyky a vstupy</translation> <translation id="1576594961618857597">Predvolený biely avatar</translation> <translation id="1578558981922970608">Vynútiť zavretie</translation> @@ -2962,6 +2965,7 @@ <translation id="3778740492972734840">&Nástroje pre vývojárov</translation> <translation id="3778868487658107119">Môžete mu klásť otázky. Môžete mu zadávať príkazy. Je to váš osobný Google, ktorý je vždy pripravený pomôcť.</translation> <translation id="3781742599892759500">Prístup k mikrofónu v systéme Linux</translation> +<translation id="3783889407390048282">Ak nechcete prísť o prístup k Androidu, uvoľnite priestor</translation> <translation id="3784472333786002075">Súbory cookie sú vytvárané webmi. Existujú dva typy súborov cookie: súbory cookie hostiteľskej domény sú vytvorené webom, ktorý navštívite. Tento web je uvedený v paneli s adresou. Súbory cookie tretích strán sú vytvárané ďalšími webmi. Tieto weby sú vlastníkmi niektorého obsahu (napríklad reklám alebo obrázkov), ktorý sa vám pri ich návšteve zobrazuje.</translation> <translation id="3785308913036335955">Zobrazovať odkaz aplikácií</translation> <translation id="3785727820640310185">Uložené heslá pre tento web</translation> @@ -4274,6 +4278,7 @@ <translation id="5066100345385738837">Správa zabezpečeného DNS v nastaveniach systému Chrome OS</translation> <translation id="5067399438976153555">Vždy zapnuté</translation> <translation id="5067867186035333991">Opýtať sa, ak chcú stránky <ph name="HOST" /> pristupovať k mikrofónu</translation> +<translation id="5068553687099139861">zobrazovať heslá</translation> <translation id="5068918910148307423">Nepovoliť nedávno zatvoreným stránkam dokončiť posielanie a prijímanie dát</translation> <translation id="5068919226082848014">Pizza</translation> <translation id="5070710277167211639">Inovujte navigácie na protokol HTTPS a dostávajte upozornenia pred načítaním webov, ktoré ho nepodporujú</translation> @@ -6429,6 +6434,7 @@ <translation id="7152478047064750137">Toto rozšírenie nevyžaduje žiadne špeciálne povolenia</translation> <translation id="7154130902455071009">Zmeniť úvodnú stránku na: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Existujúca fotka z fotoaparátu alebo súboru</translation> +<translation id="7159953856712257647">Predvolene nainštalované</translation> <translation id="7160182524506337403">Teraz si môžete zobraziť upozornenia svojho telefónu</translation> <translation id="7163202347044721291">Overuje sa aktivačný kód…</translation> <translation id="716640248772308851">Rozšírenie <ph name="EXTENSION" /> môže čítať obrázky, video a zvukové súbory vo vybratých umiestneniach.</translation> @@ -7528,6 +7534,7 @@ <translation id="820568752112382238">Najnavštevovanejšie weby</translation> <translation id="8206745257863499010">Bluesový</translation> <translation id="8206859287963243715">Mobilné</translation> +<translation id="8208216423136871611">Neuložiť</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nové upozornenie}few{# nové upozornenia}many{# new notifications}other{# nových upozornení}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Sťahuje sa}few{Sťahujú sa}many{Sťahujú sa}other{Sťahujú sa}}</translation> <translation id="8213449224684199188">Bol aktivovaný fotografický režim</translation> @@ -7640,6 +7647,7 @@ <translation id="8314835274931377415">Chcete spustiť nastavenie ovládania prepínačmi?</translation> <translation id="8317582043908962055">Rozpoznávať text PDF</translation> <translation id="8317671367883557781">Pridať sieťové pripojenie</translation> +<translation id="8317965619823678157">kopírovať heslá</translation> <translation id="8318266828739827371">Zväčšenú oblasť obrazovky si môžete zobraziť pomocou rozdelenej obrazovky. Ukotvenú lupu zapnete alebo vypnete klávesovou skratkou Hľadať + Ctrl + D.</translation> <translation id="8319414634934645341">Rozšírené použitie kľúča</translation> <translation id="8321837372750396788">Toto zariadenie <ph name="DEVICE_TYPE" /> bude spravovať <ph name="MANAGER" />.</translation> @@ -8569,6 +8577,7 @@ <translation id="929117907539171075">Budú vymazané aj offline údaje v nainštalovanej aplikácii</translation> <translation id="930268624053534560">Podrobné časové pečiatky</translation> <translation id="930893132043726269">Momentálne používate roaming</translation> +<translation id="93140074055951850">Aplikácie pre Android boli zastavené</translation> <translation id="932327136139879170">Domov</translation> <translation id="932508678520956232">Nepodarilo sa spustiť tlač.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Tento súbor je príliš veľký na kontrolu. Nahrať môžete súbory s veľkosťou do 50 MB.}few{Niektoré tieto súbory sú príliš veľké na kontrolu. Nahrať môžete súbory s veľkosťou do 50 MB.}many{Niektoré tieto súbory sú príliš veľké na kontrolu. Nahrať môžete súbory s veľkosťou do 50 MB.}other{Niektoré tieto súbory sú príliš veľké na kontrolu. Nahrať môžete súbory s veľkosťou do 50 MB.}}</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 5769c96..2d51e0c 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -7556,6 +7556,7 @@ <translation id="820568752112382238">Najbolj obiskana spletna mesta</translation> <translation id="8206745257863499010">Glasbenik</translation> <translation id="8206859287963243715">Prenosni</translation> +<translation id="8208216423136871611">Ne shrani</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Novo obvestilo}one{# novo obvestilo}two{# novi obvestili}few{# nova obvestila}other{# novih obvestil}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Poteka prenos}one{Poteka prenos}two{Potekata prenosa}few{Potekajo prenosi}other{Potekajo prenosi}}</translation> <translation id="8213449224684199188">Izbran je način za fotografije</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 94c0a1c..04adc20 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -194,6 +194,7 @@ <translation id="1174391930667737831">Qendra e privatësisë</translation> <translation id="117445914942805388">Për të pastruar të dhënat e shfletimit nga të gjitha pajisjet e tua të sinkronizuara dhe nga "Llogaria e Google", <ph name="BEGIN_LINK" />vizito cilësimet e sinkronizimit<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Printo...</translation> +<translation id="1176378369905028399">Një fjalëkalim për këtë llogari është ruajtur tashmë te "Menaxheri i fjalëkalimeve i Google" (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">Nuk lejohen të modifikojnë skedarët ose dosjet në pajisjen tënde</translation> <translation id="1177863135347784049">E personalizuar</translation> <translation id="1178581264944972037">Pauzë</translation> @@ -791,6 +792,7 @@ <translation id="1745732479023874451">Menaxho kontaktet</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{Të hapen dhe të modifikohen # skedarë në këtë aplikacion uebi?}}</translation> <translation id="1748563609363301860">Mund ta ruash këtë fjalëkalim në "Llogarinë tënde të Google" ose vetëm në këtë pajisje</translation> +<translation id="1749733017156547309">Kërkohet një fjalëkalim</translation> <translation id="1750172676754093297">Çelësi yt i sigurisë nuk mund t'i ruajë gjurmët e gishtave</translation> <translation id="1751249301761991853">Personale</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> do të mund t'i modifikojë skedarët në <ph name="FOLDERNAME" /> deri sa t'i mbyllësh të gjitha skedat për këtë sajt</translation> @@ -1739,6 +1741,7 @@ <translation id="2602501489742255173">Rrëshqit shpejt lart për të filluar</translation> <translation id="2603115962224169880">Pastro kompjuterin</translation> <translation id="2603355571917519942">Voice Match është gati</translation> +<translation id="2604129989323098489">Sajtet zakonisht kërkojnë informacione për ekranet e tua që të mund t'i hapin dhe t'i vendosin dritaret në mënyrë inteligjente, si p.sh. duke i shfaqur krah për krah përmbajtjet në ekran të plotë dhe dokumentet</translation> <translation id="2604255671529671813">Gabim në lidhjen e rrjetit</translation> <translation id="2605668923777146443">Shko te <ph name="LINK_BEGIN" />Cilësimet<ph name="LINK_END" /> për të parë opsionet e tua për Better Together.</translation> <translation id="2606246518223360146">Lidh të dhënat</translation> @@ -1784,6 +1787,7 @@ <translation id="2645047101481282803">Pajisja jote menaxhohet nga <ph name="PROFILE_NAME" /></translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 fjalëkalim u importua në këtë pajisje}other{{NUM_PASSWORDS} fjalëkalime u importuan në këtë pajisje}}</translation> <translation id="2645435784669275700">ChromeOS</translation> +<translation id="2645515095874728277">Një fjalëkalim për këtë llogari është ruajtur tashmë në këtë pajisje</translation> <translation id="2649045351178520408">ASCII i koduar me Base64, zinxhir certifikatash</translation> <translation id="2652129567809778422">Zgjidh fjalëkalimin</translation> <translation id="2653033005692233957">Kërkimi dështoi</translation> @@ -2144,6 +2148,7 @@ <translation id="2972581237482394796">&Ribëje</translation> <translation id="2973324205039581528">Hiq zërin e sajtit</translation> <translation id="2973537811036309675">Paneli anësor</translation> +<translation id="2975761176769946178">Kërkohet një URL</translation> <translation id="2976557544729462544">Disa pajisje kërkojnë që të çaktivizosh mbrojtjen e qasjes te të dhënat për të funksionuar siç duhet ose me cilësi funksionimi të plotë.</translation> <translation id="2977480621796371840">Hiq nga grupi</translation> <translation id="2979639724566107830">Hape në një dritare të re</translation> @@ -2385,6 +2390,7 @@ <translation id="3227137524299004712">Mikrofoni</translation> <translation id="3232754137068452469">Aplikacioni i uebit</translation> <translation id="3233271424239923319">Rezervo aplikacionet dhe skedarët Linux</translation> +<translation id="3234251228180563751">Emri i përdoruesit është më shumë se 1000 karaktere</translation> <translation id="3234978181857588512">Ruaj te pajisja</translation> <translation id="3238192140106069382">Po lidh dhe po verifikon</translation> <translation id="3239373508713281971">Kufiri kohor u hoq për <ph name="APP_NAME" /></translation> @@ -4138,7 +4144,7 @@ <translation id="4918021164741308375"><ph name="ORIGIN" /> kërkon të komunikojë me shtesën "<ph name="EXTENSION_NAME" />"</translation> <translation id="4918086044614829423">Prano</translation> <translation id="4918134162946436591">Shfaq mbivendosjen e sugjerimit</translation> -<translation id="4921348630401250116">Tekst-në-ligjërim</translation> +<translation id="4921348630401250116">Tekst në ligjërim</translation> <translation id="492299503953721473">Hiq aplikacionet Android</translation> <translation id="492363500327720082"><ph name="APP_NAME" /> po çinstalohet...</translation> <translation id="4924002401726507608">Dërgo komentet</translation> @@ -5202,6 +5208,7 @@ <translation id="5975792506968920132">Përqindja e ngarkimit të baterisë</translation> <translation id="5976160379964388480">Të tjera</translation> <translation id="5978277834170881274">&Përdor kontrolluesin drejtshkrimor bazë</translation> +<translation id="5978493744931296692">Administratori yt i ka çaktivizuar profilet e tjera</translation> <translation id="5979084224081478209">Kontrollo fjalëkalimet</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Aktivizove përsëri 1 shtesë që mund të jetë e dëmshme}other{Aktivizove përsëri {NUM_EXTENSIONS} shtesa që mund të jenë të dëmshme}}</translation> <translation id="5979353814339191480">Ky opsion zbatohet për pajisjet Chromebook me plan të dhënash ose paketë celulare rrjeti ose kur ndahet interneti me një zonë të lëvizshme për qasje për internet</translation> @@ -5366,6 +5373,7 @@ <translation id="6130692320435119637">Shto Wi-Fi</translation> <translation id="6130887916931372608">Tasti i tastierës</translation> <translation id="6135823405800500595">Sigurohu që telefoni yt të jetë pranë, i shkyçur dhe që Bluetooth-i dhe Wi-Fi të jenë të aktivizuar.</translation> +<translation id="6135826623269483856">Nuk lejohen të menaxhojnë dritaret në të gjitha ekranet e tua</translation> <translation id="6136114942382973861">Mbyll shiritin e shkarkimeve</translation> <translation id="6136287496450963112">Çelësi yt i sigurisë nuk është i mbrojtur me një kod PIN. Për të menaxhuar gjurmët e gishtave, në fillim krijo një kod PIN.</translation> <translation id="6138680304137685902">Nënshkrimi X9.62 ECDSA me SHA-384</translation> @@ -7370,6 +7378,7 @@ <ph name="BEGIN_PARAGRAPH3" />Këtë shërbim mund ta çaktivizosh te "Cilësimet".<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Skedat</translation> <translation id="8076835018653442223">Qasja në skedarët lokalë në pajisjen tënde është e çaktivizuar nga administratori yt</translation> +<translation id="80798452873915119">Sajtet mund të kërkojnë të menaxhojnë dritaret në të gjitha ekranet e tua</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Sesioni yt menaxhohet nga <ph name="MANAGER_NAME" />. Administratorët mund ta fshijnë profilin tënd dhe gjithashtu të monitorojnë trafikun e rrjetit tënd.</translation> <translation id="8081989000209387414">Të çaktivizohet korrigjimi i ADB-së?</translation> @@ -7509,6 +7518,7 @@ <translation id="820568752112382238">Sajtet më të vizituara</translation> <translation id="8206745257863499010">Bluzi</translation> <translation id="8206859287963243715">Rrjeti celular</translation> +<translation id="8208216423136871611">Mos e ruaj</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Njoftim i ri}other{# njoftime të reja}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Shkarkimi është në vazhdim}other{Shkarkimet janë në vazhdim}}</translation> <translation id="8213449224684199188">Kalove te modaliteti i fotografisë</translation> @@ -7674,6 +7684,7 @@ <translation id="8371695176452482769">Fol tani</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Çaktivizo zërin e sajtit}other{Çaktivizo zërin e sajteve}}</translation> <translation id="8373652277231415614">Direktoritë e ndara të Crostini</translation> +<translation id="8374243500935816406">Mos i lejo sajtet të menaxhojnë dritaret në të gjitha ekranet e tua</translation> <translation id="8376137163494131156">Na trego se çfarë po ndodh me Google Cast.</translation> <translation id="8376384591331888629">Duke përfshirë kukit e palëve të treta në këtë sajt</translation> <translation id="8376451933628734023">Nëse ky aplikacion uebi po përpiqet të ta hedhë që të mendosh se është aplikacion tjetër, çinstaloje.</translation> @@ -7968,6 +7979,7 @@ <translation id="8670537393737592796">Për t'u kthyer shpejt këtu, instalo <ph name="APP_NAME" /> duke klikuar butonin e instalimit</translation> <translation id="867085395664725367">Ndodhi një gabim i përkohshëm i serverit.</translation> <translation id="8673026256276578048">Kërko në ueb...</translation> +<translation id="867329473311423817">Lejohen të menaxhojnë dritaret në të gjitha ekranet e tua</translation> <translation id="8673383193459449849">Problem në server</translation> <translation id="8674903726754070732">Fatkeqësisht, kompjuteri yt është konfiguruar me një ID hardueri të keqformuar. Kjo parandalon përditësimin e CromeOS me rregullimet më të fundit të sigurisë dhe kompjuteri yt <ph name="BEGIN_BOLD" />mund të jetë i cenueshëm ndaj sulmeve keqdashëse<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Instaluesi nuk mund të gjente një destinacion të vlefshëm për të instaluar <ph name="DEVICE_OS" />.</translation> @@ -7988,6 +8000,7 @@ <translation id="8683081248374354009">Rivendos grupin</translation> <translation id="8688672835843460752">E disponueshme</translation> <translation id="8690129572193755009">Sajtet mund të kërkojnë të menaxhojnë protokollet</translation> +<translation id="8692107307702113268">Fjalëkalimi është më shumë se 1000 karaktere</translation> <translation id="8695139659682234808">Shto kontrollet prindërore pas konfigurimit</translation> <translation id="8695825812785969222">Hap &vendndodhjen...</translation> <translation id="8698269656364382265">Për t'u kthyer në ekranin e mëparshëm, rrëshqit shpejt nga ana e majtë.</translation> @@ -8268,6 +8281,7 @@ <translation id="8960638196855923532">Tani mund të shikosh njoftimet dhe aplikacionet e telefonit</translation> <translation id="8962051932294470566">Mund të ndash vetëm një skedar në të njëjtën kohë. Provo përsëri kur të ketë përfunduar transferimi aktual.</translation> <translation id="8962083179518285172">Fshih detajet</translation> +<translation id="8962863356073277855">Formati i URL-së duhet të jetë https://www.example.com</translation> <translation id="8962918469425892674">Kjo faqe përdor sensorët e lëvizjes ose të dritës.</translation> <translation id="8965037249707889821">Fut fjalëkalimin e vjetër</translation> <translation id="89667524227025535">Skano një kod QR duke përdorur kamerën e pajisjes sate ose fut kodin e aktivizimit të ofruar nga operatori yt</translation> @@ -8538,6 +8552,7 @@ <translation id="9220525904950070496">Hiq llogarinë</translation> <translation id="9220820413868316583">Ngrije dhe më pas provo përsëri.</translation> <translation id="922152298093051471">Personalizo Chrome</translation> +<translation id="9222839025964079645">Fjalëkalimet nuk u importuan (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Shfaqi të gjitha</translation> <translation id="924818813611903184">Menaxho gjuhët te cilësimet e ChromeOS</translation> <translation id="929117907539171075">Do të fshihen gjithashtu edhe të dhënat jashtë linje në aplikacionin e instaluar</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 3648f35..4b26f019 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -512,6 +512,7 @@ <translation id="1480663089572535854">Možete da se vratite da promenite dodelu za Izaberi. Uvek možete da isključite automatsko skeniranje u Podešavanjima.</translation> <translation id="1481537595330271162">Greška pri menjanju veličine diska</translation> <translation id="1482626744466814421">Obeleži ovu karticu...</translation> +<translation id="1482772681918035149">izmeni lozinke</translation> <translation id="1483493594462132177">Pošalji</translation> <translation id="1484979925941077974">Sajt koristi Bluetooth</translation> <translation id="1485015260175968628">Sada može da:</translation> @@ -526,6 +527,7 @@ <translation id="1500801317528437432">Saznajte više o nepodržanim Chrome aplikacijama</translation> <translation id="150411034776756821">Ukloni <ph name="SITE" /></translation> <translation id="1504551620756424144">Deljeni direktorijumi su dostupni u Windows-u na <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">izveze lozinke</translation> <translation id="1506061864768559482">Pretraživač</translation> <translation id="1507170440449692343">Ovoj stranici je zabranjen pristup kameri.</translation> <translation id="1507246803636407672">&Odbaci</translation> @@ -2960,6 +2962,7 @@ <translation id="3778740492972734840">&Alatke za programere</translation> <translation id="3778868487658107119">Postavljajte mu pitanja. Dajte mu da radi nešto. To je vaš lični Google, uvek na usluzi.</translation> <translation id="3781742599892759500">Pristup mikrofonu za Linux</translation> +<translation id="3783889407390048282">Oslobodite prostor da ne biste izgubili pristup Android-u.</translation> <translation id="3784472333786002075">Kolačići su datoteke koje prave veb-sajtovi. Postoje dva tipa kolačića: Kolačiće prve strane pravi sajt koji posećujete. Sajt je prikazan na traci za adresu. Kolačiće treće strane prave drugi sajtovi. Ti sajtovi su vlasnici delova sadržaja koji vidite na posećenom veb-sajtu, poput oglasa ili slika.</translation> <translation id="3785308913036335955">Prikaži prečicu za aplikacije</translation> <translation id="3785727820640310185">Sačuvane lozinke za ovaj sajt</translation> @@ -4272,6 +4275,7 @@ <translation id="5066100345385738837">Upravljajte bezbednim DNS-om u podešavanjima Chrome OS-a</translation> <translation id="5067399438976153555">Uvek uključeno</translation> <translation id="5067867186035333991">Pitaj me ako <ph name="HOST" /> želi da pristupi mikrofonu</translation> +<translation id="5068553687099139861">prikaže lozinke</translation> <translation id="5068918910148307423">Ne dozvoljavaj da nedavno zatvoreni sajtovi završe slanje i primanje podataka</translation> <translation id="5068919226082848014">Pica</translation> <translation id="5070710277167211639">Nadograđuje navigacije na HTTPS i upozorava vas pre učitavanja sajtova koji ga ne podržavaju</translation> @@ -6427,6 +6431,7 @@ <translation id="7152478047064750137">Ovaj dodatak ne zahteva nikakve specijalne dozvole</translation> <translation id="7154130902455071009">Promenite početnu stranicu u: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Postojeća fotografija iz kamere ili datoteke</translation> +<translation id="7159953856712257647">Podrazumevano instalirano</translation> <translation id="7160182524506337403">Sada možete da pregledate obaveštenja na telefonu</translation> <translation id="7163202347044721291">Verifikuje se aktivacioni kôd…</translation> <translation id="716640248772308851">„<ph name="EXTENSION" />“ može da čita slike, video i audio datoteke na navedenim lokacijama.</translation> @@ -7526,6 +7531,7 @@ <translation id="820568752112382238">Najposećeniji sajtovi</translation> <translation id="8206745257863499010">Bluzi</translation> <translation id="8206859287963243715">Mobilni uređaj</translation> +<translation id="8208216423136871611">Ne čuvaj</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Novo obaveštenje}one{# novo obaveštenje}few{# nova obaveštenja}other{# novih obaveštenja}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Preuzimanje je u toku}one{Preuzimanja su u toku}few{Preuzimanja su u toku}other{Preuzimanja su u toku}}</translation> <translation id="8213449224684199188">Aktiviran je režim slika</translation> @@ -7638,6 +7644,7 @@ <translation id="8314835274931377415">Želite da započnete podešavanje Pristupa pomoću prekidača?</translation> <translation id="8317582043908962055">Prepoznaj P&DF tekst</translation> <translation id="8317671367883557781">Dodaj mrežnu vezu</translation> +<translation id="8317965619823678157">kopira lozinke</translation> <translation id="8318266828739827371">Koristite prikaz podeljenog ekrana da biste videli uvećanu oblast ekrana. Koristite taster za pretragu + Ctrl + D da biste uključili ili isključili montiranu lupu ekrana.</translation> <translation id="8319414634934645341">Upotreba proširenog ključa</translation> <translation id="8321837372750396788">Ovim <ph name="DEVICE_TYPE" /> će upravljati <ph name="MANAGER" />.</translation> @@ -8567,6 +8574,7 @@ <translation id="929117907539171075">Brišu se i oflajn podaci u instaliranoj aplikaciji</translation> <translation id="930268624053534560">Detaljne vremenske oznake</translation> <translation id="930893132043726269">Trenutno je u romingu</translation> +<translation id="93140074055951850">Android aplikacije su zaustavljene</translation> <translation id="932327136139879170">Početna</translation> <translation id="932508678520956232">Nije moguće pokrenuti štampanje.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Ova datoteka je prevelika za bezbednosnu proveru. Možete da otpremite datoteke veličine do 50 MB.}one{Neke od ovih datoteka su prevelike za bezbednosnu proveru. Možete da otpremite datoteke veličine do 50 MB.}few{Neke od ovih datoteka su prevelike za bezbednosnu proveru. Možete da otpremite datoteke veličine do 50 MB.}other{Neke od ovih datoteka su prevelike za bezbednosnu proveru. Možete da otpremite datoteke veličine do 50 MB.}}</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 11ec76e..1987a46 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -512,6 +512,7 @@ <translation id="1480663089572535854">Можете да се вратите да промените доделу за Изабери. Увек можете да искључите аутоматско скенирање у Подешавањима.</translation> <translation id="1481537595330271162">Грешка при мењању величине диска</translation> <translation id="1482626744466814421">Обележи ову картицу...</translation> +<translation id="1482772681918035149">измени лозинке</translation> <translation id="1483493594462132177">Пошаљи</translation> <translation id="1484979925941077974">Сајт користи Bluetooth</translation> <translation id="1485015260175968628">Сада може да:</translation> @@ -526,6 +527,7 @@ <translation id="1500801317528437432">Сазнајте више о неподржаним Chrome апликацијама</translation> <translation id="150411034776756821">Уклони <ph name="SITE" /></translation> <translation id="1504551620756424144">Дељени директоријуми су доступни у Windows-у на <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">извезе лозинке</translation> <translation id="1506061864768559482">Претраживач</translation> <translation id="1507170440449692343">Овој страници је забрањен приступ камери.</translation> <translation id="1507246803636407672">&Одбаци</translation> @@ -2960,6 +2962,7 @@ <translation id="3778740492972734840">&Алатке за програмере</translation> <translation id="3778868487658107119">Постављајте му питања. Дајте му да ради нешто. То је ваш лични Google, увек на услузи.</translation> <translation id="3781742599892759500">Приступ микрофону за Linux</translation> +<translation id="3783889407390048282">Ослободите простор да не бисте изгубили приступ Android-у.</translation> <translation id="3784472333786002075">Колачићи су датотеке које праве веб-сајтови. Постоје два типа колачића: Колачиће прве стране прави сајт који посећујете. Сајт је приказан на траци за адресу. Колачиће треће стране праве други сајтови. Ти сајтови су власници делова садржаја који видите на посећеном веб-сајту, попут огласа или слика.</translation> <translation id="3785308913036335955">Прикажи пречицу за апликације</translation> <translation id="3785727820640310185">Сачуване лозинке за овај сајт</translation> @@ -4272,6 +4275,7 @@ <translation id="5066100345385738837">Управљајте безбедним DNS-ом у подешавањима Chrome ОС-а</translation> <translation id="5067399438976153555">Увек укључено</translation> <translation id="5067867186035333991">Питај ме ако <ph name="HOST" /> жели да приступи микрофону</translation> +<translation id="5068553687099139861">прикаже лозинке</translation> <translation id="5068918910148307423">Не дозвољавај да недавно затворени сајтови заврше слање и примање података</translation> <translation id="5068919226082848014">Пица</translation> <translation id="5070710277167211639">Надограђује навигације на HTTPS и упозорава вас пре учитавања сајтова који га не подржавају</translation> @@ -6427,6 +6431,7 @@ <translation id="7152478047064750137">Овај додатак не захтева никакве специјалне дозволе</translation> <translation id="7154130902455071009">Промените почетну страницу у: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Постојећа фотографија из камере или датотеке</translation> +<translation id="7159953856712257647">Подразумевано инсталирано</translation> <translation id="7160182524506337403">Сада можете да прегледате обавештења на телефону</translation> <translation id="7163202347044721291">Верификује се активациони кôд…</translation> <translation id="716640248772308851">„<ph name="EXTENSION" />“ може да чита слике, видео и аудио датотеке на наведеним локацијама.</translation> @@ -7526,6 +7531,7 @@ <translation id="820568752112382238">Најпосећенији сајтови</translation> <translation id="8206745257863499010">Блузи</translation> <translation id="8206859287963243715">Мобилни уређај</translation> +<translation id="8208216423136871611">Не чувај</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Ново обавештење}one{# ново обавештење}few{# нова обавештења}other{# нових обавештења}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Преузимање је у току}one{Преузимања су у току}few{Преузимања су у току}other{Преузимања су у току}}</translation> <translation id="8213449224684199188">Активиран је режим слика</translation> @@ -7638,6 +7644,7 @@ <translation id="8314835274931377415">Желите да започнете подешавање Приступа помоћу прекидача?</translation> <translation id="8317582043908962055">Препознај P&DF текст</translation> <translation id="8317671367883557781">Додај мрежну везу</translation> +<translation id="8317965619823678157">копира лозинке</translation> <translation id="8318266828739827371">Користите приказ подељеног екрана да бисте видели увећану област екрана. Користите тастер за претрагу + Ctrl + D да бисте укључили или искључили монтирану лупу екрана.</translation> <translation id="8319414634934645341">Употреба проширеног кључа</translation> <translation id="8321837372750396788">Овим <ph name="DEVICE_TYPE" /> ће управљати <ph name="MANAGER" />.</translation> @@ -8567,6 +8574,7 @@ <translation id="929117907539171075">Бришу се и офлајн подаци у инсталираној апликацији</translation> <translation id="930268624053534560">Детаљне временске ознаке</translation> <translation id="930893132043726269">Тренутно је у ромингу</translation> +<translation id="93140074055951850">Android апликације су заустављене</translation> <translation id="932327136139879170">Почетна</translation> <translation id="932508678520956232">Није могуће покренути штампање.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Ова датотека је превелика за безбедносну проверу. Можете да отпремите датотеке величине до 50 MB.}one{Неке од ових датотека су превелике за безбедносну проверу. Можете да отпремите датотеке величине до 50 MB.}few{Неке од ових датотека су превелике за безбедносну проверу. Можете да отпремите датотеке величине до 50 MB.}other{Неке од ових датотека су превелике за безбедносну проверу. Можете да отпремите датотеке величине до 50 MB.}}</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 9153976..d0b32bd 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">Integritetscenter</translation> <translation id="117445914942805388"><ph name="BEGIN_LINK" />Besök inställningarna för synkronisering<ph name="END_LINK" /> om du vill rensa webbinformation från alla synkroniserade enheter och ditt Google-konto.</translation> <translation id="1175364870820465910">Skriv &ut...</translation> +<translation id="1176378369905028399">Ett lösenord för det här kontot har redan sparats i Google Lösenordshantering (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">Får inte redigera filer eller mappar på enheten</translation> <translation id="1177863135347784049">Anpassat</translation> <translation id="1178581264944972037">Paus</translation> @@ -805,6 +806,7 @@ <translation id="1745732479023874451">Hantera kontakter</translation> <translation id="1748283190377208783">{0,plural, =1{unused plural form}other{Vill du öppna och redigera # filer i den här webbappen?}}</translation> <translation id="1748563609363301860">Du kan spara det här lösenordet i Google-kontot eller endast på den här enheten</translation> +<translation id="1749733017156547309">Ett lösenord krävs</translation> <translation id="1750172676754093297">Det går inte att lagra fingeravtryck på säkerhetsnyckeln</translation> <translation id="1751249301761991853">Personligt</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> har redigeringsbehörighet till filer i <ph name="FOLDERNAME" /> tills du stänger alla flikar för den här webbplatsen</translation> @@ -1802,6 +1804,7 @@ <translation id="2645047101481282803">Enheten hanteras av <ph name="PROFILE_NAME" /></translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{1 lösenord har importerats till den här enheten}other{{NUM_PASSWORDS} lösenord har importerats till den här enheten}}</translation> <translation id="2645435784669275700">Chrome OS</translation> +<translation id="2645515095874728277">Ett lösenord för det här kontot har redan sparats på den här enheten</translation> <translation id="2649045351178520408">Base64-kodad ASCII, certifikatkedja</translation> <translation id="2652129567809778422">Välj lösenord</translation> <translation id="2653033005692233957">Sökningen misslyckades</translation> @@ -2162,6 +2165,7 @@ <translation id="2972581237482394796">&Upprepa</translation> <translation id="2973324205039581528">Stäng av webbplatsens ljud</translation> <translation id="2973537811036309675">Sidopanel</translation> +<translation id="2975761176769946178">En webbadress krävs</translation> <translation id="2976557544729462544">Du måste inaktivera dataåtkomstskyddet för att vissa enheter ska fungera ordentligt eller med full prestanda.</translation> <translation id="2977480621796371840">Ta bort från gruppen</translation> <translation id="2979639724566107830">Öppna i nytt fönster</translation> @@ -2403,6 +2407,7 @@ <translation id="3227137524299004712">Mikrofon</translation> <translation id="3232754137068452469">Webbapp</translation> <translation id="3233271424239923319">Säkerhetskopiera Linux-appar och Linux-filer</translation> +<translation id="3234251228180563751">Användarnamnet är längre än 1 000 tecken</translation> <translation id="3234978181857588512">Spara på enhet</translation> <translation id="3238192140106069382">Ansluter och verifierar</translation> <translation id="3239373508713281971">Tidsgränsen för <ph name="APP_NAME" /> har tagits bort</translation> @@ -5221,6 +5226,7 @@ <translation id="5975792506968920132">Batteriets laddning i procent</translation> <translation id="5976160379964388480">Övriga</translation> <translation id="5978277834170881274">Använd grundläggande stavningskontroll</translation> +<translation id="5978493744931296692">Administratören har inaktiverat andra profiler</translation> <translation id="5979084224081478209">Kontrollera lösenord</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Du har återaktiverat 1 tillägg som kan vara skadligt}other{Du har återaktiverat {NUM_EXTENSIONS} tillägg som kan vara skadliga}}</translation> <translation id="5979353814339191480">Det här alternativet gäller Chromebook-enheter med ett dataabonnemang eller en dongel för mobilnätverk och vid internetdelning till en mobil surfzon</translation> @@ -7533,6 +7539,7 @@ <translation id="820568752112382238">Mest besökta webbplatser</translation> <translation id="8206745257863499010">Bluesig</translation> <translation id="8206859287963243715">Mobil</translation> +<translation id="8208216423136871611">Spara inte</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Ny avisering}other{# nya aviseringar}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Nedladdning pågår}other{Nedladdningar pågår}}</translation> <translation id="8213449224684199188">Fotoläget har aktiverats</translation> @@ -8014,6 +8021,7 @@ <translation id="8683081248374354009">Återställ gruppen</translation> <translation id="8688672835843460752">Tillgängligt</translation> <translation id="8690129572193755009">Webbplatser får begära tillstånd att hantera protokoll</translation> +<translation id="8692107307702113268">Lösenordet är längre än 1 000 tecken</translation> <translation id="8695139659682234808">Lägg till föräldrakontroller efter konfigureringen</translation> <translation id="8695825812785969222">Öppna plats...</translation> <translation id="8698269656364382265">Återgå till föregående skärm genom att svepa från skärmens vänsterkant.</translation> @@ -8294,6 +8302,7 @@ <translation id="8960638196855923532">Nu kan du se telefonens aviseringar och appar</translation> <translation id="8962051932294470566">Du kan bara dela en fil åt gången. Försök igen när den pågående överföringen är klar.</translation> <translation id="8962083179518285172">Dölj detaljer</translation> +<translation id="8962863356073277855">Webbadressen ska ha formatet https://www.example.com</translation> <translation id="8962918469425892674">Den här webbplatsen använder enhetens rörelse- eller ljussensor.</translation> <translation id="8965037249707889821">Ange det gamla lösenordet</translation> <translation id="89667524227025535">Skanna QR-koden med enhetens kamera eller ange aktiveringskoden du fick från operatören.</translation> @@ -8564,6 +8573,7 @@ <translation id="9220525904950070496">Ta bort konto</translation> <translation id="9220820413868316583">Lyft fingret och testa igen.</translation> <translation id="922152298093051471">Anpassa Chrome</translation> +<translation id="9222839025964079645">Vissa lösenord har inte importerats (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Visa alla</translation> <translation id="924818813611903184">Hantera språk i inställningarna för Chrome OS</translation> <translation id="929117907539171075">Offlinedata i en installerad app raderas också</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index f02b252..fcb8266 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -196,6 +196,7 @@ <translation id="1174391930667737831">Kitovu cha Faragha</translation> <translation id="117445914942805388">Ili ufute data ya kuvinjari kwenye vifaa vyako vyote vilivyosawazishwa na Akaunti yako ya Google <ph name="BEGIN_LINK" />tembelea mipangilio ya usawazishaji<ph name="END_LINK" />.</translation> <translation id="1175364870820465910">&Chapisha...</translation> +<translation id="1176378369905028399">Nenosiri la akaunti hii limeshahifadhiwa kwenye Kidhibiti chako cha Manenosiri cha Google (<ph name="USER_EMAIL" />)</translation> <translation id="1176471985365269981">Zisizoruhusiwa kubadilisha faili au folda kwenye kifaa chako</translation> <translation id="1177863135347784049">Maalum</translation> <translation id="1178581264944972037">Sitisha</translation> @@ -802,6 +803,7 @@ <translation id="1745732479023874451">Dhibiti anwani</translation> <translation id="1748283190377208783">{0,plural, =1{wingi usiotumika}other{Ungependa kufungua na kubadilisha faili # katika programu hizi za wavuti?}}</translation> <translation id="1748563609363301860">Unaweza kuhifadhi nenosiri hili kwenye Akaunti yako ya Google au kwenye kifaa hiki pekee</translation> +<translation id="1749733017156547309">Nenosiri linahitajika</translation> <translation id="1750172676754093297">Ufunguo wako wa usalama hauwezi kuhifadhi alama bainifu</translation> <translation id="1751249301761991853">Binafsi</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> itaweza kubadilisha faili kwenye <ph name="FOLDERNAME" /> hadi ufunge vichupo vyote vya tovuti hii</translation> @@ -1753,6 +1755,7 @@ <translation id="2602501489742255173">Telezesha kidole kuelekea juu ili uanze</translation> <translation id="2603115962224169880">Futa programu hatari kwenye kompyuta yako</translation> <translation id="2603355571917519942">Voice Match iko tayari</translation> +<translation id="2604129989323098489">Tovuti huhitaji maelezo kuhusu skrini zako ili ziweze kufungua na kuweka madirisha kwa umahiri, kama vile kuonyesha hati au maudhui ya skrini nzima upande kwa upande</translation> <translation id="2604255671529671813">Hitilafu ya muunganisho wa mtandao</translation> <translation id="2605668923777146443">Nenda kwenye <ph name="LINK_BEGIN" />Mipangilio<ph name="LINK_END" /> ili uone chaguo zako za Better Together.</translation> <translation id="2606246518223360146">Unganisha Data</translation> @@ -1798,6 +1801,7 @@ <translation id="2645047101481282803">Kifaa chako kinadhibitiwa na <ph name="PROFILE_NAME" /></translation> <translation id="2645270499129074468">{NUM_PASSWORDS,plural, =1{Nenosiri 1 limepakiwa kwenye kifaa hiki}other{Manenosiri {NUM_PASSWORDS} yamepakiwa kwenye kifaa hiki}}</translation> <translation id="2645435784669275700">Mfumo wa Uendeshaji wa Chrome</translation> +<translation id="2645515095874728277">Nenosiri la akaunti hii limeshahifadhiwa kwenye kifaa hiki</translation> <translation id="2649045351178520408">ASCII iliyosimbwa kwa Base64, msururu wa vyeti</translation> <translation id="2652129567809778422">Chagua nenosiri</translation> <translation id="2653033005692233957">Imeshindwa kutafuta</translation> @@ -2158,6 +2162,7 @@ <translation id="2972581237482394796">&Rudia</translation> <translation id="2973324205039581528">Zima Sauti ya Tovuti</translation> <translation id="2973537811036309675">Kidirisha cha Pembeni</translation> +<translation id="2975761176769946178">URL inahitajika</translation> <translation id="2976557544729462544">Baadhi ya vifaa vinahitaji uzime kipengele cha kulinda data inayoweza kufikiwa ili vifanye kazi vizuri au kwa utendaji kamili.</translation> <translation id="2977480621796371840">Ondoa kwenye kikundi</translation> <translation id="2979639724566107830">Fungua katika dirisha jipya</translation> @@ -2399,6 +2404,7 @@ <translation id="3227137524299004712">Maikrofoni</translation> <translation id="3232754137068452469">Programu ya Wavuti</translation> <translation id="3233271424239923319">Hifadhi nakala za programu na faili za Linux</translation> +<translation id="3234251228180563751">Jina la mtumiaji limezidi herufi 1000</translation> <translation id="3234978181857588512">Hifadhi kwenye kifaa</translation> <translation id="3238192140106069382">Inaunganisha na kuthibitisha</translation> <translation id="3239373508713281971">Kikomo cha muda kimeondolewa kwenye <ph name="APP_NAME" /></translation> @@ -5215,6 +5221,7 @@ <translation id="5975792506968920132">Asilimia ya Kuchaji Betri</translation> <translation id="5976160379964388480">Wengine </translation> <translation id="5978277834170881274">Na utumie kikagua maendelezo cha kimsingi</translation> +<translation id="5978493744931296692">Msimamizi wako amezima wasifu mwingine</translation> <translation id="5979084224081478209">Kagua manenosiri</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Umewasha tena kiendelezi kimoja ambacho huenda ni hatari}other{Umewasha tena viendelezi {NUM_EXTENSIONS} ambavyo huenda ni hatari}}</translation> <translation id="5979353814339191480">Chaguo hili linatumika kwenye Chromebook zenye mpango wa data au kifaa cha mtandao wa simu au wakati wa kutumia mtandao pepe uliosambazwa</translation> @@ -5379,6 +5386,7 @@ <translation id="6130692320435119637">Weka Wi-Fi</translation> <translation id="6130887916931372608">Kitufe cha kibodi</translation> <translation id="6135823405800500595">Hakikisha simu yako ipo karibu, imefunguliwa na umewasha Bluetooth pamoja na Wi-Fi</translation> +<translation id="6135826623269483856">Zimezuiwa kudhibiti madirisha kwenye skrini zako zote</translation> <translation id="6136114942382973861">Funga upau wa vipakuliwa</translation> <translation id="6136287496450963112">Ufunguo wako wa usalama haujalindwa kwa PIN. Ili uweze kudhibiti alama za vidole, kwanza weka PIN.</translation> <translation id="6138680304137685902">Sahihi ya X9.62 ECDSA yenye SHA-384</translation> @@ -7387,6 +7395,7 @@ <ph name="BEGIN_PARAGRAPH3" />Unaweza kuzima huduma hii katika Mipangilio.<ph name="END_PARAGRAPH3" /></translation> <translation id="8076492880354921740">Vichupo</translation> <translation id="8076835018653442223">Ufikiaji wa faili za ndani kwenye kifaa chako umezimwa na msimamizi wako</translation> +<translation id="80798452873915119">Tovuti zinaweza kuomba kudhibiti madirisha kwenye skrini zako zote</translation> <translation id="808089508890593134">Google</translation> <translation id="8081623398548615289">Kipindi chako kinasimamiwa na <ph name="MANAGER_NAME" />. Wasimamizi wanaweza kufuta wasifu wako na kufuatilia trafiki ya mtandao wako.</translation> <translation id="8081989000209387414">Ungependa kuzima utatuzi wa ADB?</translation> @@ -7526,6 +7535,7 @@ <translation id="820568752112382238">Tovuti zilizotembelewa zaidi</translation> <translation id="8206745257863499010">Kimuziki</translation> <translation id="8206859287963243715">Simu ya Mkononi</translation> +<translation id="8208216423136871611">Usihifadhi</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Arifa mpya}other{Arifa # mpya}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Inaendelea kupakua}other{Inaendelea kupakua}}</translation> <translation id="8213449224684199188">Umeweka hali ya picha</translation> @@ -7691,6 +7701,7 @@ <translation id="8371695176452482769">Ongea sasa</translation> <translation id="8371925839118813971">{NUM_TABS,plural, =1{Zima Sauti ya Tovuti}other{Zima Sauti za Tovuti}}</translation> <translation id="8373652277231415614">Saraka za Crostini zinazoshirikiwa</translation> +<translation id="8374243500935816406">Zuia tovuti kudhibiti madirisha kwenye skrini zako zote</translation> <translation id="8376137163494131156">Tuambie kinachotokea kwenye Google Cast.</translation> <translation id="8376384591331888629">Vikiwemo vidakuzi vya wengine kwenye tovuti hii</translation> <translation id="8376451933628734023">Iwapo programu hii ya wavuti inajaribu kukuhadaa ili ufikirie kwamba ni programu tofauti, iondoe.</translation> @@ -7985,6 +7996,7 @@ <translation id="8670537393737592796">Ili uweze kurudi hapa kwa haraka, sakinisha <ph name="APP_NAME" /> kwa kubofya kitufe cha kusakinisha</translation> <translation id="867085395664725367">Hitilafu ya seva ya muda imetokea.</translation> <translation id="8673026256276578048">Tafuta Wavuti...</translation> +<translation id="867329473311423817">Zimeruhusiwa kudhibiti madirisha kwenye skrini zako zote</translation> <translation id="8673383193459449849">Tatizo la Seva</translation> <translation id="8674903726754070732">Kwa bahati mbaya, kompyuta yako imewekewa mipangilio na kitambulisho cha maunzi yenye hitilafu. Hali hii huzuia Mfumo wa Uendeshaji wa Chrome usisasishe marekebisho ya usalama ya hivi karibuni na kompyuta yako <ph name="BEGIN_BOLD" />inaweza kuwa hatarini kutokana na mashambulizi hasidi<ph name="END_BOLD" />.</translation> <translation id="8675704450909805533">Kisakinishaji hakijapata mahali sahihi pa kusakinisha <ph name="DEVICE_OS" />.</translation> @@ -8005,6 +8017,7 @@ <translation id="8683081248374354009">Badilisha kikundi</translation> <translation id="8688672835843460752">Inapatikana</translation> <translation id="8690129572193755009">Tovuti zinaweza kuomba ruhusa ya kushughulikia itifaki</translation> +<translation id="8692107307702113268">Nenosiri limezidi herufi 1000</translation> <translation id="8695139659682234808">Ongeza vidhibiti vya wazazi baada ya kuweka mipangilio</translation> <translation id="8695825812785969222">Fungua Eneo...</translation> <translation id="8698269656364382265">Ili urudi kwenye skrini ya awali, telezesha kidole kutoka upande wa kushoto.</translation> @@ -8285,6 +8298,7 @@ <translation id="8960638196855923532">Sasa unaweza kuangalia programu na arifa za hivi karibuni za simu yako</translation> <translation id="8962051932294470566">Unaweza kushiriki faili moja tu kwa wakati mmoja. Jaribu tena uhamishaji wa sasa ukikamilika.</translation> <translation id="8962083179518285172">Ficha Maelezo</translation> +<translation id="8962863356073277855">Ni lazima muundo wa URL uwe https://www.example.com</translation> <translation id="8962918469425892674">Tovuti hii inatumia vitambuzi vya mwangaza au mwendo.</translation> <translation id="8965037249707889821">Weka nenosiri la zamani</translation> <translation id="89667524227025535">Changanua Msimbo wa QR kwa kutumia kamera ya kifaa chako au uweke msimbo wa kuanza kutumia uliotolewa na mtoa huduma wako</translation> @@ -8555,6 +8569,7 @@ <translation id="9220525904950070496">Ondoa akaunti</translation> <translation id="9220820413868316583">Inua kisha ujaribu tena.</translation> <translation id="922152298093051471">Weka mipangilio ya Chrome upendavyo</translation> +<translation id="9222839025964079645">Manenosiri yasiyopakiwa (<ph name="COUNT" />)</translation> <translation id="923467487918828349">Onyesha Zote</translation> <translation id="924818813611903184">Dhibiti lugha katika mipangilio ya Mfumo wa Uendeshaji wa Chrome</translation> <translation id="929117907539171075">Itafuta pia data inayopatikana nje ya mtandao katika programu zilizosakinishwa</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 1315121d..dc92f64 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -601,6 +601,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (கெஸ்ட்)</translation> <translation id="1572266655485775982">வைஃபையை இயக்கு</translation> <translation id="1572876035008611720">மின்னஞ்சலை உள்ளிடவும்</translation> +<translation id="1573117025466282241">QR குறியீடு இருக்கும் மொபைலைப் பயன்படுத்து</translation> <translation id="1575741822946219011">மொழிகளும் உள்ளீட்டு முறைகளும்</translation> <translation id="1576594961618857597">இயல்பு வெண்ணிறத் தோற்றப்படம்</translation> <translation id="1578558981922970608">உடனே மூடு</translation> @@ -7540,6 +7541,7 @@ <translation id="820568752112382238">அதிகம் பார்த்த தளங்கள்</translation> <translation id="8206745257863499010">ப்ளூஸி</translation> <translation id="8206859287963243715">செல்லுலர்</translation> +<translation id="8208216423136871611">சேமிக்காதே</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{புதிய அறிவிப்பு}other{# புதிய அறிவிப்புகள்}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{பதிவிறக்கம் செயலில் உள்ளது}other{பதிவிறக்கங்கள் செயலில் உள்ளன}}</translation> <translation id="8213449224684199188">படப் பயன்முறைக்குச் சென்றது</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 3cd3966..dbd4f98d 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -513,6 +513,7 @@ <translation id="1480663089572535854">"తర్వాత" కోసం అసైన్ చేసిన స్విచ్ను మార్చడానికి మీరు వెనుకకు వెళ్లచ్చు. మీరు సెట్టింగ్లలో ఎప్పుడైనా ఆటో-స్కాన్ను ఆఫ్ చేయవచ్చు.</translation> <translation id="1481537595330271162">డిస్క్ పరిమాణాన్ని మార్చడంలో ఎర్రర్ ఏర్పడింది</translation> <translation id="1482626744466814421">ఈ ట్యాబ్ను బుక్మార్క్ చేయండి...</translation> +<translation id="1482772681918035149">పాస్వర్డ్లను ఎడిట్ చేయండి</translation> <translation id="1483493594462132177">పంపు</translation> <translation id="1484979925941077974">బ్లూటూత్ను సైట్ ఉపయోగిస్తోంది</translation> <translation id="1485015260175968628">ఇప్పుడు ఇది వీటిని చేయగలదు:</translation> @@ -527,6 +528,7 @@ <translation id="1500801317528437432">సపోర్ట్ చేయని Chrome యాప్ల గురించి మరింత తెలుసుకోండి</translation> <translation id="150411034776756821"><ph name="SITE" />ని తీసివేయండి</translation> <translation id="1504551620756424144">Windowsలో <ph name="BASE_DIR" />లో షేర్ చేసిన ఫోల్డర్లు అందుబాటులో ఉన్నాయి.</translation> +<translation id="1505494256539862015">పాస్వర్డ్లను ఎగుమతి చేయండి</translation> <translation id="1506061864768559482">సెర్చ్ ఇంజిన్</translation> <translation id="1507170440449692343">ఈ పేజీ మీ కెమెరాను యాక్సెస్ చేయకుండా బ్లాక్ చేయబడింది.</translation> <translation id="1507246803636407672">&వదిలివేయి</translation> @@ -2975,6 +2977,7 @@ <translation id="3778740492972734840">డెవలపర్ ఉపకరణాలు</translation> <translation id="3778868487658107119">దీనిని ప్రశ్నలు అడగండి. పనులు చేయమని చెప్పండి. ఇది మీ వ్యక్తిగతమైన Google, ఎల్లవేళలా సహాయం చేయడానికి సిద్ధంగా ఉంటుంది.</translation> <translation id="3781742599892759500">Linux మైక్రోఫోన్ యాక్సెస్</translation> +<translation id="3783889407390048282">Androidకు యాక్సెస్ను కోల్పోకుండా ఉండటానికి స్పేస్ను ఖాళీ చేయండి.</translation> <translation id="3784472333786002075">వెబ్సైట్లు రూపొందించిన ఫైళ్లను కుక్కీలు అంటారు. కుక్కీలు రెండు రకాలు ఉంటాయి: మీరు సందర్శించే సైట్లు రూపొందించిన కుక్కీలను మొదటి పక్షం కుక్కీలు అంటారు. అడ్రస్ బార్లో ఈ సైట్ చూపించబడుతుంది. ఇతర సైట్లు రూపొందించిన కుక్కీలను మూడవ పక్ష కుక్కీలు అంటారు. మీరు సందర్శించే వెబ్సైట్లో మీరు చూసే ప్రకటనలు లేదా చిత్రాల వంటి, కొంత కంటెంట్ను ఈ సైట్లు స్వంతంగా కలిగి ఉంటాయి.</translation> <translation id="3785308913036335955">యాప్ల షార్ట్కట్ను చూపు</translation> <translation id="3785727820640310185">ఈ సైట్ కోసం సేవ్ చేసిన పాస్వర్డ్లు</translation> @@ -4288,6 +4291,7 @@ <translation id="5066100345385738837">ChromeOS సెట్టింగ్లలో సురక్షిత DNSను మేనేజ్ చేయండి</translation> <translation id="5067399438976153555">ఎల్లప్పుడూ ఆన్ చేయి</translation> <translation id="5067867186035333991"><ph name="HOST" /> మీ మైక్రోఫోన్ను యాక్సెస్ చేయాలనుకుంటే నాకు తెలియజేయి</translation> +<translation id="5068553687099139861">పాస్వర్డ్లను చూపించు</translation> <translation id="5068918910148307423">డేటాను పంపడం మరియు స్వీకరించడం పూర్తి చేయడానికి ఇటీవల మూసివేసిన సైట్లను అనుమతించవద్దు</translation> <translation id="5068919226082848014">పిజ్జా</translation> <translation id="5070710277167211639">నావిగేషన్లు HTTPSకు అప్గ్రేడ్ చేయబడతాయి, దాన్ని సపోర్ట్ చేయని సైట్లు లోడ్ కావడానికి ముందు మీకు హెచ్చరిక వస్తుంది</translation> @@ -6439,6 +6443,7 @@ <translation id="7152478047064750137">ఈ పొడిగింపునకు ప్రత్యేక అనుమతులు అవసరం లేదు</translation> <translation id="7154130902455071009">మీ ప్రారంభ పేజీని దీనికి మార్చండి: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">కెమెరా లేదా ఫైల్లో ఉన్న ఫోటో</translation> +<translation id="7159953856712257647">ఆటోమేటిక్గా ఇన్స్టాల్ చేయబడుతుంది</translation> <translation id="7160182524506337403">మీరు ఇప్పుడు మీ ఫోన్ నోటిఫికేషన్లను చూడవచ్చు</translation> <translation id="7163202347044721291">యాక్టివేషన్ కోడ్ను వెరిఫై చేస్తోంది...</translation> <translation id="716640248772308851">తనిఖీ చేయబడిన స్థానాల్లో "<ph name="EXTENSION" />" చిత్రాలను, వీడియోను, సౌండ్ ఫైల్స్ను చదవగలదు.</translation> @@ -7535,6 +7540,7 @@ <translation id="820568752112382238">అత్యంత ఎక్కువగా సందర్శించిన సైట్లు</translation> <translation id="8206745257863499010">బ్లూసై</translation> <translation id="8206859287963243715">సెల్యులార్</translation> +<translation id="8208216423136871611">సేవ్ చేయవద్దు</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{కొత్త నోటిఫికేషన్}other{# కొత్త నోటిఫికేషన్లు}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{డౌన్లోడ్ ప్రోగ్రెస్లో ఉంది}other{డౌన్లోడ్లు ప్రోగ్రెస్లో ఉన్నాయి}}</translation> <translation id="8213449224684199188">ఫోటో మోడ్లోకి ప్రవేశించింది</translation> @@ -7647,6 +7653,7 @@ <translation id="8314835274931377415">స్విచ్ యాక్సెస్ సెటప్ను ప్రారంభించాలనుకుంటున్నారా?</translation> <translation id="8317582043908962055">P&DF టెక్స్ట్ను గుర్తించండి</translation> <translation id="8317671367883557781">నెట్వర్క్ కనెక్షన్ను జోడించు</translation> +<translation id="8317965619823678157">పాస్వర్డ్లను కాపీ చేయండి</translation> <translation id="8318266828739827371">మీ స్క్రీన్లో మ్యాగ్నిఫై చేసిన భాగాన్ని చూడటానికి స్ప్లిట్ స్క్రీన్ వీక్షణను ఉపయోగించండి. సెర్చ్ + Ctrl + Dని ఉపయోగించి డాక్ చేయబడిన మ్యాగ్నిఫయర్ను ఆన్, ఆఫ్ చేయండి.</translation> <translation id="8319414634934645341">విస్తరించిన కీ ఉపయోగం</translation> <translation id="8321837372750396788"><ph name="MANAGER" /> ఈ <ph name="DEVICE_TYPE" />ను మేనేజ్ చేస్తుంది.</translation> @@ -8574,6 +8581,7 @@ <translation id="929117907539171075">ఇన్స్టాల్ చేసిన యాప్లో ఆఫ్లైన్ డేటా కూడా తీసివేయబడుతుంది</translation> <translation id="930268624053534560">వివరణాత్మక సమయముద్రలు</translation> <translation id="930893132043726269">ప్రస్తుతం రోమింగ్లో ఉంది</translation> +<translation id="93140074055951850">Android యాప్లు ఆపివేయబడ్డాయి</translation> <translation id="932327136139879170">హోమ్</translation> <translation id="932508678520956232">ముద్రించడాన్ని ప్రారంభించడం సాధ్యం కాలేదు.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{భద్రతా చెక్ చేయడానికి వీల్లేనంతగా ఈ ఫైల్ చాలా పెద్దగా ఉంది. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్ను అప్లోడ్ చేయగలరు.}other{ఈ ఫైల్స్లో కొన్ని, భద్రతా చెక్ చేయడానికి వీల్లేనంత పెద్దగా ఉన్నాయి. మీరు గరిష్ఠంగా 50 MB వరకు ఉండే ఫైల్స్ను అప్లోడ్ చేయగలరు.}}</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 68da7cf..7488e3a 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -940,6 +940,7 @@ <translation id="1864400682872660285">เย็น</translation> <translation id="1864454756846565995">อุปกรณ์ USB-C (พอร์ตด้านหลัง)</translation> <translation id="1865769994591826607">การเชื่อมต่อเว็บไซต์เดียวกันเท่านั้น</translation> +<translation id="186594096341696655">ลดอัตรา</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" สามารถอ่านและเขียนรูปภาพ วิดีโอ และไฟล์เสียงในตำแหน่งที่เลือก</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> พร้อมที่จะดำเนินการติดตั้งให้คุณ</translation> <translation id="1868553836791672080">การตรวจสอบรหัสผ่านไม่พร้อมใช้งานใน Chromium</translation> @@ -1131,6 +1132,7 @@ <translation id="2048554637254265991">เกิดข้อผิดพลาดขณะเริ่มต้นตัวจัดการคอนเทนเนอร์ โปรดลองอีกครั้ง</translation> <translation id="2048653237708779538">การดำเนินการไม่พร้อมให้ใช้งาน</translation> <translation id="2050339315714019657">แนวตั้ง</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{นำเข้ารหัสผ่าน 1 รายการไปยัง Google เครื่องมือจัดการรหัสผ่าน (<ph name="USER_EMAIL" />) แล้ว}other{นำเข้ารหัสผ่าน {NUM_PASSWORDS} รายการไปยัง Google เครื่องมือจัดการรหัสผ่าน (<ph name="USER_EMAIL" />) แล้ว}}</translation> <translation id="2052572566310583903">ติดตั้งอยู่ในอุปกรณ์อื่น</translation> <translation id="2053105195397337973">เรากำลังพัฒนาวิธีจำกัดการติดตาม ในขณะเดียวกันก็ช่วยให้เว็บไซต์สามารถหยุดสแปมโฆษณาและการประพฤติมิชอบ</translation> <translation id="2053312383184521053">ข้อมูลของสถานะไม่มีการใช้งาน</translation> @@ -1901,6 +1903,7 @@ <translation id="2742448780373473567">การติดตั้ง <ph name="DEVICE_OS" /> จะเขียนทับข้อมูลทั้งหมดในอุปกรณ์</translation> <translation id="274290345632688601">กำลังคืนค่าแอปและไฟล์ Linux</translation> <translation id="274318651891194348">กำลังค้นหาแป้นพิมพ์</translation> +<translation id="2743301740238894839">เริ่ม</translation> <translation id="2743387203779672305">คัดลอกไว้ที่คลิปบอร์ด</translation> <translation id="2745080116229976798">ตัวย่อยที่เหมาะสมของ Microsoft</translation> <translation id="2747266560080989517">ไฟล์นี้มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย โปรดขอให้เจ้าของไฟล์แก้ไข</translation> @@ -2413,6 +2416,7 @@ <translation id="3255355328033513170">ระบบจะลบข้อมูลทั้งหมดที่ <ph name="SITE_GROUP_NAME" /> จัดเก็บไว้และเว็บไซต์ในกลุ่มนี้ คุกกี้จะถูกลบออกไปด้วย คุณจะออกจากระบบเว็บไซต์เหล่านี้ รวมถึงแท็บที่เปิดอยู่</translation> <translation id="3257733480216378006">อนุญาต <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" /> ไหม</translation> <translation id="3259723213051400722">โปรดลองอีกครั้ง</translation> +<translation id="3261090393424563833">เพิ่มอัตรา</translation> <translation id="3261268979727295785">สำหรับบุตรหลานที่มีอายุมากกว่าเกณฑ์ คุณจะเพิ่มการควบคุมโดยผู้ปกครองได้เมื่อตั้งค่าเรียบร้อยแล้ว ดูข้อมูลเกี่ยวกับการควบคุมโดยผู้ปกครองได้ในแอปสำรวจ</translation> <translation id="3262986719682892278">มีขนาดใหญ่เกินไป</translation> <translation id="3264544094376351444">แบบอักษร Sans-Serif</translation> @@ -2922,6 +2926,7 @@ <translation id="3747077776423672805">หากต้องการนำแอปออก ให้ไปที่การตั้งค่า > Google Play Store > จัดการค่ากำหนด Android > ตัวจัดการแอปหรือแอปพลิเคชัน แล้วแตะแอปที่คุณต้องการถอนการติดตั้ง (อาจต้องเลื่อนไปทางขวาหรือทางซ้ายเพื่อค้นหาแอป) และแตะถอนการติดตั้ง หรือปิดใช้</translation> <translation id="3747603683749989726">เปิดความปลอดภัยที่ปรับปรุงแล้วใช่ไหม</translation> <translation id="3748706263662799310">รายงานข้อบกพร่อง</translation> +<translation id="3750304496241836236">หากต้องการนำเข้ารหัสผ่านไปยัง Google เครื่องมือจัดการรหัสผ่าน ให้เลือกไฟล์ CSV</translation> <translation id="3750562496035670393">Chrome บันทึกรหัสผ่านของคุณลงในอุปกรณ์นี้แล้ว แต่คุณจะบันทึกลงในบัญชี Google แทนก็ได้ ซึ่งจะทำให้รหัสผ่านทั้งหมดในบัญชี Google พร้อมใช้งานตลอดเวลาที่คุณลงชื่อเข้าใช้ด้วย</translation> <translation id="3752253558646317685">ให้บุตรหลานยกนิ้วขึ้นเพื่อบันทึกลายนิ้วมือ</translation> <translation id="3753033997400164841">บันทึกครั้งเดียว แล้วใช้ได้ทุกที่</translation> @@ -4092,6 +4097,7 @@ <translation id="4871370605780490696">เพิ่มบุ๊กมาร์ก</translation> <translation id="4871568871368204250">ปิดการซิงค์</translation> <translation id="4871719318659334896">ปิดกลุ่ม</translation> +<translation id="4872192066608821120">หากต้องการนำเข้ารหัสผ่าน ให้เลือกไฟล์ CSV</translation> <translation id="4873312501243535625">ตัวตรวจสอบไฟล์สื่อ</translation> <translation id="4876273079589074638">ช่วยวิศวกรของเราตรวจสอบและแก้ไขข้อขัดข้องนี้ ระบุขั้นตอนที่แน่นอนหากทำได้ ไม่มีรายละเอียดใดที่ไร้ประโยชน์!</translation> <translation id="4876895919560854374">ล็อกและปลดล็อกหน้าจอ</translation> @@ -5432,6 +5438,7 @@ <translation id="6206199626856438589">คุณจะออกจากระบบเว็บไซต์ที่แสดง รวมถึงในแท็บที่เปิดอยู่</translation> <translation id="6206311232642889873">คัดลอ&กรูปภาพ</translation> <translation id="6207200176136643843">รีเซ็ตเป็นระดับการซูมเริ่มต้น</translation> +<translation id="6207806976844244951">บันทึกไปยัง Google เครื่องมือจัดการรหัสผ่าน (<ph name="EMAIL" />)</translation> <translation id="6207937957461833379">ประเทศ/เขตการปกครอง</translation> <translation id="6208382900683142153">โทเค็นความน่าเชื่อถือเพิ่มความเป็นส่วนตัวบนเว็บและไม่สามารถใช้เพื่อค้นหาว่าคุณคือใคร</translation> <translation id="6208521041562685716">กำลังเปิดใช้งานอินเทอร์เน็ตมือถือ</translation> @@ -5671,6 +5678,7 @@ <translation id="6436610005579237680">หากต้องการคำตอบที่ปรับเปลี่ยนให้เหมาะกับคุณมากขึ้น โปรดอนุญาตให้ Google Assistant เข้าถึงภาพสิ่งที่อยู่บนหน้าจอเมื่อถามคำถาม Assistant อาจใช้ข้อมูลเกี่ยวกับเพลงหรือวิดีโอที่กำลังเล่นอยู่</translation> <translation id="6436778875248895551">ผู้ดูแลระบบได้บล็อกส่วนขยาย "<ph name="EXTENSION_NAME" />"</translation> <translation id="6438234780621650381">รีเซ็ตการตั้งค่า</translation> +<translation id="6438475350605608554">คุณนำเข้ารหัสผ่านในแท็บอื่นแล้ว</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - เล่นอัตโนมัติ</translation> <translation id="6442187272350399447">ออซั่ม</translation> <translation id="6442445294758185945">ดาวน์โหลดอัปเดตไม่ได้ โปรดลองอีกครั้งภายหลัง</translation> @@ -5681,6 +5689,7 @@ <translation id="6446213738085045933">สร้างทางลัดบนเดสก์ท็อป</translation> <translation id="6447842834002726250">คุกกี้</translation> <translation id="6450876761651513209">เปลี่ยนการตั้งค่าที่เกี่ยวข้องกับความเป็นส่วนตัว</translation> +<translation id="645119363824354176">หากต้องการนำเข้ารหัสผ่านมายังอุปกรณ์นี้ ให้เลือกไฟล์ CSV</translation> <translation id="6451344358166983408">เว็บไซต์หรือหน้า</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> และอีก 1 แท็บ}other{<ph name="PAGE_TITLE" /> และอีก # แท็บ}}</translation> <translation id="6451689256222386810">หากคุณลืมรหัสผ่านหรือต้องการเปลี่ยนการตั้งค่านี้ ให้<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" /></translation> @@ -5944,6 +5953,7 @@ <translation id="6691936601825168937">&ส่งต่อ</translation> <translation id="6693745645188488741">{COUNT,plural, =1{1 หน้า}other{{COUNT} หน้า}}</translation> <translation id="6694430008315398925">กำลังตั้งค่า Steam</translation> +<translation id="6697172646384837537">เลือกปลายทางที่ต้องการนำเข้ารหัสผ่าน</translation> <translation id="6697492270171225480">แสดงคำแนะนำหน้าที่คล้ายกันเมื่อไม่พบหน้าเว็บ</translation> <translation id="6697690052557311665">หากต้องการแชร์ ให้คลิกขวาที่โฟลเดอร์ในแอป Files จากนั้นเลือก "แชร์กับ Linux"</translation> <translation id="6698810901424468597">อ่านและเปลี่ยนแปลงข้อมูลของคุณใน <ph name="WEBSITE_1" /> และ <ph name="WEBSITE_2" /></translation> @@ -6041,6 +6051,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">การสแกนอัตโนมัติช่วยให้คุณเลื่อนผ่านรายการต่างๆ ในหน้าจอได้โดยอัตโนมัติ เมื่อมีการไฮไลต์รายการ ให้กด "เลือก" เพื่อเปิดใช้งาน</translation> <translation id="6795884519221689054">แพนด้า</translation> +<translation id="6796509790850723820">แสดงผล</translation> <translation id="6797493596609571643">อ๊ะ เกิดข้อผิดพลาดบางอย่าง</translation> <translation id="6798420440063423019">คีย์ความปลอดภัยถูกล็อกเนื่องจากคุณป้อน PIN ไม่ถูกต้องหลายครั้งเกินไป คุณจะต้องรีเซ็ตคีย์ความปลอดภัย</translation> <translation id="679845623837196966">แสดงเรื่องรออ่าน</translation> @@ -6583,6 +6594,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> แสดงแบบเต็มหน้าจออยู่</translation> <translation id="7340650977506865820">เว็บไซต์กำลังแชร์หน้าจอของคุณ</translation> <translation id="7340757554212515731">ส่งรายงานข้อขัดข้อง รวมถึงข้อมูลการวินิจฉัยและการใช้งานให้ Google โดยอัตโนมัติ</translation> +<translation id="734088800888587319">เมตริกเครือข่าย</translation> <translation id="7341834142292923918">ต้องการเข้าถึงเว็บไซต์นี้</translation> <translation id="7343372807593926528">โปรดอธิบายปัญหาก่อนส่งความคิดเห็น</translation> <translation id="7344585835349671209">จัดการใบรับรอง HTTPS/SSL ในอุปกรณ์</translation> @@ -7520,6 +7532,7 @@ <translation id="820568752112382238">เว็บไซต์ที่เข้าชมบ่อยที่สุด</translation> <translation id="8206745257863499010">บลูซี</translation> <translation id="8206859287963243715">โทรศัพท์มือถือ</translation> +<translation id="8208216423136871611">ไม่บันทึก</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{การแจ้งเตือนใหม่}other{การแจ้งเตือนใหม่ # รายการ}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{อยู่ระหว่างการดาวน์โหลด}other{อยู่ระหว่างการดาวน์โหลด}}</translation> <translation id="8213449224684199188">เข้าสู่โหมดรูปภาพแล้ว</translation> @@ -8425,6 +8438,7 @@ <translation id="9088917181875854783">โปรดยืนยันว่ารหัสผ่านนี้แสดงบน "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">วิธีป้อนข้อมูล</translation> <translation id="9090044809052745245">ชื่ออุปกรณ์ของคุณที่แสดงต่อผู้อื่น</translation> +<translation id="9093470422440389061">เมตริกประสิทธิภาพของ Wi-Fi</translation> <translation id="9094033019050270033">อัปเดตรหัสผ่าน</translation> <translation id="9094038138851891550">ชื่อผู้ใช้ไม่ถูกต้อง</translation> <translation id="9094859731829297286">คุณแน่ใจไหมว่าต้องการสำรองพื้นที่ดิสก์ขนาดคงที่สำหรับ Linux</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 196a5ec..e7cdf6a 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -598,6 +598,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Misafir)</translation> <translation id="1572266655485775982">Kablosuz bağlantıyı etkinleştir</translation> <translation id="1572876035008611720">E-postanızı girin</translation> +<translation id="1573117025466282241">QR kodu için telefonu kullan</translation> <translation id="1575741822946219011">Diller ve girişler</translation> <translation id="1576594961618857597">Varsayılan beyaz avatar</translation> <translation id="1578558981922970608">Kapanmaya zorla</translation> @@ -7521,6 +7522,7 @@ <translation id="820568752112382238">En çok ziyaret edilen siteler</translation> <translation id="8206745257863499010">Melodi</translation> <translation id="8206859287963243715">Cep telefonu</translation> +<translation id="8208216423136871611">Kaydetme</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Yeni bildirim}other{# yeni bildirim}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{İndirme işlemi devam ediyor}other{İndirme işlemleri devam ediyor}}</translation> <translation id="8213449224684199188">Fotoğraf moduna girildi</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 39b8d41..9ee2d3d6 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -516,6 +516,7 @@ <translation id="1480663089572535854">Ви можете повернутися та призначити інший перемикач для дії "Вибрати". Автосканування завжди можна вимкнути в налаштуваннях.</translation> <translation id="1481537595330271162">Не вдалося змінити розмір диска</translation> <translation id="1482626744466814421">Додати цю вкладку до закладок…</translation> +<translation id="1482772681918035149">змінити паролі</translation> <translation id="1483493594462132177">Надіслати</translation> <translation id="1484979925941077974">Сайт використовує Bluetooth</translation> <translation id="1485015260175968628">Тепер може:</translation> @@ -530,6 +531,7 @@ <translation id="1500801317528437432">Докладніше про непідтримувані додатки Chrome</translation> <translation id="150411034776756821">Видалити дані сайту <ph name="SITE" /></translation> <translation id="1504551620756424144">Спільні папки у Windows доступні за шляхом <ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">експортувати паролі</translation> <translation id="1506061864768559482">Пошукова система</translation> <translation id="1507170440449692343">Доступ цієї сторінки до вашої камери заблоковано.</translation> <translation id="1507246803636407672">&Відхилити</translation> @@ -604,6 +606,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (гість)</translation> <translation id="1572266655485775982">Увімкнути Wi-Fi</translation> <translation id="1572876035008611720">Електронна адреса</translation> +<translation id="1573117025466282241">Сканувати QR-код за допомогою телефона</translation> <translation id="1575741822946219011">Мови та методи введення</translation> <translation id="1576594961618857597">Стандартний білий аватар</translation> <translation id="1578558981922970608">Примусово закрити</translation> @@ -2978,6 +2981,7 @@ <translation id="3778740492972734840">&Інструменти розробника</translation> <translation id="3778868487658107119">Ставте запитання. Давайте завдання. Ваш персональний Google Асистент завжди готовий допомогти.</translation> <translation id="3781742599892759500">Доступ до мікрофона в Linux</translation> +<translation id="3783889407390048282">Звільніть місце, щоб не втратити доступ до Android.</translation> <translation id="3784472333786002075">Файли cookie – це файли, створені веб-сайтами. Їх є два види. Основні файли cookie створюються сайтом, який ви відвідуєте. Цей сайт указується в адресному рядку. Сторонні файли cookie створюються іншими сайтами. Ці сайти показують власний контент, як-от оголошення чи зображення, на веб-сторінці, яку ви відвідуєте.</translation> <translation id="3785308913036335955">Показувати ярлики додатків</translation> <translation id="3785727820640310185">Збережені паролі для цього сайту</translation> @@ -4291,6 +4295,7 @@ <translation id="5066100345385738837">Керувати захищеним DNS-сервером у налаштуваннях ОС Chrome</translation> <translation id="5067399438976153555">Завжди ввімкнено</translation> <translation id="5067867186035333991">Запитувати, якщо хост <ph name="HOST" /> хоче отримати доступ до вашого мікрофона</translation> +<translation id="5068553687099139861">показати паролі</translation> <translation id="5068918910148307423">Заборонити нещодавно закритим сайтам завершувати надсилання й отримання даних</translation> <translation id="5068919226082848014">Піца</translation> <translation id="5070710277167211639">Трафік переходить на HTTPS, а ви отримуєте сповіщення перед завантаженням сайтів, які не підтримують цей протокол</translation> @@ -6445,6 +6450,7 @@ <translation id="7152478047064750137">Для цього розширення не потрібні спеціальні дозволи</translation> <translation id="7154130902455071009">Зробити <ph name="START_PAGE" /> домашньою сторінкою</translation> <translation id="7155171745945906037">Наявні фотографії з камери або файлу</translation> +<translation id="7159953856712257647">Установлено за умовчанням</translation> <translation id="7160182524506337403">Тепер ви можете переглядати сповіщення з телефона</translation> <translation id="7163202347044721291">Перевірка коду активації…</translation> <translation id="716640248772308851">Розширення "<ph name="EXTENSION" />" має доступ до читання зображень, відео та звукових файлів у вибраних розташуваннях.</translation> @@ -7545,6 +7551,7 @@ <translation id="820568752112382238">Сайти, які часто відвідуються</translation> <translation id="8206745257863499010">Блюз</translation> <translation id="8206859287963243715">Мобільний</translation> +<translation id="8208216423136871611">Не зберігати</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Нове сповіщення}one{# нове сповіщення}few{# нові сповіщення}many{# нових сповіщень}other{# нового сповіщення}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Триває завантаження}one{Тривають завантаження}few{Тривають завантаження}many{Тривають завантаження}other{Тривають завантаження}}</translation> <translation id="8213449224684199188">Увімкнено режим фото</translation> @@ -7657,6 +7664,7 @@ <translation id="8314835274931377415">Почати налаштування кнопкового доступу?</translation> <translation id="8317582043908962055">Розпізнати текст із файлу у форматі PDF</translation> <translation id="8317671367883557781">Додати з’єднання з мережею</translation> +<translation id="8317965619823678157">копіювати паролі</translation> <translation id="8318266828739827371">Використовуйте розділення екрана, щоб переглядати збільшену область. Щоб увімкнути або вимкнути закріплену лупу, натисніть клавішу пошуку + Ctrl + D.</translation> <translation id="8319414634934645341">Використання розширеного ключа</translation> <translation id="8321837372750396788">Цим пристроєм <ph name="DEVICE_TYPE" /> керуватиме <ph name="MANAGER" />.</translation> @@ -8587,6 +8595,7 @@ <translation id="929117907539171075">Офлайн-дані в установленому додатку також буде видалено</translation> <translation id="930268624053534560">Детальні позначки часу</translation> <translation id="930893132043726269">Є роумінг</translation> +<translation id="93140074055951850">Додатки Android зупинено</translation> <translation id="932327136139879170">Домашня сторінка</translation> <translation id="932508678520956232">Не вдалося ініціювати друк.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Не вдається перевірити безпеку цього файлу, оскільки він завеликий. Ви можете завантажувати файли розміром до 50 МБ.}one{Не вдається перевірити безпеку деяких файлів, оскільки вони завеликі. Ви можете завантажувати файли розміром до 50 МБ.}few{Не вдається перевірити безпеку деяких файлів, оскільки вони завеликі. Ви можете завантажувати файли розміром до 50 МБ.}many{Не вдається перевірити безпеку деяких файлів, оскільки вони завеликі. Ви можете завантажувати файли розміром до 50 МБ.}other{Не вдається перевірити безпеку деяких файлів, оскільки вони завеликі. Ви можете завантажувати файли розміром до 50 МБ.}}</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 4f2e5a7..b5c50d9 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -7522,6 +7522,7 @@ <translation id="820568752112382238">سب سے زیادہ ملاحظہ کردہ سائٹس</translation> <translation id="8206745257863499010">بلوزی</translation> <translation id="8206859287963243715">سیلولر</translation> +<translation id="8208216423136871611">محفوظ نہ کریں</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{نئی اطلاع}other{# نئی اطلاعات}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ڈاؤن لوڈ پیش رفت میں ہے}other{ڈاؤن لوڈز پیش رفت میں ہیں}}</translation> <translation id="8213449224684199188">تصویر کی وضع میں داخل ہو گئے</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index a614d2a7..af9f0c3 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -941,6 +941,7 @@ <translation id="1864400682872660285">Salqinroq</translation> <translation id="1864454756846565995">USB-C qurilma (orqa port)</translation> <translation id="1865769994591826607">Faqat bir saytga ulanishlar</translation> +<translation id="186594096341696655">Tezlikni pasaytirish</translation> <translation id="186612162884103683">“<ph name="EXTENSION" />” kengaytmasi belgilangan jildlarda rasm, audio va video fayllarni o‘qishi va o‘zgartirishi mumkin.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> o‘rnatish jarayonini tugatishga tayyor</translation> <translation id="1868553836791672080">Chromiumda parollar tekshiruvi ishlamaydi</translation> @@ -1132,6 +1133,7 @@ <translation id="2048554637254265991">Konteynerlar menejeri ishga tushmadi. Qayta urining.</translation> <translation id="2048653237708779538">Bu amal ishlamaydi</translation> <translation id="2050339315714019657">Bo‘yiga</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{Google parollar menejeriga (<ph name="USER_EMAIL" />) 1 ta parol import qilindi}other{Google parollar menejeriga (<ph name="USER_EMAIL" />) {NUM_PASSWORDS} ta parol import qilindi}}</translation> <translation id="2052572566310583903">Boshqa qurilmalaringizda oʻrnatilgan</translation> <translation id="2053105195397337973">Biz saytlarda spam va firibgarlik reklamalaridan himoyani yoqish orqali kuzatuv mexanizmlarini taqiqlash yoʻllarini oʻrganib chiqmoqdamiz.</translation> <translation id="2053312383184521053">Harakatsiz holat ma’lumotlari</translation> @@ -1905,6 +1907,7 @@ <translation id="2742448780373473567"><ph name="DEVICE_OS" /> oʻrnatilsa, qurilmadagi barcha maʼlumotlar tozalanadi.</translation> <translation id="274290345632688601">Linux ilovalar va fayllar tiklanmoqda</translation> <translation id="274318651891194348">Klaviatura qidirilmoqda</translation> +<translation id="2743301740238894839">Boshlash</translation> <translation id="2743387203779672305">Vaqtincha xotiraga nusxalash</translation> <translation id="2745080116229976798">Microsoft Malakalilarga Bo‘ysunish sertifikatlar xizmati</translation> <translation id="2747266560080989517">Bu faylda maxfiy yoki xavfli kontent bor. Egasidan uni tuzatishni soʻrang.</translation> @@ -2417,6 +2420,7 @@ <translation id="3255355328033513170"><ph name="SITE_GROUP_NAME" /> va ichidagi saytlar tomonidan saqlangan barcha maʼlumotlar tozalanadi. Cookie fayllari ham. Bu saytlardagi seanslaringiz yakunlanadi, hatto ochiq varaqlarda ham.</translation> <translation id="3257733480216378006"><ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" /> ta ruxsat berilsinmi?</translation> <translation id="3259723213051400722">Qaytadan urining.</translation> +<translation id="3261090393424563833">Tezlikni oshirish</translation> <translation id="3261268979727295785">Oʻrta yoshdagi bolalar uchun sozlash tugashi bilan ota-ona nazoratini kiritishingiz mumkin. Ota-ona nazorati haqidagi axborotini “Tanishuv” ilovasi orqali topish mumkin.</translation> <translation id="3262986719682892278">Juda katta</translation> <translation id="3264544094376351444">Sans-serif shrift</translation> @@ -2926,6 +2930,7 @@ <translation id="3747077776423672805">Ilovalarni oʻchirib tashlash uchun Sozlamalar > Google Play Market > Android sozlamalari boshqaruvi > Ilovalar yoki Ilovalar menejeri menyusiga kiring. Kerakli ilovani tanlab (ilovani topish uchun ekranni oʻng yoki chapga suring), “Oʻchirib tashlash” yoki “Faolsizlantirish” tugmasini bosing.</translation> <translation id="3747603683749989726">Kengaytirilgan himoya yoqilsinmi?</translation> <translation id="3748706263662799310">Xatolik haqida xabar berish</translation> +<translation id="3750304496241836236">Google parollar menejeriga parollarni import qilish uchun CSV faylni tanlang</translation> <translation id="3750562496035670393">Chrome parolni bu qurilmaga saqlagan, lekin uni Google hisobingizga saqlashingiz ham mumkin. Keyin hisobingizga kirgan qurilmalarda Google hisobingizda saqlangan barcha parollardan foydalana olasiz.</translation> <translation id="3752253558646317685">Barmoq izini saqlash uchun farzandingiz barmoqlarini koʻtarib, qayta bosib kiritsin</translation> <translation id="3753033997400164841">Bir marta saqlash. Doim ishlatish</translation> @@ -4098,6 +4103,7 @@ <translation id="4871370605780490696">Xatcho‘p qo‘shish</translation> <translation id="4871568871368204250">Sinxronizatsiya qilmaslik</translation> <translation id="4871719318659334896">Guruhni yopish</translation> +<translation id="4872192066608821120">Parollarni import qilish uchun CSV faylni tanlang</translation> <translation id="4873312501243535625">Media fayllar tekshiruvi</translation> <translation id="4876273079589074638">Muhandislarimizga nosozlikni aniqlash va tuzatishiga yordam bering. Yuz bergan nosozlik bosqichlarini batafsil yoriting. Har bir axborotingiz bizga yordam beradi.</translation> <translation id="4876895919560854374">Ekranni qulflash va qulfdan chiqarish</translation> @@ -5442,6 +5448,7 @@ <translation id="6206199626856438589">Barcha koʻrsatilgan saytlardagi hisobingizdan avtomatik chiqarilasiz (shuningdek, ochiq varaqlardan ham)</translation> <translation id="6206311232642889873">Tasvirni &nusxalash</translation> <translation id="6207200176136643843">Standart masshtab</translation> +<translation id="6207806976844244951">Google parollar menejeriga (<ph name="EMAIL" />) saqlash</translation> <translation id="6207937957461833379">Mamlakat / hudud</translation> <translation id="6208382900683142153">Ishonch tokenlari internetdagi maxfiylikni oshiradi va shaxsiy maʼlumotlaringizni aniqlash uchun ishlatilmaydi.</translation> <translation id="6208521041562685716">Mobil tarmoq faollashtirilmoqda</translation> @@ -5681,6 +5688,7 @@ <translation id="6436610005579237680">Yanada aniqroq javob berish uchun Google Assistentga savol berganingizda ekrandagi narsalardan skrinshot olishiga ruxsat bering. Shuningdek, Assistent ijro etilayotgan tarona va videolar haqidagi axborotdan foydalanishi mumkin.</translation> <translation id="6436778875248895551">“<ph name="EXTENSION_NAME" />” kengaytmasi administrator tomonidan bloklandi</translation> <translation id="6438234780621650381">Asliga qaytarish</translation> +<translation id="6438475350605608554">Parollar allaqachon boshqa varaqda import qilinmoqda</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> – audio ijro etilmoqda</translation> <translation id="6442187272350399447">Qoyilmaqom</translation> <translation id="6442445294758185945">Yangilanish yuklab olinmadi. Keyinroq qayta urining.</translation> @@ -5691,6 +5699,7 @@ <translation id="6446213738085045933">Ish stolida yorliq yaratish</translation> <translation id="6447842834002726250">Cookie fayllari</translation> <translation id="6450876761651513209">Maxfiylik sozlamalarini o‘zgartirish</translation> +<translation id="645119363824354176">Bu qurilmaga parollarni import qilish uchun CSV faylni tanlang</translation> <translation id="6451344358166983408">Sayt yoki sahifa</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> va yana 1 ta varaq}other{<ph name="PAGE_TITLE" /> va yana # ta varaq}}</translation> <translation id="6451689256222386810">Agar kodli iborani unutsangiz yoki o‘zgartirmoqchi bo‘lsangiz, <ph name="BEGIN_LINK" />sinxronizatsiya sozlamalarini qayta tiklang<ph name="END_LINK" />.</translation> @@ -5954,6 +5963,7 @@ <translation id="6691936601825168937">&Oldinga</translation> <translation id="6693745645188488741">{COUNT,plural, =1{1 sahifa}other{{COUNT} sahifa}}</translation> <translation id="6694430008315398925">Steam sozlanmoqda</translation> +<translation id="6697172646384837537">Parollar qayerdan import qilinishini tanlang</translation> <translation id="6697492270171225480">Sahifa topilmaganda, unga o‘xshash sahifalar taklif qilinsin</translation> <translation id="6697690052557311665">Fayllar ilovasida jild ustida sichqonchaning oʻng tugmasini bosing va “Linux bilan ulashish” bandini tanlang.</translation> <translation id="6698810901424468597"><ph name="WEBSITE_1" /> va <ph name="WEBSITE_2" /> saytlaridagi ma’lumotlarni ko‘rish va o‘zgartirish</translation> @@ -6051,6 +6061,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">Avto-skanerlash yordamida ekrandagi narsalar avtomatik varaqlanadi. Kerakli narsa belgilanganda, uni faollashtirish uchun “Tanlash” tugmasini bosing.</translation> <translation id="6795884519221689054">Panda</translation> +<translation id="6796509790850723820">Renderlash</translation> <translation id="6797493596609571643">Xatolik sodir bo‘ldi.</translation> <translation id="6798420440063423019">PIN kod juda koʻp marta xato kiritilganligi uchun elektron kalit qulflandi. Elektron kalit sozlamalarini asliga qaytaring.</translation> <translation id="679845623837196966">Saqlangan sahifalarni chiqarish</translation> @@ -6594,6 +6605,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> endi to‘liq ekranda ko‘rsatilmoqda.</translation> <translation id="7340650977506865820">Sayt ekraningizni namoyish qilmoqda</translation> <translation id="7340757554212515731">Google serverlariga xatoliklar hisoboti, shuningdek, diagnostika va foydalanish statistikasi maʼlumotlari avtomatik yuboriladi</translation> +<translation id="734088800888587319">Tarmoq statistikasi</translation> <translation id="7341834142292923918">Bu saytga ruxsat olmoqchi</translation> <translation id="7343372807593926528">Fikr-mulohaza yuborishdan oldin muammo haqida batafsil yozing.</translation> <translation id="7344585835349671209">Qurilmangizda HTTPS/SSL sertifikatlarini boshqarish</translation> @@ -7530,6 +7542,7 @@ <translation id="820568752112382238">Eng koʻp ochilgan saytlar</translation> <translation id="8206745257863499010">Blyuz</translation> <translation id="8206859287963243715">Uyali</translation> +<translation id="8208216423136871611">Saqlanmasin</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Yangi bildirishnoma}other{# ta yangi bildirishnoma}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Yuklab olinmoqda}other{Yuklab olinmoqda}}</translation> <translation id="8213449224684199188">Foto rejimi yoqildi</translation> @@ -8436,6 +8449,7 @@ <translation id="9088917181875854783">“<ph name="DEVICE_NAME" />” qurilmasida kalit iborani tasdiqlang:</translation> <translation id="9089416786594320554">Matn kiritish</translation> <translation id="9090044809052745245">Qurilmangiz boshqalarga qanday koʻrinishi</translation> +<translation id="9093470422440389061">WiFi unumdorligi statistikasi</translation> <translation id="9094033019050270033">Parolni yangilash</translation> <translation id="9094038138851891550">Foydalanuvchi nomi yaroqsiz</translation> <translation id="9094859731829297286">Linux diski uchun belgilangan hajm saqlansinmi?</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 4f19519a..3d33a5936 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -952,6 +952,7 @@ <translation id="1864400682872660285">Mát hơn</translation> <translation id="1864454756846565995">Thiết bị USB-C (cổng phía sau)</translation> <translation id="1865769994591826607">Chỉ các kết nối cùng trang web</translation> +<translation id="186594096341696655">Giảm tốc độ</translation> <translation id="186612162884103683">"<ph name="EXTENSION" />" có thể đọc và ghi hình ảnh, video và tệp âm thanh trong các vị trí đã chọn.</translation> <translation id="1867780286110144690"><ph name="PRODUCT_NAME" /> sẵn sàng hoàn tất việc cài đặt của bạn</translation> <translation id="1868553836791672080">Tính năng kiểm tra mật khẩu không hoạt động trong Chromium</translation> @@ -1143,6 +1144,7 @@ <translation id="2048554637254265991">Lỗi khi khởi động dịch vụ quản lý vùng chứa. Vui lòng thử lại.</translation> <translation id="2048653237708779538">Không thể thực hiện hành động này</translation> <translation id="2050339315714019657">Khổ dọc</translation> +<translation id="2051943168842512672">{NUM_PASSWORDS,plural, =1{Đã nhập 1 mật khẩu vào Trình quản lý mật khẩu của Google (<ph name="USER_EMAIL" />)}other{Đã nhập {NUM_PASSWORDS} mật khẩu vào Trình quản lý mật khẩu của Google (<ph name="USER_EMAIL" />)}}</translation> <translation id="2052572566310583903">Đã cài đặt trên các thiết bị khác của bạn</translation> <translation id="2053105195397337973">Chúng tôi đang nghiên cứu các cách để hạn chế hoạt động theo dõi, đồng thời giúp các trang web ngăn chặn hành vi lừa đảo và quảng cáo không liên quan.</translation> <translation id="2053312383184521053">Dữ liệu ở trạng thái không hoạt động</translation> @@ -1916,6 +1918,7 @@ <translation id="2742448780373473567">Quá trình cài đặt <ph name="DEVICE_OS" /> sẽ ghi đè mọi dữ liệu trên thiết bị của bạn.</translation> <translation id="274290345632688601">Đang khôi phục các ứng dụng và tệp Linux</translation> <translation id="274318651891194348">Đang tìm kiếm bàn phím</translation> +<translation id="2743301740238894839">Bắt đầu</translation> <translation id="2743387203779672305">Sao chép vào bảng nhớ tạm</translation> <translation id="2745080116229976798">Microsoft Qualified Subordination</translation> <translation id="2747266560080989517">Tệp này có chứa nội dung nhạy cảm hoặc nguy hiểm. Hãy yêu cầu chủ sở hữu tệp khắc phục vấn đề.</translation> @@ -2428,6 +2431,7 @@ <translation id="3255355328033513170">Mọi dữ liệu do <ph name="SITE_GROUP_NAME" /> lưu trữ và mọi trang web trong đó sẽ bị xóa. Dữ liệu bị xóa bao gồm cả cookie. Bạn sẽ bị đăng xuất khỏi những trang web này, bao gồm cả các thẻ đang mở.</translation> <translation id="3257733480216378006">Cho phép <ph name="EXTENSIONS_REQUESTING_ACCESS_COUNT" />?</translation> <translation id="3259723213051400722">Vui lòng thử lại.</translation> +<translation id="3261090393424563833">Tăng tốc độ</translation> <translation id="3261268979727295785">Đối với trẻ lớn, bạn có thể thêm các quyền kiểm soát của cha mẹ sau khi hoàn thành quy trình thiết lập. Bạn sẽ tìm thấy thông tin về các quyền kiểm soát của cha mẹ trong ứng dụng Khám phá.</translation> <translation id="3262986719682892278">Quá lớn</translation> <translation id="3264544094376351444">Phông chữ Sans-serif</translation> @@ -2937,6 +2941,7 @@ <translation id="3747077776423672805">Để xóa ứng dụng, hãy chuyển đến mục Cài đặt > Cửa hàng Google Play > Quản lý tùy chọn Android > Ứng dụng hoặc Trình quản lý ứng dụng. Tiếp theo, hãy nhấn vào ứng dụng mà bạn muốn gỡ cài đặt (bạn có thể phải vuốt sang phải hoặc trái để tìm ứng dụng đó). Sau đó, hãy nhấn vào Gỡ cài đặt hoặc Tắt.</translation> <translation id="3747603683749989726">Bật tính năng bảo mật nâng cao?</translation> <translation id="3748706263662799310">Báo cáo lỗi</translation> +<translation id="3750304496241836236">Để nhập mật khẩu vào Trình quản lý mật khẩu của Google, hãy chọn một tệp CSV</translation> <translation id="3750562496035670393">Chrome đã lưu mật khẩu của bạn trên thiết bị này, nhưng bạn cũng có thể chuyển sang lưu mật khẩu đó vào Tài khoản Google. Sau đó, tất cả mật khẩu trong Tài khoản Google của bạn đều sẽ có sẵn hiện khi bạn đăng nhập.</translation> <translation id="3752253558646317685">Yêu cầu con bạn liên tục nhấc ngón tay lên để lưu dấu vân tay</translation> <translation id="3753033997400164841">Lưu trữ một lần. Dùng ở mọi nơi</translation> @@ -4108,6 +4113,7 @@ <translation id="4871370605780490696">Thêm dấu trang</translation> <translation id="4871568871368204250">Tắt đồng bộ hóa</translation> <translation id="4871719318659334896">Đóng nhóm</translation> +<translation id="4872192066608821120">Để nhập mật khẩu, hãy chọn một tệp CSV</translation> <translation id="4873312501243535625">Trình kiểm tra tệp phương tiện</translation> <translation id="4876273079589074638">Giúp các kỹ sư của chúng tôi điều tra và khắc phục trục trặc này. Liệt kê các bước chính xác nếu bạn có thể. Không cần liệt kê quá chi tiết!</translation> <translation id="4876895919560854374">Khóa và mở khóa màn hình</translation> @@ -5451,6 +5457,7 @@ <translation id="6206199626856438589">Bạn sẽ bị đăng xuất khỏi những trang web hiển thị, kể cả ở các thẻ đang mở</translation> <translation id="6206311232642889873">Sao ché&p Hình ảnh</translation> <translation id="6207200176136643843">Đặt lại về mức thu phóng mặc định</translation> +<translation id="6207806976844244951">Lưu vào Trình quản lý mật khẩu của Google (<ph name="EMAIL" />)</translation> <translation id="6207937957461833379">Quốc gia/vùng</translation> <translation id="6208382900683142153">Mã thông báo tin cậy giúp cải thiện quyền riêng tư trên web và các bên sẽ không thể dùng mã này để tìm ra bạn là ai.</translation> <translation id="6208521041562685716">Đang kích hoạt dữ liệu di động</translation> @@ -5690,6 +5697,7 @@ <translation id="6436610005579237680">Để nhận được những câu trả lời phù hợp hơn với bạn, hãy cho phép Trợ lý Google sử dụng thông tin trên màn hình khi bạn đặt câu hỏi. Trợ lý của bạn cũng có thể sử dụng thông tin về các bài hát hoặc video đang phát.</translation> <translation id="6436778875248895551">Quản trị viên của bạn đã chặn tiện ích "<ph name="EXTENSION_NAME" />"</translation> <translation id="6438234780621650381">Đặt lại chế độ cài đặt</translation> +<translation id="6438475350605608554">Bạn đã nhập mật khẩu vào một thẻ khác</translation> <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - Phát âm thanh</translation> <translation id="6442187272350399447">Tuyệt vời</translation> <translation id="6442445294758185945">Không thể tải bản cập nhật xuống. Vui lòng thử lại sau.</translation> @@ -5700,6 +5708,7 @@ <translation id="6446213738085045933">Tạo lối tắt trên màn hình</translation> <translation id="6447842834002726250">Cookie</translation> <translation id="6450876761651513209">Thay đổi các cài đặt liên quan đến bảo mật của bạn</translation> +<translation id="645119363824354176">Để nhập mật khẩu vào thiết bị này, hãy chọn một tệp CSV</translation> <translation id="6451344358166983408">Trang web</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> và 1 thẻ khác}other{<ph name="PAGE_TITLE" /> và # thẻ khác}}</translation> <translation id="6451689256222386810">Nếu bạn quên cụm mật khẩu hoặc muốn thay đổi cài đặt này, hãy <ph name="BEGIN_LINK" />đặt lại đồng bộ hóa<ph name="END_LINK" />.</translation> @@ -5963,6 +5972,7 @@ <translation id="6691936601825168937">Chuyển &tiếp</translation> <translation id="6693745645188488741">{COUNT,plural, =1{1 trang}other{{COUNT} trang}}</translation> <translation id="6694430008315398925">Đang thiết lập Steam</translation> +<translation id="6697172646384837537">Chọn vị trí cần nhập mật khẩu</translation> <translation id="6697492270171225480">Hiển thị phần đề xuất các trang tương tự khi không tìm thấy một trang</translation> <translation id="6697690052557311665">Để chia sẻ, hãy nhấp chuột phải vào một thư mục trong ứng dụng Files rồi chọn "Chia sẻ với Linux".</translation> <translation id="6698810901424468597">Đọc và thay đổi dữ liệu của bạn trên <ph name="WEBSITE_1" /> và <ph name="WEBSITE_2" /></translation> @@ -6060,6 +6070,7 @@ <translation id="6793879402816827484">↓ <ph name="STATUS" /></translation> <translation id="6795371939514004514">Tính năng tự động quét cho phép bạn tự động di chuyển qua các mục trên màn hình. Khi một mục được làm nổi bật, hãy nhấn nút “Chọn” để kích hoạt mục đó.</translation> <translation id="6795884519221689054">Gấu trúc</translation> +<translation id="6796509790850723820">Kết xuất</translation> <translation id="6797493596609571643">Rất tiếc, đã xảy ra lỗi.</translation> <translation id="6798420440063423019">Khóa bảo mật đã bị khóa do bạn nhập sai mã PIN quá nhiều lần. Bạn cần đặt lại khóa bảo mật.</translation> <translation id="679845623837196966">Hiện Danh sách đọc</translation> @@ -6153,7 +6164,7 @@ <translation id="686609795364435700">Yên lặng</translation> <translation id="686664946474413495">Nhiệt độ màu</translation> <translation id="6867086642466184030">Những ứng dụng khác cũng được đặt để mở các đường liên kết giống như <ph name="APP_NAME" />. Thao tác này sẽ ngăn <ph name="APP_NAME_2" />, <ph name="APP_NAME_3" />, <ph name="APP_NAME_4" /> và <ph name="NUMBER_OF_OTHER_APPS" /> ứng dụng khác mở các đường liên kết được hỗ trợ.</translation> -<translation id="6867400383614725881">Thẻ Ẩn danh mới</translation> +<translation id="6867400383614725881">Thẻ ẩn danh mới</translation> <translation id="6868934826811377550">Xem thông tin chi tiết</translation> <translation id="6871644448911473373">Phản hồi OCSP: <ph name="LOCATION" /></translation> <translation id="6872781471649843364">Mật khẩu bạn nhập đã bị máy chủ từ chối.</translation> @@ -6602,6 +6613,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> hiện ở chế độ toàn màn hình.</translation> <translation id="7340650977506865820">Trang web đang chia sẻ màn hình của bạn</translation> <translation id="7340757554212515731">Tự động gửi báo cáo sự cố cũng như thông tin chẩn đoán và dữ liệu sử dụng cho Google</translation> +<translation id="734088800888587319">Chỉ số mạng</translation> <translation id="7341834142292923918">Muốn truy cập vào trang web này</translation> <translation id="7343372807593926528">Vui lòng mô tả sự cố trước khi gửi ý kiến phản hồi.</translation> <translation id="7344585835349671209">Quản lý chứng chỉ HTTPS/SSL trên thiết bị của bạn</translation> @@ -7540,6 +7552,7 @@ <translation id="820568752112382238">Trang web truy cập nhiều nhất</translation> <translation id="8206745257863499010">Nốt nhạc xanh</translation> <translation id="8206859287963243715">Di động</translation> +<translation id="8208216423136871611">Không lưu</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Thông báo mới}other{# thông báo mới}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Đang tải xuống}other{Đang tải xuống}}</translation> <translation id="8213449224684199188">Đã chuyển sang chế độ ảnh</translation> @@ -8445,6 +8458,7 @@ <translation id="9088917181875854783">Vui lòng xác nhận mã xác nhận này được hiển thị trên "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Phương thức nhập</translation> <translation id="9090044809052745245">Cách thiết bị của bạn hiển thị với những người khác</translation> +<translation id="9093470422440389061">Chỉ số hiệu suất Wi-Fi</translation> <translation id="9094033019050270033">Cập nhật mật khẩu</translation> <translation id="9094038138851891550">Tên người dùng không hợp lệ</translation> <translation id="9094859731829297286">Bạn có chắc chắn muốn dự trữ đĩa có dung lượng cố định cho Linux không?</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index d0931ead..a834578 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -593,6 +593,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" />(访客)</translation> <translation id="1572266655485775982">Wi-Fi 开关</translation> <translation id="1572876035008611720">输入您的电子邮件地址</translation> +<translation id="1573117025466282241">使用手机扫描二维码</translation> <translation id="1575741822946219011">语言和输入法</translation> <translation id="1576594961618857597">默认的白色头像</translation> <translation id="1578558981922970608">强制关闭</translation> @@ -7508,6 +7509,7 @@ <translation id="820568752112382238">最常访问的网站</translation> <translation id="8206745257863499010">音符</translation> <translation id="8206859287963243715">蜂窝网络设备</translation> +<translation id="8208216423136871611">不保存</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{新通知}other{# 条新通知}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{有 1 项下载正在进行中}other{有多项下载正在进行中}}</translation> <translation id="8213449224684199188">已进入照片模式</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index bade2d1..9187dd38 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -7543,6 +7543,7 @@ <translation id="820568752112382238">最常瀏覽的網站</translation> <translation id="8206745257863499010">藍調</translation> <translation id="8206859287963243715">蜂窩</translation> +<translation id="8208216423136871611">不要儲存</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{新通知}other{# 則新通知}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{正在進行一項下載}other{正在進行多項下載}}</translation> <translation id="8213449224684199188">進入咗相片模式</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 74e9341..5f1c221 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -510,6 +510,7 @@ <translation id="1480663089572535854">你可以返回變更「選取」的指派設定,而且隨時都能前往設定頁面關閉自動掃描功能。</translation> <translation id="1481537595330271162">調整磁碟大小時發生錯誤</translation> <translation id="1482626744466814421">將此分頁加入書籤...</translation> +<translation id="1482772681918035149">編輯密碼</translation> <translation id="1483493594462132177">傳送</translation> <translation id="1484979925941077974">網站正在使用藍牙</translation> <translation id="1485015260175968628">新的可用權限:</translation> @@ -524,6 +525,7 @@ <translation id="1500801317528437432">進一步瞭解不支援的 Chrome 應用程式</translation> <translation id="150411034776756821">移除 <ph name="SITE" /></translation> <translation id="1504551620756424144">在 Windows 中,你可以前往 <ph name="BASE_DIR" /> 存取共用資料夾。</translation> +<translation id="1505494256539862015">匯出密碼</translation> <translation id="1506061864768559482">搜尋引擎</translation> <translation id="1507170440449692343">系統已封鎖這個網頁存取你的攝影機。</translation> <translation id="1507246803636407672">捨棄(&D)</translation> @@ -598,6 +600,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (訪客)</translation> <translation id="1572266655485775982">啟用 Wi-Fi</translation> <translation id="1572876035008611720">請輸入您的電子郵件</translation> +<translation id="1573117025466282241">使用手機掃描 QR 圖碼</translation> <translation id="1575741822946219011">語言和輸入法</translation> <translation id="1576594961618857597">預設的白色顯示圖片</translation> <translation id="1578558981922970608">強制關閉</translation> @@ -2960,6 +2963,7 @@ <translation id="3778740492972734840">開發人員工具(&D)</translation> <translation id="3778868487658107119">Google 助理可根據你的問題提供解答,或是依指令執行各種操作。它是你專屬的 Google 服務,隨時為你提供協助。</translation> <translation id="3781742599892759500">Linux 麥克風存取權</translation> +<translation id="3783889407390048282">請釋出空間,以免無法存取 Android。</translation> <translation id="3784472333786002075">Cookie 是網站所建立的檔案,可分為兩種類型:第一方 Cookie 由你造訪過的網站所建立,也就是網址列所顯示的網站。第三方 Cookie 由其他網站所建立。這類網站通常是在你造訪的網站上提供部分內容 (例如廣告或圖片) 的其他網站。</translation> <translation id="3785308913036335955">顯示應用程式捷徑</translation> <translation id="3785727820640310185">已儲存這個網站的密碼</translation> @@ -4271,6 +4275,7 @@ <translation id="5066100345385738837">在 Chrome OS 設定中管理安全 DNS</translation> <translation id="5067399438976153555">一律啟用</translation> <translation id="5067867186035333991">當 <ph name="HOST" /> 要求存取麥克風時詢問我。</translation> +<translation id="5068553687099139861">顯示密碼</translation> <translation id="5068918910148307423">禁止最近關閉的網站完成資料收發作業</translation> <translation id="5068919226082848014">披薩</translation> <translation id="5070710277167211639">將瀏覽路徑升級至 HTTPS,並在載入不支援該協定的網站前發出警告</translation> @@ -6419,6 +6424,7 @@ <translation id="7152478047064750137">這個擴充功能不需要特殊權限</translation> <translation id="7154130902455071009">將你的起始網頁變更為:<ph name="START_PAGE" /></translation> <translation id="7155171745945906037">現有的相機相片或圖庫相片</translation> +<translation id="7159953856712257647">已安裝 (預設)</translation> <translation id="7160182524506337403">你現在可以查看手機的通知</translation> <translation id="7163202347044721291">正在驗證啟用代碼…</translation> <translation id="716640248772308851">「<ph name="EXTENSION" />」對於勾選位置中的圖片、影片和聲音檔具有讀取權限。</translation> @@ -7519,6 +7525,7 @@ <translation id="820568752112382238">最常造訪的網站</translation> <translation id="8206745257863499010">藍調</translation> <translation id="8206859287963243715">手機</translation> +<translation id="8208216423136871611">不要儲存</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{新通知}other{# 則新通知}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{正在執行一項下載作業}other{正在執行多項下載作業}}</translation> <translation id="8213449224684199188">已進入相片模式</translation> @@ -7631,6 +7638,7 @@ <translation id="8314835274931377415">要開始設定切換控制功能嗎?</translation> <translation id="8317582043908962055">識別 P&DF 文字</translation> <translation id="8317671367883557781">新增網路連線</translation> +<translation id="8317965619823678157">複製密碼</translation> <translation id="8318266828739827371">使用分割畫面檢視模式查看畫面放大的區域。使用搜尋鍵 + Ctrl + D 鍵即可開啟或關閉置頂放大鏡。</translation> <translation id="8319414634934645341">擴充金鑰使用方法</translation> <translation id="8321837372750396788">這部 <ph name="DEVICE_TYPE" /> 將由 <ph name="MANAGER" /> 管理。</translation> @@ -8558,6 +8566,7 @@ <translation id="929117907539171075">已安裝應用程式中的離線資料也將遭到清除</translation> <translation id="930268624053534560">詳細時間戳記</translation> <translation id="930893132043726269">目前處於漫遊狀態</translation> +<translation id="93140074055951850">Android 應用程式已停止</translation> <translation id="932327136139879170">首頁</translation> <translation id="932508678520956232">無法初始化列印作業。</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{這個檔案的大小過大,無法進行安全性檢查。可上傳的檔案大小上限為 50 MB。}other{部分檔案的大小過大,無法進行安全性檢查。可上傳的檔案大小上限為 50 MB。}}</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index ce848f4..cd4d875 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -514,6 +514,7 @@ <translation id="1480663089572535854">Ungabuyela emuva uyoshintsha isabelo sethi “Khetha.” Ungahlala uvala ukuskena okuzenzakalelayo Kumasethingi.</translation> <translation id="1481537595330271162">Iphuta lokushintsha usayizi wediski</translation> <translation id="1482626744466814421">Yenza ibhukhimakhi leli thebhu...</translation> +<translation id="1482772681918035149">hlela amaphasiwedi</translation> <translation id="1483493594462132177">Thumela</translation> <translation id="1484979925941077974">Isayithi lisebenzisa i-Bluetooth</translation> <translation id="1485015260175968628">Manje ingakhona:</translation> @@ -528,6 +529,7 @@ <translation id="1500801317528437432">Funda kabanzi mayelana nama-app we-Chrome angasekelwa</translation> <translation id="150411034776756821">Susa i-<ph name="SITE" /></translation> <translation id="1504551620756424144">Amafolda abiwe ayatholakala ku-Windows ku-<ph name="BASE_DIR" />.</translation> +<translation id="1505494256539862015">thumela amaphasiwedi</translation> <translation id="1506061864768559482">Injini yokusesha</translation> <translation id="1507170440449692343">Leli khasi livinjelwe kusuka ekufinyeleleni kukhamela yakho.</translation> <translation id="1507246803636407672">Lahla</translation> @@ -600,6 +602,7 @@ <translation id="1572139610531470719"><ph name="WINDOW_TITLE" /> (Isihambeli)</translation> <translation id="1572266655485775982">Ukunika amandla i-Wi-Fi</translation> <translation id="1572876035008611720">Faka i-imeyili yakho</translation> +<translation id="1573117025466282241">Sebenzisa ifoni enekhodi ye-QR</translation> <translation id="1575741822946219011">Izilimi nokokufaka</translation> <translation id="1576594961618857597">Isithombe esizenzakalelayo esimhlophe</translation> <translation id="1578558981922970608">Phoqelela ukuvala</translation> @@ -2976,6 +2979,7 @@ <translation id="3778740492972734840">Amathuluzi wonjiniyela</translation> <translation id="3778868487658107119">Ibuze imibuzo. Itshele ukuthi yenze izinto. i-Google yakho siqu, ihlala ilungele ukusiza.</translation> <translation id="3781742599892759500">Ukufinyelela kwemakrofoni ye-Linux</translation> +<translation id="3783889407390048282">Khulula isikhala ukuze ugweme ukulahlekelwa ukufinyelela ku-Android.</translation> <translation id="3784472333786002075">Amakhukhi kungamafayela adalwe iwebhusayithi. Kunezinhlobo ezimbili zamakhukhi: Amakhukhi wokuqala adalwe isayithi olivakashelayo. Isayithi liboniswa kwibha yekheli. Amakhukhi wenkampani yangaphandle adalwa ngamanye amasayithi. Lawa masayithi aphethe okunye okuqukethwe, njengezikhangiso noma izithombe, ozibona kuwebhusayithi oyivakashelayo.</translation> <translation id="3785308913036335955">Bonisa isinqamuleli sezinhlelo zokusebenza</translation> <translation id="3785727820640310185">Amaphasiwedi alondoloziwe aleli sayithi</translation> @@ -4288,6 +4292,7 @@ <translation id="5066100345385738837">Phatha ukuvikela i-DNS kumasethingi e-ChromeOS</translation> <translation id="5067399438976153555">Ihlala ivuliwe</translation> <translation id="5067867186035333991">Buza uma ngabe i-<ph name="HOST" /> ifuna ukufinyelela kumakrofoni yakho</translation> +<translation id="5068553687099139861">Bonisa amaphasiwedi</translation> <translation id="5068918910148307423">Ungavumeli amasayithi asanda kuvalwa ukuqeda ukuthumela noma ukwamukela idatha</translation> <translation id="5068919226082848014">I-Pizza</translation> <translation id="5070710277167211639">Thuthukisa ukuzula ku-HTTPS futhi ikuxwayise ngaphambi kokulayisha amasayithi angayisekeli.</translation> @@ -6444,6 +6449,7 @@ <translation id="7152478047064750137">Lesi sandiso asidingi izimvume ezibalulekile</translation> <translation id="7154130902455071009">Guqula ikhasi lakho lokuqala ulenze i-: <ph name="START_PAGE" /></translation> <translation id="7155171745945906037">Isithombe esikhona kusukela kukhamera noma ifayela</translation> +<translation id="7159953856712257647">Kufakwe ngokuzenzakalelayo</translation> <translation id="7160182524506337403">Manje usungabuka izaziso zefoni yakho</translation> <translation id="7163202347044721291">Iqinisekisa ikhodi yokwenza kusebenze...</translation> <translation id="716640248772308851">I-"<ph name="EXTENSION" />" ingafunda izithombe, ividiyo, namafayela womsindo kuzindawo ezihloliwe.</translation> @@ -7542,6 +7548,7 @@ <translation id="820568752112382238">Amasayithi avakashelwe kaningi</translation> <translation id="8206745257863499010">I-Bluesy</translation> <translation id="8206859287963243715">Iselula</translation> +<translation id="8208216423136871611">Ungalondolozi</translation> <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Isaziso esisha}one{Izaziso ezintsha ezingu-#}other{Izaziso ezintsha ezingu-#}}</translation> <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Ukulanda kuyaqhubeka}one{Ukulanda kuyaqhubeka}other{Ukulanda kuyaqhubeka}}</translation> <translation id="8213449224684199188">Kufakwe imodi yesithombe</translation> @@ -7654,6 +7661,7 @@ <translation id="8314835274931377415">Qala ukusetha Iswishi Yokufinyelela?</translation> <translation id="8317582043908962055">Bona umbhalo we-P&DF</translation> <translation id="8317671367883557781">Engeza uxhumo lenethiwekhi</translation> +<translation id="8317965619823678157">kopisha amaphasiwedi</translation> <translation id="8318266828739827371">Sebenzisa ukubuka kwesikrini esihlukanisiwe ukuze ubone indawo ekhulisiwe yesikrini sakho. Sebenzisa u-Search + Ctrl + D ukuze uvule futhi uvale isikhulisi esidokhiwe.</translation> <translation id="8319414634934645341">Ukusetshenziswa kokhiye onwetshiwe</translation> <translation id="8321837372750396788">Le <ph name="DEVICE_TYPE" /> izophathwa i-<ph name="MANAGER" />.</translation> @@ -8582,6 +8590,7 @@ <translation id="929117907539171075">Idatha engaxhumekile ku-inthanethi kuzinhlelo zokusebenza ezixhumekile izosuswa</translation> <translation id="930268624053534560">Izitembu zesikhathi ezinemininingwane</translation> <translation id="930893132043726269">Okwamanje iyazula</translation> +<translation id="93140074055951850">Ama-app e-Android aye amiswa</translation> <translation id="932327136139879170">Ikhaya</translation> <translation id="932508678520956232">Ayikwazanga ukuqalisa ukuphrinta.</translation> <translation id="933427034780221291">{NUM_FILES,plural, =1{Leli fayela likhulu kakhulu ukuthi lingahlolelwa ezokuphepha. Ungalayisha amafayela kufikela ku-50 MB.}one{Amanye walawa mafayela makhulu kakhulu ukuthi angahlolelwa ezokuphepha. Ungalayisha amafayela kufikela ku-50 MB.}other{Amanye walawa mafayela makhulu kakhulu ukuthi angahlolelwa ezokuphepha. Ungalayisha amafayela kufikela ku-50 MB.}}</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb index 37c59829..cdcbcf9 100644 --- a/chrome/app/resources/google_chrome_strings_am.xtb +++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -198,7 +198,7 @@ <translation id="4747730611090640388">Chrome የእርስዎን ዝንባሌዎች ሊገምት ይችላል። በኋላ ላይ እርስዎ የሚጎበኙት ጣቢያ እርስዎ የሚያዩዋቸውን ማስታወቂያዎች ግላዊነት ለማላበስ Chrome ዝንባሌዎችዎን እንዲያይ ሊጠይቅ ይችላል።</translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">ይህ ፋይል አደገኛ ሊሆን ስለሚችል Chrome አግዶታል።</translation> -<translation id="479167709087336770">ይህ በ Google ፍለጋ ውስጥ ጥቅም ላይ ጋር ተመሳሳይ የፊደል አራሚ ይጠቀማል። በአሳሽ ውስጥ የሚተይቡት ጽሑፍ ወደ Google ይላካል። ይህን ባህሪ ሁልጊዜ በቅንብሮች ውስጥ መለወጥ ይችላሉ።</translation> +<translation id="479167709087336770">ይህ በ Google ፍለጋ ውስጥ ጥቅም ላይ ጋር ተመሳሳይ የፊደል አራሚ ይጠቀማል። በአሳሽ ውስጥ የሚተይቡት ጽሁፍ ወደ Google ይላካል። ይህን ባህሪ ሁልጊዜ በቅንብሮች ውስጥ መለወጥ ይችላሉ።</translation> <translation id="4842397268809523050">ስምረት ለጎራዎ ስለማይገኝ ChromeOS Flex ውሂብዎን ማስመር አልቻለም።</translation> <translation id="4873783916118289636">በChrome ውስጥ ቁልፍ የግላዊነት እና የደህንነት ቁጥጥሮችን ይገምግሙ</translation> <translation id="4891791193823137474">Google Chrome በጀርባ ውስጥ ይሂድ</translation> @@ -276,7 +276,7 @@ <translation id="6696915334902295848">Chrome ለዚህ ጣቢያ የማይክሮፎን ፈቃድ ያስፈልገዋል</translation> <translation id="6735387454586646204">የChromeOS Flex ስርዓት</translation> <translation id="6739177684496155661">በአዲሱ የChrome መገለጫ ውስጥ ይቀጥል?</translation> -<translation id="6750954913813541382">የሥርዓተ ሆሄ ህጸሶችን ለማስተካከል እርስዎን የሚተይቡትን ጽሑፍ Chrome ወደ Google በአሳሽ ውስጥ ይልካል</translation> +<translation id="6750954913813541382">የሥርዓተ ሆሄ ህጸሶችን ለማስተካከል እርስዎን የሚተይቡትን ጽሁፍ Chrome ወደ Google በአሳሽ ውስጥ ይልካል</translation> <translation id="677276454032249905">የሆነው ሆኖ ከChrome ይወጣ?</translation> <translation id="6785872064505734160">በChrome ውስጥ Google ረዳት በመላ ድር ጣቢያዎች ላይ ለእርስዎ እርምጃዎችን ማጠናቀቅ ይችላል</translation> <translation id="683440813066116847">Google Chrome Canary ለmDNS ትራፊክ ለመፍቀድ የውስጥ ደንብ።</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 0fc61a2e..ca6e82c1 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3011,6 +3011,8 @@ "enterprise/util/android_enterprise_info.cc", "enterprise/util/android_enterprise_info.h", "fast_checkout/fast_checkout_capabilities_fetcher.h", + "fast_checkout/fast_checkout_capabilities_fetcher_factory.cc", + "fast_checkout/fast_checkout_capabilities_fetcher_factory.h", "fast_checkout/fast_checkout_capabilities_fetcher_impl.cc", "fast_checkout/fast_checkout_capabilities_fetcher_impl.h", "fast_checkout/fast_checkout_capabilities_results_cache.cc", @@ -5229,6 +5231,7 @@ "//chromeos/login/login_state", "//chromeos/services/bluetooth_config", "//chromeos/services/bluetooth_config/public/mojom", + "//chromeos/services/hotspot_config/public/mojom", "//chromeos/services/network_config", "//chromeos/services/network_config:in_process_instance", "//chromeos/services/network_config/public/mojom",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index bb5e070..4705ecf 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -481,6 +481,20 @@ {flag_descriptions::kUpdateMenuTypeUnsupportedOSVersion, switches::kForceUpdateMenuType, "unsupported_os_version"}, }; + +const FeatureEntry::FeatureParam kOmahaMinSdkVersionAndroidMinSdk1[] = { + {"min_sdk_version", "1"}}; +const FeatureEntry::FeatureParam kOmahaMinSdkVersionAndroidMinSdk1000[] = { + {"min_sdk_version", "1000"}}; +const FeatureEntry::FeatureVariation kOmahaMinSdkVersionAndroidVariations[] = { + {flag_descriptions::kOmahaMinSdkVersionAndroidMinSdk1Description, + kOmahaMinSdkVersionAndroidMinSdk1, + std::size(kOmahaMinSdkVersionAndroidMinSdk1), nullptr}, + {flag_descriptions::kOmahaMinSdkVersionAndroidMinSdk1000Description, + kOmahaMinSdkVersionAndroidMinSdk1000, + std::size(kOmahaMinSdkVersionAndroidMinSdk1000), nullptr}, +}; + #else // BUILDFLAG(IS_ANDROID) const FeatureEntry::FeatureParam kReaderModeOfferInSettings[] = { {switches::kReaderModeDiscoverabilityParamName, @@ -783,6 +797,17 @@ std::size(kShowSingleRowMVTiles), nullptr}, {"(show two rows of MV tiles)", kShowTwoRowsMVTiles, std::size(kShowTwoRowsMVTiles), nullptr}}; + +const FeatureEntry::FeatureParam kTangibleSyncGroupA[] = {{"group_id", "1"}}; +const FeatureEntry::FeatureParam kTangibleSyncGroupB[] = {{"group_id", "2"}}; +const FeatureEntry::FeatureParam kTangibleSyncGroupC[] = {{"group_id", "3"}}; +const FeatureEntry::FeatureVariation kTangibleSyncVariations[] = { + {"(turn on sync and back up)", kTangibleSyncGroupA, + std::size(kTangibleSyncGroupA), nullptr}, + {"(sync and back up)", kTangibleSyncGroupB, std::size(kTangibleSyncGroupB), + nullptr}, + {"(turn on sync and sync data)", kTangibleSyncGroupC, + std::size(kTangibleSyncGroupC), nullptr}}; #endif // BUILDFLAG(IS_ANDROID) const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = { @@ -4679,6 +4704,12 @@ SINGLE_VALUE_TYPE_AND_VALUE(switches::kMarketUrlForTesting, "https://play.google.com/store/apps/" "details?id=com.android.chrome")}, + {"omaha-min-sdk-version-android", + flag_descriptions::kOmahaMinSdkVersionAndroidName, + flag_descriptions::kOmahaMinSdkVersionAndroidDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kOmahaMinSdkVersionAndroid, + kOmahaMinSdkVersionAndroidVariations, + "OmahaMinSdkVersionAndroidStudy")}, #endif // BUILDFLAG(IS_ANDROID) {"enable-tls13-early-data", flag_descriptions::kEnableTLS13EarlyDataName, flag_descriptions::kEnableTLS13EarlyDataDescription, kOsAll, @@ -6415,7 +6446,9 @@ {"tangible-sync", flag_descriptions::kTangibleSyncName, flag_descriptions::kTangibleSyncDescription, kOsAndroid, - FEATURE_VALUE_TYPE(switches::kTangibleSync)}, + FEATURE_WITH_PARAMS_VALUE_TYPE(switches::kTangibleSync, + kTangibleSyncVariations, + "TangibleSyncVariations")}, {"enable-cbd-sign-out", flag_descriptions::kEnableCbdSignOutName, flag_descriptions::kEnableCbdSignOutDescription, kOsAndroid,
diff --git a/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/MainActivity.java b/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/MainActivity.java index a316b9f..c0b30f2 100644 --- a/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/MainActivity.java +++ b/chrome/browser/android/examples/custom_tabs_client/src/java/org/chromium/customtabsclient/MainActivity.java
@@ -111,10 +111,21 @@ @Override public void extraCallback(@NonNull String callbackName, @Nullable Bundle args) { - if (callbackName.equals("onVerticalScrollEvent") && args != null) { + if (args == null) return; + + // CustomTabsConnection#ON_VERTICAL_SCROLL_EVENT_CALLBACK + if (callbackName.equals("onVerticalScrollEvent")) { + // CustomTabsConnection#ON_VERTICAL_SCROLL_EVENT_IS_DIRECTION_UP_EXTRA Log.w(TAG, "onVerticalScrollEvent: isDirectionUp = " + args.getBoolean("isDirectionUp")); + + // CustomTabsConnection#ON_GREATEST_SCROLL_PERCENTAGE_INCREASED_CALLBACK + } else if (callbackName.equals("onGreatestScrollPercentageIncreased")) { + // CustomTabsConnection#ON_GREATEST_SCROLL_PERCENTAGE_INCREASED_PERCENTAGE_EXTRA + Log.w(TAG, + "onGreatestScrollPercentageIncreased: scrollPercentage = " + + args.getInt("scrollPercentage")); } } }
diff --git a/chrome/browser/ash/accessibility/dictation_browsertest.cc b/chrome/browser/ash/accessibility/dictation_browsertest.cc index f6ea1721..3ad2140 100644 --- a/chrome/browser/ash/accessibility/dictation_browsertest.cc +++ b/chrome/browser/ash/accessibility/dictation_browsertest.cc
@@ -24,7 +24,9 @@ #include "chrome/browser/ash/accessibility/accessibility_test_utils.h" #include "chrome/browser/ash/accessibility/dictation_bubble_test_helper.h" #include "chrome/browser/ash/accessibility/speech_monitor.h" +#include "chrome/browser/ash/base/locale_util.h" #include "chrome/browser/ash/input_method/textinput_test_helper.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/speech/speech_recognition_constants.h" #include "chrome/browser/speech/speech_recognition_test_helper.h" @@ -758,30 +760,34 @@ WaitForRecognitionStopped(); } -// Tests the behavior of Dictation in other languages. -class DictationI18NTest : public DictationTestBase { +// Tests the behavior of Dictation in Japanese. +class DictationJaTest : public DictationTestBase { public: - DictationI18NTest() = default; - ~DictationI18NTest() override = default; - DictationI18NTest(const DictationI18NTest&) = delete; - DictationI18NTest& operator=(const DictationI18NTest&) = delete; + DictationJaTest() = default; + ~DictationJaTest() override = default; + DictationJaTest(const DictationJaTest&) = delete; + DictationJaTest& operator=(const DictationJaTest&) = delete; protected: void SetUpOnMainThread() override { - GetActiveUserPrefs()->SetString(prefs::kAccessibilityDictationLocale, - "ja-JP"); + locale_util::SwitchLanguage("ja", /*enable_locale_keyboard_layouts=*/true, + /*login_layouts_only*/ false, base::DoNothing(), + browser()->profile()); + g_browser_process->SetApplicationLocale("ja"); + GetActiveUserPrefs()->SetString(prefs::kAccessibilityDictationLocale, "ja"); + DictationTestBase::SetUpOnMainThread(); } }; // On-device speech recognition is currently limited to en-US, so -// DictationI18NTest should use network speech recognition only. +// DictationJaTest should use network speech recognition only. INSTANTIATE_TEST_SUITE_P( Network, - DictationI18NTest, + DictationJaTest, ::testing::Values(speech::SpeechRecognitionType::kNetwork)); -IN_PROC_BROWSER_TEST_P(DictationI18NTest, NoSmartSpacingOrCapitalization) { +IN_PROC_BROWSER_TEST_P(DictationJaTest, NoSmartSpacingOrCapitalization) { ToggleDictationWithKeystroke(); WaitForRecognitionStarted(); SendFinalResultAndWaitForTextAreaValue("this", "this"); @@ -791,6 +797,25 @@ WaitForRecognitionStopped(); } +IN_PROC_BROWSER_TEST_P(DictationJaTest, CanDictate) { + ToggleDictationWithKeystroke(); + WaitForRecognitionStarted(); + SendFinalResultAndWaitForTextAreaValue("テニス", "テニス"); + ToggleDictationWithKeystroke(); + WaitForRecognitionStopped(); +} + +IN_PROC_BROWSER_TEST_P(DictationJaTest, DeleteCharacter) { + ToggleDictationWithKeystroke(); + WaitForRecognitionStarted(); + // Dictate something. + SendFinalResultAndWaitForTextAreaValue("テニス", "テニス"); + // Perform the 'delete' command. + SendFinalResultAndWaitForTextAreaValue("削除", "テニ"); + ToggleDictationWithKeystroke(); + WaitForRecognitionStopped(); +} + class DictationCommandsTest : public DictationTest { protected: DictationCommandsTest() {}
diff --git a/chrome/browser/ash/arc/accessibility/accessibility_node_info_data_wrapper.cc b/chrome/browser/ash/arc/accessibility/accessibility_node_info_data_wrapper.cc index 3c63fff..a303ccc 100644 --- a/chrome/browser/ash/arc/accessibility/accessibility_node_info_data_wrapper.cc +++ b/chrome/browser/ash/arc/accessibility/accessibility_node_info_data_wrapper.cc
@@ -463,14 +463,30 @@ } // Custom actions. - std::vector<int32_t> custom_action_ids; - if (GetProperty(AXIntListProperty::CUSTOM_ACTION_IDS, &custom_action_ids)) { + if (node_ptr_->custom_actions) { + std::vector<int32_t> custom_action_ids; + std::vector<std::string> custom_action_descriptions; + + for (auto& action : node_ptr_->custom_actions.value()) { + custom_action_ids.push_back(action->id); + custom_action_descriptions.push_back(action->label.value()); + } + + out_data->AddAction(ax::mojom::Action::kCustomAction); + out_data->AddIntListAttribute(ax::mojom::IntListAttribute::kCustomActionIds, + custom_action_ids); + out_data->AddStringListAttribute( + ax::mojom::StringListAttribute::kCustomActionDescriptions, + custom_action_descriptions); + } else if (std::vector<int32_t> custom_action_ids; + GetProperty(AXIntListProperty::CUSTOM_ACTION_IDS_DEPRECATED, + &custom_action_ids)) { std::vector<std::string> custom_action_descriptions; CHECK(GetProperty(AXStringListProperty::CUSTOM_ACTION_DESCRIPTIONS, &custom_action_descriptions)); - CHECK(!custom_action_ids.empty()); - CHECK_EQ(custom_action_ids.size(), custom_action_descriptions.size()); + DCHECK(!custom_action_ids.empty()); + DCHECK_EQ(custom_action_ids.size(), custom_action_descriptions.size()); out_data->AddAction(ax::mojom::Action::kCustomAction); out_data->AddIntListAttribute(ax::mojom::IntListAttribute::kCustomActionIds, @@ -599,11 +615,19 @@ bool AccessibilityNodeInfoDataWrapper::HasStandardAction( AXActionType action) const { + if (node_ptr_->standard_actions) { + for (const auto& supported_action : node_ptr_->standard_actions.value()) { + if (static_cast<AXActionType>(supported_action->id) == action) + return true; + } + return false; + } + if (!node_ptr_->int_list_properties) return false; auto itr = node_ptr_->int_list_properties->find( - AXIntListProperty::STANDARD_ACTION_IDS); + AXIntListProperty::STANDARD_ACTION_IDS_DEPRECATED); if (itr == node_ptr_->int_list_properties->end()) return false;
diff --git a/chrome/browser/ash/arc/accessibility/accessibility_node_info_data_wrapper_unittest.cc b/chrome/browser/ash/arc/accessibility/accessibility_node_info_data_wrapper_unittest.cc index 17b08547..b74ef0b9 100644 --- a/chrome/browser/ash/arc/accessibility/accessibility_node_info_data_wrapper_unittest.cc +++ b/chrome/browser/ash/arc/accessibility/accessibility_node_info_data_wrapper_unittest.cc
@@ -31,7 +31,6 @@ using AXIntProperty = mojom::AccessibilityIntProperty; using AXNodeInfoData = mojom::AccessibilityNodeInfoData; using AXRangeInfoData = mojom::AccessibilityRangeInfoData; -using AXStringListProperty = mojom::AccessibilityStringListProperty; using AXStringProperty = mojom::AccessibilityStringProperty; class AccessibilityNodeInfoDataWrapperTest : public testing::Test, @@ -472,16 +471,15 @@ EXPECT_EQ(ax::mojom::CheckedState::kTrue, data.GetCheckedState()); // Make the node expandable (i.e. collapsed). - SetProperty(node, AXIntListProperty::STANDARD_ACTION_IDS, - std::vector<int>({static_cast<int>(AXActionType::EXPAND)})); + AddStandardAction(&node, AXActionType::EXPAND); data = CallSerialize(wrapper); EXPECT_TRUE(data.HasState(ax::mojom::State::kCollapsed)); EXPECT_FALSE(data.HasState(ax::mojom::State::kExpanded)); // Make the node collapsible (i.e. expanded). - SetProperty(node, AXIntListProperty::STANDARD_ACTION_IDS, - std::vector<int>({static_cast<int>(AXActionType::COLLAPSE)})); + node.standard_actions = absl::nullopt; + AddStandardAction(&node, AXActionType::COLLAPSE); data = CallSerialize(wrapper); EXPECT_FALSE(data.HasState(ax::mojom::State::kCollapsed)); @@ -748,9 +746,8 @@ // Set click and focus action to child1. child1 will be clickable and // focusable, and gets ax name from descendants. - SetProperty(child1, AXIntListProperty::STANDARD_ACTION_IDS, - std::vector<int>({static_cast<int>(AXActionType::CLICK), - static_cast<int>(AXActionType::FOCUS)})); + AddStandardAction(&child1, AXActionType::CLICK); + AddStandardAction(&child1, AXActionType::FOCUS); data = CallSerialize(root_wrapper); ASSERT_FALSE( @@ -766,9 +763,9 @@ EXPECT_TRUE(data.HasState(ax::mojom::State::kFocusable)); // Same for clear_focus action instead of focus action. - SetProperty(child1, AXIntListProperty::STANDARD_ACTION_IDS, - std::vector<int>({static_cast<int>(AXActionType::CLICK), - static_cast<int>(AXActionType::CLEAR_FOCUS)})); + child1.standard_actions = absl::nullopt; + AddStandardAction(&child1, AXActionType::CLICK); + AddStandardAction(&child1, AXActionType::CLEAR_FOCUS); data = CallSerialize(root_wrapper); ASSERT_FALSE( @@ -804,4 +801,24 @@ ax::mojom::StringAttribute::kContainerLiveStatus, &val)); ASSERT_EQ("polite", val); } + +TEST_F(AccessibilityNodeInfoDataWrapperTest, CustomActions) { + AXNodeInfoData node; + AccessibilityNodeInfoDataWrapper wrapper(tree_source(), &node); + + // Check if a custom action is properly serialized. + AddCustomAction(&node, 300, "This is label"); + + ui::AXNodeData data = CallSerialize(wrapper); + std::vector<int> result_ids; + std::vector<std::string> result_labels; + EXPECT_TRUE(data.HasAction(ax::mojom::Action::kCustomAction)); + EXPECT_TRUE(data.GetIntListAttribute( + ax::mojom::IntListAttribute::kCustomActionIds, &result_ids)); + EXPECT_EQ(std::vector<int>({300}), result_ids); + EXPECT_TRUE(data.GetStringListAttribute( + ax::mojom::StringListAttribute::kCustomActionDescriptions, + &result_labels)); + EXPECT_EQ(std::vector<std::string>({"This is label"}), result_labels); +} } // namespace arc
diff --git a/chrome/browser/ash/arc/accessibility/arc_accessibility_test_util.cc b/chrome/browser/ash/arc/accessibility/arc_accessibility_test_util.cc new file mode 100644 index 0000000..966e6c1 --- /dev/null +++ b/chrome/browser/ash/arc/accessibility/arc_accessibility_test_util.cc
@@ -0,0 +1,45 @@ +// Copyright 2022 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/ash/arc/accessibility/arc_accessibility_test_util.h" + +#include "third_party/abseil-cpp/absl/types/optional.h" +#include "ui/accessibility/ax_enums.mojom.h" + +namespace { +void AddAction( + std::vector<arc::mojom::AccessibilityActionInAndroidPtr>* actions, + int id, + absl::optional<std::string> label = absl::nullopt) { + actions->push_back(arc::mojom::AccessibilityActionInAndroid::New()); + arc::mojom::AccessibilityActionInAndroid* action = actions->back().get(); + action->id = id; + if (label) { + action->label = label; + } +} +} // namespace + +namespace arc { + +void AddStandardAction(mojom::AccessibilityNodeInfoData* node, + mojom::AccessibilityActionType action_type) { + if (!node->standard_actions) { + node->standard_actions = + std::vector<mojom::AccessibilityActionInAndroidPtr>(); + } + AddAction(&node->standard_actions.value(), static_cast<int>(action_type)); +} + +void AddCustomAction(mojom::AccessibilityNodeInfoData* node, + int id, + std::string label) { + if (!node->custom_actions) { + node->custom_actions = + std::vector<mojom::AccessibilityActionInAndroidPtr>(); + } + AddAction(&node->custom_actions.value(), id, label); +} + +} // namespace arc
diff --git a/chrome/browser/ash/arc/accessibility/arc_accessibility_test_util.h b/chrome/browser/ash/arc/accessibility/arc_accessibility_test_util.h index 79c266b7..be055ed 100644 --- a/chrome/browser/ash/arc/accessibility/arc_accessibility_test_util.h +++ b/chrome/browser/ash/arc/accessibility/arc_accessibility_test_util.h
@@ -25,6 +25,13 @@ properties->insert_or_assign(prop, value); } +void AddStandardAction(mojom::AccessibilityNodeInfoData* node, + mojom::AccessibilityActionType action_type); + +void AddCustomAction(mojom::AccessibilityNodeInfoData* node, + int id, + std::string label); + #define DEF_SET_PROP(data_type, prop_type, data_member_name, value_type) \ inline void SetProperty(data_type* data, prop_type prop, \ const value_type& value) { \
diff --git a/chrome/browser/ash/arc/accessibility/ax_tree_source_arc_unittest.cc b/chrome/browser/ash/arc/accessibility/ax_tree_source_arc_unittest.cc index 9fe0c832..053897c2 100644 --- a/chrome/browser/ash/arc/accessibility/ax_tree_source_arc_unittest.cc +++ b/chrome/browser/ash/arc/accessibility/ax_tree_source_arc_unittest.cc
@@ -34,7 +34,6 @@ using AXIntProperty = mojom::AccessibilityIntProperty; using AXNodeInfoData = mojom::AccessibilityNodeInfoData; using AXRangeInfoData = mojom::AccessibilityRangeInfoData; -using AXStringListProperty = mojom::AccessibilityStringListProperty; using AXStringProperty = mojom::AccessibilityStringProperty; using AXWindowBooleanProperty = mojom::AccessibilityWindowBooleanProperty; using AXWindowInfoData = mojom::AccessibilityWindowInfoData; @@ -1135,10 +1134,8 @@ button1->is_virtual_node = true; SetProperty(button1, AXStringProperty::CLASS_NAME, ui::kAXButtonClassname); SetProperty(button1, AXBooleanProperty::VISIBLE_TO_USER, true); - SetProperty( - button1, AXIntListProperty::STANDARD_ACTION_IDS, - std::vector<int>({static_cast<int>(AXActionType::NEXT_HTML_ELEMENT), - static_cast<int>(AXActionType::FOCUS)})); + AddStandardAction(button1, AXActionType::NEXT_HTML_ELEMENT); + AddStandardAction(button1, AXActionType::FOCUS); SetProperty(button1, AXStringProperty::CONTENT_DESCRIPTION, "button1"); event->node_data.push_back(AXNodeInfoData::New()); @@ -1148,10 +1145,8 @@ button2->is_virtual_node = true; SetProperty(button2, AXStringProperty::CLASS_NAME, ui::kAXButtonClassname); SetProperty(button2, AXBooleanProperty::VISIBLE_TO_USER, true); - SetProperty( - button2, AXIntListProperty::STANDARD_ACTION_IDS, - std::vector<int>({static_cast<int>(AXActionType::NEXT_HTML_ELEMENT), - static_cast<int>(AXActionType::FOCUS)})); + AddStandardAction(button2, AXActionType::NEXT_HTML_ELEMENT); + AddStandardAction(button2, AXActionType::FOCUS); SetProperty(button2, AXStringProperty::CONTENT_DESCRIPTION, "button2"); CallNotifyAccessibilityEvent(event.get());
diff --git a/chrome/browser/ash/crostini/crostini_manager.cc b/chrome/browser/ash/crostini/crostini_manager.cc index 70f8343..6c6f9c5 100644 --- a/chrome/browser/ash/crostini/crostini_manager.cc +++ b/chrome/browser/ash/crostini/crostini_manager.cc
@@ -2048,6 +2048,11 @@ files.begin(), files.end(), google::protobuf::RepeatedFieldBackInserter(request.mutable_files())); + std::vector<vm_tools::cicerone::ContainerFeature> container_features = + GetContainerFeatures(); + request.mutable_container_features()->Add(container_features.begin(), + container_features.end()); + GetCiceroneClient()->LaunchContainerApplication( std::move(request), base::BindOnce(&CrostiniManager::OnLaunchContainerApplication,
diff --git a/chrome/browser/ash/crostini/crostini_util.cc b/chrome/browser/ash/crostini/crostini_util.cc index df122223..08f5841d 100644 --- a/chrome/browser/ash/crostini/crostini_util.cc +++ b/chrome/browser/ash/crostini/crostini_util.cc
@@ -7,6 +7,7 @@ #include <utility> #include "ash/constants/app_types.h" +#include "ash/constants/ash_features.h" #include "base/bind.h" #include "base/callback.h" #include "base/callback_helpers.h" @@ -335,6 +336,20 @@ std::move(callback)); } +std::vector<vm_tools::cicerone::ContainerFeature> GetContainerFeatures() { + std::vector<vm_tools::cicerone::ContainerFeature> result; + if (base::FeatureList::IsEnabled(ash::features::kCrostiniImeSupport)) { + result.push_back( + vm_tools::cicerone::ContainerFeature::ENABLE_GTK3_IME_SUPPORT); + if (base::FeatureList::IsEnabled( + ash::features::kCrostiniVirtualKeyboardSupport)) { + result.push_back(vm_tools::cicerone::ContainerFeature:: + ENABLE_VIRTUAL_KEYBOARD_SUPPORT); + } + } + return result; +} + std::string CryptohomeIdForProfile(Profile* profile) { std::string id = ash::ProfileHelper::GetUserIdHashFromProfile(profile); // Empty id means we're running in a test.
diff --git a/chrome/browser/ash/crostini/crostini_util.h b/chrome/browser/ash/crostini/crostini_util.h index 82513bc..3c587a3 100644 --- a/chrome/browser/ash/crostini/crostini_util.h +++ b/chrome/browser/ash/crostini/crostini_util.h
@@ -16,6 +16,7 @@ #include "chrome/browser/ash/crostini/crostini_simple_types.h" #include "chrome/browser/ash/guest_os/guest_id.h" #include "chrome/browser/ash/guest_os/public/types.h" +#include "chromeos/ash/components/dbus/cicerone/cicerone_service.pb.h" #include "components/services/app_service/public/cpp/intent.h" #include "storage/browser/file_system/file_system_url.h" #include "third_party/abseil-cpp/absl/types/variant.h" @@ -100,6 +101,9 @@ const std::vector<LaunchArg>& args = {}, CrostiniSuccessCallback callback = base::DoNothing()); +// Determine features to enable in the container on app/terminal launches. +std::vector<vm_tools::cicerone::ContainerFeature> GetContainerFeatures(); + // Retrieves cryptohome_id from profile. std::string CryptohomeIdForProfile(Profile* profile);
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest.cc b/chrome/browser/ash/file_manager/file_manager_browsertest.cc index 1ffdecf..6d7d6770 100644 --- a/chrome/browser/ash/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
@@ -1262,6 +1262,8 @@ TestCase("transferDragFileListItemSelects").FilesSwa(), TestCase("transferDragAndDrop"), TestCase("transferDragAndDrop").FilesSwa(), + TestCase("transferDragAndDropFolder"), + TestCase("transferDragAndDropFolder").FilesSwa(), TestCase("transferDragAndHover"), TestCase("transferDragAndHover").FilesSwa(), TestCase("transferDropBrowserFile"),
diff --git a/chrome/browser/ash/login/screens/assistant_optin_flow_screen_browsertest.cc b/chrome/browser/ash/login/screens/assistant_optin_flow_screen_browsertest.cc index 1ae1039..7db8917 100644 --- a/chrome/browser/ash/login/screens/assistant_optin_flow_screen_browsertest.cc +++ b/chrome/browser/ash/login/screens/assistant_optin_flow_screen_browsertest.cc
@@ -194,21 +194,20 @@ void GetSettingsWithHeader(const std::string& selector, GetSettingsCallback callback) override { - chromeos::assistant::SettingsUiSelector selector_proto; + assistant::SettingsUiSelector selector_proto; ASSERT_TRUE(selector_proto.ParseFromString(selector)); EXPECT_FALSE(selector_proto.about_me_settings()); EXPECT_TRUE(selector_proto.has_consent_flow_ui_selector()); - EXPECT_EQ(chromeos::assistant::ActivityControlSettingsUiSelector:: + EXPECT_EQ(assistant::ActivityControlSettingsUiSelector:: ASSISTANT_SUW_ONBOARDING_ON_CHROME_OS, selector_proto.consent_flow_ui_selector().flow_id()); - chromeos::assistant::GetSettingsUiResponse response; + assistant::GetSettingsUiResponse response; if (is_minor_user_) { auto* header = response.mutable_header(); header->set_footer_button_layout( - chromeos::assistant:: - SettingsResponseHeader_AcceptRejectLayout_EQUAL_WEIGHT); + assistant::SettingsResponseHeader_AcceptRejectLayout_EQUAL_WEIGHT); } auto* settings_ui = response.mutable_settings(); @@ -221,7 +220,7 @@ auto* consent_flow_ui = settings_ui->mutable_consent_flow_ui(); consent_flow_ui->set_consent_status( - chromeos::assistant::ConsentFlowUi_ConsentStatus_ASK_FOR_CONSENT); + assistant::ConsentFlowUi_ConsentStatus_ASK_FOR_CONSENT); consent_flow_ui->mutable_consent_ui()->set_accept_button_text("OK"); consent_flow_ui->mutable_consent_ui()->set_reject_button_text( "No, thank you"); @@ -240,7 +239,7 @@ } void PopulateActivityControlData( - chromeos::assistant::ConsentFlowUi_ConsentUi* consent_ui) { + assistant::ConsentFlowUi_ConsentUi* consent_ui) { auto* activity_control_ui = consent_ui->mutable_activity_control_ui(); activity_control_ui->set_consent_token(kAssistantConsentToken); activity_control_ui->set_ui_audit_key(kAssistantUiAuditKey); @@ -257,28 +256,28 @@ setting->add_additional_info_paragraph(); setting->set_additional_info_paragraph(0, "And it's really cool"); setting->set_icon_uri("assistant_icon"); - setting->set_setting_set_id(chromeos::assistant::SettingSetId::WAA); + setting->set_setting_set_id(assistant::SettingSetId::WAA); } void UpdateSettings(const std::string& update, UpdateSettingsCallback callback) override { - chromeos::assistant::SettingsUiUpdate update_proto; + assistant::SettingsUiUpdate update_proto; ASSERT_TRUE(update_proto.ParseFromString(update)); EXPECT_FALSE(update_proto.has_about_me_settings_update()); EXPECT_FALSE(update_proto.has_assistant_device_settings_update()); - chromeos::assistant::SettingsUiUpdateResult update_result; + assistant::SettingsUiUpdateResult update_result; if (update_proto.has_consent_flow_ui_update()) { EXPECT_EQ(kAssistantConsentToken, update_proto.consent_flow_ui_update().consent_token()); EXPECT_FALSE( update_proto.consent_flow_ui_update().saw_third_party_disclosure()); - EXPECT_EQ(chromeos::assistant::ActivityControlSettingsUiSelector:: + EXPECT_EQ(assistant::ActivityControlSettingsUiSelector:: ASSISTANT_SUW_ONBOARDING_ON_CHROME_OS, update_proto.consent_flow_ui_update().flow_id()); collected_optins_.insert(OptIn::ACTIVITY_CONTROL); update_result.mutable_consent_flow_update_result()->set_update_status( - chromeos::assistant::ConsentFlowUiUpdateResult::SUCCESS); + assistant::ConsentFlowUiUpdateResult::SUCCESS); } std::string message; EXPECT_TRUE(update_result.SerializeToString(&message));
diff --git a/chrome/browser/ash/login/ui/login_display_host_mojo.cc b/chrome/browser/ash/login/ui/login_display_host_mojo.cc index 240e3cd3..6df1c103 100644 --- a/chrome/browser/ash/login/ui/login_display_host_mojo.cc +++ b/chrome/browser/ash/login/ui/login_display_host_mojo.cc
@@ -419,10 +419,11 @@ HideDialog(); // If the OOBE dialog was hidden due to closing of the SAML page (camera - // timeout or ESC button) and user isn't using ChromeVox - let user go back to - // login flow with any action. Otherwise user can go back to login pressing - // arrow button. - if (saml_page_closed && !scoped_activity_observation_.IsObserving() && + // timeout or ESC button) and there are no user pods and the user isn't using + // ChromeVox - let the user go back to login flow with any action. Otherwise + // the user can go back to login by pressing the arrow button. + if (saml_page_closed && !has_user_pods_ && + !scoped_activity_observation_.IsObserving() && !AccessibilityManager::Get()->IsSpokenFeedbackEnabled()) { scoped_activity_observation_.Observe(ui::UserActivityDetector::Get()); }
diff --git a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.cc b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.cc index fafe161..651f02c 100644 --- a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.cc +++ b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate.cc
@@ -167,6 +167,7 @@ feedback_params.form_submit_time = base::TimeTicks::Now(); feedback_params.load_system_info = report->include_system_logs_and_histograms; feedback_params.send_histograms = report->include_system_logs_and_histograms; + feedback_params.send_bluetooth_logs = report->send_bluetooth_logs; base::WeakPtr<feedback::FeedbackUploader> uploader = base::AsWeakPtr(GetFeedbackUploaderForContext(profile_)); @@ -188,6 +189,9 @@ feedback_data->AddLog(kExtraDiagnosticsKey, feedback_context->extra_diagnostics.value()); } + if (feedback_context->category_tag.has_value()) { + feedback_data->set_category_tag(feedback_context->category_tag.value()); + } scoped_refptr<base::RefCountedMemory> png_data = GetScreenshotData(); if (report->include_screenshot && png_data && png_data.get()) {
diff --git a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc index 3d05c12..b7d967a 100644 --- a/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc +++ b/chrome/browser/ash/os_feedback/chrome_os_feedback_delegate_browsertest.cc
@@ -67,6 +67,7 @@ constexpr char kFeedbackUserConsentKey[] = "feedbackUserCtlConsent"; constexpr char kFeedbackUserConsentGrantedValue[] = "true"; constexpr char kFeedbackUserConsentDeniedValue[] = "false"; +constexpr char kFeedbackCategoryTag[] = "BluetoothReportWithLogs"; const std::u16string kDescription = u"This is a fake description"; } // namespace @@ -205,8 +206,8 @@ // - Screenshot is included. // - Consent granted. // - Non-empty extra_diagnostics provided. -// TODO(xiangdongkong): Add tests for other flags once they are supported. -// Currently, only load_system_info and send_histograms flags are implemented. +// - sentBluetoothLog flag is set true. +// - category_tag is set to "BluetoothReportWithLogs". IN_PROC_BROWSER_TEST_F(ChromeOsFeedbackDelegateTest, FeedbackDataPopulatedIncludeSysLogsAndScreenshot) { ReportPtr report = Report::New(); @@ -215,13 +216,14 @@ report->include_screenshot = true; report->contact_user_consent_granted = true; report->feedback_context->extra_diagnostics = kFakeExtraDiagnosticsValue; - + report->send_bluetooth_logs = true; + report->feedback_context->category_tag = kFeedbackCategoryTag; report->include_system_logs_and_histograms = true; const FeedbackParams expected_params{/*is_internal_email=*/false, /*load_system_info=*/true, /*send_tab_titles=*/false, /*send_histograms=*/true, - /*send_bluetooth_logs=*/false}; + /*send_bluetooth_logs=*/true}; scoped_refptr<FeedbackData> feedback_data; RunSendReport(std::move(report), expected_params, feedback_data); @@ -241,6 +243,8 @@ feedback_data->sys_info()->find(kExtraDiagnosticsKey); EXPECT_EQ(kExtraDiagnosticsKey, extra_diagnostics->first); EXPECT_EQ(kFakeExtraDiagnosticsValue, extra_diagnostics->second); + // Verify category_tag is marked as BluetoothReportWithLogs in the report. + EXPECT_EQ(kFeedbackCategoryTag, feedback_data->category_tag()); } // Test that feedback params and data are populated with correct data before @@ -248,6 +252,8 @@ // - System logs and histograms are not included. // - Screenshot is not included. // - Consent not granted. +// - sentBluetoothLogs flag is set false. +// - category_tag is not set to "BluetoothReportWithLogs". // - Empty string Extra Diagnostics provided. IN_PROC_BROWSER_TEST_F(ChromeOsFeedbackDelegateTest, FeedbackDataPopulatedNotIncludeSysLogsOrScreenshot) { @@ -259,6 +265,7 @@ report->description = kDescription; report->include_screenshot = false; report->contact_user_consent_granted = false; + report->send_bluetooth_logs = false; report->include_system_logs_and_histograms = false; const FeedbackParams expected_params{/*is_internal_email=*/false, @@ -284,6 +291,8 @@ auto extra_diagnostics = feedback_data->sys_info()->find(kExtraDiagnosticsKey); EXPECT_EQ(feedback_data->sys_info()->end(), extra_diagnostics); + // Verify category_tag is not marked as BluetoothReportWithLogs. + EXPECT_NE(kFeedbackCategoryTag, feedback_data->category_tag()); } // Test GetScreenshot returns correct data when there is a screenshot.
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc index 80e8e04..7a66c2a2 100644 --- a/chrome/browser/autofill/android/personal_data_manager_android.cc +++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -142,9 +142,7 @@ } CreditCardCVCAuthenticator* cvc_authenticator = - driver->autofill_manager() - ->GetCreditCardAccessManager() - ->GetOrCreateCVCAuthenticator(); + driver->autofill_manager()->client()->GetCVCAuthenticator(); cvc_authenticator->GetFullCardRequest()->GetFullCard( *card_, AutofillClient::UnmaskCardReason::kPaymentRequest, AsWeakPtr(), cvc_authenticator->GetAsFullCardRequestUIDelegate());
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc b/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc index bb800b8..3cfc683 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_client_impl.cc
@@ -255,7 +255,7 @@ DCHECK(website_login_manager_); return std::make_unique<ApcExternalActionDelegate>( - side_panel_coordinator_.get(), scrim_manager_.get(), + &GetWebContents(), side_panel_coordinator_.get(), scrim_manager_.get(), website_login_manager_.get()); }
diff --git a/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc b/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc index 6d45531..1220893a 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_client_impl_unittest.cc
@@ -54,10 +54,12 @@ class MockApcExternalActionDelegate : public ApcExternalActionDelegate { public: MockApcExternalActionDelegate( + content::WebContents* web_contents, AssistantDisplayDelegate* display_delegate, ApcScrimManager* apc_scrim_manager, autofill_assistant::WebsiteLoginManager* website_login_manager) - : ApcExternalActionDelegate(display_delegate, + : ApcExternalActionDelegate(web_contents, + display_delegate, apc_scrim_manager, website_login_manager) {} ~MockApcExternalActionDelegate() override = default; @@ -257,7 +259,8 @@ // Prepare the ApcExternalActionDelegate. auto apc_external_action_delegate = std::make_unique<MockApcExternalActionDelegate>( - side_panel_ref_, scrim_manager_ref_, website_login_manager_ref_); + web_contents(), side_panel_ref_, scrim_manager_ref_, + website_login_manager_ref_); apc_external_action_delegate_ref_ = apc_external_action_delegate.get(); // As default, assume a password change run as successful. ON_CALL(*apc_external_action_delegate_ref_, PasswordWasSuccessfullyChanged)
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc index 75c65d6..e36c0902 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.cc
@@ -16,25 +16,32 @@ #include "chrome/browser/ui/autofill_assistant/password_change/assistant_display_delegate.h" #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h" #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h" +#include "chrome/browser/ui/browser_finder.h" +#include "chrome/browser/ui/passwords/ui_utils.h" #include "chrome/grit/generated_resources.h" #include "components/autofill_assistant/browser/public/external_action.pb.h" #include "components/autofill_assistant/browser/public/external_action_delegate.h" #include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h" #include "components/autofill_assistant/browser/public/password_change/website_login_manager_impl.h" #include "components/autofill_assistant/browser/public/rectf.h" +#include "components/password_manager/core/browser/manage_passwords_referrer.h" #include "components/url_formatter/url_formatter.h" +#include "content/public/browser/web_contents.h" #include "ui/base/l10n/l10n_util.h" #include "url/gurl.h" using autofill_assistant::password_change::GenericPasswordChangeSpecification; ApcExternalActionDelegate::ApcExternalActionDelegate( + content::WebContents* web_contents, AssistantDisplayDelegate* display_delegate, ApcScrimManager* apc_scrim_manager, autofill_assistant::WebsiteLoginManager* website_login_manager) - : display_delegate_(display_delegate), + : web_contents_(web_contents), + display_delegate_(display_delegate), apc_scrim_manager_(apc_scrim_manager), website_login_manager_(website_login_manager) { + DCHECK(web_contents); DCHECK(display_delegate_); DCHECK(apc_scrim_manager_); DCHECK(website_login_manager_); @@ -250,6 +257,13 @@ std::move(onShowCompletionScreenDoneButtonClicked)); } +void ApcExternalActionDelegate::OpenPasswordManager() { + NavigateToManagePasswordsPage( + chrome::FindBrowserWithWebContents(web_contents_), + password_manager::ManagePasswordsReferrer:: + kAutomatedPasswordChangeSuccessLink); +} + void ApcExternalActionDelegate::ShowErrorScreen() { password_change_run_display_->ShowErrorScreen(); }
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h index fb823df..d2e09004 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h +++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate.h
@@ -21,11 +21,13 @@ namespace autofill_assistant { struct RectF; -} -namespace autofill_assistant { class WebsiteLoginManager; } // namespace autofill_assistant +namespace content { +class WebContents; +} // namespace content + // Receives actions from the `HeadlessScriptController` and passes them on an // implementation of a `PasswordChangeRunDisplay`. // Currently `ApcExternalActionDelegate` implements two interfaces. If the @@ -36,6 +38,7 @@ public PasswordChangeRunController { public: explicit ApcExternalActionDelegate( + content::WebContents* web_contents, AssistantDisplayDelegate* display_delegate, ApcScrimManager* apc_scrim_manager, autofill_assistant::WebsiteLoginManager* website_login_manager); @@ -82,6 +85,7 @@ void ShowStartingScreen(const GURL& url) override; void ShowCompletionScreen( base::RepeatingClosure onShowCompletionScreenDoneButtonClicked) override; + void OpenPasswordManager() override; void ShowErrorScreen() override; bool PasswordWasSuccessfullyChanged() override; @@ -115,6 +119,9 @@ void OnBasePromptDomUpdateReceived( const autofill_assistant::external::ElementConditionsUpdate& update); + // The `WebContents` on which the run is performed. + const raw_ptr<content::WebContents> web_contents_; + // The callback that terminates the current action. base::OnceCallback<void(const autofill_assistant::external::Result& result)> end_action_callback_;
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_browsertest.cc b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_browsertest.cc new file mode 100644 index 0000000..2d2c1f1 --- /dev/null +++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_browsertest.cc
@@ -0,0 +1,57 @@ +// Copyright 2022 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/autofill_assistant/password_change/apc_external_action_delegate.h" + +#include <memory> + +#include "base/strings/strcat.h" +#include "chrome/browser/ui/autofill_assistant/password_change/mock_apc_scrim_manager.h" +#include "chrome/browser/ui/autofill_assistant/password_change/mock_assistant_display_delegate.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/common/webui_url_constants.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "components/autofill_assistant/browser/public/password_change/mock_website_login_manager.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/test_utils.h" +#include "url/gurl.h" + +namespace { + +class ApcExternalActionDelegateBrowserTest : public InProcessBrowserTest { + public: + ApcExternalActionDelegateBrowserTest() = default; + ~ApcExternalActionDelegateBrowserTest() override = default; + + protected: + content::WebContents* web_contents() { + return browser()->tab_strip_model()->GetActiveWebContents(); + } + + // Test support. + MockApcScrimManager mock_apc_scrim_manager_; + MockAssistantDisplayDelegate mock_assistant_display_delegate_; + autofill_assistant::MockWebsiteLoginManager mock_website_login_manager_; +}; + +IN_PROC_BROWSER_TEST_F(ApcExternalActionDelegateBrowserTest, + OpenPasswordManager) { + auto delegate = std::make_unique<ApcExternalActionDelegate>( + web_contents(), &mock_assistant_display_delegate_, + &mock_apc_scrim_manager_, &mock_website_login_manager_); + + { + content::LoadStopObserver observer(web_contents()); + delegate->OpenPasswordManager(); + observer.Wait(); + } + + EXPECT_EQ(web_contents()->GetURL(), + GURL(base::StrCat({chrome::kChromeUISettingsURL, + chrome::kPasswordManagerSubPage}))); +} + +} // namespace
diff --git a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc index 4ecf6daa..478032e 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_external_action_delegate_unittest.cc
@@ -16,10 +16,12 @@ #include "chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_display.h" #include "chrome/browser/ui/autofill_assistant/password_change/password_change_run_display.h" #include "chrome/grit/generated_resources.h" +#include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "components/autofill_assistant/browser/public/external_action.pb.h" #include "components/autofill_assistant/browser/public/password_change/mock_website_login_manager.h" #include "components/autofill_assistant/browser/public/password_change/proto/actions.pb.h" #include "components/autofill_assistant/browser/public/rectf.h" +#include "content/public/test/test_renderer_host.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h" @@ -147,14 +149,15 @@ } // namespace -class ApcExternalActionDelegateTest : public ::testing::Test { +class ApcExternalActionDelegateTest : public ChromeRenderViewHostTestHarness { public: - ApcExternalActionDelegateTest() { - action_delegate_ = std::make_unique<ApcExternalActionDelegate>( - display_delegate(), apc_scrim_manager(), website_login_manager()); - } - void SetUp() override { + content::RenderViewHostTestHarness::SetUp(); + + action_delegate_ = std::make_unique<ApcExternalActionDelegate>( + web_contents(), display_delegate(), apc_scrim_manager(), + website_login_manager()); + EXPECT_CALL(*display(), Show); action_delegate()->Show(display()->GetWeakPtr()); }
diff --git a/chrome/browser/browsing_data/cookies_tree_model.cc b/chrome/browser/browsing_data/cookies_tree_model.cc index 8d4714e..33a12f7 100644 --- a/chrome/browser/browsing_data/cookies_tree_model.cc +++ b/chrome/browser/browsing_data/cookies_tree_model.cc
@@ -39,6 +39,7 @@ #include "components/browsing_data/content/local_storage_helper.h" #include "components/browsing_data/content/service_worker_helper.h" #include "components/browsing_data/content/shared_worker_helper.h" +#include "components/browsing_data/core/browsing_data_utils.h" #include "components/content_settings/core/browser/cookie_settings.h" #include "components/permissions/permissions_client.h" #include "components/vector_icons/vector_icons.h" @@ -180,19 +181,6 @@ return node->GetModel()->data_container(); } -bool IsHttps(net::CookieSourceScheme cookie_source_scheme) { - switch (cookie_source_scheme) { - case net::CookieSourceScheme::kSecure: - return true; - case net::CookieSourceScheme::kNonSecure: - return false; - case net::CookieSourceScheme::kUnset: - // Older cookies don't have a source scheme. Associate them with https - // since the majority of pageloads are https. - return true; - } -} - } // namespace CookieTreeNode::DetailedInfo::DetailedInfo() : node_type(TYPE_NONE) {} @@ -1451,10 +1439,12 @@ notifier->StartBatchUpdate(); for (auto it = container->cookie_list_.begin(); it != container->cookie_list_.end(); ++it) { - GURL source = (it->Domain() == ".") - ? GURL("http://./") - : net::cookie_util::CookieOriginToURL( - it->Domain(), IsHttps(it->SourceScheme())); + GURL source = + (it->Domain() == ".") + ? GURL("http://./") + : net::cookie_util::CookieOriginToURL( + it->Domain(), + browsing_data::IsHttpsCookieSourceScheme(it->SourceScheme())); if (filter.empty() || (CookieTreeHostNode::TitleForUrl(source).find( filter) != std::u16string::npos)) {
diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_service.cc index 6825d8b..f4701b26 100644 --- a/chrome/browser/cart/cart_service.cc +++ b/chrome/browser/cart/cart_service.cc
@@ -1078,8 +1078,8 @@ bool CartService::IsDiscountUsed(const std::string& rule_id) { return profile_->GetPrefs() - ->GetDictionary(prefs::kCartUsedDiscounts) - ->FindBoolKey(rule_id) != absl::nullopt; + ->GetValueDict(prefs::kCartUsedDiscounts) + .FindBool(rule_id) != absl::nullopt; } void CartService::RecordFetchTimestamp() {
diff --git a/chrome/browser/chrome_back_forward_cache_browsertest.cc b/chrome/browser/chrome_back_forward_cache_browsertest.cc index 46a36d9..45ceb02 100644 --- a/chrome/browser/chrome_back_forward_cache_browsertest.cc +++ b/chrome/browser/chrome_back_forward_cache_browsertest.cc
@@ -39,6 +39,7 @@ #include "content/public/test/test_utils.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h" +#include "pdf/buildflags.h" #include "third_party/blink/public/common/permissions/permission_utils.h" #include "third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h" #include "third_party/blink/public/mojom/webshare/webshare.mojom.h" @@ -760,6 +761,7 @@ FROM_HERE); } +#if BUILDFLAG(ENABLE_PDF) IN_PROC_BROWSER_TEST_P(ChromeBackForwardCacheBrowserWithEmbedTest, DoesNotCachePageWithEmbeddedPdf) { const auto tag = GetParam(); @@ -788,6 +790,7 @@ // the blocklisted feature kContainsPlugins. ExpectNotRestoredReasonHaveInnerContents(FROM_HERE); } +#endif // BUILDFLAG(ENABLE_PDF) IN_PROC_BROWSER_TEST_P(ChromeBackForwardCacheBrowserWithEmbedTest, DoesNotCachePageWithEmbeddedPdfAppendedOnPageLoaded) {
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index ff564fe1..cb53f59 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -2726,6 +2726,7 @@ "../ash/arc/accessibility/accessibility_info_data_wrapper_unittest.cc", "../ash/arc/accessibility/accessibility_node_info_data_wrapper_unittest.cc", "../ash/arc/accessibility/arc_accessibility_helper_bridge_unittest.cc", + "../ash/arc/accessibility/arc_accessibility_test_util.cc", "../ash/arc/accessibility/arc_accessibility_test_util.h", "../ash/arc/accessibility/arc_accessibility_tree_tracker_unittest.cc", "../ash/arc/accessibility/arc_accessibility_util_unittest.cc",
diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc index 8ca2526e1..7c104537 100644 --- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc +++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc
@@ -1298,23 +1298,28 @@ return; } - // Send file watch notifications on I/O task completion. inotify is flaky on + // Send directory change events on I/O task completion. inotify is flaky on // some filesystems, so send these notifications so that at least operations - // made from Files App are always reflected in the UI. + // made from Files App are always reflected in the UI. Additionally, this + // ensures the directory tree will be updated too, as the tree needs + // notifications for folders outside of those being watched by a file watcher. if (status.IsCompleted()) { - std::set<base::FilePath> updated_paths; + std::set<std::pair<base::FilePath, url::Origin>> updated_paths; if (status.destination_folder.is_valid()) { - updated_paths.insert(status.destination_folder.path()); + updated_paths.emplace(status.destination_folder.virtual_path(), + status.destination_folder.origin()); } for (const auto& source : status.sources) { - updated_paths.insert(source.url.path().DirName()); + updated_paths.emplace(source.url.virtual_path().DirName(), + source.url.origin()); } for (const auto& output : status.outputs) { - updated_paths.insert(output.url.path().DirName()); + updated_paths.emplace(output.url.virtual_path().DirName(), + output.url.origin()); } - for (const auto& path : updated_paths) { - HandleFileWatchNotification(path, false); + for (const auto& [path, origin] : updated_paths) { + DispatchDirectoryChangeEvent(path, false, {origin}); } }
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_policy_event.proto b/chrome/browser/chromeos/policy/dlp/dlp_policy_event.proto index 98f847f..00fc9f0 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_policy_event.proto +++ b/chrome/browser/chromeos/policy/dlp/dlp_policy_event.proto
@@ -37,6 +37,7 @@ SCREENCAST = 3; PRINTING = 4; EPRIVACY = 5; + FILES = 6; } // The mode of the applied restriction. enum Mode {
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.cc b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.cc index 83e2ced..eb2865f 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.cc +++ b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager.cc
@@ -62,6 +62,7 @@ case DlpRulesManager::Restriction::kClipboard: return DlpPolicyEvent_Restriction_CLIPBOARD; case DlpRulesManager::Restriction::kFiles: + return DlpPolicyEvent_Restriction_FILES; case DlpRulesManager::Restriction::kUnknownRestriction: return DlpPolicyEvent_Restriction_UNDEFINED_RESTRICTION; } @@ -81,6 +82,8 @@ return DlpRulesManager::Restriction::kPrivacyScreen; case DlpPolicyEvent_Restriction_CLIPBOARD: return DlpRulesManager::Restriction::kClipboard; + case DlpPolicyEvent_Restriction_FILES: + return DlpRulesManager::Restriction::kFiles; case DlpPolicyEvent_Restriction_UNDEFINED_RESTRICTION: return DlpRulesManager::Restriction::kUnknownRestriction; }
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager_unittest.cc index ff22d87..1ab0e42c 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager_unittest.cc +++ b/chrome/browser/chromeos/policy/dlp/dlp_reporting_manager_unittest.cc
@@ -278,8 +278,7 @@ DlpRulesManager::Level::kAllow); EXPECT_EQ(event.source().url(), kCompanyPattern); EXPECT_FALSE(event.has_destination()); - EXPECT_EQ(event.restriction(), - DlpPolicyEvent_Restriction_UNDEFINED_RESTRICTION); + EXPECT_EQ(event.restriction(), DlpPolicyEvent_Restriction_FILES); EXPECT_EQ(event.mode(), DlpPolicyEvent_Mode_UNDEFINED_MODE); }
diff --git a/chrome/browser/consent_auditor/consent_auditor_factory.cc b/chrome/browser/consent_auditor/consent_auditor_factory.cc index 8561384..fdde0b1 100644 --- a/chrome/browser/consent_auditor/consent_auditor_factory.cc +++ b/chrome/browser/consent_auditor/consent_auditor_factory.cc
@@ -17,7 +17,6 @@ #include "components/consent_auditor/consent_auditor_impl.h" #include "components/consent_auditor/consent_sync_bridge.h" #include "components/consent_auditor/consent_sync_bridge_impl.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" #include "components/sync/base/report_unrecoverable_error.h" @@ -43,9 +42,7 @@ } ConsentAuditorFactory::ConsentAuditorFactory() - : BrowserContextKeyedServiceFactory( - "ConsentAuditor", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("ConsentAuditor") { DependsOn(ModelTypeStoreServiceFactory::GetInstance()); }
diff --git a/chrome/browser/consent_auditor/consent_auditor_factory.h b/chrome/browser/consent_auditor/consent_auditor_factory.h index 859c7bd0..3b72a9d2 100644 --- a/chrome/browser/consent_auditor/consent_auditor_factory.h +++ b/chrome/browser/consent_auditor/consent_auditor_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_CONSENT_AUDITOR_CONSENT_AUDITOR_FACTORY_H_ #define CHROME_BROWSER_CONSENT_AUDITOR_CONSENT_AUDITOR_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace base { template <typename T> @@ -22,7 +22,7 @@ class Profile; -class ConsentAuditorFactory : public BrowserContextKeyedServiceFactory { +class ConsentAuditorFactory : public ProfileKeyedServiceFactory { public: // Returns the singleton instance of ChromeConsentAuditorFactory. static ConsentAuditorFactory* GetInstance();
diff --git a/chrome/browser/content_creation/notes/internal/note_service_factory.cc b/chrome/browser/content_creation/notes/internal/note_service_factory.cc index 25893aea..bc7aa66 100644 --- a/chrome/browser/content_creation/notes/internal/note_service_factory.cc +++ b/chrome/browser/content_creation/notes/internal/note_service_factory.cc
@@ -12,7 +12,6 @@ #include "components/content_creation/notes/core/note_service.h" #include "components/content_creation/notes/core/server/notes_repository.h" #include "components/content_creation/notes/core/templates/template_store.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "components/variations/service/variations_service.h" #include "content/public/browser/browser_context.h" @@ -44,9 +43,7 @@ } NoteServiceFactory::NoteServiceFactory() - : BrowserContextKeyedServiceFactory( - "NoteService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("NoteService") { DependsOn(IdentityManagerFactory::GetInstance()); }
diff --git a/chrome/browser/content_creation/notes/internal/note_service_factory.h b/chrome/browser/content_creation/notes/internal/note_service_factory.h index b6b0ee4..4ac4449 100644 --- a/chrome/browser/content_creation/notes/internal/note_service_factory.h +++ b/chrome/browser/content_creation/notes/internal/note_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_CONTENT_CREATION_NOTES_INTERNAL_NOTE_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class KeyedService; class Profile; @@ -16,7 +16,7 @@ class NoteService; // Factory to create and retrieve a NoteService per profile. -class NoteServiceFactory : public BrowserContextKeyedServiceFactory { +class NoteServiceFactory : public ProfileKeyedServiceFactory { public: static NoteServiceFactory* GetInstance(); static content_creation::NoteService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/content_creation/reactions/internal/reaction_service_factory.cc b/chrome/browser/content_creation/reactions/internal/reaction_service_factory.cc index c4991fae..5b5b5c5 100644 --- a/chrome/browser/content_creation/reactions/internal/reaction_service_factory.cc +++ b/chrome/browser/content_creation/reactions/internal/reaction_service_factory.cc
@@ -7,7 +7,6 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile.h" #include "components/content_creation/reactions/core/reaction_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/browser_context.h" @@ -25,9 +24,7 @@ } ReactionServiceFactory::ReactionServiceFactory() - : BrowserContextKeyedServiceFactory( - "ReactionService", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("ReactionService") {} ReactionServiceFactory::~ReactionServiceFactory() = default;
diff --git a/chrome/browser/content_creation/reactions/internal/reaction_service_factory.h b/chrome/browser/content_creation/reactions/internal/reaction_service_factory.h index a2b0fab..43d5f1fe 100644 --- a/chrome/browser/content_creation/reactions/internal/reaction_service_factory.h +++ b/chrome/browser/content_creation/reactions/internal/reaction_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_CONTENT_CREATION_REACTIONS_INTERNAL_REACTION_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class KeyedService; class Profile; @@ -16,7 +16,7 @@ class ReactionService; // Factory to create and retrieve a ReactionService per profile. -class ReactionServiceFactory : public BrowserContextKeyedServiceFactory { +class ReactionServiceFactory : public ProfileKeyedServiceFactory { public: static ReactionServiceFactory* GetInstance(); static content_creation::ReactionService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/content_index/content_index_provider_factory.cc b/chrome/browser/content_index/content_index_provider_factory.cc index 478d2be..f60c9288 100644 --- a/chrome/browser/content_index/content_index_provider_factory.cc +++ b/chrome/browser/content_index/content_index_provider_factory.cc
@@ -8,9 +8,7 @@ #include "chrome/browser/engagement/site_engagement_service_factory.h" #include "chrome/browser/metrics/ukm_background_recorder_service.h" #include "chrome/browser/offline_items_collection/offline_content_aggregator_factory.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" // static ContentIndexProviderImpl* ContentIndexProviderFactory::GetForProfile( @@ -25,9 +23,9 @@ } ContentIndexProviderFactory::ContentIndexProviderFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "ContentIndexProvider", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(OfflineContentAggregatorFactory::GetInstance()); DependsOn(ukm::UkmBackgroundRecorderFactory::GetInstance()); DependsOn(site_engagement::SiteEngagementServiceFactory::GetInstance()); @@ -39,8 +37,3 @@ content::BrowserContext* context) const { return new ContentIndexProviderImpl(Profile::FromBrowserContext(context)); } - -content::BrowserContext* ContentIndexProviderFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/content_index/content_index_provider_factory.h b/chrome/browser/content_index/content_index_provider_factory.h index 712cbe1..b18e94c 100644 --- a/chrome/browser/content_index/content_index_provider_factory.h +++ b/chrome/browser/content_index/content_index_provider_factory.h
@@ -6,12 +6,12 @@ #define CHROME_BROWSER_CONTENT_INDEX_CONTENT_INDEX_PROVIDER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class ContentIndexProviderImpl; class Profile; -class ContentIndexProviderFactory : public BrowserContextKeyedServiceFactory { +class ContentIndexProviderFactory : public ProfileKeyedServiceFactory { public: static ContentIndexProviderImpl* GetForProfile(Profile* profile); static ContentIndexProviderFactory* GetInstance(); @@ -29,8 +29,6 @@ // BrowserContextKeyedServiceFactory overrides. KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_CONTENT_INDEX_CONTENT_INDEX_PROVIDER_FACTORY_H_
diff --git a/chrome/browser/custom_handlers/protocol_handler_registry_factory.cc b/chrome/browser/custom_handlers/protocol_handler_registry_factory.cc index ebe3c45..595e9a7 100644 --- a/chrome/browser/custom_handlers/protocol_handler_registry_factory.cc +++ b/chrome/browser/custom_handlers/protocol_handler_registry_factory.cc
@@ -10,9 +10,7 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/custom_handlers/chrome_protocol_handler_registry_delegate.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "components/custom_handlers/protocol_handler_registry.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/user_prefs/user_prefs.h" #include "content/public/browser/browser_context.h" @@ -30,9 +28,10 @@ } ProtocolHandlerRegistryFactory::ProtocolHandlerRegistryFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "ProtocolHandlerRegistry", - BrowserContextDependencyManager::GetInstance()) {} + // Allows the produced registry to be used in incognito mode. + ProfileSelections::BuildRedirectedInIncognito()) {} ProtocolHandlerRegistryFactory::~ProtocolHandlerRegistryFactory() { } @@ -45,12 +44,6 @@ return true; } -// Allows the produced registry to be used in incognito mode. -content::BrowserContext* ProtocolHandlerRegistryFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextRedirectedInIncognito(context); -} - // Do not create this service for tests. MANY tests will fail // due to the threading requirements of this service. ALSO, // not creating this increases test isolation (which is GOOD!)
diff --git a/chrome/browser/custom_handlers/protocol_handler_registry_factory.h b/chrome/browser/custom_handlers/protocol_handler_registry_factory.h index dbb98388..1011e70 100644 --- a/chrome/browser/custom_handlers/protocol_handler_registry_factory.h +++ b/chrome/browser/custom_handlers/protocol_handler_registry_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_FACTORY_H_ #define CHROME_BROWSER_CUSTOM_HANDLERS_PROTOCOL_HANDLER_REGISTRY_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; namespace custom_handlers { @@ -19,8 +19,7 @@ // Singleton that owns all ProtocolHandlerRegistrys and associates them with // Profiles. Listens for the Profile's destruction notification and cleans up // the associated ProtocolHandlerRegistry. -class ProtocolHandlerRegistryFactory - : public BrowserContextKeyedServiceFactory { +class ProtocolHandlerRegistryFactory : public ProfileKeyedServiceFactory { public: // Returns the singleton instance of the ProtocolHandlerRegistryFactory. static ProtocolHandlerRegistryFactory* GetInstance(); @@ -38,8 +37,6 @@ protected: // BrowserContextKeyedServiceFactory implementation. bool ServiceIsCreatedWithBrowserContext() const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool ServiceIsNULLWhileTesting() const override; private:
diff --git a/chrome/browser/device_api/managed_configuration_api_factory.cc b/chrome/browser/device_api/managed_configuration_api_factory.cc index 40aa725..0462c277 100644 --- a/chrome/browser/device_api/managed_configuration_api_factory.cc +++ b/chrome/browser/device_api/managed_configuration_api_factory.cc
@@ -7,7 +7,6 @@ #include "base/memory/singleton.h" #include "chrome/browser/device_api/managed_configuration_api.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service_factory.h" @@ -24,9 +23,7 @@ } ManagedConfigurationAPIFactory::ManagedConfigurationAPIFactory() - : BrowserContextKeyedServiceFactory( - "ManagedConfigurationAPI", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("ManagedConfigurationAPI") {} ManagedConfigurationAPIFactory::~ManagedConfigurationAPIFactory() = default;
diff --git a/chrome/browser/device_api/managed_configuration_api_factory.h b/chrome/browser/device_api/managed_configuration_api_factory.h index 36d9025..5035cf2 100644 --- a/chrome/browser/device_api/managed_configuration_api_factory.h +++ b/chrome/browser/device_api/managed_configuration_api_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_DEVICE_API_MANAGED_CONFIGURATION_API_FACTORY_H_ #define CHROME_BROWSER_DEVICE_API_MANAGED_CONFIGURATION_API_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; class ManagedConfigurationAPI; @@ -16,8 +16,7 @@ } // namespace base // Factory for BrowserKeyedService ManagedConfigurationAPI. -class ManagedConfigurationAPIFactory - : public BrowserContextKeyedServiceFactory { +class ManagedConfigurationAPIFactory : public ProfileKeyedServiceFactory { public: static ManagedConfigurationAPI* GetForProfile(Profile* profile);
diff --git a/chrome/browser/device_identity/device_oauth2_token_service.cc b/chrome/browser/device_identity/device_oauth2_token_service.cc index 2733da9..e3639d8 100644 --- a/chrome/browser/device_identity/device_oauth2_token_service.cc +++ b/chrome/browser/device_identity/device_oauth2_token_service.cc
@@ -143,15 +143,14 @@ void DeviceOAuth2TokenService::OnGetTokenInfoResponse( std::unique_ptr<base::DictionaryValue> token_info) { - std::string robot_email; // For robot accounts email id is the account id. - token_info->GetString("email", &robot_email); + const std::string* robot_email = token_info->GetDict().FindString("email"); gaia_oauth_client_.reset(); store_->PrepareTrustedAccountId(base::BindRepeating( &DeviceOAuth2TokenService::OnPrepareTrustedAccountIdFinished, weak_ptr_factory_.GetWeakPtr(), - CoreAccountId::FromRobotEmail(robot_email))); + CoreAccountId::FromRobotEmail(robot_email ? *robot_email : ""))); } void DeviceOAuth2TokenService::OnOAuthError() {
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc index b6bc486..1b17b90 100644 --- a/chrome/browser/devtools/device/devtools_android_bridge.cc +++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -38,7 +38,6 @@ #include "chrome/common/buildflags.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/prefs/pref_service.h" #include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_external_agent_proxy.h" @@ -86,9 +85,7 @@ } DevToolsAndroidBridge::Factory::Factory() - : BrowserContextKeyedServiceFactory( - "DevToolsAndroidBridge", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("DevToolsAndroidBridge") {} DevToolsAndroidBridge::Factory::~Factory() {}
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.h b/chrome/browser/devtools/device/devtools_android_bridge.h index 81a9656..c873902 100644 --- a/chrome/browser/devtools/device/devtools_android_bridge.h +++ b/chrome/browser/devtools/device/devtools_android_bridge.h
@@ -17,7 +17,7 @@ #include "base/memory/weak_ptr.h" #include "chrome/browser/devtools/device/android_device_manager.h" #include "chrome/browser/devtools/device/devtools_device_discovery.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "components/keyed_service/core/keyed_service.h" #include "components/prefs/pref_change_registrar.h" #include "content/public/browser/browser_thread.h" @@ -39,7 +39,7 @@ class DevToolsAndroidBridge : public KeyedService { public: - class Factory : public BrowserContextKeyedServiceFactory { + class Factory : public ProfileKeyedServiceFactory { public: // Returns singleton instance of DevToolsAndroidBridge. static Factory* GetInstance();
diff --git a/chrome/browser/dips/dips_service_factory.cc b/chrome/browser/dips/dips_service_factory.cc index 7e7e61b5..12e4fea7 100644 --- a/chrome/browser/dips/dips_service_factory.cc +++ b/chrome/browser/dips/dips_service_factory.cc
@@ -7,8 +7,6 @@ #include "base/logging.h" #include "base/memory/singleton.h" #include "chrome/browser/dips/dips_service.h" -#include "chrome/browser/profiles/incognito_helpers.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" // static DIPSService* DIPSServiceFactory::GetForBrowserContext( @@ -22,9 +20,9 @@ } DIPSServiceFactory::DIPSServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "DIPSService", - BrowserContextDependencyManager::GetInstance()) {} + ProfileSelections::BuildForRegularAndIncognito()) {} DIPSServiceFactory::~DIPSServiceFactory() = default; @@ -32,8 +30,3 @@ content::BrowserContext* context) const { return new DIPSService(context); } - -content::BrowserContext* DIPSServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/dips/dips_service_factory.h b/chrome/browser/dips/dips_service_factory.h index 440a1f8..c98c8f9 100644 --- a/chrome/browser/dips/dips_service_factory.h +++ b/chrome/browser/dips/dips_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_DIPS_DIPS_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace content { class BrowserContext; @@ -14,7 +14,7 @@ class DIPSService; -class DIPSServiceFactory : public BrowserContextKeyedServiceFactory { +class DIPSServiceFactory : public ProfileKeyedServiceFactory { public: static DIPSServiceFactory* GetInstance(); static DIPSService* GetForBrowserContext(content::BrowserContext* context); @@ -26,8 +26,6 @@ ~DIPSServiceFactory() override; // BrowserContextKeyedServiceFactory: - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; };
diff --git a/chrome/browser/dom_distiller/dom_distiller_service_factory.cc b/chrome/browser/dom_distiller/dom_distiller_service_factory.cc index d59fe50..599781d 100644 --- a/chrome/browser/dom_distiller/dom_distiller_service_factory.cc +++ b/chrome/browser/dom_distiller/dom_distiller_service_factory.cc
@@ -14,7 +14,6 @@ #include "components/dom_distiller/content/browser/distiller_page_web_contents.h" #include "components/dom_distiller/core/article_entry.h" #include "components/dom_distiller/core/distiller.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -49,10 +48,11 @@ } DomDistillerServiceFactory::DomDistillerServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "DomDistillerService", - BrowserContextDependencyManager::GetInstance()) { -} + // Makes normal profile and off-the-record profile use same service + // instance. + ProfileSelections::BuildRedirectedInIncognito()) {} DomDistillerServiceFactory::~DomDistillerServiceFactory() {} @@ -102,10 +102,4 @@ return service; } -content::BrowserContext* DomDistillerServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Makes normal profile and off-the-record profile use same service instance. - return chrome::GetBrowserContextRedirectedInIncognito(context); -} - } // namespace dom_distiller
diff --git a/chrome/browser/dom_distiller/dom_distiller_service_factory.h b/chrome/browser/dom_distiller/dom_distiller_service_factory.h index 03a12f3..40d5cf97 100644 --- a/chrome/browser/dom_distiller/dom_distiller_service_factory.h +++ b/chrome/browser/dom_distiller/dom_distiller_service_factory.h
@@ -6,10 +6,10 @@ #define CHROME_BROWSER_DOM_DISTILLER_DOM_DISTILLER_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "components/dom_distiller/core/distilled_page_prefs.h" #include "components/dom_distiller/core/distiller_ui_handle.h" #include "components/dom_distiller/core/dom_distiller_service.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "components/keyed_service/core/keyed_service.h" namespace content { @@ -37,7 +37,7 @@ ~DomDistillerContextKeyedService() override {} }; -class DomDistillerServiceFactory : public BrowserContextKeyedServiceFactory { +class DomDistillerServiceFactory : public ProfileKeyedServiceFactory { public: static DomDistillerServiceFactory* GetInstance(); static DomDistillerContextKeyedService* GetForBrowserContext( @@ -51,9 +51,6 @@ KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; } // namespace dom_distiller
diff --git a/chrome/browser/download/chrome_download_manager_delegate.cc b/chrome/browser/download/chrome_download_manager_delegate.cc index f12af34..18492a4d 100644 --- a/chrome/browser/download/chrome_download_manager_delegate.cc +++ b/chrome/browser/download/chrome_download_manager_delegate.cc
@@ -859,12 +859,14 @@ download::DownloadItemRenameHandler* handler = download->GetRenameHandler(); if (handler) { handler->OpenDownload(); - RecordDownloadOpenMethod(DOWNLOAD_OPEN_METHOD_RENAME_HANDLER); + RecordDownloadOpen(DOWNLOAD_OPEN_METHOD_RENAME_HANDLER, + download->GetMimeType()); return; } if (!DownloadItemModel(download).ShouldPreferOpeningInBrowser()) { - RecordDownloadOpenMethod(DOWNLOAD_OPEN_METHOD_DEFAULT_PLATFORM); + RecordDownloadOpen(DOWNLOAD_OPEN_METHOD_DEFAULT_PLATFORM, + download->GetMimeType()); OpenDownloadUsingPlatformHandler(download); return; } @@ -890,7 +892,8 @@ else browser->OpenURL(params); - RecordDownloadOpenMethod(DOWNLOAD_OPEN_METHOD_DEFAULT_BROWSER); + RecordDownloadOpen(DOWNLOAD_OPEN_METHOD_DEFAULT_BROWSER, + download->GetMimeType()); #endif // BUILDFLAG(IS_ANDROID) } @@ -1656,7 +1659,7 @@ if (!download->GetAutoOpened()) { download::DownloadContent download_content = download::DownloadContentFromMimeType(download->GetMimeType(), false); - safe_browsing::RecordDownloadOpened( + safe_browsing::RecordDownloadOpenedLatency( download->GetDangerType(), download_content, base::Time::Now(), download->GetEndTime(), show_download_in_folder); }
diff --git a/chrome/browser/download/download_core_service_factory.cc b/chrome/browser/download/download_core_service_factory.cc index c8e3c8b..5813803 100644 --- a/chrome/browser/download/download_core_service_factory.cc +++ b/chrome/browser/download/download_core_service_factory.cc
@@ -8,9 +8,7 @@ #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/notifications/notification_display_service_factory.h" #include "chrome/browser/offline_items_collection/offline_content_aggregator_factory.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" // static DownloadCoreService* DownloadCoreServiceFactory::GetForBrowserContext( @@ -25,9 +23,9 @@ } DownloadCoreServiceFactory::DownloadCoreServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "DownloadCoreService", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(HistoryServiceFactory::GetInstance()); DependsOn(NotificationDisplayServiceFactory::GetInstance()); DependsOn(OfflineContentAggregatorFactory::GetInstance()); @@ -45,8 +43,3 @@ return service; } - -content::BrowserContext* DownloadCoreServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/download/download_core_service_factory.h b/chrome/browser/download/download_core_service_factory.h index 2ffde2c..c8c6bf23 100644 --- a/chrome/browser/download/download_core_service_factory.h +++ b/chrome/browser/download/download_core_service_factory.h
@@ -6,14 +6,14 @@ #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_CORE_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class DownloadCoreService; // Singleton that owns all DownloadCoreServices and associates them with // Profiles. Listens for the Profile's destruction notification and cleans up // the associated DownloadCoreService. -class DownloadCoreServiceFactory : public BrowserContextKeyedServiceFactory { +class DownloadCoreServiceFactory : public ProfileKeyedServiceFactory { public: // Returns the DownloadCoreService for |context|, creating if not yet created. static DownloadCoreService* GetForBrowserContext( @@ -25,8 +25,6 @@ // BrowserContextKeyedServiceFactory: KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; private: friend struct base::DefaultSingletonTraits<DownloadCoreServiceFactory>;
diff --git a/chrome/browser/download/download_item_model.cc b/chrome/browser/download/download_item_model.cc index 0ade8bf2..5cff6077 100644 --- a/chrome/browser/download/download_item_model.cc +++ b/chrome/browser/download/download_item_model.cc
@@ -648,7 +648,8 @@ if (!delegate) return; delegate->OpenDownloadUsingPlatformHandler(download_); - RecordDownloadOpenMethod(DOWNLOAD_OPEN_METHOD_USER_PLATFORM); + RecordDownloadOpen(DOWNLOAD_OPEN_METHOD_USER_PLATFORM, + download_->GetMimeType()); } #if !BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/download/download_stats.cc b/chrome/browser/download/download_stats.cc index f8224c46..e3fbc01c 100644 --- a/chrome/browser/download/download_stats.cc +++ b/chrome/browser/download/download_stats.cc
@@ -39,10 +39,16 @@ download::DOWNLOAD_DANGER_TYPE_MAX); } -void RecordDownloadOpenMethod(ChromeDownloadOpenMethod open_method) { +void RecordDownloadOpen(ChromeDownloadOpenMethod open_method, + const std::string& mime_type_string) { base::RecordAction(base::UserMetricsAction("Download.Open")); base::UmaHistogramEnumeration("Download.OpenMethod", open_method, DOWNLOAD_OPEN_METHOD_LAST_ENTRY); + download::DownloadContent download_content = + download::DownloadContentFromMimeType( + mime_type_string, /*record_content_subcategory=*/false); + base::UmaHistogramEnumeration("Download.Open.ContentType", download_content, + download::DownloadContent::MAX); } void RecordDatabaseAvailability(bool is_available) {
diff --git a/chrome/browser/download/download_stats.h b/chrome/browser/download/download_stats.h index 9e3615d..5223d325 100644 --- a/chrome/browser/download/download_stats.h +++ b/chrome/browser/download/download_stats.h
@@ -132,8 +132,9 @@ void RecordOpenedDangerousConfirmDialog( download::DownloadDangerType danger_type); -// Record how a download was opened. -void RecordDownloadOpenMethod(ChromeDownloadOpenMethod open_method); +// Record that a download was opened. +void RecordDownloadOpen(ChromeDownloadOpenMethod open_method, + const std::string& mime_type_string); // Record if the database is available to provide the next download id before // starting all downloads.
diff --git a/chrome/browser/download/offline_item_model_manager_factory.cc b/chrome/browser/download/offline_item_model_manager_factory.cc index b84e313..4f990c4 100644 --- a/chrome/browser/download/offline_item_model_manager_factory.cc +++ b/chrome/browser/download/offline_item_model_manager_factory.cc
@@ -6,8 +6,6 @@ #include "base/memory/singleton.h" #include "chrome/browser/download/offline_item_model_manager.h" -#include "chrome/browser/profiles/incognito_helpers.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" // static @@ -23,9 +21,9 @@ } OfflineItemModelManagerFactory::OfflineItemModelManagerFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "OfflineItemModelManager", - BrowserContextDependencyManager::GetInstance()) {} + ProfileSelections::BuildForRegularAndIncognito()) {} OfflineItemModelManagerFactory::~OfflineItemModelManagerFactory() = default; @@ -33,8 +31,3 @@ content::BrowserContext* context) const { return new OfflineItemModelManager(context); } - -content::BrowserContext* OfflineItemModelManagerFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/download/offline_item_model_manager_factory.h b/chrome/browser/download/offline_item_model_manager_factory.h index 9fce664..abf00ab 100644 --- a/chrome/browser/download/offline_item_model_manager_factory.h +++ b/chrome/browser/download/offline_item_model_manager_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_DOWNLOAD_OFFLINE_ITEM_MODEL_MANAGER_FACTORY_H_ #define CHROME_BROWSER_DOWNLOAD_OFFLINE_ITEM_MODEL_MANAGER_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class OfflineItemModelManager; @@ -21,8 +21,7 @@ // This class is the main access point for an OfflineItemModelManager. It is // responsible for building the OfflineItemModelManager and associating it with // a particular content::BrowserContext. -class OfflineItemModelManagerFactory - : public BrowserContextKeyedServiceFactory { +class OfflineItemModelManagerFactory : public ProfileKeyedServiceFactory { public: // Returns a singleton instance of an OfflineItemModelManagerFactory. static OfflineItemModelManagerFactory* GetInstance(); @@ -46,8 +45,6 @@ // BrowserContextKeyedServiceFactory implementation. KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_DOWNLOAD_OFFLINE_ITEM_MODEL_MANAGER_FACTORY_H_
diff --git a/chrome/browser/drive/drive_notification_manager_factory.cc b/chrome/browser/drive/drive_notification_manager_factory.cc index 6b46323..6cf99bf 100644 --- a/chrome/browser/drive/drive_notification_manager_factory.cc +++ b/chrome/browser/drive/drive_notification_manager_factory.cc
@@ -9,7 +9,6 @@ #include "chrome/browser/sync/sync_service_factory.h" #include "components/drive/drive_notification_manager.h" #include "components/invalidation/impl/profile_invalidation_provider.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/sync/base/command_line_switches.h" namespace drive { @@ -60,9 +59,7 @@ } DriveNotificationManagerFactory::DriveNotificationManagerFactory() - : BrowserContextKeyedServiceFactory( - "DriveNotificationManager", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("DriveNotificationManager") { DependsOn(SyncServiceFactory::GetInstance()); DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance()); }
diff --git a/chrome/browser/drive/drive_notification_manager_factory.h b/chrome/browser/drive/drive_notification_manager_factory.h index bd2ac55..4496227 100644 --- a/chrome/browser/drive/drive_notification_manager_factory.h +++ b/chrome/browser/drive/drive_notification_manager_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_DRIVE_DRIVE_NOTIFICATION_MANAGER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace content { class BrowserContext; @@ -18,8 +18,7 @@ // Singleton that owns all DriveNotificationManager and associates them with // browser contexts. -class DriveNotificationManagerFactory - : public BrowserContextKeyedServiceFactory { +class DriveNotificationManagerFactory : public ProfileKeyedServiceFactory { public: // Returns the |DriveNotificationManager| for |context| if one exists or NULL // otherwise.
diff --git a/chrome/browser/engagement/site_engagement_service_factory.cc b/chrome/browser/engagement/site_engagement_service_factory.cc index c8e979e..e1a8114 100644 --- a/chrome/browser/engagement/site_engagement_service_factory.cc +++ b/chrome/browser/engagement/site_engagement_service_factory.cc
@@ -8,9 +8,7 @@ #include "chrome/browser/engagement/history_aware_site_engagement_service.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" namespace site_engagement { @@ -36,9 +34,9 @@ } SiteEngagementServiceFactory::SiteEngagementServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "SiteEngagementService", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(HistoryServiceFactory::GetInstance()); DependsOn(HostContentSettingsMapFactory::GetInstance()); DependsOn(prerender::NoStatePrefetchManagerFactory::GetInstance()); @@ -56,11 +54,6 @@ return new HistoryAwareSiteEngagementService(context, history); } -content::BrowserContext* SiteEngagementServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -} - SiteEngagementService* SiteEngagementServiceFactory::GetSiteEngagementService( content::BrowserContext* browser_context) { return GetForProfile(browser_context);
diff --git a/chrome/browser/engagement/site_engagement_service_factory.h b/chrome/browser/engagement/site_engagement_service_factory.h index 5db88d0..44a8302 100644 --- a/chrome/browser/engagement/site_engagement_service_factory.h +++ b/chrome/browser/engagement/site_engagement_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_ENGAGEMENT_SITE_ENGAGEMENT_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "components/site_engagement/content/site_engagement_service.h" class Profile; @@ -21,7 +21,7 @@ // * the site engagement service should be created lazily // * the site engagement service is needed in tests. class SiteEngagementServiceFactory - : public BrowserContextKeyedServiceFactory, + : public ProfileKeyedServiceFactory, public SiteEngagementService::ServiceProvider { public: static SiteEngagementService* GetForProfile( @@ -47,8 +47,6 @@ // BrowserContextKeyedServiceFactory: KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; } // namespace site_engagement
diff --git a/chrome/browser/enterprise/browser_management/management_service_factory.cc b/chrome/browser/enterprise/browser_management/management_service_factory.cc index 2de228f..8bf7d2d 100644 --- a/chrome/browser/enterprise/browser_management/management_service_factory.cc +++ b/chrome/browser/enterprise/browser_management/management_service_factory.cc
@@ -8,10 +8,8 @@ #include "base/no_destructor.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/enterprise/browser_management/browser_management_service.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "components/browsing_data/core/features.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/policy/core/common/management/platform_management_service.h" #include "content/public/browser/browser_context.h" #include "extensions/buildflags/buildflags.h" @@ -49,17 +47,12 @@ } ManagementServiceFactory::ManagementServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "EnterpriseManagementService", - BrowserContextDependencyManager::GetInstance()) {} + ProfileSelections::BuildForRegularAndIncognito()) {} ManagementServiceFactory::~ManagementServiceFactory() = default; -content::BrowserContext* ManagementServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -} - KeyedService* ManagementServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { return new BrowserManagementService(Profile::FromBrowserContext(context));
diff --git a/chrome/browser/enterprise/browser_management/management_service_factory.h b/chrome/browser/enterprise/browser_management/management_service_factory.h index ae22f655..abda2dfb 100644 --- a/chrome/browser/enterprise/browser_management/management_service_factory.h +++ b/chrome/browser/enterprise/browser_management/management_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_ENTERPRISE_BROWSER_MANAGEMENT_MANAGEMENT_SERVICE_FACTORY_H_ #include "base/no_destructor.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "components/policy/core/common/management/platform_management_service.h" class Profile; @@ -15,7 +15,7 @@ class ManagementService; -class ManagementServiceFactory : public BrowserContextKeyedServiceFactory { +class ManagementServiceFactory : public ProfileKeyedServiceFactory { public: ManagementServiceFactory(const ManagementServiceFactory&) = delete; ManagementServiceFactory& operator=(const ManagementServiceFactory&) = delete; @@ -35,8 +35,6 @@ ~ManagementServiceFactory() override; // BrowserContextKeyedServiceFactory overrides: - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; };
diff --git a/chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service_factory.cc b/chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service_factory.cc index c22101f..821826e 100644 --- a/chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service_factory.cc +++ b/chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service_factory.cc
@@ -9,7 +9,6 @@ #include "chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service.h" #include "chrome/browser/enterprise/connectors/device_trust/device_trust_features.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) @@ -49,9 +48,7 @@ } DeviceTrustConnectorServiceFactory::DeviceTrustConnectorServiceFactory() - : BrowserContextKeyedServiceFactory( - "DeviceTrustConnectorService", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("DeviceTrustConnectorService") {} DeviceTrustConnectorServiceFactory::~DeviceTrustConnectorServiceFactory() = default;
diff --git a/chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service_factory.h b/chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service_factory.h index dd8649f9..53945f5 100644 --- a/chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service_factory.h +++ b/chrome/browser/enterprise/connectors/device_trust/device_trust_connector_service_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_DEVICE_TRUST_CONNECTOR_SERVICE_FACTORY_H_ #define CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_DEVICE_TRUST_CONNECTOR_SERVICE_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -19,8 +19,7 @@ class DeviceTrustConnectorService; // Singleton factory for Profile-keyed DeviceTrustConnectorService instances. -class DeviceTrustConnectorServiceFactory - : public BrowserContextKeyedServiceFactory { +class DeviceTrustConnectorServiceFactory : public ProfileKeyedServiceFactory { public: static DeviceTrustConnectorServiceFactory* GetInstance(); static DeviceTrustConnectorService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/enterprise/connectors/device_trust/device_trust_service_factory.cc b/chrome/browser/enterprise/connectors/device_trust/device_trust_service_factory.cc index 97af9423..bda6a89 100644 --- a/chrome/browser/enterprise/connectors/device_trust/device_trust_service_factory.cc +++ b/chrome/browser/enterprise/connectors/device_trust/device_trust_service_factory.cc
@@ -17,7 +17,6 @@ #include "chrome/browser/enterprise/connectors/device_trust/signals/signals_service.h" #include "chrome/browser/enterprise/connectors/device_trust/signals/signals_service_factory.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "components/policy/content/policy_blocklist_service.h" #include "components/policy/core/common/management/management_service.h" @@ -49,9 +48,7 @@ } DeviceTrustServiceFactory::DeviceTrustServiceFactory() - : BrowserContextKeyedServiceFactory( - "DeviceTrustService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("DeviceTrustService") { DependsOn(DeviceTrustConnectorServiceFactory::GetInstance()); DependsOn(PolicyBlocklistFactory::GetInstance()); DependsOn(policy::ManagementServiceFactory::GetInstance());
diff --git a/chrome/browser/enterprise/connectors/device_trust/device_trust_service_factory.h b/chrome/browser/enterprise/connectors/device_trust/device_trust_service_factory.h index a4d754d..43e7aa25 100644 --- a/chrome/browser/enterprise/connectors/device_trust/device_trust_service_factory.h +++ b/chrome/browser/enterprise/connectors/device_trust/device_trust_service_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_DEVICE_TRUST_SERVICE_FACTORY_H_ #define CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_DEVICE_TRUST_SERVICE_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -19,7 +19,7 @@ class DeviceTrustService; // Singleton that owns a single DeviceTrustService instance. -class DeviceTrustServiceFactory : public BrowserContextKeyedServiceFactory { +class DeviceTrustServiceFactory : public ProfileKeyedServiceFactory { public: static DeviceTrustServiceFactory* GetInstance(); static DeviceTrustService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.cc b/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.cc index e9d5e1d..2da5a45 100644 --- a/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.cc +++ b/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.cc
@@ -6,9 +6,7 @@ #include "chrome/browser/enterprise/connectors/connectors_service.h" #include "chrome/browser/enterprise/connectors/reporting/realtime_reporting_client.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/signin/identity_manager_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "extensions/browser/extension_system_provider.h" #include "extensions/browser/extensions_browser_client.h" @@ -28,9 +26,12 @@ } RealtimeReportingClientFactory::RealtimeReportingClientFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "RealtimeReportingClient", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::Builder() + .WithRegular(ProfileSelection::kOwnInstance) + .WithSystem(ProfileSelection::kNone) + .Build()) { DependsOn( extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); DependsOn(IdentityManagerFactory::GetInstance()); @@ -44,15 +45,6 @@ return new RealtimeReportingClient(context); } -content::BrowserContext* RealtimeReportingClientFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - Profile* profile = Profile::FromBrowserContext(context); - if (!profile || profile->IsSystemProfile()) { - return nullptr; - } - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -} - bool RealtimeReportingClientFactory::ServiceIsCreatedWithBrowserContext() const { return false;
diff --git a/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h b/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h index 688a69b..fac307c 100644 --- a/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h +++ b/chrome/browser/enterprise/connectors/reporting/realtime_reporting_client_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_ENTERPRISE_CONNECTORS_REPORTING_REALTIME_REPORTING_CLIENT_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace enterprise_connectors { @@ -15,8 +15,7 @@ // This is a factory class used by the BrowserContextDependencyManager // to instantiate the safeBrowsingPrivate event router per profile (since the // extension event router is per profile). -class RealtimeReportingClientFactory - : public BrowserContextKeyedServiceFactory { +class RealtimeReportingClientFactory : public ProfileKeyedServiceFactory { public: RealtimeReportingClientFactory(const RealtimeReportingClientFactory&) = delete; @@ -33,8 +32,6 @@ protected: // BrowserContextKeyedServiceFactory overrides: - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool ServiceIsCreatedWithBrowserContext() const override; bool ServiceIsNULLWhileTesting() const override;
diff --git a/chrome/browser/enterprise/idle/idle_service_factory.cc b/chrome/browser/enterprise/idle/idle_service_factory.cc index 55fdada..1aed9f58 100644 --- a/chrome/browser/enterprise/idle/idle_service_factory.cc +++ b/chrome/browser/enterprise/idle/idle_service_factory.cc
@@ -6,7 +6,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" namespace enterprise_idle { @@ -24,9 +23,10 @@ } IdleServiceFactory::IdleServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "IdleService", - BrowserContextDependencyManager::GetInstance()) {} + // TODO(crbug.com/1316511): Can we support Guest profiles? + ProfileSelections::BuildForRegularProfile()) {} // BrowserContextKeyedServiceFactory: KeyedService* IdleServiceFactory::BuildServiceInstanceFor( @@ -44,15 +44,4 @@ return true; } -content::BrowserContext* IdleServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - Profile* profile = Profile::FromBrowserContext(context); - - // TODO(crbug.com/1316511): Can we support Guest profiles? - if (profile->IsSystemProfile() || profile->IsGuestSession()) - return nullptr; - - return BrowserContextKeyedServiceFactory::GetBrowserContextToUse(context); -} - } // namespace enterprise_idle
diff --git a/chrome/browser/enterprise/idle/idle_service_factory.h b/chrome/browser/enterprise/idle/idle_service_factory.h index 2bd045c0..199bf28 100644 --- a/chrome/browser/enterprise/idle/idle_service_factory.h +++ b/chrome/browser/enterprise/idle/idle_service_factory.h
@@ -7,11 +7,11 @@ #include "base/memory/singleton.h" #include "chrome/browser/enterprise/idle/idle_service.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace enterprise_idle { -class IdleServiceFactory : public BrowserContextKeyedServiceFactory { +class IdleServiceFactory : public ProfileKeyedServiceFactory { public: static IdleService* GetForBrowserContext(content::BrowserContext* context); static IdleServiceFactory* GetInstance(); @@ -30,9 +30,6 @@ user_prefs::PrefRegistrySyncable* registry) override; bool ServiceIsCreatedWithBrowserContext() const override; - - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; } // namespace enterprise_idle
diff --git a/chrome/browser/enterprise/reporting/cloud_profile_reporting_service_factory.cc b/chrome/browser/enterprise/reporting/cloud_profile_reporting_service_factory.cc index f915d293f..be31f09 100644 --- a/chrome/browser/enterprise/reporting/cloud_profile_reporting_service_factory.cc +++ b/chrome/browser/enterprise/reporting/cloud_profile_reporting_service_factory.cc
@@ -9,8 +9,6 @@ #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/profiles/profile.h" #include "components/enterprise/browser/reporting/report_scheduler.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace enterprise_reporting { @@ -31,8 +29,6 @@ KeyedService* CloudProfileReportingServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { Profile* profile = Profile::FromBrowserContext(context); - if (!profile->IsRegularProfile()) - return nullptr; return new CloudProfileReportingService( profile, @@ -46,9 +42,8 @@ } CloudProfileReportingServiceFactory::CloudProfileReportingServiceFactory() - : BrowserContextKeyedServiceFactory( - "CloudProfileReporting", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("CloudProfileReporting", + ProfileSelections::BuildForRegularProfile()) {} CloudProfileReportingServiceFactory::~CloudProfileReportingServiceFactory() = default;
diff --git a/chrome/browser/enterprise/reporting/cloud_profile_reporting_service_factory.h b/chrome/browser/enterprise/reporting/cloud_profile_reporting_service_factory.h index 19ddb56..9a8566c 100644 --- a/chrome/browser/enterprise/reporting/cloud_profile_reporting_service_factory.h +++ b/chrome/browser/enterprise/reporting/cloud_profile_reporting_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_ENTERPRISE_REPORTING_CLOUD_PROFILE_REPORTING_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -14,8 +14,7 @@ class CloudProfileReportingService; -class CloudProfileReportingServiceFactory - : public BrowserContextKeyedServiceFactory { +class CloudProfileReportingServiceFactory : public ProfileKeyedServiceFactory { public: static CloudProfileReportingServiceFactory* GetInstance();
diff --git a/chrome/browser/enterprise/signals/signals_aggregator_factory.cc b/chrome/browser/enterprise/signals/signals_aggregator_factory.cc index b52ea33..c7bc1a2 100644 --- a/chrome/browser/enterprise/signals/signals_aggregator_factory.cc +++ b/chrome/browser/enterprise/signals/signals_aggregator_factory.cc
@@ -19,7 +19,6 @@ #include "components/device_signals/core/browser/signals_collector.h" #include "components/device_signals/core/browser/system_signals_service_host.h" #include "components/device_signals/core/browser/user_permission_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/browser_context.h" @@ -42,9 +41,7 @@ } SignalsAggregatorFactory::SignalsAggregatorFactory() - : BrowserContextKeyedServiceFactory( - "SignalsAggregator", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("SignalsAggregator") { DependsOn(SystemSignalsServiceHostFactory::GetInstance()); DependsOn(UserPermissionServiceFactory::GetInstance()); }
diff --git a/chrome/browser/enterprise/signals/signals_aggregator_factory.h b/chrome/browser/enterprise/signals/signals_aggregator_factory.h index 264f196..0bc3d08 100644 --- a/chrome/browser/enterprise/signals/signals_aggregator_factory.h +++ b/chrome/browser/enterprise/signals/signals_aggregator_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_ENTERPRISE_SIGNALS_SIGNALS_AGGREGATOR_FACTORY_H_ #define CHROME_BROWSER_ENTERPRISE_SIGNALS_SIGNALS_AGGREGATOR_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -21,7 +21,7 @@ namespace enterprise_signals { // Singleton that owns a single SignalsAggregator instance. -class SignalsAggregatorFactory : public BrowserContextKeyedServiceFactory { +class SignalsAggregatorFactory : public ProfileKeyedServiceFactory { public: static SignalsAggregatorFactory* GetInstance(); static device_signals::SignalsAggregator* GetForProfile(Profile* profile);
diff --git a/chrome/browser/enterprise/signals/system_signals_service_host_factory.cc b/chrome/browser/enterprise/signals/system_signals_service_host_factory.cc index ff0ccb78..f3f28da 100644 --- a/chrome/browser/enterprise/signals/system_signals_service_host_factory.cc +++ b/chrome/browser/enterprise/signals/system_signals_service_host_factory.cc
@@ -8,7 +8,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/services/system_signals/public/cpp/browser/system_signals_service_host_impl.h" #include "components/device_signals/core/browser/system_signals_service_host.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/browser_context.h" @@ -28,9 +27,7 @@ } SystemSignalsServiceHostFactory::SystemSignalsServiceHostFactory() - : BrowserContextKeyedServiceFactory( - "SystemSignalsServiceHost", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("SystemSignalsServiceHost") {} SystemSignalsServiceHostFactory::~SystemSignalsServiceHostFactory() = default;
diff --git a/chrome/browser/enterprise/signals/system_signals_service_host_factory.h b/chrome/browser/enterprise/signals/system_signals_service_host_factory.h index 46b915a..500d2ef 100644 --- a/chrome/browser/enterprise/signals/system_signals_service_host_factory.h +++ b/chrome/browser/enterprise/signals/system_signals_service_host_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_ENTERPRISE_SIGNALS_SYSTEM_SIGNALS_SERVICE_HOST_FACTORY_H_ #define CHROME_BROWSER_ENTERPRISE_SIGNALS_SYSTEM_SIGNALS_SERVICE_HOST_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -21,8 +21,7 @@ namespace enterprise_signals { // Singleton that owns a single SystemSignalsServiceHost instance. -class SystemSignalsServiceHostFactory - : public BrowserContextKeyedServiceFactory { +class SystemSignalsServiceHostFactory : public ProfileKeyedServiceFactory { public: static SystemSignalsServiceHostFactory* GetInstance(); static device_signals::SystemSignalsServiceHost* GetForProfile(
diff --git a/chrome/browser/enterprise/signals/user_permission_service_factory.cc b/chrome/browser/enterprise/signals/user_permission_service_factory.cc index f3e5bf6..9956b1d5 100644 --- a/chrome/browser/enterprise/signals/user_permission_service_factory.cc +++ b/chrome/browser/enterprise/signals/user_permission_service_factory.cc
@@ -14,7 +14,6 @@ #include "components/device_signals/core/browser/user_delegate.h" #include "components/device_signals/core/browser/user_permission_service.h" #include "components/device_signals/core/browser/user_permission_service_impl.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "components/policy/core/common/management/management_service.h" #include "components/signin/public/identity_manager/identity_manager.h" @@ -35,9 +34,7 @@ } UserPermissionServiceFactory::UserPermissionServiceFactory() - : BrowserContextKeyedServiceFactory( - "UserPermissionService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("UserPermissionService") { DependsOn(IdentityManagerFactory::GetInstance()); DependsOn(policy::ManagementServiceFactory::GetInstance()); }
diff --git a/chrome/browser/enterprise/signals/user_permission_service_factory.h b/chrome/browser/enterprise/signals/user_permission_service_factory.h index 6af2fa87..c012b2a 100644 --- a/chrome/browser/enterprise/signals/user_permission_service_factory.h +++ b/chrome/browser/enterprise/signals/user_permission_service_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_ENTERPRISE_SIGNALS_USER_PERMISSION_SERVICE_FACTORY_H_ #define CHROME_BROWSER_ENTERPRISE_SIGNALS_USER_PERMISSION_SERVICE_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -21,7 +21,7 @@ namespace enterprise_signals { // Singleton that owns a single UserPermissionService instance. -class UserPermissionServiceFactory : public BrowserContextKeyedServiceFactory { +class UserPermissionServiceFactory : public ProfileKeyedServiceFactory { public: static UserPermissionServiceFactory* GetInstance(); static device_signals::UserPermissionService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.cc b/chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.cc index 88ea1f7..0369561 100644 --- a/chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.cc +++ b/chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.cc
@@ -5,7 +5,6 @@ #include "chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.h" #include "chrome/browser/extensions/api/autofill_private/autofill_private_event_router.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "extensions/browser/extension_system_provider.h" #include "extensions/browser/extensions_browser_client.h" @@ -27,9 +26,9 @@ } AutofillPrivateEventRouterFactory::AutofillPrivateEventRouterFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "AutofillPrivateEventRouter", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildRedirectedInIncognito()) { DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); } @@ -38,12 +37,6 @@ return AutofillPrivateEventRouter::Create(context); } -content::BrowserContext* -AutofillPrivateEventRouterFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return ExtensionsBrowserClient::Get()->GetOriginalContext(context); -} - bool AutofillPrivateEventRouterFactory:: ServiceIsCreatedWithBrowserContext() const { return true;
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.h b/chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.h index e5d38f0..44f24f3 100644 --- a/chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.h +++ b/chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_EXTENSIONS_API_AUTOFILL_PRIVATE_AUTOFILL_PRIVATE_EVENT_ROUTER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace extensions { @@ -15,8 +15,7 @@ // This is a factory class used by the BrowserContextDependencyManager // to instantiate the autofillPrivate event router per profile (since the // extension event router is per profile). -class AutofillPrivateEventRouterFactory - : public BrowserContextKeyedServiceFactory { +class AutofillPrivateEventRouterFactory : public ProfileKeyedServiceFactory { public: // Returns the AutofillPrivateEventRouter for |profile|, creating it if // it is not yet created. @@ -33,8 +32,6 @@ protected: // BrowserContextKeyedServiceFactory overrides: - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool ServiceIsCreatedWithBrowserContext() const override; private:
diff --git a/chrome/browser/extensions/api/bookmarks/bookmarks_api_watcher.cc b/chrome/browser/extensions/api/bookmarks/bookmarks_api_watcher.cc index 9e14965..0c54187 100644 --- a/chrome/browser/extensions/api/bookmarks/bookmarks_api_watcher.cc +++ b/chrome/browser/extensions/api/bookmarks/bookmarks_api_watcher.cc
@@ -6,13 +6,12 @@ #include "base/memory/singleton.h" #include "base/observer_list.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace extensions { namespace { -class BookmarksApiWatcherFactory : public BrowserContextKeyedServiceFactory { +class BookmarksApiWatcherFactory : public ProfileKeyedServiceFactory { public: static BookmarksApiWatcher* GetForBrowserContext( content::BrowserContext* context) { @@ -25,9 +24,9 @@ } BookmarksApiWatcherFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "BookmarksApiWatcher", - BrowserContextDependencyManager::GetInstance()) {} + ProfileSelections::BuildForRegularAndIncognito()) {} private: // BrowserContextKeyedServiceFactory overrides @@ -35,11 +34,6 @@ content::BrowserContext* context) const override { return new BookmarksApiWatcher(); } - - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override { - return context; - } }; } // namespace
diff --git a/chrome/browser/extensions/api/file_system/consent_provider_unittest.cc b/chrome/browser/extensions/api/file_system/consent_provider_unittest.cc index c54a27b..137f7aa9 100644 --- a/chrome/browser/extensions/api/file_system/consent_provider_unittest.cc +++ b/chrome/browser/extensions/api/file_system/consent_provider_unittest.cc
@@ -28,40 +28,40 @@ namespace extensions { namespace { +// Configurations and results for TestingConsentProviderDelegate, with directly +// accessible fields. +struct TestDelegateState { + // Used to assign a fake dialog response. + ui::DialogButton dialog_button = ui::DIALOG_BUTTON_NONE; + + // Used to assign fake result of detection the auto launch kiosk mode. + bool is_auto_launched = false; + + // Used to set allowlisted components list with a single id. + std::string allowlisted_component_id; + + // Counters to record calls. + int show_dialog_counter = 0; + int show_notification_counter = 0; +}; + +// Test implementation of ConsentProvider::DelegateInterface that exposes +// states to a TestDelegateState instance. class TestingConsentProviderDelegate : public ConsentProvider::DelegateInterface { public: - TestingConsentProviderDelegate() - : show_dialog_counter_(0), - show_notification_counter_(0), - dialog_button_(ui::DIALOG_BUTTON_NONE), - is_auto_launched_(false) {} + explicit TestingConsentProviderDelegate(TestDelegateState* state) + : state_(state) {} TestingConsentProviderDelegate(const TestingConsentProviderDelegate&) = delete; TestingConsentProviderDelegate& operator=( const TestingConsentProviderDelegate&) = delete; - ~TestingConsentProviderDelegate() {} - - // Sets a fake dialog response. - void SetDialogButton(ui::DialogButton button) { dialog_button_ = button; } - - // Sets a fake result of detection the auto launch kiosk mode. - void SetIsAutoLaunched(bool is_auto_launched) { - is_auto_launched_ = is_auto_launched; - } - - // Sets an allowlisted components list with a single id. - void SetComponentAllowlist(const std::string& extension_id) { - allowlisted_component_id_ = extension_id; - } - - int show_dialog_counter() const { return show_dialog_counter_; } - int show_notification_counter() const { return show_notification_counter_; } + ~TestingConsentProviderDelegate() = default; private: - // ConsentProvider::DelegateInterface overrides: + // ConsentProvider::DelegateInterface: void ShowDialog(content::RenderFrameHost* host, const extensions::ExtensionId& extension_id, const std::string& extension_name, @@ -69,31 +69,31 @@ const std::string& volume_label, bool writable, ConsentProvider::ShowDialogCallback callback) override { - ++show_dialog_counter_; - std::move(callback).Run(dialog_button_); + ++state_->show_dialog_counter; + std::move(callback).Run(state_->dialog_button); } + // ConsentProvider::DelegateInterface: void ShowNotification(const extensions::ExtensionId& extension_id, const std::string& extension_name, const std::string& volume_id, const std::string& volume_label, bool writable) override { - ++show_notification_counter_; + ++state_->show_notification_counter; } + // ConsentProvider::DelegateInterface: bool IsAutoLaunched(const extensions::Extension& extension) override { - return is_auto_launched_; + return state_->is_auto_launched; } + // ConsentProvider::DelegateInterface: bool IsAllowlistedComponent(const extensions::Extension& extension) override { - return allowlisted_component_id_.compare(extension.id()) == 0; + return state_->allowlisted_component_id.compare(extension.id()) == 0; } - int show_dialog_counter_; - int show_notification_counter_; - ui::DialogButton dialog_button_; - bool is_auto_launched_; - std::string allowlisted_component_id_; + // Use raw_ptr since |state| is owned by owner. + base::raw_ptr<TestDelegateState> state_; }; // Rewrites result of a consent request from |result| to |log|. @@ -139,7 +139,8 @@ ExtensionBuilder("Test", ExtensionBuilder::Type::PLATFORM_APP) .SetLocation(ManifestLocation::kComponent) .Build()); - TestingConsentProviderDelegate delegate; + TestDelegateState state; + TestingConsentProviderDelegate delegate(&state); ConsentProvider provider(&delegate); EXPECT_FALSE(provider.IsGrantable(*component_extension)); } @@ -151,8 +152,9 @@ ExtensionBuilder("Test", ExtensionBuilder::Type::PLATFORM_APP) .SetLocation(ManifestLocation::kComponent) .Build()); - TestingConsentProviderDelegate delegate; - delegate.SetComponentAllowlist(allowlisted_component_extension->id()); + TestDelegateState state; + state.allowlisted_component_id = allowlisted_component_extension->id(); + TestingConsentProviderDelegate delegate(&state); ConsentProvider provider(&delegate); EXPECT_TRUE(provider.IsGrantable(*allowlisted_component_extension)); @@ -163,8 +165,8 @@ base::BindOnce(&OnConsentReceived, &result)); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(0, delegate.show_dialog_counter()); - EXPECT_EQ(0, delegate.show_notification_counter()); + EXPECT_EQ(0, state.show_dialog_counter); + EXPECT_EQ(0, state.show_notification_counter); EXPECT_EQ(ConsentProvider::CONSENT_GRANTED, result); } @@ -173,7 +175,8 @@ { scoped_refptr<const Extension> non_component_extension( ExtensionBuilder("Test").Build()); - TestingConsentProviderDelegate delegate; + TestDelegateState state; + TestingConsentProviderDelegate delegate(&state); ConsentProvider provider(&delegate); EXPECT_FALSE(provider.IsGrantable(*non_component_extension)); } @@ -193,8 +196,9 @@ user_manager_->LoginUser( AccountId::FromUserEmail(auto_launch_kiosk_app->id())); - TestingConsentProviderDelegate delegate; - delegate.SetIsAutoLaunched(true); + TestDelegateState state; + state.is_auto_launched = true; + TestingConsentProviderDelegate delegate(&state); ConsentProvider provider(&delegate); EXPECT_TRUE(provider.IsGrantable(*auto_launch_kiosk_app)); @@ -204,8 +208,8 @@ true /* writable */, base::BindOnce(&OnConsentReceived, &result)); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(0, delegate.show_dialog_counter()); - EXPECT_EQ(1, delegate.show_notification_counter()); + EXPECT_EQ(0, state.show_dialog_counter); + EXPECT_EQ(1, state.show_notification_counter); EXPECT_EQ(ConsentProvider::CONSENT_GRANTED, result); } @@ -221,8 +225,9 @@ AccountId::FromUserEmail(manual_launch_kiosk_app->id())); user_manager_->KioskAppLoggedIn(manual_kiosk_app_user); { - TestingConsentProviderDelegate delegate; - delegate.SetDialogButton(ui::DIALOG_BUTTON_OK); + TestDelegateState state; + state.dialog_button = ui::DIALOG_BUTTON_OK; + TestingConsentProviderDelegate delegate(&state); ConsentProvider provider(&delegate); EXPECT_TRUE(provider.IsGrantable(*manual_launch_kiosk_app)); @@ -233,17 +238,18 @@ base::BindOnce(&OnConsentReceived, &result)); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(1, delegate.show_dialog_counter()); - EXPECT_EQ(0, delegate.show_notification_counter()); + EXPECT_EQ(1, state.show_dialog_counter); + EXPECT_EQ(0, state.show_notification_counter); EXPECT_EQ(ConsentProvider::CONSENT_GRANTED, result); } // Non-component apps in manual-launch kiosk mode will be rejected access // after rejecting by a user. { - TestingConsentProviderDelegate delegate; + TestDelegateState state; + state.dialog_button = ui::DIALOG_BUTTON_CANCEL; + TestingConsentProviderDelegate delegate(&state); ConsentProvider provider(&delegate); - delegate.SetDialogButton(ui::DIALOG_BUTTON_CANCEL); EXPECT_TRUE(provider.IsGrantable(*manual_launch_kiosk_app)); ConsentProvider::Consent result = ConsentProvider::CONSENT_IMPOSSIBLE; @@ -253,8 +259,8 @@ base::BindOnce(&OnConsentReceived, &result)); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(1, delegate.show_dialog_counter()); - EXPECT_EQ(0, delegate.show_notification_counter()); + EXPECT_EQ(1, state.show_dialog_counter); + EXPECT_EQ(0, state.show_notification_counter); EXPECT_EQ(ConsentProvider::CONSENT_REJECTED, result); } }
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.cc index dd00dbc..1ca8205 100644 --- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.cc +++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.cc
@@ -6,7 +6,6 @@ #include "chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate.h" #include "chrome/browser/spellchecker/spellcheck_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "extensions/browser/extension_system_provider.h" #include "extensions/browser/extensions_browser_client.h" @@ -28,9 +27,9 @@ } LanguageSettingsPrivateDelegateFactory::LanguageSettingsPrivateDelegateFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "LanguageSettingsPrivateDelegate", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildRedirectedInIncognito()) { DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); DependsOn(SpellcheckServiceFactory::GetInstance()); } @@ -44,12 +43,6 @@ return LanguageSettingsPrivateDelegate::Create(context); } -content::BrowserContext* -LanguageSettingsPrivateDelegateFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return ExtensionsBrowserClient::Get()->GetOriginalContext(context); -} - bool LanguageSettingsPrivateDelegateFactory:: ServiceIsCreatedWithBrowserContext() const { return true;
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.h b/chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.h index 4375dbac..5ca0aae 100644 --- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.h +++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_delegate_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_EXTENSIONS_API_LANGUAGE_SETTINGS_PRIVATE_LANGUAGE_SETTINGS_PRIVATE_DELEGATE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace extensions { @@ -17,7 +17,7 @@ // (since the extension event router and language preferences are per browsing // context). class LanguageSettingsPrivateDelegateFactory - : public BrowserContextKeyedServiceFactory { + : public ProfileKeyedServiceFactory { public: LanguageSettingsPrivateDelegateFactory( const LanguageSettingsPrivateDelegateFactory&) = delete; @@ -34,8 +34,6 @@ protected: // BrowserContextKeyedServiceFactory overrides: - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool ServiceIsCreatedWithBrowserContext() const override; private:
diff --git a/chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.cc b/chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.cc index e537ef7..8459f31 100644 --- a/chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.cc +++ b/chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.cc
@@ -26,9 +26,9 @@ ExtensionNotificationDisplayHelperFactory:: ExtensionNotificationDisplayHelperFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "ExtensionNotificationDisplayHelperFactory", - BrowserContextDependencyManager::GetInstance()) {} + ProfileSelections::BuildForRegularAndIncognito()) {} ExtensionNotificationDisplayHelperFactory:: ~ExtensionNotificationDisplayHelperFactory() {} @@ -40,10 +40,4 @@ return new ExtensionNotificationDisplayHelper(profile); } -content::BrowserContext* -ExtensionNotificationDisplayHelperFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -} - } // namespace extensions
diff --git a/chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.h b/chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.h index c7e1ea7..76917b6 100644 --- a/chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.h +++ b/chrome/browser/extensions/api/notifications/extension_notification_display_helper_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_EXTENSION_NOTIFICATION_DISPLAY_HELPER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -15,7 +15,7 @@ class ExtensionNotificationDisplayHelper; class ExtensionNotificationDisplayHelperFactory - : public BrowserContextKeyedServiceFactory { + : public ProfileKeyedServiceFactory { public: ExtensionNotificationDisplayHelperFactory( const ExtensionNotificationDisplayHelperFactory&) = delete; @@ -32,8 +32,6 @@ // Overridden from BrowserContextKeyedServiceFactory. KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; private: friend struct base::DefaultSingletonTraits<
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.cc index 23603d6..bb72ab3 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.cc
@@ -11,7 +11,6 @@ #include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/sync_service_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "extensions/browser/extension_system_provider.h" namespace extensions { @@ -34,9 +33,7 @@ } PasswordsPrivateDelegateFactory::PasswordsPrivateDelegateFactory() - : BrowserContextKeyedServiceFactory( - "PasswordsPrivateDelegate", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("PasswordsPrivateDelegate") { DependsOn(BulkLeakCheckServiceFactory::GetInstance()); DependsOn(PasswordStoreFactory::GetInstance()); DependsOn(SyncServiceFactory::GetInstance());
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h index 428863c..9f1bea53 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_EXTENSIONS_API_PASSWORDS_PRIVATE_PASSWORDS_PRIVATE_DELEGATE_FACTORY_H_ #include "base/no_destructor.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace context { class BrowserContext; @@ -16,8 +16,7 @@ class PasswordsPrivateDelegate; // Factory for creating PasswordPrivateDelegates. -class PasswordsPrivateDelegateFactory - : public BrowserContextKeyedServiceFactory { +class PasswordsPrivateDelegateFactory : public ProfileKeyedServiceFactory { public: static PasswordsPrivateDelegate* GetForBrowserContext( content::BrowserContext* browser_context,
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.cc index 80dd51b..7b5541d 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.cc
@@ -6,7 +6,6 @@ #include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h" #include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "extensions/browser/extension_system_provider.h" #include "extensions/browser/extensions_browser_client.h" @@ -28,9 +27,9 @@ } PasswordsPrivateEventRouterFactory::PasswordsPrivateEventRouterFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "PasswordsPrivateEventRouter", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildRedirectedInIncognito()) { DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); DependsOn(PasswordsPrivateDelegateFactory::GetInstance()); } @@ -44,12 +43,6 @@ return PasswordsPrivateEventRouter::Create(context); } -content::BrowserContext* -PasswordsPrivateEventRouterFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return ExtensionsBrowserClient::Get()->GetOriginalContext(context); -} - bool PasswordsPrivateEventRouterFactory:: ServiceIsCreatedWithBrowserContext() const { return true;
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h index 8a282116..f1aac15 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_EXTENSIONS_API_PASSWORDS_PRIVATE_PASSWORDS_PRIVATE_EVENT_ROUTER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace extensions { @@ -15,8 +15,7 @@ // This is a factory class used by the BrowserContextDependencyManager // to instantiate the passwordsPrivate event router per profile (since the // extension event router is per profile). -class PasswordsPrivateEventRouterFactory - : public BrowserContextKeyedServiceFactory { +class PasswordsPrivateEventRouterFactory : public ProfileKeyedServiceFactory { public: PasswordsPrivateEventRouterFactory( const PasswordsPrivateEventRouterFactory&) = delete; @@ -33,8 +32,6 @@ protected: // BrowserContextKeyedServiceFactory overrides: - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool ServiceIsCreatedWithBrowserContext() const override; bool ServiceIsNULLWhileTesting() const override;
diff --git a/chrome/browser/extensions/api/terminal/terminal_private_api.cc b/chrome/browser/extensions/api/terminal/terminal_private_api.cc index 4cefe4a..46d4aa2 100644 --- a/chrome/browser/extensions/api/terminal/terminal_private_api.cc +++ b/chrome/browser/extensions/api/terminal/terminal_private_api.cc
@@ -95,6 +95,7 @@ const char kSwitchTargetContainer[] = "target_container"; const char kSwitchStartupId[] = "startup_id"; const char kSwitchCurrentWorkingDir[] = "cwd"; +const char kSwitchContainerFeatures[] = "container_features"; const char kCwdTerminalIdPrefix[] = "terminal_id:"; @@ -183,6 +184,19 @@ return result; } +std::string GetContainerFeaturesArg() { + std::string result; + // There are only a few available features so concatenating strings is + // sufficient. + for (vm_tools::cicerone::ContainerFeature feature : + crostini::GetContainerFeatures()) { + if (!result.empty()) + result += ","; + result += base::NumberToString(static_cast<int>(feature)); + } + return result; +} + void NotifyProcessOutput(content::BrowserContext* browser_context, const std::string& terminal_id, const std::string& output_type, @@ -323,6 +337,13 @@ std::string startup_id = params_args.GetSwitchValueASCII(kSwitchStartupId); guest_id_ = std::make_unique<guest_os::GuestId>(guest_os::VmType::UNKNOWN, vm_name, container_name); + + // Unlike the other switches, this is computed here directly rather than + // taken from |args|. + std::string container_features = GetContainerFeaturesArg(); + if (!container_features.empty()) + cmdline.AppendSwitchASCII(kSwitchContainerFeatures, container_features); + VLOG(1) << "Starting " << *guest_id_ << ", cmdline=" << cmdline.GetCommandLineString();
diff --git a/chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_factory.cc b/chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_factory.cc new file mode 100644 index 0000000..19a4fd6 --- /dev/null +++ b/chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_factory.cc
@@ -0,0 +1,46 @@ +// Copyright 2022 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/fast_checkout/fast_checkout_capabilities_fetcher_factory.h" + +#include <memory> + +#include "base/no_destructor.h" +#include "chrome/browser/autofill_assistant/common_dependencies_chrome.h" +#include "chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher.h" +#include "chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_impl.h" +#include "components/autofill_assistant/browser/public/autofill_assistant_factory.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +// static +FastCheckoutCapabilitiesFetcherFactory* +FastCheckoutCapabilitiesFetcherFactory::GetInstance() { + static base::NoDestructor<FastCheckoutCapabilitiesFetcherFactory> instance; + return instance.get(); +} + +FastCheckoutCapabilitiesFetcherFactory::FastCheckoutCapabilitiesFetcherFactory() + : BrowserContextKeyedServiceFactory( + "FastCheckoutCapabilitiesFetcher", + BrowserContextDependencyManager::GetInstance()) {} + +FastCheckoutCapabilitiesFetcherFactory:: + ~FastCheckoutCapabilitiesFetcherFactory() = default; + +// static +FastCheckoutCapabilitiesFetcher* +FastCheckoutCapabilitiesFetcherFactory::GetForBrowserContext( + content::BrowserContext* browser_context) { + return static_cast<FastCheckoutCapabilitiesFetcher*>( + GetInstance()->GetServiceForBrowserContext(browser_context, true)); +} + +KeyedService* FastCheckoutCapabilitiesFetcherFactory::BuildServiceInstanceFor( + content::BrowserContext* browser_context) const { + return new FastCheckoutCapabilitiesFetcherImpl( + autofill_assistant::AutofillAssistantFactory::CreateForBrowserContext( + browser_context, + std::make_unique<autofill_assistant::CommonDependenciesChrome>())); +}
diff --git a/chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_factory.h b/chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_factory.h new file mode 100644 index 0000000..f0274306 --- /dev/null +++ b/chrome/browser/fast_checkout/fast_checkout_capabilities_fetcher_factory.h
@@ -0,0 +1,34 @@ +// Copyright 2022 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_FAST_CHECKOUT_FAST_CHECKOUT_CAPABILITIES_FETCHER_FACTORY_H_ +#define CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_CAPABILITIES_FETCHER_FACTORY_H_ + +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +class FastCheckoutCapabilitiesFetcher; + +namespace content { +class BrowserContext; +} // namespace content + +// Factory for `FastCheckoutCapabilitiesFetcher` instances for a given +// `BrowserContext`. +class FastCheckoutCapabilitiesFetcherFactory + : public BrowserContextKeyedServiceFactory { + public: + static FastCheckoutCapabilitiesFetcherFactory* GetInstance(); + + FastCheckoutCapabilitiesFetcherFactory(); + ~FastCheckoutCapabilitiesFetcherFactory() override; + + static FastCheckoutCapabilitiesFetcher* GetForBrowserContext( + content::BrowserContext* browser_context); + + private: + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* browser_context) const override; +}; + +#endif // CHROME_BROWSER_FAST_CHECKOUT_FAST_CHECKOUT_CAPABILITIES_FETCHER_FACTORY_H_
diff --git a/chrome/browser/feed/android/feed_service_bridge.cc b/chrome/browser/feed/android/feed_service_bridge.cc index dbd050da..cd1952c 100644 --- a/chrome/browser/feed/android/feed_service_bridge.cc +++ b/chrome/browser/feed/android/feed_service_bridge.cc
@@ -141,6 +141,10 @@ NOTREACHED() << "Invalid content order: " << content_order; } +static jboolean JNI_FeedServiceBridge_IsSignedIn(JNIEnv* env) { + return FeedServiceBridge::IsSignedIn(); +} + std::string FeedServiceBridge::GetLanguageTag() { JNIEnv* env = base::android::AttachCurrentThread(); return ConvertJavaStringToUTF8(env, @@ -198,6 +202,11 @@ g_browser_process->metrics_service()->GetClientId(), profile_prefs); } +// static +bool FeedServiceBridge::IsSignedIn() { + return GetFeedService()->IsSignedIn(); +} + JavaUnreadContentObserver::JavaUnreadContentObserver( base::android::ScopedJavaGlobalRef<jobject> j_observer) : obj_(j_observer) {}
diff --git a/chrome/browser/feed/android/feed_service_bridge.h b/chrome/browser/feed/android/feed_service_bridge.h index c2a8194..c12353ad 100644 --- a/chrome/browser/feed/android/feed_service_bridge.h +++ b/chrome/browser/feed/android/feed_service_bridge.h
@@ -25,6 +25,7 @@ static bool IsEnabled(); static void PrefetchImage(const GURL& url); static uint64_t GetReliabilityLoggingId(); + static bool IsSignedIn(); }; class JavaUnreadContentObserver : public UnreadContentObserver {
diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedServiceBridge.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedServiceBridge.java index c153962f..81c13e5 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedServiceBridge.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedServiceBridge.java
@@ -183,6 +183,14 @@ FeedServiceBridgeJni.get().reportOtherUserAction(streamKind, userAction); } + /** + * @return True if the user is signed in for feed purposes (i.e. if a personalized feed can be + * requested). + */ + public static boolean isSignedIn() { + return FeedServiceBridgeJni.get().isSignedIn(); + } + /** Observes whether or not the Feed stream contains unread content */ public static class UnreadContentObserver { private long mNativePtr; @@ -227,6 +235,7 @@ void setContentOrderForWebFeed(@ContentOrder int contentOrder); long addUnreadContentObserver(Object object, boolean isWebFeed); + boolean isSignedIn(); @NativeClassQualifiedName("feed::JavaUnreadContentObserver") void destroy(long nativePtr); }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index d74a940..8ca45ef 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -4659,6 +4659,13 @@ "expiry_milestone": 86 }, { + "name": "omaha-min-sdk-version-android", + "owners": [ "nyquist", "waffles" ], + // Provides a way for changing how Chrome behaves on old and new Android SDK + // versions. Exists in about:flags so QA can more easily test behavior. + "expiry_milestone": -1 + }, + { "name": "omit-cors-client-cert", "owners": [ "toyoshim", "loading-dev" ], "expiry_milestone": 110
diff --git a/chrome/browser/flag-never-expire-list.json b/chrome/browser/flag-never-expire-list.json index 02f4641..3d3ed7b 100644 --- a/chrome/browser/flag-never-expire-list.json +++ b/chrome/browser/flag-never-expire-list.json
@@ -91,6 +91,7 @@ "memlog", "memlog-sampling-rate", "memlog-stack-mode", + "omaha-min-sdk-version-android", "overlay-strategies", "password-import", "reader-mode-heuristics",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index c334d46..435e3f7 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -3924,6 +3924,16 @@ const char kUpdateMenuTypeUpdateAvailable[] = "Update Available"; const char kUpdateMenuTypeUnsupportedOSVersion[] = "Unsupported OS Version"; +const char kOmahaMinSdkVersionAndroidName[] = + "Forces the minumum Android SDK version to a particular value."; +const char kOmahaMinSdkVersionAndroidDescription[] = + "When set, the minimum Android minimum SDK version is set to a particular " + "value which impact the app menu badge, menu items, and settings about " + "screen regarding whether Chrome can be updated."; +const char kOmahaMinSdkVersionAndroidMinSdk1Description[] = "Minimum SDK = 1"; +const char kOmahaMinSdkVersionAndroidMinSdk1000Description[] = + "Minimum SDK = 1000"; + const char kUseRealColorSpaceForAndroidVideoName[] = "Use color space from MediaCodec"; const char kUseRealColorSpaceForAndroidVideoDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 47c05b7..a65f41f 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2230,6 +2230,11 @@ extern const char kUpdateMenuTypeUpdateAvailable[]; extern const char kUpdateMenuTypeUnsupportedOSVersion[]; +extern const char kOmahaMinSdkVersionAndroidName[]; +extern const char kOmahaMinSdkVersionAndroidDescription[]; +extern const char kOmahaMinSdkVersionAndroidMinSdk1Description[]; +extern const char kOmahaMinSdkVersionAndroidMinSdk1000Description[]; + extern const char kUseRealColorSpaceForAndroidVideoName[]; extern const char kUseRealColorSpaceForAndroidVideoDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index 21d65c5c..b0b6ff6 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -259,6 +259,7 @@ &kBookmarksImprovedSaveFlow, &kBookmarksRefresh, &kBackGestureRefactorAndroid, + &kOmahaMinSdkVersionAndroid, &kOmniboxModernizeVisualUpdate, &kOptimizeGeolocationHeaderGeneration, &kOptimizeLayoutsForPullRefresh, @@ -745,6 +746,9 @@ const base::Feature kBackGestureRefactorAndroid{ "BackGestureRefactorAndroid", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kOmahaMinSdkVersionAndroid{ + "OmahaMinSdkVersionAndroid", base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kOmniboxModernizeVisualUpdate{ "OmniboxModernizeVisualUpdate", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h index 97321193..0fcf675 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h
@@ -113,6 +113,7 @@ extern const base::Feature kNewTabPageTilesTitleWrapAround; extern const base::Feature kNewWindowAppMenu; extern const base::Feature kNotificationPermissionVariant; +extern const base::Feature kOmahaMinSdkVersionAndroid; extern const base::Feature kOmniboxModernizeVisualUpdate; extern const base::Feature kOptimizeGeolocationHeaderGeneration; extern const base::Feature kPageAnnotationsService;
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java index 29f9f01..d25c73ac 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java
@@ -80,6 +80,7 @@ .put(ChromeFeatureList.INTEREST_FEED_V2, true) .put(ChromeFeatureList.LENS_CAMERA_ASSISTED_SEARCH, false) .put(ChromeFeatureList.NEW_WINDOW_APP_MENU, true) + .put(ChromeFeatureList.OMAHA_MIN_SDK_VERSION_ANDROID, false) .put(ChromeFeatureList.OMNIBOX_ANDROID_AUXILIARY_SEARCH, false) .put(ChromeFeatureList.OMNIBOX_MODERNIZE_VISUAL_UPDATE, false) .put(ChromeFeatureList.OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, false)
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index b0820390..a974e37b 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -429,6 +429,7 @@ "OfflinePagesDescriptivePendingStatus"; public static final String OFFLINE_PAGES_LIVE_PAGE_SHARING = "OfflinePagesLivePageSharing"; public static final String OFFLINE_PAGES_PREFETCHING = "OfflinePagesPrefetching"; + public static final String OMAHA_MIN_SDK_VERSION_ANDROID = "OmahaMinSdkVersionAndroid"; public static final String OMNIBOX_ANDROID_AUXILIARY_SEARCH = "AndroidAuxiliarySearch"; public static final String OMNIBOX_ASSISTANT_VOICE_SEARCH = "OmniboxAssistantVoiceSearch"; @@ -659,6 +660,8 @@ public static final CachedFlag sLensCameraAssistedSearch = new CachedFlag(LENS_CAMERA_ASSISTED_SEARCH, false); public static final CachedFlag sNewWindowAppMenu = new CachedFlag(NEW_WINDOW_APP_MENU, true); + public static final CachedFlag sOmahaMinSdkVersionAndroid = + new CachedFlag(OMAHA_MIN_SDK_VERSION_ANDROID, false); public static final CachedFlag sOmniboxModernizeVisualUpdate = new CachedFlag(OMNIBOX_MODERNIZE_VISUAL_UPDATE, false); public static final CachedFlag sOptimizationGuidePushNotifications =
diff --git a/chrome/browser/hid/chrome_hid_delegate.cc b/chrome/browser/hid/chrome_hid_delegate.cc index 2c6ceda..ae414251 100644 --- a/chrome/browser/hid/chrome_hid_delegate.cc +++ b/chrome/browser/hid/chrome_hid_delegate.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/hid/chrome_hid_delegate.h" +#include <cstddef> #include <utility> #include "base/containers/contains.h" @@ -137,38 +138,49 @@ bool ChromeHidDelegate::CanRequestDevicePermission( content::BrowserContext* browser_context, const url::Origin& origin) { - return GetChooserContext(browser_context)->CanRequestObjectPermission(origin); + return browser_context && + GetChooserContext(browser_context)->CanRequestObjectPermission(origin); } bool ChromeHidDelegate::HasDevicePermission( content::BrowserContext* browser_context, const url::Origin& origin, const device::mojom::HidDeviceInfo& device) { - return GetChooserContext(browser_context) - ->HasDevicePermission(origin, device); + return browser_context && GetChooserContext(browser_context) + ->HasDevicePermission(origin, device); } void ChromeHidDelegate::RevokeDevicePermission( content::BrowserContext* browser_context, const url::Origin& origin, const device::mojom::HidDeviceInfo& device) { - return GetChooserContext(browser_context) - ->RevokeDevicePermission(origin, device); + if (browser_context) { + GetChooserContext(browser_context)->RevokeDevicePermission(origin, device); + } } device::mojom::HidManager* ChromeHidDelegate::GetHidManager( content::BrowserContext* browser_context) { + if (!browser_context) { + return nullptr; + } return GetChooserContext(browser_context)->GetHidManager(); } void ChromeHidDelegate::AddObserver(content::BrowserContext* browser_context, Observer* observer) { + if (!browser_context) { + return; + } GetContextObserver(browser_context)->AddObserver(observer); } void ChromeHidDelegate::RemoveObserver( content::BrowserContext* browser_context, content::HidDelegate::Observer* observer) { + if (!browser_context) { + return; + } DCHECK(base::Contains(observations_, browser_context)); GetContextObserver(browser_context)->RemoveObserver(observer); } @@ -177,6 +189,9 @@ content::BrowserContext* browser_context, const std::string& guid) { auto* chooser_context = GetChooserContext(browser_context); + if (!chooser_context) { + return nullptr; + } return chooser_context->GetDeviceInfo(guid); } @@ -184,7 +199,7 @@ content::BrowserContext* browser_context, const url::Origin& origin) { auto* chooser_context = GetChooserContext(browser_context); - return chooser_context->IsFidoAllowedForOrigin(origin); + return chooser_context && chooser_context->IsFidoAllowedForOrigin(origin); } bool ChromeHidDelegate::IsServiceWorkerAllowedForOrigin( @@ -202,6 +217,7 @@ ChromeHidDelegate::ContextObservation* ChromeHidDelegate::GetContextObserver( content::BrowserContext* browser_context) { + DCHECK(browser_context); if (!base::Contains(observations_, browser_context)) { observations_.emplace(browser_context, std::make_unique<ContextObservation>( this, browser_context));
diff --git a/chrome/browser/hid/chrome_hid_delegate_unittest.cc b/chrome/browser/hid/chrome_hid_delegate_unittest.cc index 9866bd05..58d023a 100644 --- a/chrome/browser/hid/chrome_hid_delegate_unittest.cc +++ b/chrome/browser/hid/chrome_hid_delegate_unittest.cc
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/hid/chrome_hid_delegate.h" + #include "base/guid.h" #include "base/test/repeating_test_future.h" #include "base/test/test_future.h" @@ -761,3 +763,18 @@ EXPECT_TRUE(web_contents()->IsConnectedToHidDevice()); } #endif // BUILDFLAG(ENABLE_EXTENSIONS) + +TEST(ChromeHidDelegateBrowserContextTest, BrowserContextIsNull) { + ChromeHidDelegate chrome_hid_delegate; + url::Origin origin = url::Origin::Create(GURL(kDefaultTestUrl)); + EXPECT_FALSE(chrome_hid_delegate.CanRequestDevicePermission( + /*browser_context=*/nullptr, origin)); + EXPECT_FALSE(chrome_hid_delegate.HasDevicePermission( + /*browser_context=*/nullptr, origin, device::mojom::HidDeviceInfo())); + EXPECT_EQ(nullptr, + chrome_hid_delegate.GetHidManager(/*browser_context=*/nullptr)); + EXPECT_EQ(nullptr, chrome_hid_delegate.GetDeviceInfo( + /*browser_context=*/nullptr, base::GenerateGUID())); + EXPECT_FALSE(chrome_hid_delegate.IsFidoAllowedForOrigin( + /*browser_context=*/nullptr, origin)); +}
diff --git a/chrome/browser/history/domain_diversity_reporter_factory.cc b/chrome/browser/history/domain_diversity_reporter_factory.cc index 7da124c..88703609 100644 --- a/chrome/browser/history/domain_diversity_reporter_factory.cc +++ b/chrome/browser/history/domain_diversity_reporter_factory.cc
@@ -12,10 +12,8 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/history/history_service_factory.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "components/history/metrics/domain_diversity_reporter.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" @@ -50,12 +48,6 @@ return nullptr; #endif - // Incognito profiles share the HistoryService of the original profile, so no - // need for an instance for them. Guest and system profiles are not - // representative (guest in particular is transient) and not reported. - if (!profile->IsRegularProfile()) - return nullptr; - history::HistoryService* history_service = HistoryServiceFactory::GetForProfile(profile, ServiceAccessType::EXPLICIT_ACCESS); @@ -69,9 +61,13 @@ } DomainDiversityReporterFactory::DomainDiversityReporterFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "DomainDiversityReporter", - BrowserContextDependencyManager::GetInstance()) { + // Incognito profiles share the HistoryService of the original + // profile, so no + // need for an instance for them. Guest and system profiles are not + // representative (guest in particular is transient) and not reported. + ProfileSelections::BuildRedirectedInIncognitoNonExperimental()) { DependsOn(HistoryServiceFactory::GetInstance()); } @@ -87,11 +83,6 @@ DomainDiversityReporter::RegisterProfilePrefs(registry); } -content::BrowserContext* DomainDiversityReporterFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextRedirectedInIncognito(context); -} - bool DomainDiversityReporterFactory::ServiceIsNULLWhileTesting() const { return true; }
diff --git a/chrome/browser/history/domain_diversity_reporter_factory.h b/chrome/browser/history/domain_diversity_reporter_factory.h index 8b6a454..3eda743c 100644 --- a/chrome/browser/history/domain_diversity_reporter_factory.h +++ b/chrome/browser/history/domain_diversity_reporter_factory.h
@@ -8,7 +8,7 @@ #include <memory> #include "base/no_destructor.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class DomainDiversityReporter; class Profile; @@ -17,8 +17,7 @@ class PrefRegistrySyncable; } -class DomainDiversityReporterFactory - : public BrowserContextKeyedServiceFactory { +class DomainDiversityReporterFactory : public ProfileKeyedServiceFactory { public: static DomainDiversityReporter* GetForProfile(Profile* profile); @@ -45,8 +44,6 @@ KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool ServiceIsNULLWhileTesting() const override; bool ServiceIsCreatedWithBrowserContext() const override; };
diff --git a/chrome/browser/history/history_browsertest.cc b/chrome/browser/history/history_browsertest.cc index 246ce55..e56cdb3 100644 --- a/chrome/browser/history/history_browsertest.cc +++ b/chrome/browser/history/history_browsertest.cc
@@ -93,7 +93,7 @@ } void LoadAndWaitForFile(const char* filename) { - GURL url = test_server_.GetURL(std::string("/History") + filename); + GURL url = test_server_.GetURL(std::string("/History/") + filename); LoadAndWaitForURL(url); } @@ -236,25 +236,19 @@ } } -// Disabled after fixing this test class. See http://crbug.com/511442 for -// details. -IN_PROC_BROWSER_TEST_F(HistoryBrowserTest, DISABLED_VerifyHistoryLength1) { +IN_PROC_BROWSER_TEST_F(HistoryBrowserTest, VerifyHistoryLength1) { // Test the history length for the following page transitions. // -open-> Page 1. LoadAndWaitForFile("history_length_test_page_1.html"); } -// Disabled after fixing this test class. See http://crbug.com/511442 for -// details. -IN_PROC_BROWSER_TEST_F(HistoryBrowserTest, DISABLED_VerifyHistoryLength2) { +IN_PROC_BROWSER_TEST_F(HistoryBrowserTest, VerifyHistoryLength2) { // Test the history length for the following page transitions. // -open-> Page 2 -redirect-> Page 3. LoadAndWaitForFile("history_length_test_page_2.html"); } -// Disabled after fixing this test class. See http://crbug.com/511442 for -// details. -IN_PROC_BROWSER_TEST_F(HistoryBrowserTest, DISABLED_VerifyHistoryLength3) { +IN_PROC_BROWSER_TEST_F(HistoryBrowserTest, VerifyHistoryLength3) { // Test the history length for the following page transitions. // -open-> Page 1 -> open Page 2 -redirect Page 3. open Page 4 // -navigate_backward-> Page 3 -navigate_backward->Page 1 @@ -264,10 +258,8 @@ LoadAndWaitForFile("history_length_test_page_4.html"); } -// Disabled after fixing this test class. See http://crbug.com/511442 for -// details. IN_PROC_BROWSER_TEST_F(HistoryBrowserTest, - DISABLED_ConsiderRedirectAfterGestureAsUserInitiated) { + ConsiderRedirectAfterGestureAsUserInitiated) { // Test the history length for the following page transition. // // -open-> Page 11 -slow_redirect-> Page 12. @@ -283,10 +275,8 @@ LoadAndWaitForFile("history_length_test_page_11.html"); } -// Disabled after fixing this test class. See http://crbug.com/511442 for -// details. IN_PROC_BROWSER_TEST_F(HistoryBrowserTest, - DISABLED_ConsiderSlowRedirectAsUserInitiated) { + ConsiderSlowRedirectAsUserInitiated) { // Test the history length for the following page transition. // // -open-> Page 21 -redirect-> Page 22.
diff --git a/chrome/browser/history/history_service_factory.cc b/chrome/browser/history/history_service_factory.cc index 4acc96a..cf74af24 100644 --- a/chrome/browser/history/history_service_factory.cc +++ b/chrome/browser/history/history_service_factory.cc
@@ -6,7 +6,6 @@ #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/history/chrome_history_client.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/history/content/browser/content_visit_delegate.h" @@ -14,7 +13,6 @@ #include "components/history/core/browser/history_database_params.h" #include "components/history/core/browser/history_service.h" #include "components/history/core/common/pref_names.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/service_access_type.h" #include "components/prefs/pref_service.h" @@ -88,9 +86,9 @@ } HistoryServiceFactory::HistoryServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "HistoryService", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildRedirectedInIncognito()) { DependsOn(BookmarkModelFactory::GetInstance()); } @@ -102,11 +100,6 @@ return BuildHistoryService(context).release(); } -content::BrowserContext* HistoryServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextRedirectedInIncognito(context); -} - bool HistoryServiceFactory::ServiceIsNULLWhileTesting() const { return true; }
diff --git a/chrome/browser/history/history_service_factory.h b/chrome/browser/history/history_service_factory.h index 1af52d61..16cac0ff 100644 --- a/chrome/browser/history/history_service_factory.h +++ b/chrome/browser/history/history_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_HISTORY_HISTORY_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "components/keyed_service/core/service_access_type.h" class Profile; @@ -17,7 +17,7 @@ // Singleton that owns all HistoryService and associates them with // Profiles. -class HistoryServiceFactory : public BrowserContextKeyedServiceFactory { +class HistoryServiceFactory : public ProfileKeyedServiceFactory { public: static history::HistoryService* GetForProfile(Profile* profile, ServiceAccessType sat); @@ -48,8 +48,6 @@ // BrowserContextKeyedServiceFactory: KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool ServiceIsNULLWhileTesting() const override; };
diff --git a/chrome/browser/history/web_history_service_factory.cc b/chrome/browser/history/web_history_service_factory.cc index d8c3172d8..f96fcfa 100644 --- a/chrome/browser/history/web_history_service_factory.cc +++ b/chrome/browser/history/web_history_service_factory.cc
@@ -7,7 +7,6 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/sync/sync_service_factory.h" #include "components/history/core/browser/web_history_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/sync/driver/sync_service.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" @@ -53,9 +52,7 @@ } WebHistoryServiceFactory::WebHistoryServiceFactory() - : BrowserContextKeyedServiceFactory( - "WebHistoryServiceFactory", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("WebHistoryServiceFactory") { DependsOn(IdentityManagerFactory::GetInstance()); }
diff --git a/chrome/browser/history/web_history_service_factory.h b/chrome/browser/history/web_history_service_factory.h index 2ee9ca7a..ae105f5 100644 --- a/chrome/browser/history/web_history_service_factory.h +++ b/chrome/browser/history/web_history_service_factory.h
@@ -7,7 +7,7 @@ #include "base/memory/singleton.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace history { class WebHistoryService; @@ -15,7 +15,7 @@ // Used for creating and fetching a per-profile instance of the // WebHistoryService. -class WebHistoryServiceFactory : public BrowserContextKeyedServiceFactory { +class WebHistoryServiceFactory : public ProfileKeyedServiceFactory { public: // Get the singleton instance of the factory. static WebHistoryServiceFactory* GetInstance();
diff --git a/chrome/browser/history_clusters/history_clusters_service_factory.cc b/chrome/browser/history_clusters/history_clusters_service_factory.cc index f183283..bf08dcc 100644 --- a/chrome/browser/history_clusters/history_clusters_service_factory.cc +++ b/chrome/browser/history_clusters/history_clusters_service_factory.cc
@@ -13,7 +13,6 @@ #include "chrome/browser/optimization_guide/page_content_annotations_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "components/history_clusters/core/history_clusters_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/service_access_type.h" #include "components/optimization_guide/content/browser/page_content_annotations_service.h" #include "components/optimization_guide/core/new_optimization_guide_decider.h" @@ -35,9 +34,10 @@ } HistoryClustersServiceFactory::HistoryClustersServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "HistoryClustersService", - BrowserContextDependencyManager::GetInstance()) { + // Give incognito its own isolated service. + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(HistoryServiceFactory::GetInstance()); DependsOn(PageContentAnnotationsServiceFactory::GetInstance()); DependsOn(site_engagement::SiteEngagementServiceFactory::GetInstance()); @@ -65,9 +65,3 @@ url_loader_factory, site_engagement::SiteEngagementService::Get(profile), OptimizationGuideKeyedServiceFactory::GetForProfile(profile)); } - -content::BrowserContext* HistoryClustersServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Give incognito its own isolated service. - return context; -}
diff --git a/chrome/browser/history_clusters/history_clusters_service_factory.h b/chrome/browser/history_clusters/history_clusters_service_factory.h index 9a56ffe..780cb2f 100644 --- a/chrome/browser/history_clusters/history_clusters_service_factory.h +++ b/chrome/browser/history_clusters/history_clusters_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_HISTORY_CLUSTERS_HISTORY_CLUSTERS_SERVICE_FACTORY_H_ #include "base/no_destructor.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "content/public/browser/browser_context.h" namespace history_clusters { @@ -15,7 +15,7 @@ // Factory for BrowserContext keyed HistoryClustersService, which clusters // Chrome history into useful Memories to be surfaced in UI. -class HistoryClustersServiceFactory : public BrowserContextKeyedServiceFactory { +class HistoryClustersServiceFactory : public ProfileKeyedServiceFactory { public: // This can return nullptr in tests. static history_clusters::HistoryClustersService* GetForBrowserContext( @@ -31,8 +31,6 @@ // BrowserContextKeyedServiceFactory: KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_HISTORY_CLUSTERS_HISTORY_CLUSTERS_SERVICE_FACTORY_H_
diff --git a/chrome/browser/invalidation/profile_invalidation_provider_factory.cc b/chrome/browser/invalidation/profile_invalidation_provider_factory.cc index ae85571..923d4b2 100644 --- a/chrome/browser/invalidation/profile_invalidation_provider_factory.cc +++ b/chrome/browser/invalidation/profile_invalidation_provider_factory.cc
@@ -26,7 +26,6 @@ #include "components/invalidation/impl/profile_identity_provider.h" #include "components/invalidation/impl/profile_invalidation_provider.h" #include "components/invalidation/public/invalidation_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_registry.h" #include "content/public/browser/storage_partition.h" @@ -96,9 +95,7 @@ } ProfileInvalidationProviderFactory::ProfileInvalidationProviderFactory() - : BrowserContextKeyedServiceFactory( - "InvalidationService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("InvalidationService") { DependsOn(IdentityManagerFactory::GetInstance()); DependsOn(gcm::GCMProfileServiceFactory::GetInstance()); }
diff --git a/chrome/browser/invalidation/profile_invalidation_provider_factory.h b/chrome/browser/invalidation/profile_invalidation_provider_factory.h index 446f31d..70f87389 100644 --- a/chrome/browser/invalidation/profile_invalidation_provider_factory.h +++ b/chrome/browser/invalidation/profile_invalidation_provider_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_INVALIDATION_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -23,8 +23,7 @@ // may be completely different on different platforms; this class should help to // hide this complexity. It also exposes some factory methods that are useful // for setting up tests that rely on invalidations. -class ProfileInvalidationProviderFactory - : public BrowserContextKeyedServiceFactory { +class ProfileInvalidationProviderFactory : public ProfileKeyedServiceFactory { public: // Returns the ProfileInvalidationProvider for the given |profile|, lazily // creating one first if required. If |profile| does not support invalidation
diff --git a/chrome/browser/lacros/account_manager/profile_account_manager_factory.cc b/chrome/browser/lacros/account_manager/profile_account_manager_factory.cc index f90b3eb..ac02ed9e 100644 --- a/chrome/browser/lacros/account_manager/profile_account_manager_factory.cc +++ b/chrome/browser/lacros/account_manager/profile_account_manager_factory.cc
@@ -9,8 +9,6 @@ #include "chrome/browser/lacros/account_manager/profile_account_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/browser_context.h" @@ -28,9 +26,7 @@ } ProfileAccountManagerFactory::ProfileAccountManagerFactory() - : BrowserContextKeyedServiceFactory( - "ProfileAccountManager", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("ProfileAccountManager") {} ProfileAccountManagerFactory::~ProfileAccountManagerFactory() = default;
diff --git a/chrome/browser/lacros/account_manager/profile_account_manager_factory.h b/chrome/browser/lacros/account_manager/profile_account_manager_factory.h index 609c1a1..05c2d004 100644 --- a/chrome/browser/lacros/account_manager/profile_account_manager_factory.h +++ b/chrome/browser/lacros/account_manager/profile_account_manager_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_LACROS_ACCOUNT_MANAGER_PROFILE_ACCOUNT_MANAGER_FACTORY_H_ #define CHROME_BROWSER_LACROS_ACCOUNT_MANAGER_PROFILE_ACCOUNT_MANAGER_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "base/no_destructor.h" @@ -17,7 +17,7 @@ class BrowserContext; } -class ProfileAccountManagerFactory : public BrowserContextKeyedServiceFactory { +class ProfileAccountManagerFactory : public ProfileKeyedServiceFactory { public: static ProfileAccountManagerFactory* GetInstance(); static ProfileAccountManager* GetForProfile(Profile* profile);
diff --git a/chrome/browser/lacros/cert/cert_db_initializer_factory.cc b/chrome/browser/lacros/cert/cert_db_initializer_factory.cc index 7e748af..332e9cc 100644 --- a/chrome/browser/lacros/cert/cert_db_initializer_factory.cc +++ b/chrome/browser/lacros/cert/cert_db_initializer_factory.cc
@@ -7,11 +7,9 @@ #include "base/no_destructor.h" #include "base/system/sys_info.h" #include "chrome/browser/lacros/cert/cert_db_initializer_impl.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chromeos/lacros/lacros_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" class CertDbInitializer; @@ -29,9 +27,9 @@ } CertDbInitializerFactory::CertDbInitializerFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "CertDbInitializerFactory", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildRedirectedInIncognito()) { DependsOn(IdentityManagerFactory::GetInstance()); } @@ -56,8 +54,3 @@ bool CertDbInitializerFactory::ServiceIsNULLWhileTesting() const { return true; } - -content::BrowserContext* CertDbInitializerFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextRedirectedInIncognito(context); -}
diff --git a/chrome/browser/lacros/cert/cert_db_initializer_factory.h b/chrome/browser/lacros/cert/cert_db_initializer_factory.h index d61ad0b9..6814cd1 100644 --- a/chrome/browser/lacros/cert/cert_db_initializer_factory.h +++ b/chrome/browser/lacros/cert/cert_db_initializer_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_LACROS_CERT_CERT_DB_INITIALIZER_FACTORY_H_ #include "base/no_destructor.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class CertDbInitializer; @@ -27,7 +27,7 @@ // individual tests or they can create their own instances of the service. // * In unittests: CertDbInitializer is not created by default (see // `ServiceIsNULLWhileTesting()`). -class CertDbInitializerFactory : public BrowserContextKeyedServiceFactory { +class CertDbInitializerFactory : public ProfileKeyedServiceFactory { public: static CertDbInitializerFactory* GetInstance(); static CertDbInitializer* GetForBrowserContext( @@ -50,8 +50,6 @@ KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; bool ServiceIsNULLWhileTesting() const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool should_create_with_browser_context_ = true; };
diff --git a/chrome/browser/lacros/remote_apps/remote_apps_proxy_lacros_factory.cc b/chrome/browser/lacros/remote_apps/remote_apps_proxy_lacros_factory.cc index 2637ed93..e791ca9a 100644 --- a/chrome/browser/lacros/remote_apps/remote_apps_proxy_lacros_factory.cc +++ b/chrome/browser/lacros/remote_apps/remote_apps_proxy_lacros_factory.cc
@@ -8,7 +8,6 @@ #include "chrome/browser/profiles/profile.h" #include "chromeos/components/remote_apps/mojom/remote_apps.mojom.h" #include "chromeos/lacros/lacros_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "extensions/browser/event_router_factory.h" @@ -29,9 +28,7 @@ } RemoteAppsProxyLacrosFactory::RemoteAppsProxyLacrosFactory() - : BrowserContextKeyedServiceFactory( - "RemoteAppsProxyLacros", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("RemoteAppsProxyLacros") { DependsOn(extensions::EventRouterFactory::GetInstance()); }
diff --git a/chrome/browser/lacros/remote_apps/remote_apps_proxy_lacros_factory.h b/chrome/browser/lacros/remote_apps/remote_apps_proxy_lacros_factory.h index 584bff5..4566d386 100644 --- a/chrome/browser/lacros/remote_apps/remote_apps_proxy_lacros_factory.h +++ b/chrome/browser/lacros/remote_apps/remote_apps_proxy_lacros_factory.h
@@ -6,14 +6,14 @@ #define CHROME_BROWSER_LACROS_REMOTE_APPS_REMOTE_APPS_PROXY_LACROS_FACTORY_H_ #include "base/no_destructor.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace chromeos { class RemoteAppsProxyLacros; // Factory for the `RemoteAppsProxyLacros` KeyedService. -class RemoteAppsProxyLacrosFactory : public BrowserContextKeyedServiceFactory { +class RemoteAppsProxyLacrosFactory : public ProfileKeyedServiceFactory { public: static RemoteAppsProxyLacros* GetForBrowserContext( content::BrowserContext* browser_context);
diff --git a/chrome/browser/lacros/vpn_extension_tracker_lacros.cc b/chrome/browser/lacros/vpn_extension_tracker_lacros.cc index 4f37a53..e76ad96 100644 --- a/chrome/browser/lacros/vpn_extension_tracker_lacros.cc +++ b/chrome/browser/lacros/vpn_extension_tracker_lacros.cc
@@ -71,3 +71,9 @@ } GetVpnExtensionObserver()->OnLacrosVpnExtensionUnloaded(extension->id()); } + +void VpnExtensionTrackerLacros::OnShutdown( + extensions::ExtensionRegistry* registry) { + DCHECK(extension_registry_observer_.IsObservingSource(registry)); + extension_registry_observer_.Reset(); +}
diff --git a/chrome/browser/lacros/vpn_extension_tracker_lacros.h b/chrome/browser/lacros/vpn_extension_tracker_lacros.h index acaf5857..0b41881a 100644 --- a/chrome/browser/lacros/vpn_extension_tracker_lacros.h +++ b/chrome/browser/lacros/vpn_extension_tracker_lacros.h
@@ -26,6 +26,7 @@ void OnExtensionUnloaded(content::BrowserContext*, const extensions::Extension*, extensions::UnloadedExtensionReason) override; + void OnShutdown(extensions::ExtensionRegistry*) override; private: base::ScopedObservation<extensions::ExtensionRegistry,
diff --git a/chrome/browser/language/accept_languages_service_factory.cc b/chrome/browser/language/accept_languages_service_factory.cc index 9444dcec..e2fea41 100644 --- a/chrome/browser/language/accept_languages_service_factory.cc +++ b/chrome/browser/language/accept_languages_service_factory.cc
@@ -4,9 +4,7 @@ #include "chrome/browser/language/accept_languages_service_factory.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/language/core/browser/accept_languages_service.h" #include "components/language/core/browser/pref_names.h" #include "components/prefs/pref_service.h" @@ -25,9 +23,9 @@ } AcceptLanguagesServiceFactory::AcceptLanguagesServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "AcceptLanguagesService", - BrowserContextDependencyManager::GetInstance()) {} + ProfileSelections::BuildForRegularAndIncognito()) {} AcceptLanguagesServiceFactory::~AcceptLanguagesServiceFactory() {} @@ -37,8 +35,3 @@ return new language::AcceptLanguagesService( profile->GetPrefs(), language::prefs::kAcceptLanguages); } - -content::BrowserContext* AcceptLanguagesServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/language/accept_languages_service_factory.h b/chrome/browser/language/accept_languages_service_factory.h index 2ee87777..aa4418d 100644 --- a/chrome/browser/language/accept_languages_service_factory.h +++ b/chrome/browser/language/accept_languages_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_LANGUAGE_ACCEPT_LANGUAGES_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace language { class AcceptLanguagesService; @@ -14,7 +14,7 @@ // AcceptLanguagesServiceFactory is a way to associate an // AcceptLanguagesService instance to a BrowserContext. -class AcceptLanguagesServiceFactory : public BrowserContextKeyedServiceFactory { +class AcceptLanguagesServiceFactory : public ProfileKeyedServiceFactory { public: static language::AcceptLanguagesService* GetForBrowserContext( content::BrowserContext* browser_context); @@ -33,8 +33,6 @@ // BrowserContextKeyedServiceFactory: KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_LANGUAGE_ACCEPT_LANGUAGES_SERVICE_FACTORY_H_
diff --git a/chrome/browser/language/language_model_manager_factory.cc b/chrome/browser/language/language_model_manager_factory.cc index 90e4c1a..bdc8e888 100644 --- a/chrome/browser/language/language_model_manager_factory.cc +++ b/chrome/browser/language/language_model_manager_factory.cc
@@ -10,10 +10,8 @@ #include "base/task/thread_pool.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "components/language/content/browser/geo_language_model.h" #include "components/language/content/browser/geo_language_provider.h" @@ -150,9 +148,10 @@ } LanguageModelManagerFactory::LanguageModelManagerFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "LanguageModelManager", - BrowserContextDependencyManager::GetInstance()) {} + // Use the original profile's language model even in Incognito mode. + ProfileSelections::BuildRedirectedInIncognito()) {} LanguageModelManagerFactory::~LanguageModelManagerFactory() {} @@ -164,9 +163,3 @@ PrepareLanguageModels(profile, manager); return manager; } - -content::BrowserContext* LanguageModelManagerFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Use the original profile's language model even in Incognito mode. - return chrome::GetBrowserContextRedirectedInIncognito(context); -}
diff --git a/chrome/browser/language/language_model_manager_factory.h b/chrome/browser/language/language_model_manager_factory.h index 3b19dc8..64930bd 100644 --- a/chrome/browser/language/language_model_manager_factory.h +++ b/chrome/browser/language/language_model_manager_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_MANAGER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace content { class BrowserContext; @@ -18,7 +18,7 @@ // Manages the language model for each profile. The particular language model // provided depends on feature flags. -class LanguageModelManagerFactory : public BrowserContextKeyedServiceFactory { +class LanguageModelManagerFactory : public ProfileKeyedServiceFactory { public: static LanguageModelManagerFactory* GetInstance(); static language::LanguageModelManager* GetForBrowserContext( @@ -37,8 +37,6 @@ // BrowserContextKeyedServiceFactory overrides. KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_LANGUAGE_LANGUAGE_MODEL_MANAGER_FACTORY_H_
diff --git a/chrome/browser/language/url_language_histogram_factory.cc b/chrome/browser/language/url_language_histogram_factory.cc index d89b9ef..d00d3ab 100644 --- a/chrome/browser/language/url_language_histogram_factory.cc +++ b/chrome/browser/language/url_language_histogram_factory.cc
@@ -5,7 +5,6 @@ #include "chrome/browser/language/url_language_histogram_factory.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/core/keyed_service.h" #include "components/language/core/browser/url_language_histogram.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -24,9 +23,7 @@ } UrlLanguageHistogramFactory::UrlLanguageHistogramFactory() - : BrowserContextKeyedServiceFactory( - "UrlLanguageHistogram", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("UrlLanguageHistogram") {} UrlLanguageHistogramFactory::~UrlLanguageHistogramFactory() {}
diff --git a/chrome/browser/language/url_language_histogram_factory.h b/chrome/browser/language/url_language_histogram_factory.h index b0f5091..b9918c5 100644 --- a/chrome/browser/language/url_language_histogram_factory.h +++ b/chrome/browser/language/url_language_histogram_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_LANGUAGE_URL_LANGUAGE_HISTOGRAM_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace content { class BrowserContext; @@ -20,7 +20,7 @@ class PrefRegistrySyncable; } -class UrlLanguageHistogramFactory : public BrowserContextKeyedServiceFactory { +class UrlLanguageHistogramFactory : public ProfileKeyedServiceFactory { public: static UrlLanguageHistogramFactory* GetInstance(); static language::UrlLanguageHistogram* GetForBrowserContext(
diff --git a/chrome/browser/lookalikes/lookalike_url_service.cc b/chrome/browser/lookalikes/lookalike_url_service.cc index d2a29efbb..5c92b4b 100644 --- a/chrome/browser/lookalikes/lookalike_url_service.cc +++ b/chrome/browser/lookalikes/lookalike_url_service.cc
@@ -17,9 +17,8 @@ #include "chrome/browser/engagement/site_engagement_service_factory.h" #include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "components/content_settings/core/browser/host_content_settings_map.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "components/lookalikes/core/features.h" #include "components/lookalikes/core/lookalike_url_util.h" #include "components/site_engagement/content/site_engagement_score.h" @@ -33,7 +32,7 @@ constexpr base::TimeDelta kEngagedSiteUpdateInterval = base::Seconds(60); -class LookalikeUrlServiceFactory : public BrowserContextKeyedServiceFactory { +class LookalikeUrlServiceFactory : public ProfileKeyedServiceFactory { public: static LookalikeUrlService* GetForProfile(Profile* profile) { return static_cast<LookalikeUrlService*>( @@ -53,9 +52,9 @@ // LookalikeUrlServiceFactory(); LookalikeUrlServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "LookalikeUrlServiceFactory", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(site_engagement::SiteEngagementServiceFactory::GetInstance()); } @@ -66,11 +65,6 @@ content::BrowserContext* profile) const override { return new LookalikeUrlService(static_cast<Profile*>(profile)); } - - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); - } }; // static
diff --git a/chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.cc b/chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.cc index c881f5c..d1022a9a 100644 --- a/chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.cc +++ b/chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.cc
@@ -10,7 +10,6 @@ #include "base/memory/ptr_util.h" #include "chrome/browser/media/android/cdm/media_drm_origin_id_manager.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "media/base/media_switches.h" // static @@ -26,9 +25,8 @@ } MediaDrmOriginIdManagerFactory::MediaDrmOriginIdManagerFactory() - : BrowserContextKeyedServiceFactory( - "MediaDrmOriginIdManager", - BrowserContextDependencyManager::GetInstance()) {} + // No service for Incognito mode. + : ProfileKeyedServiceFactory("MediaDrmOriginIdManager") {} MediaDrmOriginIdManagerFactory::~MediaDrmOriginIdManagerFactory() = default; @@ -38,15 +36,6 @@ return new MediaDrmOriginIdManager(profile->GetPrefs()); } -content::BrowserContext* MediaDrmOriginIdManagerFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // No service for Incognito mode. - if (context->IsOffTheRecord()) - return nullptr; - - return context; -} - bool MediaDrmOriginIdManagerFactory::ServiceIsCreatedWithBrowserContext() const { // Create this service when the context is created if the feature is enabled.
diff --git a/chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.h b/chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.h index ed6004b..5ffcf1f4 100644 --- a/chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.h +++ b/chrome/browser/media/android/cdm/media_drm_origin_id_manager_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_MEDIA_ANDROID_CDM_MEDIA_DRM_ORIGIN_ID_MANAGER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class MediaDrmOriginIdManager; class Profile; @@ -14,8 +14,7 @@ // Singleton that owns all MediaDrmOriginIdManagers and associates them with // Profiles. Listens for the Profile's destruction notification and cleans up // the associated MediaDrmOriginIdManager. -class MediaDrmOriginIdManagerFactory - : public BrowserContextKeyedServiceFactory { +class MediaDrmOriginIdManagerFactory : public ProfileKeyedServiceFactory { public: // This may return NULL if origin IDs are not supported by the profile // (e.g. incognito). @@ -34,9 +33,6 @@ KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; - bool ServiceIsCreatedWithBrowserContext() const override; };
diff --git a/chrome/browser/media/history/media_history_keyed_service_factory.cc b/chrome/browser/media/history/media_history_keyed_service_factory.cc index 94bf122..6123051 100644 --- a/chrome/browser/media/history/media_history_keyed_service_factory.cc +++ b/chrome/browser/media/history/media_history_keyed_service_factory.cc
@@ -7,7 +7,6 @@ #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/media/history/media_history_keyed_service.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" namespace media_history { @@ -26,9 +25,10 @@ } MediaHistoryKeyedServiceFactory::MediaHistoryKeyedServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "MediaHistoryKeyedService", - BrowserContextDependencyManager::GetInstance()) { + // Enable incognito profiles. + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(HistoryServiceFactory::GetInstance()); } @@ -44,11 +44,4 @@ return new MediaHistoryKeyedService(Profile::FromBrowserContext(context)); } -content::BrowserContext* -MediaHistoryKeyedServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Enable incognito profiles. - return context; -} - } // namespace media_history
diff --git a/chrome/browser/media/history/media_history_keyed_service_factory.h b/chrome/browser/media/history/media_history_keyed_service_factory.h index 6d82a51..9859fe1 100644 --- a/chrome/browser/media/history/media_history_keyed_service_factory.h +++ b/chrome/browser/media/history/media_history_keyed_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_MEDIA_HISTORY_MEDIA_HISTORY_KEYED_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class KeyedService; class Profile; @@ -19,8 +19,7 @@ class MediaHistoryKeyedService; -class MediaHistoryKeyedServiceFactory - : public BrowserContextKeyedServiceFactory { +class MediaHistoryKeyedServiceFactory : public ProfileKeyedServiceFactory { public: static MediaHistoryKeyedService* GetForProfile(Profile* profile); static MediaHistoryKeyedServiceFactory* GetInstance(); @@ -41,9 +40,6 @@ KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; } // namespace media_history
diff --git a/chrome/browser/media/media_engagement_service_factory.cc b/chrome/browser/media/media_engagement_service_factory.cc index adb07e47..2c54b166 100644 --- a/chrome/browser/media/media_engagement_service_factory.cc +++ b/chrome/browser/media/media_engagement_service_factory.cc
@@ -7,9 +7,7 @@ #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/media/media_engagement_service.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" // static MediaEngagementService* MediaEngagementServiceFactory::GetForProfile( @@ -24,9 +22,9 @@ } MediaEngagementServiceFactory::MediaEngagementServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "MediaEngagementServiceFactory", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(HistoryServiceFactory::GetInstance()); DependsOn(HostContentSettingsMapFactory::GetInstance()); } @@ -37,8 +35,3 @@ content::BrowserContext* context) const { return new MediaEngagementService(Profile::FromBrowserContext(context)); } - -content::BrowserContext* MediaEngagementServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/media/media_engagement_service_factory.h b/chrome/browser/media/media_engagement_service_factory.h index 1f69e7cf..ace6eb2 100644 --- a/chrome/browser/media/media_engagement_service_factory.h +++ b/chrome/browser/media/media_engagement_service_factory.h
@@ -6,12 +6,12 @@ #define CHROME_BROWSER_MEDIA_MEDIA_ENGAGEMENT_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class MediaEngagementService; class Profile; -class MediaEngagementServiceFactory : public BrowserContextKeyedServiceFactory { +class MediaEngagementServiceFactory : public ProfileKeyedServiceFactory { public: static MediaEngagementService* GetForProfile(Profile* profile); static MediaEngagementServiceFactory* GetInstance(); @@ -29,8 +29,6 @@ // BrowserContextKeyedServiceFactory methods: KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_MEDIA_MEDIA_ENGAGEMENT_SERVICE_FACTORY_H_
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_factory.cc b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_factory.cc index 560df42..635d1b12 100644 --- a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_factory.cc +++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_factory.cc
@@ -8,7 +8,6 @@ #include "chrome/browser/media/router/chrome_media_router_factory.h" #include "chrome/browser/media/router/discovery/access_code/access_code_cast_feature.h" #include "chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/media_router/browser/media_router_factory.h" namespace media_router { @@ -50,9 +49,7 @@ } AccessCodeCastSinkServiceFactory::AccessCodeCastSinkServiceFactory() - : BrowserContextKeyedServiceFactory( - "AccessCodeSinkService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("AccessCodeSinkService") { // TODO(b/238212430): Add a browsertest case to ensure that all media router // objects are created before the ACCSS. DependsOn(media_router::ChromeMediaRouterFactory::GetInstance());
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_factory.h b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_factory.h index 7de26d2a..53ccd8d7 100644 --- a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_factory.h +++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_factory.h
@@ -7,7 +7,7 @@ #include "base/gtest_prod_util.h" #include "base/lazy_instance.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace base { template <typename Type> @@ -22,8 +22,7 @@ // A factory that lazily returns an AccessCodeCastSinkService // implementation for a given BrowserContext. -class AccessCodeCastSinkServiceFactory - : public BrowserContextKeyedServiceFactory { +class AccessCodeCastSinkServiceFactory : public ProfileKeyedServiceFactory { public: AccessCodeCastSinkServiceFactory(const AccessCodeCastSinkServiceFactory&) = delete;
diff --git a/chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service_factory.cc b/chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service_factory.cc index 66b6105..d9819c0 100644 --- a/chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service_factory.cc +++ b/chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service_factory.cc
@@ -6,7 +6,6 @@ #include "base/check.h" #include "chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" namespace webrtc_event_logging { @@ -19,9 +18,7 @@ WebRtcEventLogManagerKeyedServiceFactory:: WebRtcEventLogManagerKeyedServiceFactory() - : BrowserContextKeyedServiceFactory( - "WebRtcEventLogManagerKeyedService", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("WebRtcEventLogManagerKeyedService") {} WebRtcEventLogManagerKeyedServiceFactory:: ~WebRtcEventLogManagerKeyedServiceFactory() = default;
diff --git a/chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service_factory.h b/chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service_factory.h index 6ee3be8..5438bcd 100644 --- a/chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service_factory.h +++ b/chrome/browser/media/webrtc/webrtc_event_log_manager_keyed_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_MEDIA_WEBRTC_WEBRTC_EVENT_LOG_MANAGER_KEYED_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class KeyedService; @@ -18,7 +18,7 @@ // Produces WebRtcEventLogManagerKeyedService-s for non-incognito profiles. class WebRtcEventLogManagerKeyedServiceFactory - : public BrowserContextKeyedServiceFactory { + : public ProfileKeyedServiceFactory { public: static WebRtcEventLogManagerKeyedServiceFactory* GetInstance();
diff --git a/chrome/browser/media_galleries/media_galleries_preferences_factory.cc b/chrome/browser/media_galleries/media_galleries_preferences_factory.cc index a368dd4..2d225173 100644 --- a/chrome/browser/media_galleries/media_galleries_preferences_factory.cc +++ b/chrome/browser/media_galleries/media_galleries_preferences_factory.cc
@@ -5,9 +5,7 @@ #include "chrome/browser/media_galleries/media_galleries_preferences_factory.h" #include "chrome/browser/media_galleries/media_galleries_preferences.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" // static @@ -24,9 +22,9 @@ } MediaGalleriesPreferencesFactory::MediaGalleriesPreferencesFactory() - : BrowserContextKeyedServiceFactory( - "MediaGalleriesPreferences", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory( + "MediaGalleriesPreferences", + ProfileSelections::BuildRedirectedInIncognito()) {} MediaGalleriesPreferencesFactory::~MediaGalleriesPreferencesFactory() {} @@ -39,9 +37,3 @@ user_prefs::PrefRegistrySyncable* prefs) { MediaGalleriesPreferences::RegisterProfilePrefs(prefs); } - -content::BrowserContext* -MediaGalleriesPreferencesFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextRedirectedInIncognito(context); -}
diff --git a/chrome/browser/media_galleries/media_galleries_preferences_factory.h b/chrome/browser/media_galleries/media_galleries_preferences_factory.h index 60e7f2a2..5ac46ae 100644 --- a/chrome/browser/media_galleries/media_galleries_preferences_factory.h +++ b/chrome/browser/media_galleries/media_galleries_preferences_factory.h
@@ -6,15 +6,14 @@ #define CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_PREFERENCES_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class MediaGalleriesPreferences; class Profile; // Singleton that owns all MediaGalleriesPreferences and associates them with // Profiles. -class MediaGalleriesPreferencesFactory - : public BrowserContextKeyedServiceFactory { +class MediaGalleriesPreferencesFactory : public ProfileKeyedServiceFactory { public: // Use MediaFileSystemRegistry::GetPreferences() to get // MediaGalleriesPreferences. @@ -38,8 +37,6 @@ content::BrowserContext* profile) const override; void RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_GALLERIES_PREFERENCES_FACTORY_H_
diff --git a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.cc b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.cc index f450e1ea..1338c38 100644 --- a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.cc +++ b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.cc
@@ -5,11 +5,9 @@ #include "chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.h" #include "chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/sync/sync_service_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" namespace metrics { @@ -30,9 +28,21 @@ DesktopProfileSessionDurationsServiceFactory:: DesktopProfileSessionDurationsServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "DesktopProfileSessionDurationsService", - BrowserContextDependencyManager::GetInstance()) { + // Avoid counting session duration metrics for System and Guest + // profiles. + // + // Guest profiles are also excluded from session metrics because they + // are created when presenting the profile picker (per + // crbug.com/1150326) and this would skew the metrics. + // + // Session time in incognito is counted towards the session time in + // the regular profile. That means that for a user that is signed in + // and syncing in their regular profile and that is browsing in + // incognito profile, Chromium will record the session time as being + // signed in and syncing. + ProfileSelections::BuildRedirectedInIncognitoNonExperimental()) { DependsOn(SyncServiceFactory::GetInstance()); DependsOn(IdentityManagerFactory::GetInstance()); } @@ -45,6 +55,14 @@ content::BrowserContext* context) const { Profile* profile = Profile::FromBrowserContext(context); +// On Ash and Lacros IsGuestSession and IsRegularProfile() are not mutually +// exclusive, which breaks `ProfileKeyedServiceFactory` logic. THerefore the +// below check is still needed despite the proper filter already set. +#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) + if (profile->IsGuestSession()) + return nullptr; +#endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) + DCHECK(!profile->IsSystemProfile()); DCHECK(!profile->IsGuestSession()); @@ -57,24 +75,4 @@ profile->GetPrefs(), sync_service, identity_manager, tracker); } -content::BrowserContext* -DesktopProfileSessionDurationsServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Avoid counting session duration metrics for System and Guest profiles. - // - // Guest profiles are also excluded from session metrics because they are - // created when presenting the profile picker (per crbug.com/1150326) and this - // would skew the metrics. - Profile* profile = Profile::FromBrowserContext(context); - if (profile->IsSystemProfile() || profile->IsGuestSession()) { - return nullptr; - } - - // Session time in incognito is counted towards the session time in the - // regular profile. That means that for a user that is signed in and syncing - // in their regular profile and that is browsing in incognito profile, - // Chromium will record the session time as being signed in and syncing. - return chrome::GetBrowserContextRedirectedInIncognito(context); -} - } // namespace metrics
diff --git a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.h b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.h index 217856591..fdc6e0f 100644 --- a/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.h +++ b/chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_METRICS_DESKTOP_SESSION_DURATION_DESKTOP_PROFILE_SESSION_DURATIONS_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace metrics { @@ -17,7 +17,7 @@ // notification and cleans up the associated // DesktopProfileSessionDurationsServices. class DesktopProfileSessionDurationsServiceFactory - : public BrowserContextKeyedServiceFactory { + : public ProfileKeyedServiceFactory { public: // Creates the service if it doesn't exist already for the given // BrowserContext. @@ -41,8 +41,6 @@ // BrowserContextKeyedServiceFactory: KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; } // namespace metrics
diff --git a/chrome/browser/metrics/ukm_background_recorder_service.cc b/chrome/browser/metrics/ukm_background_recorder_service.cc index 8eff092a..e7854768 100644 --- a/chrome/browser/metrics/ukm_background_recorder_service.cc +++ b/chrome/browser/metrics/ukm_background_recorder_service.cc
@@ -7,10 +7,8 @@ #include "base/callback.h" #include "base/callback_helpers.h" #include "chrome/browser/history/history_service_factory.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "components/history/core/browser/history_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_recorder.h" #include "url/origin.h" @@ -72,9 +70,9 @@ } UkmBackgroundRecorderFactory::UkmBackgroundRecorderFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "UkmBackgroundRecorderService", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(HistoryServiceFactory::GetInstance()); } @@ -85,9 +83,4 @@ return new UkmBackgroundRecorderService(Profile::FromBrowserContext(context)); } -content::BrowserContext* UkmBackgroundRecorderFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -} - } // namespace ukm
diff --git a/chrome/browser/metrics/ukm_background_recorder_service.h b/chrome/browser/metrics/ukm_background_recorder_service.h index af9bdf7..7b20c83 100644 --- a/chrome/browser/metrics/ukm_background_recorder_service.h +++ b/chrome/browser/metrics/ukm_background_recorder_service.h
@@ -10,7 +10,7 @@ #include "base/memory/singleton.h" #include "base/memory/weak_ptr.h" #include "base/task/cancelable_task_tracker.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "components/keyed_service/core/keyed_service.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -80,7 +80,7 @@ base::WeakPtrFactory<UkmBackgroundRecorderService> weak_ptr_factory_{this}; }; -class UkmBackgroundRecorderFactory : public BrowserContextKeyedServiceFactory { +class UkmBackgroundRecorderFactory : public ProfileKeyedServiceFactory { public: static UkmBackgroundRecorderFactory* GetInstance(); static UkmBackgroundRecorderService* GetForProfile(Profile* profile); @@ -93,9 +93,6 @@ KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; } // namespace ukm
diff --git a/chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.cc b/chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.cc index 35281fd2..d880be9c 100644 --- a/chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.cc +++ b/chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.cc
@@ -6,7 +6,6 @@ #include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" namespace { @@ -30,9 +29,7 @@ } NavigationPredictorKeyedServiceFactory::NavigationPredictorKeyedServiceFactory() - : BrowserContextKeyedServiceFactory( - "NavigationPredictorKeyedService", - BrowserContextDependencyManager::GetInstance()) {} + : ProfileKeyedServiceFactory("NavigationPredictorKeyedService") {} NavigationPredictorKeyedServiceFactory:: ~NavigationPredictorKeyedServiceFactory() {}
diff --git a/chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h b/chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h index 3e7fb87..5681323 100644 --- a/chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h +++ b/chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_NAVIGATION_PREDICTOR_NAVIGATION_PREDICTOR_KEYED_SERVICE_FACTORY_H_ #include "base/lazy_instance.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace content { class BrowserContext; @@ -18,7 +18,7 @@ // LazyInstance that owns all NavigationPredictorKeyedServices and associates // them with Profiles. class NavigationPredictorKeyedServiceFactory - : public BrowserContextKeyedServiceFactory { + : public ProfileKeyedServiceFactory { public: // Gets the NavigationPredictorKeyedService instance for |profile|. static NavigationPredictorKeyedService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/nearby_sharing/nearby_sharing_service_factory.cc b/chrome/browser/nearby_sharing/nearby_sharing_service_factory.cc index d488d1d..4ee2975 100644 --- a/chrome/browser/nearby_sharing/nearby_sharing_service_factory.cc +++ b/chrome/browser/nearby_sharing/nearby_sharing_service_factory.cc
@@ -23,7 +23,6 @@ #include "chrome/browser/notifications/notification_display_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" @@ -85,9 +84,8 @@ } NearbySharingServiceFactory::NearbySharingServiceFactory() - : BrowserContextKeyedServiceFactory( - kServiceName, - BrowserContextDependencyManager::GetInstance()) { + // Nearby Sharing features are disabled in incognito. + : ProfileKeyedServiceFactory(kServiceName) { DependsOn(IdentityManagerFactory::GetInstance()); DependsOn(ash::nearby::NearbyProcessManagerFactory::GetInstance()); DependsOn(NotificationDisplayServiceFactory::GetInstance()); @@ -123,15 +121,6 @@ std::make_unique<WifiNetworkConfigurationHandler>()); } -content::BrowserContext* NearbySharingServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Nearby Sharing features are disabled in incognito. - if (context->IsOffTheRecord()) - return nullptr; - - return context; -} - void NearbySharingServiceFactory::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { RegisterNearbySharingPrefs(registry);
diff --git a/chrome/browser/nearby_sharing/nearby_sharing_service_factory.h b/chrome/browser/nearby_sharing/nearby_sharing_service_factory.h index 86128cf..cb2df45a 100644 --- a/chrome/browser/nearby_sharing/nearby_sharing_service_factory.h +++ b/chrome/browser/nearby_sharing/nearby_sharing_service_factory.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_NEARBY_SHARING_NEARBY_SHARING_SERVICE_FACTORY_H_ #define CHROME_BROWSER_NEARBY_SHARING_NEARBY_SHARING_SERVICE_FACTORY_H_ -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace base { template <typename T> @@ -19,7 +19,7 @@ class NearbySharingService; // Factory for NearbySharingService. -class NearbySharingServiceFactory : public BrowserContextKeyedServiceFactory { +class NearbySharingServiceFactory : public ProfileKeyedServiceFactory { public: // Disallow copy and assignment. NearbySharingServiceFactory(const NearbySharingServiceFactory&) = delete; @@ -50,8 +50,6 @@ // BrowserContextKeyedServiceFactory overrides: KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; void RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) override; bool ServiceIsCreatedWithBrowserContext() const override;
diff --git a/chrome/browser/net/dns_probe_service_factory.cc b/chrome/browser/net/dns_probe_service_factory.cc index ad49dd01..451a8d6 100644 --- a/chrome/browser/net/dns_probe_service_factory.cc +++ b/chrome/browser/net/dns_probe_service_factory.cc
@@ -22,8 +22,6 @@ #include "chrome/browser/net/secure_dns_config.h" #include "chrome/browser/net/stub_resolver_config_reader.h" #include "chrome/browser/net/system_network_context_manager.h" -#include "chrome/browser/profiles/incognito_helpers.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" @@ -407,9 +405,10 @@ } DnsProbeServiceFactory::DnsProbeServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "DnsProbeService", - BrowserContextDependencyManager::GetInstance()) {} + // Create separate service for incognito profiles. + ProfileSelections::BuildForRegularAndIncognito()) {} DnsProbeServiceFactory::~DnsProbeServiceFactory() {} @@ -418,12 +417,6 @@ return new DnsProbeServiceImpl(context); } -content::BrowserContext* DnsProbeServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Create separate service for incognito profiles. - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -} - // static std::unique_ptr<DnsProbeService> DnsProbeServiceFactory::CreateForTesting( const NetworkContextGetter& network_context_getter,
diff --git a/chrome/browser/net/dns_probe_service_factory.h b/chrome/browser/net/dns_probe_service_factory.h index cbd463d0..4bd6f62 100644 --- a/chrome/browser/net/dns_probe_service_factory.h +++ b/chrome/browser/net/dns_probe_service_factory.h
@@ -9,7 +9,7 @@ #include "base/memory/singleton.h" #include "base/time/tick_clock.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/mojom/host_resolver.mojom-forward.h" @@ -29,7 +29,7 @@ class DnsProbeService; -class DnsProbeServiceFactory : public BrowserContextKeyedServiceFactory { +class DnsProbeServiceFactory : public ProfileKeyedServiceFactory { public: using NetworkContextGetter = base::RepeatingCallback<network::mojom::NetworkContext*(void)>; @@ -65,8 +65,6 @@ // BrowserContextKeyedServiceFactory implementation: KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; } // namespace chrome_browser_net
diff --git a/chrome/browser/net/nss_service_factory.cc b/chrome/browser/net/nss_service_factory.cc index e1056c9..b05fb10 100644 --- a/chrome/browser/net/nss_service_factory.cc +++ b/chrome/browser/net/nss_service_factory.cc
@@ -7,7 +7,6 @@ #include "base/no_destructor.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/net/nss_service.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #if BUILDFLAG(IS_CHROMEOS_LACROS) #include "chrome/browser/lacros/cert/cert_db_initializer_factory.h" @@ -20,9 +19,10 @@ } NssServiceFactory::NssServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "NssServiceFactory", - BrowserContextDependencyManager::GetInstance()) { + // Create separate service for incognito profiles. + ProfileSelections::BuildForRegularAndIncognito()) { #if BUILDFLAG(IS_CHROMEOS_LACROS) DependsOn(CertDbInitializerFactory::GetInstance()); #endif // BUILDFLAG(IS_CHROMEOS_LACROS) @@ -39,9 +39,3 @@ content::BrowserContext* context) const { return new NssService(context); } - -content::BrowserContext* NssServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Create separate service for incognito profiles. - return context; -}
diff --git a/chrome/browser/net/nss_service_factory.h b/chrome/browser/net/nss_service_factory.h index d18adae..7562c1fc 100644 --- a/chrome/browser/net/nss_service_factory.h +++ b/chrome/browser/net/nss_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_NET_NSS_SERVICE_FACTORY_H_ #include "base/no_destructor.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" namespace content { class BrowserContext; @@ -14,7 +14,7 @@ class NssService; -class NssServiceFactory : public BrowserContextKeyedServiceFactory { +class NssServiceFactory : public ProfileKeyedServiceFactory { public: // Returns the NssService for `context`. static NssService* GetForContext(content::BrowserContext* context); @@ -29,8 +29,6 @@ // `BrowserContextKeyedServiceFactory` implementation: KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_NET_NSS_SERVICE_FACTORY_H_
diff --git a/chrome/browser/net/profile_network_context_service_factory.cc b/chrome/browser/net/profile_network_context_service_factory.cc index 3381f8e..f34b3c71 100644 --- a/chrome/browser/net/profile_network_context_service_factory.cc +++ b/chrome/browser/net/profile_network_context_service_factory.cc
@@ -10,7 +10,6 @@ #include "chrome/browser/net/profile_network_context_service.h" #include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #if BUILDFLAG(IS_CHROMEOS_ASH) #include "chrome/browser/certificate_provider/certificate_provider_service_factory.h" @@ -29,9 +28,10 @@ } ProfileNetworkContextServiceFactory::ProfileNetworkContextServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "ProfileNetworkContextService", - BrowserContextDependencyManager::GetInstance()) { + // Create separate service for incognito profiles. + ProfileSelections::BuildForRegularAndIncognito()) { #if BUILDFLAG(IS_CHROMEOS_ASH) DependsOn(chromeos::CertificateProviderServiceFactory::GetInstance()); #endif @@ -47,13 +47,6 @@ return new ProfileNetworkContextService(Profile::FromBrowserContext(profile)); } -content::BrowserContext* -ProfileNetworkContextServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - // Create separate service for incognito profiles. - return context; -} - bool ProfileNetworkContextServiceFactory::ServiceIsNULLWhileTesting() const { return true; }
diff --git a/chrome/browser/net/profile_network_context_service_factory.h b/chrome/browser/net/profile_network_context_service_factory.h index 4a07fe2..07bca48 100644 --- a/chrome/browser/net/profile_network_context_service_factory.h +++ b/chrome/browser/net/profile_network_context_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_NET_PROFILE_NETWORK_CONTEXT_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class KeyedService; class ProfileNetworkContextService; @@ -15,8 +15,7 @@ class BrowserContext; } -class ProfileNetworkContextServiceFactory - : public BrowserContextKeyedServiceFactory { +class ProfileNetworkContextServiceFactory : public ProfileKeyedServiceFactory { public: // Returns the ProfileNetworkContextService that supports NetworkContexts for // |browser_context|. @@ -41,8 +40,6 @@ // BrowserContextKeyedServiceFactory implementation: KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; bool ServiceIsNULLWhileTesting() const override; };
diff --git a/chrome/browser/new_tab_page/chrome_colors/chrome_colors_factory.cc b/chrome/browser/new_tab_page/chrome_colors/chrome_colors_factory.cc index 6b4552b..2aba219 100644 --- a/chrome/browser/new_tab_page/chrome_colors/chrome_colors_factory.cc +++ b/chrome/browser/new_tab_page/chrome_colors/chrome_colors_factory.cc
@@ -8,7 +8,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/themes/theme_service_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" namespace chrome_colors { @@ -24,9 +23,7 @@ } ChromeColorsFactory::ChromeColorsFactory() - : BrowserContextKeyedServiceFactory( - "ChromeColorsService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("ChromeColorsService") { DependsOn(ThemeServiceFactory::GetInstance()); DependsOn(TemplateURLServiceFactory::GetInstance()); }
diff --git a/chrome/browser/new_tab_page/chrome_colors/chrome_colors_factory.h b/chrome/browser/new_tab_page/chrome_colors/chrome_colors_factory.h index 582e4cf..e272418 100644 --- a/chrome/browser/new_tab_page/chrome_colors/chrome_colors_factory.h +++ b/chrome/browser/new_tab_page/chrome_colors/chrome_colors_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_NEW_TAB_PAGE_CHROME_COLORS_CHROME_COLORS_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; @@ -16,7 +16,7 @@ // Singleton that owns all ChromeColorsServices and associates them with // Profiles. -class ChromeColorsFactory : public BrowserContextKeyedServiceFactory { +class ChromeColorsFactory : public ProfileKeyedServiceFactory { public: // Returns the ChromeColorsService for |profile|. static ChromeColorsService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/new_tab_page/modules/drive/drive_service_factory.cc b/chrome/browser/new_tab_page/modules/drive/drive_service_factory.cc index dda8494..52e370f 100644 --- a/chrome/browser/new_tab_page/modules/drive/drive_service_factory.cc +++ b/chrome/browser/new_tab_page/modules/drive/drive_service_factory.cc
@@ -9,7 +9,6 @@ #include "chrome/browser/new_tab_page/modules/drive/drive_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" @@ -23,9 +22,7 @@ } DriveServiceFactory::DriveServiceFactory() - : BrowserContextKeyedServiceFactory( - "DriveService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("DriveService") { DependsOn(CookieSettingsFactory::GetInstance()); }
diff --git a/chrome/browser/new_tab_page/modules/drive/drive_service_factory.h b/chrome/browser/new_tab_page/modules/drive/drive_service_factory.h index 0f111093..3c2d8e4 100644 --- a/chrome/browser/new_tab_page/modules/drive/drive_service_factory.h +++ b/chrome/browser/new_tab_page/modules/drive/drive_service_factory.h
@@ -6,12 +6,12 @@ #define CHROME_BROWSER_NEW_TAB_PAGE_MODULES_DRIVE_DRIVE_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class DriveService; class Profile; -class DriveServiceFactory : BrowserContextKeyedServiceFactory { +class DriveServiceFactory : ProfileKeyedServiceFactory { public: static DriveService* GetForProfile(Profile* profile); static DriveServiceFactory* GetInstance();
diff --git a/chrome/browser/new_tab_page/modules/photos/photos_service_factory.cc b/chrome/browser/new_tab_page/modules/photos/photos_service_factory.cc index c380de18d..6b4f308a 100644 --- a/chrome/browser/new_tab_page/modules/photos/photos_service_factory.cc +++ b/chrome/browser/new_tab_page/modules/photos/photos_service_factory.cc
@@ -8,7 +8,6 @@ #include "chrome/browser/new_tab_page/modules/photos/photos_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" @@ -22,9 +21,7 @@ } PhotosServiceFactory::PhotosServiceFactory() - : BrowserContextKeyedServiceFactory( - "PhotosService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("PhotosService") { DependsOn(IdentityManagerFactory::GetInstance()); }
diff --git a/chrome/browser/new_tab_page/modules/photos/photos_service_factory.h b/chrome/browser/new_tab_page/modules/photos/photos_service_factory.h index 9596d6d..23a765c0 100644 --- a/chrome/browser/new_tab_page/modules/photos/photos_service_factory.h +++ b/chrome/browser/new_tab_page/modules/photos/photos_service_factory.h
@@ -6,12 +6,12 @@ #define CHROME_BROWSER_NEW_TAB_PAGE_MODULES_PHOTOS_PHOTOS_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class PhotosService; class Profile; -class PhotosServiceFactory : BrowserContextKeyedServiceFactory { +class PhotosServiceFactory : ProfileKeyedServiceFactory { public: static PhotosService* GetForProfile(Profile* profile); static PhotosServiceFactory* GetInstance();
diff --git a/chrome/browser/new_tab_page/modules/task_module/task_module_service_factory.cc b/chrome/browser/new_tab_page/modules/task_module/task_module_service_factory.cc index e85fc93..be1da68 100644 --- a/chrome/browser/new_tab_page/modules/task_module/task_module_service_factory.cc +++ b/chrome/browser/new_tab_page/modules/task_module/task_module_service_factory.cc
@@ -8,7 +8,6 @@ #include "chrome/browser/content_settings/cookie_settings_factory.h" #include "chrome/browser/new_tab_page/modules/task_module/task_module_service.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" @@ -24,9 +23,7 @@ } TaskModuleServiceFactory::TaskModuleServiceFactory() - : BrowserContextKeyedServiceFactory( - "TaskModuleService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("TaskModuleService") { DependsOn(CookieSettingsFactory::GetInstance()); }
diff --git a/chrome/browser/new_tab_page/modules/task_module/task_module_service_factory.h b/chrome/browser/new_tab_page/modules/task_module/task_module_service_factory.h index 42bf1f4..9a8cd01 100644 --- a/chrome/browser/new_tab_page/modules/task_module/task_module_service_factory.h +++ b/chrome/browser/new_tab_page/modules/task_module/task_module_service_factory.h
@@ -6,13 +6,13 @@ #define CHROME_BROWSER_NEW_TAB_PAGE_MODULES_TASK_MODULE_TASK_MODULE_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class Profile; class TaskModuleService; // Factory to access the task module service for the current profile. -class TaskModuleServiceFactory : public BrowserContextKeyedServiceFactory { +class TaskModuleServiceFactory : public ProfileKeyedServiceFactory { public: static TaskModuleService* GetForProfile(Profile* profile); static TaskModuleServiceFactory* GetInstance();
diff --git a/chrome/browser/new_tab_page/one_google_bar/one_google_bar_service_factory.cc b/chrome/browser/new_tab_page/one_google_bar/one_google_bar_service_factory.cc index 00386388..cc3b7db 100644 --- a/chrome/browser/new_tab_page/one_google_bar/one_google_bar_service_factory.cc +++ b/chrome/browser/new_tab_page/one_google_bar/one_google_bar_service_factory.cc
@@ -16,7 +16,6 @@ #include "chrome/browser/signin/account_consistency_mode_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "components/content_settings/core/browser/cookie_settings.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/signin/core/browser/cookie_settings_util.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" @@ -35,9 +34,7 @@ } OneGoogleBarServiceFactory::OneGoogleBarServiceFactory() - : BrowserContextKeyedServiceFactory( - "OneGoogleBarService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("OneGoogleBarService") { DependsOn(CookieSettingsFactory::GetInstance()); DependsOn(IdentityManagerFactory::GetInstance()); }
diff --git a/chrome/browser/new_tab_page/one_google_bar/one_google_bar_service_factory.h b/chrome/browser/new_tab_page/one_google_bar/one_google_bar_service_factory.h index 51656c95..d1b4874 100644 --- a/chrome/browser/new_tab_page/one_google_bar/one_google_bar_service_factory.h +++ b/chrome/browser/new_tab_page/one_google_bar/one_google_bar_service_factory.h
@@ -6,12 +6,12 @@ #define CHROME_BROWSER_NEW_TAB_PAGE_ONE_GOOGLE_BAR_ONE_GOOGLE_BAR_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class OneGoogleBarService; class Profile; -class OneGoogleBarServiceFactory : public BrowserContextKeyedServiceFactory { +class OneGoogleBarServiceFactory : public ProfileKeyedServiceFactory { public: // Returns the OneGoogleBarService for |profile|. static OneGoogleBarService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/new_tab_page/promos/promo_service_factory.cc b/chrome/browser/new_tab_page/promos/promo_service_factory.cc index d212eaf..76ba6ba 100644 --- a/chrome/browser/new_tab_page/promos/promo_service_factory.cc +++ b/chrome/browser/new_tab_page/promos/promo_service_factory.cc
@@ -14,7 +14,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/account_consistency_mode_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -31,9 +30,7 @@ } PromoServiceFactory::PromoServiceFactory() - : BrowserContextKeyedServiceFactory( - "PromoService", - BrowserContextDependencyManager::GetInstance()) { + : ProfileKeyedServiceFactory("PromoService") { DependsOn(CookieSettingsFactory::GetInstance()); }
diff --git a/chrome/browser/new_tab_page/promos/promo_service_factory.h b/chrome/browser/new_tab_page/promos/promo_service_factory.h index 655d96d..2f2b72f19 100644 --- a/chrome/browser/new_tab_page/promos/promo_service_factory.h +++ b/chrome/browser/new_tab_page/promos/promo_service_factory.h
@@ -6,12 +6,12 @@ #define CHROME_BROWSER_NEW_TAB_PAGE_PROMOS_PROMO_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class PromoService; class Profile; -class PromoServiceFactory : public BrowserContextKeyedServiceFactory { +class PromoServiceFactory : public ProfileKeyedServiceFactory { public: // Returns the PromoService for |profile|. static PromoService* GetForProfile(Profile* profile);
diff --git a/chrome/browser/notifications/metrics/notification_metrics_logger_factory.cc b/chrome/browser/notifications/metrics/notification_metrics_logger_factory.cc index 67a2071c..961edf9 100644 --- a/chrome/browser/notifications/metrics/notification_metrics_logger_factory.cc +++ b/chrome/browser/notifications/metrics/notification_metrics_logger_factory.cc
@@ -5,8 +5,6 @@ #include "chrome/browser/notifications/metrics/notification_metrics_logger_factory.h" #include "chrome/browser/notifications/metrics/notification_metrics_logger.h" -#include "chrome/browser/profiles/incognito_helpers.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" // static NotificationMetricsLogger* @@ -24,17 +22,11 @@ } NotificationMetricsLoggerFactory::NotificationMetricsLoggerFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "NotificationMetricsLogger", - BrowserContextDependencyManager::GetInstance()) {} + ProfileSelections::BuildRedirectedInIncognito()) {} KeyedService* NotificationMetricsLoggerFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { return new NotificationMetricsLogger(); } - -content::BrowserContext* -NotificationMetricsLoggerFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextRedirectedInIncognito(context); -}
diff --git a/chrome/browser/notifications/metrics/notification_metrics_logger_factory.h b/chrome/browser/notifications/metrics/notification_metrics_logger_factory.h index 8c71f8e..c1e98740 100644 --- a/chrome/browser/notifications/metrics/notification_metrics_logger_factory.h +++ b/chrome/browser/notifications/metrics/notification_metrics_logger_factory.h
@@ -7,13 +7,12 @@ #include "base/memory/singleton.h" #include "chrome/browser/notifications/metrics/notification_metrics_logger.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "content/public/browser/browser_context.h" class NotificationMetricsLogger; -class NotificationMetricsLoggerFactory - : public BrowserContextKeyedServiceFactory { +class NotificationMetricsLoggerFactory : public ProfileKeyedServiceFactory { public: static NotificationMetricsLogger* GetForBrowserContext( content::BrowserContext* browser_context); @@ -32,8 +31,6 @@ // BrowserContextKeyedServiceFactory implementation. KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_NOTIFICATIONS_METRICS_NOTIFICATION_METRICS_LOGGER_FACTORY_H_
diff --git a/chrome/browser/notifications/notification_display_service_factory.cc b/chrome/browser/notifications/notification_display_service_factory.cc index 175d3a8b..811e98d 100644 --- a/chrome/browser/notifications/notification_display_service_factory.cc +++ b/chrome/browser/notifications/notification_display_service_factory.cc
@@ -9,10 +9,8 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/notifications/notification_display_service_impl.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/buildflags.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" #if BUILDFLAG(IS_WIN) #include "base/win/windows_version.h" @@ -32,9 +30,9 @@ } NotificationDisplayServiceFactory::NotificationDisplayServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "NotificationDisplayService", - BrowserContextDependencyManager::GetInstance()) {} + ProfileSelections::BuildForRegularAndIncognito()) {} KeyedService* NotificationDisplayServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { @@ -42,9 +40,3 @@ return new NotificationDisplayServiceImpl( Profile::FromBrowserContext(context)); } - -content::BrowserContext* -NotificationDisplayServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/notifications/notification_display_service_factory.h b/chrome/browser/notifications/notification_display_service_factory.h index a2c70c13..93494cf 100644 --- a/chrome/browser/notifications/notification_display_service_factory.h +++ b/chrome/browser/notifications/notification_display_service_factory.h
@@ -6,13 +6,12 @@ #define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_DISPLAY_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class NotificationDisplayService; class Profile; -class NotificationDisplayServiceFactory - : public BrowserContextKeyedServiceFactory { +class NotificationDisplayServiceFactory : public ProfileKeyedServiceFactory { public: NotificationDisplayServiceFactory(const NotificationDisplayServiceFactory&) = delete; @@ -29,8 +28,6 @@ // BrowserContextKeyedServiceFactory implementation. KeyedService* BuildServiceInstanceFor( content::BrowserContext* context) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_DISPLAY_SERVICE_FACTORY_H_
diff --git a/chrome/browser/notifications/notifier_state_tracker_factory.cc b/chrome/browser/notifications/notifier_state_tracker_factory.cc index 35915ec..7400edb 100644 --- a/chrome/browser/notifications/notifier_state_tracker_factory.cc +++ b/chrome/browser/notifications/notifier_state_tracker_factory.cc
@@ -6,9 +6,7 @@ #include "chrome/browser/notifications/notifier_state_tracker.h" #include "chrome/browser/permissions/permission_manager_factory.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" // static NotifierStateTracker* @@ -24,9 +22,9 @@ } NotifierStateTrackerFactory::NotifierStateTrackerFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "NotifierStateTracker", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(PermissionManagerFactory::GetInstance()); } @@ -36,9 +34,3 @@ content::BrowserContext* profile) const { return new NotifierStateTracker(static_cast<Profile*>(profile)); } - -content::BrowserContext* -NotifierStateTrackerFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/notifications/notifier_state_tracker_factory.h b/chrome/browser/notifications/notifier_state_tracker_factory.h index fd018a3..0746fcce 100644 --- a/chrome/browser/notifications/notifier_state_tracker_factory.h +++ b/chrome/browser/notifications/notifier_state_tracker_factory.h
@@ -6,12 +6,12 @@ #define CHROME_BROWSER_NOTIFICATIONS_NOTIFIER_STATE_TRACKER_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class NotifierStateTracker; class Profile; -class NotifierStateTrackerFactory : public BrowserContextKeyedServiceFactory { +class NotifierStateTrackerFactory : public ProfileKeyedServiceFactory { public: static NotifierStateTracker* GetForProfile(Profile* profile); static NotifierStateTrackerFactory* GetInstance(); @@ -28,8 +28,6 @@ // BrowserContextKeyedServiceFactory implementation. KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFIER_STATE_TRACKER_FACTORY_H_
diff --git a/chrome/browser/notifications/platform_notification_service_factory.cc b/chrome/browser/notifications/platform_notification_service_factory.cc index decc570..f1343182 100644 --- a/chrome/browser/notifications/platform_notification_service_factory.cc +++ b/chrome/browser/notifications/platform_notification_service_factory.cc
@@ -12,9 +12,7 @@ #include "chrome/browser/notifications/metrics/notification_metrics_logger_factory.h" #include "chrome/browser/notifications/notification_display_service_factory.h" #include "chrome/browser/notifications/platform_notification_service_impl.h" -#include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" // static PlatformNotificationServiceImpl* @@ -30,9 +28,9 @@ } PlatformNotificationServiceFactory::PlatformNotificationServiceFactory() - : BrowserContextKeyedServiceFactory( + : ProfileKeyedServiceFactory( "PlatformNotificationService", - BrowserContextDependencyManager::GetInstance()) { + ProfileSelections::BuildForRegularAndIncognito()) { DependsOn(HostContentSettingsMapFactory::GetInstance()); DependsOn(NotificationDisplayServiceFactory::GetInstance()); DependsOn(NotificationMetricsLoggerFactory::GetInstance()); @@ -44,9 +42,3 @@ return new PlatformNotificationServiceImpl( Profile::FromBrowserContext(context)); } - -content::BrowserContext* -PlatformNotificationServiceFactory::GetBrowserContextToUse( - content::BrowserContext* context) const { - return chrome::GetBrowserContextOwnInstanceInIncognito(context); -}
diff --git a/chrome/browser/notifications/platform_notification_service_factory.h b/chrome/browser/notifications/platform_notification_service_factory.h index 9db39ad3..cead474 100644 --- a/chrome/browser/notifications/platform_notification_service_factory.h +++ b/chrome/browser/notifications/platform_notification_service_factory.h
@@ -6,13 +6,12 @@ #define CHROME_BROWSER_NOTIFICATIONS_PLATFORM_NOTIFICATION_SERVICE_FACTORY_H_ #include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" class PlatformNotificationServiceImpl; class Profile; -class PlatformNotificationServiceFactory - : public BrowserContextKeyedServiceFactory { +class PlatformNotificationServiceFactory : public ProfileKeyedServiceFactory { public: PlatformNotificationServiceFactory( const PlatformNotificationServiceFactory&) = delete; @@ -31,8 +30,6 @@ // BrowserContextKeyedServiceFactory implementation. KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; - content::BrowserContext* GetBrowserContextToUse( - content::BrowserContext* context) const override; }; #endif // CHROME_BROWSER_NOTIFICATIONS_PLATFORM_NOTIFICATION_SERVICE_FACTORY_H_
diff --git a/chrome/browser/offline_pages/android/offline_page_auto_fetcher_service_factory.cc b/chrome/browser/offline_pages/android/offline_page_auto_fetcher_service_factory.cc index c8d658b..238690b 100644 --- a/chrome/browser/offline_pages/android/offline_page_auto_fetcher_service_factory.cc +++ b/chrome/browser/offline_pages/android/offline_page_auto_fetcher_service_factory.cc
@@ -11,7 +11,6 @@ #include "chrome/browser/offline_pages/android/offline_page_auto_fetcher_service.h" #include "chrome/browser/offline_pages/offline_page_model_factory.h" #include "chrome/browser/offline_pages/request_coordinator_factory.h" -#include "components/keyed_service/content/browser_context_dependency_manager.h" namespace offline_pages { @@ -45,9 +44,7 @@ } OfflinePageAutoFetcherServiceFactory::OfflinePageAutoFetcherServiceFactory() - : BrowserContextKeyedServiceFactory( - "OfflinePageAutoFetcherService", - BrowserContextDependencyManager::GetInstance()), + : ProfileKeyedServiceFactory("OfflinePageAutoFetcherService"), service_delegate_( std::make_unique< OfflinePageAutoFetcherServiceFactory::ServiceDelegate>()) {
diff --git a/chrome/browser/offline_pages/android/offline_page_auto_fetcher_service_factory.h b/chrome/browser/offline_pages/android/offline_page_auto_fetcher_service_factory.h index 1a99a56..7076f2bd 100644 --- a/chrome/browser/offline_pages/android/offline_page_auto_fetcher_service_factory.h +++ b/chrome/browser/offline_pages/android/offline_page_auto_fetcher_service_factory.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_OFFLINE_PAGES_ANDROID_OFFLINE_PAGE_AUTO_FETCHER_SERVICE_FACTORY_H_ #include <memory> -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" #include "content/public/browser/browser_context.h" namespace base { @@ -18,8 +18,7 @@ class OfflinePageAutoFetcherService; // A factory to create one unique OfflinePageAutoFetcherService. -class OfflinePageAutoFetcherServiceFactory - : public BrowserContextKeyedServiceFactory { +class OfflinePageAutoFetcherServiceFactory : public ProfileKeyedServiceFactory { public: static OfflinePageAutoFetcherServiceFactory* GetInstance(); static OfflinePageAutoFetcherService* GetForBrowserContext(
diff --git a/chrome/browser/page_info/about_this_site_side_panel_throttle.h b/chrome/browser/page_info/about_this_site_side_panel_throttle.h index d7e931a..936db009 100644 --- a/chrome/browser/page_info/about_this_site_side_panel_throttle.h +++ b/chrome/browser/page_info/about_this_site_side_panel_throttle.h
@@ -23,7 +23,8 @@ // |MaybeCreateAboutThisSiteThrottleFor| will check if this UserData is present // and if it is present, intercepts navigations if |IsNavigationAllowed| // and opens them using |OpenUrlInBrowser| instead. -struct AboutThisSiteWebContentsUserData : public base::SupportsUserData::Data { +class AboutThisSiteWebContentsUserData : public base::SupportsUserData::Data { + public: class Delegate { public: virtual void OpenUrlInBrowser(const content::OpenURLParams& params) = 0;
diff --git a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.cc index 58efadaa..aeae51f 100644 --- a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.cc
@@ -13,6 +13,7 @@ #include "base/strings/string_util.h" #include "base/time/time.h" #include "components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h" +#include "components/page_load_metrics/browser/page_load_metrics_observer_delegate.h" #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "components/page_load_metrics/common/page_load_timing.h" #include "components/page_load_metrics/common/page_visit_final_status.h" @@ -119,6 +120,12 @@ } // namespace +bool IsInPrerenderingBeforeActivation( + const page_load_metrics::PageLoadMetricsObserverDelegate& delegate) { + return delegate.GetPrerenderingState() == + page_load_metrics::PrerenderingState::kInPrerendering; +} + AMPPageLoadMetricsObserver::AMPPageLoadMetricsObserver() {} AMPPageLoadMetricsObserver::~AMPPageLoadMetricsObserver() {} @@ -141,6 +148,23 @@ } page_load_metrics::PageLoadMetricsObserver::ObservePolicy +AMPPageLoadMetricsObserver::OnPrerenderStart( + content::NavigationHandle* navigation_handle, + const GURL& currently_committed_url) { + // Note that this class is interested in the following sequence: + // + // user action + // -> subframe navigation (can be omitted) + // -> mainframe same-site navigation + // + // Recorded metrics are, for example, the difference of page load timing of + // those navigations. So, they don't depend on the first mainframe navigation + // and we don't need correction of page load timings. If prerendered, we only + // postpone initialization and recording to activation. + return CONTINUE_OBSERVING; +} + +page_load_metrics::PageLoadMetricsObserver::ObservePolicy AMPPageLoadMetricsObserver::OnCommit( content::NavigationHandle* navigation_handle) { current_url_ = navigation_handle->GetURL(); @@ -148,6 +172,20 @@ return CONTINUE_OBSERVING; } +void AMPPageLoadMetricsObserver::DidActivatePrerenderedPage( + content::NavigationHandle* navigation_handle) { + // Executes maybe postponed actions. + + if (current_main_frame_nav_info_) { + DCHECK_EQ(current_main_frame_nav_info_->ukm_source_id, + ukm::kInvalidSourceId); + current_main_frame_nav_info_->ukm_source_id = ukm::ConvertToSourceId( + navigation_handle->GetNavigationId(), ukm::SourceIdType::NAVIGATION_ID); + } + + MaybeRecordLoadingBehaviorObserved(); +} + void AMPPageLoadMetricsObserver::OnCommitSameDocumentNavigation( content::NavigationHandle* navigation_handle) { const GURL url = GetCanonicalizedSameDocumentUrl(navigation_handle->GetURL()); @@ -157,9 +195,12 @@ return; current_url_ = url; - // We're transitioning to a new URL, so record metrics for the previous AMP - // document, if any. - MaybeRecordAmpDocumentMetrics(); + if (!GetDelegate().IsInPrerenderingBeforeActivationStart()) { + // We're transitioning to a new URL, so record metrics for the previous AMP + // document, if any. + MaybeRecordAmpDocumentMetrics(); + } + current_main_frame_nav_info_ = nullptr; ProcessMainFrameNavigation(navigation_handle); } @@ -207,7 +248,11 @@ content::RenderFrameHost* rfh) { if (current_main_frame_nav_info_ && current_main_frame_nav_info_->subframe_rfh == rfh) { - MaybeRecordAmpDocumentMetrics(); + // We shouldn't record metrics if the page is in prerendering. + // Actually, this skip should not affect metrics because discarding subframe + // rendering AMP page may be triggered by user action. + if (!GetDelegate().IsInPrerenderingBeforeActivationStart()) + MaybeRecordAmpDocumentMetrics(); current_main_frame_nav_info_->subframe_rfh = nullptr; } amp_subframe_info_.erase(rfh); @@ -285,6 +330,9 @@ void AMPPageLoadMetricsObserver::OnComplete( const page_load_metrics::mojom::PageLoadTiming& timing) { + if (GetDelegate().IsInPrerenderingBeforeActivationStart()) + return; + MaybeRecordAmpDocumentMetrics(); current_main_frame_nav_info_ = nullptr; page_load_metrics::RecordPageVisitFinalStatusForTiming( @@ -305,18 +353,31 @@ } } + // If in prerendering, postpone initialization of ukm_source_id. + // + // Note for else case: We can't use `GetDelegate().GetPageUkmSourceId()` here + // because this path is also used in OnCommitSameDocumentNavigtion and URLs + // may be different. We'll take information of the latter navigation, which + // corresponds to a subframe that displays actual contents of the AMP page if + // IsLikelyAmpCacheUrl holds. For example, see + // AMPPageLoadMetricsObserverTest.SubFrameMultipleFrames. + const ukm::SourceId ukm_source_id = + IsInPrerenderingBeforeActivation(GetDelegate()) + ? ukm::kInvalidSourceId + : ukm::ConvertToSourceId(navigation_handle->GetNavigationId(), + ukm::SourceIdType::NAVIGATION_ID); current_main_frame_nav_info_ = base::WrapUnique(new MainFrameNavigationInfo{ - navigation_handle->GetURL(), - ukm::ConvertToSourceId(navigation_handle->GetNavigationId(), - ukm::SourceIdType::NAVIGATION_ID), - subframe_rfh, navigation_handle->NavigationStart(), + navigation_handle->GetURL(), ukm_source_id, subframe_rfh, + navigation_handle->NavigationStart(), navigation_handle->IsSameDocument()}); } void AMPPageLoadMetricsObserver::OnLoadingBehaviorObserved( content::RenderFrameHost* subframe_rfh, int behavior_flags) { - RecordLoadingBehaviorObserved(); + // Postpone recording after activation if prerendered. + if (!IsInPrerenderingBeforeActivation(GetDelegate())) + MaybeRecordLoadingBehaviorObserved(); if (subframe_rfh == nullptr) return; @@ -345,7 +406,12 @@ } } -void AMPPageLoadMetricsObserver::RecordLoadingBehaviorObserved() { +void AMPPageLoadMetricsObserver::MaybeRecordLoadingBehaviorObserved() { + // This can be postponed after prerender activation with metrics unmodified + // because behavior flags are accumulated by PageLeadMetricsUpdateDispatcher. + + DCHECK(!IsInPrerenderingBeforeActivation(GetDelegate())); + ukm::builders::AmpPageLoad builder(GetDelegate().GetPageUkmSourceId()); bool should_record = false; if (!observed_amp_main_frame_ && @@ -368,6 +434,8 @@ } void AMPPageLoadMetricsObserver::MaybeRecordAmpDocumentMetrics() { + DCHECK(!GetDelegate().IsInPrerenderingBeforeActivationStart()); + if (current_main_frame_nav_info_ == nullptr || current_main_frame_nav_info_->subframe_rfh == nullptr) return; @@ -583,6 +651,8 @@ const page_load_metrics::NormalizedResponsivenessMetrics& normalized_responsiveness_metrics, ukm::builders::AmpPageLoad& builder) { + DCHECK(!GetDelegate().IsInPrerenderingBeforeActivationStart()); + if (!normalized_responsiveness_metrics.num_user_interactions) return; @@ -669,6 +739,8 @@ void AMPPageLoadMetricsObserver::RecordMobileFriendliness( ukm::builders::AmpPageLoad& builder) { + DCHECK(!GetDelegate().IsInPrerenderingBeforeActivationStart()); + auto it = amp_subframe_info_.find(current_main_frame_nav_info_->subframe_rfh); if (it == amp_subframe_info_.end()) return;
diff --git a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.h index cb2dc22..9cbbe5d4 100644 --- a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.h
@@ -65,7 +65,11 @@ ObservePolicy OnFencedFramesStart( content::NavigationHandle* navigation_handle, const GURL& currently_committed_url) override; + ObservePolicy OnPrerenderStart(content::NavigationHandle* navigation_handle, + const GURL& currently_committed_url) override; ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override; + void DidActivatePrerenderedPage( + content::NavigationHandle* navigation_handle) override; void OnCommitSameDocumentNavigation( content::NavigationHandle* navigation_handle) override; void OnDidFinishSubFrameNavigation( @@ -136,7 +140,7 @@ bool amp_document_loaded = false; }; - void RecordLoadingBehaviorObserved(); + void MaybeRecordLoadingBehaviorObserved(); void RecordNormalizedResponsivenessMetrics( const page_load_metrics::NormalizedResponsivenessMetrics& normalized_responsiveness_metrics,
diff --git a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer_browsertest.cc index 1220b2c..383d9d64 100644 --- a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer_browsertest.cc +++ b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer_browsertest.cc
@@ -15,6 +15,7 @@ #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/fenced_frame_test_util.h" +#include "content/public/test/prerender_test_util.h" #include "content/public/test/test_utils.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "services/metrics/public/cpp/ukm_builders.h" @@ -25,9 +26,13 @@ using UkmEntry = ukm::builders::AmpPageLoad; -class AmpPageLoadMetricsBrowserTest : public InProcessBrowserTest { +class AmpPageLoadMetricsBrowserTest : public InProcessBrowserTest, + public testing::WithParamInterface<bool> { public: - AmpPageLoadMetricsBrowserTest() {} + AmpPageLoadMetricsBrowserTest() + : prerender_helper_( + base::BindRepeating(&AmpPageLoadMetricsBrowserTest::GetWebContents, + base::Unretained(this))) {} AmpPageLoadMetricsBrowserTest(const AmpPageLoadMetricsBrowserTest&) = delete; AmpPageLoadMetricsBrowserTest& operator=( @@ -35,11 +40,20 @@ ~AmpPageLoadMetricsBrowserTest() override {} + void SetUp() override { + prerender_helper_.SetUp(embedded_test_server()); + InProcessBrowserTest::SetUp(); + } + void PreRunTestOnMainThread() override { InProcessBrowserTest::PreRunTestOnMainThread(); test_ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>(); } + void SetUpOnMainThread() override { + StartHttpsServer(net::EmbeddedTestServer::CERT_OK); + } + protected: void StartHttpsServer(net::EmbeddedTestServer::ServerCertificate cert) { https_test_server_ = std::make_unique<net::EmbeddedTestServer>( @@ -48,6 +62,16 @@ https_test_server_->ServeFilesFromSourceDirectory(GetChromeTestDataDir()); ASSERT_TRUE(https_test_server_->Start()); } + + void NavigateToURL(const GURL& url) { + if (WithPrerendering()) { + prerender_helper_.AddPrerender(url); + prerender_helper_.NavigatePrimaryPage(url); + } else { + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + } + } + void ExpectMetricValueForUrl(const GURL& url, const char* metric_name, const int expected_value) { @@ -92,45 +116,59 @@ return browser()->tab_strip_model()->GetActiveWebContents(); } + bool WithPrerendering() { return GetParam(); } + private: std::unique_ptr<ukm::TestAutoSetUkmRecorder> test_ukm_recorder_; std::unique_ptr<net::EmbeddedTestServer> https_test_server_; + content::test::PrerenderTestHelper prerender_helper_; }; -IN_PROC_BROWSER_TEST_F(AmpPageLoadMetricsBrowserTest, NoAmp) { +INSTANTIATE_TEST_SUITE_P(All, AmpPageLoadMetricsBrowserTest, testing::Bool()); + +IN_PROC_BROWSER_TEST_P(AmpPageLoadMetricsBrowserTest, NoAmp) { + // Navigate to an empty page to inject SpeculationRules if prerendered case. + GURL empty_url = https_test_server()->GetURL("/empty.html"); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), empty_url)); + page_load_metrics::PageLoadMetricsTestWaiter waiter(GetWebContents()); waiter.AddPageExpectation( page_load_metrics::PageLoadMetricsTestWaiter::TimingField::kLoadEvent); - StartHttpsServer(net::EmbeddedTestServer::CERT_OK); GURL url = https_test_server()->GetURL("/english_page.html"); - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + NavigateToURL(url); waiter.Wait(); CloseAllTabs(); ExpectMetricCountForUrl(url, "MainFrameAmpPageLoad", 0); ExpectMetricCountForUrl(url, "SubFrameAmpPageLoad", 0); } -IN_PROC_BROWSER_TEST_F(AmpPageLoadMetricsBrowserTest, AmpMainFrame) { +IN_PROC_BROWSER_TEST_P(AmpPageLoadMetricsBrowserTest, AmpMainFrame) { + // Navigate to an empty page to inject SpeculationRules if prerendered case. + GURL empty_url = https_test_server()->GetURL("/empty.html"); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), empty_url)); + page_load_metrics::PageLoadMetricsTestWaiter waiter(GetWebContents()); waiter.AddPageExpectation(page_load_metrics::PageLoadMetricsTestWaiter:: TimingField::kFirstContentfulPaint); - StartHttpsServer(net::EmbeddedTestServer::CERT_OK); GURL url = https_test_server()->GetURL("/page_load_metrics/amp_basic.html"); - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + NavigateToURL(url); waiter.Wait(); CloseAllTabs(); ExpectMetricValueForUrl(url, "MainFrameAmpPageLoad", 1); ExpectMetricCountForUrl(url, "SubFrameAmpPageLoad", 0); } -IN_PROC_BROWSER_TEST_F(AmpPageLoadMetricsBrowserTest, AmpSubframe) { +IN_PROC_BROWSER_TEST_P(AmpPageLoadMetricsBrowserTest, AmpSubframe) { + // Navigate to an empty page to inject SpeculationRules if prerendered case. + GURL empty_url = https_test_server()->GetURL("/empty.html"); + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), empty_url)); + page_load_metrics::PageLoadMetricsTestWaiter waiter(GetWebContents()); waiter.AddPageExpectation(page_load_metrics::PageLoadMetricsTestWaiter:: TimingField::kFirstContentfulPaint); - StartHttpsServer(net::EmbeddedTestServer::CERT_OK); GURL url = https_test_server()->GetURL("/page_load_metrics/amp_reader_mock.html"); - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); + NavigateToURL(url); waiter.Wait(); CloseAllTabs(); ExpectMetricCountForUrl(url, "MainFrameAmpPageLoad", 0); @@ -156,9 +194,10 @@ content::test::FencedFrameTestHelper fenced_frame_helper_; }; +// Currently, prerendering doesn't support FencedFrames. +// TODO(crbug.com/1335481): Add a test with prerendering. IN_PROC_BROWSER_TEST_F(AmpPageLoadMetricsFencedFrameBrowserTest, AmpFencedFrame) { - StartHttpsServer(net::EmbeddedTestServer::CERT_OK); GURL url = https_test_server()->GetURL("/english_page.html"); ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
diff --git a/chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.cc index f9bc23c7..d797a8a 100644 --- a/chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.cc
@@ -56,6 +56,14 @@ return STOP_OBSERVING; } +page_load_metrics::PageLoadMetricsObserver::ObservePolicy +MultiTabLoadingPageLoadMetricsObserver::OnPrerenderStart( + content::NavigationHandle* navigation_handle, + const GURL& currently_committed_url) { + // This class will be deprecated. No need to support. + return STOP_OBSERVING; +} + #define RECORD_HISTOGRAMS(suffix, sample) \ do { \ base::TimeDelta sample_value(sample); \
diff --git a/chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.h index 0e0af3ed..1a11ae9 100644 --- a/chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/multi_tab_loading_page_load_metrics_observer.h
@@ -42,6 +42,9 @@ page_load_metrics::PageLoadMetricsObserver::ObservePolicy OnFencedFramesStart( content::NavigationHandle* navigation_handle, const GURL& currently_committed_url) override; + page_load_metrics::PageLoadMetricsObserver::ObservePolicy OnPrerenderStart( + content::NavigationHandle* navigation_handle, + const GURL& currently_committed_url) override; void OnFirstContentfulPaintInPage( const page_load_metrics::mojom::PageLoadTiming& timing) override; void OnFirstMeaningfulPaintInMainFrameDocument(
diff --git a/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc b/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc index 1e34646..8b9bbe7 100644 --- a/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc +++ b/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc
@@ -198,6 +198,13 @@ performance_manager::features::kBatterySaverModeAvailable)) { profile_discard_opt_out_list_helper_ = std::make_unique< performance_manager::user_tuning::ProfileDiscardOptOutListHelper>(); + // Create the UserPerformanceTuningManager here so that early UI code can + // register observers, but only start it in PreMainMessageLoopRun because it + // requires the HostFrameSinkManager to exist. + user_performance_tuning_manager_ = std::unique_ptr< + performance_manager::user_tuning::UserPerformanceTuningManager>( + new performance_manager::user_tuning::UserPerformanceTuningManager( + g_browser_process->local_state())); } #endif @@ -215,16 +222,15 @@ void ChromeBrowserMainExtraPartsPerformanceManager::PreMainMessageLoopRun() { #if !BUILDFLAG(IS_ANDROID) - // This object requires the host frame sink manager to exist, which is created - // after all the extra parts have run their PostCreateThreads. if (base::FeatureList::IsEnabled( performance_manager::features::kHighEfficiencyModeAvailable) || base::FeatureList::IsEnabled( performance_manager::features::kBatterySaverModeAvailable)) { - user_performance_tuning_manager_ = std::unique_ptr< - performance_manager::user_tuning::UserPerformanceTuningManager>( - new performance_manager::user_tuning::UserPerformanceTuningManager( - g_browser_process->local_state())); + // This object requires the host frame sink manager to exist, which is + // created after all the extra parts have run their PostCreateThreads. + performance_manager::user_tuning::UserPerformanceTuningManager:: + GetInstance() + ->Start(); // This object is created by the metrics service before threads, but it // needs the UserPerformanceTuningManager to exist. At this point it's
diff --git a/chrome/browser/performance_manager/metrics/metrics_provider_unittest.cc b/chrome/browser/performance_manager/metrics/metrics_provider_unittest.cc index eb321f1..f79f59e 100644 --- a/chrome/browser/performance_manager/metrics/metrics_provider_unittest.cc +++ b/chrome/browser/performance_manager/metrics/metrics_provider_unittest.cc
@@ -69,6 +69,7 @@ std::make_unique<performance_manager::FakeFrameThrottlingDelegate>( &throttling_enabled_), std::make_unique<FakeHighEfficiencyModeToggleDelegate>())); + manager_->Start(); provider_.reset(new performance_manager::MetricsProvider(local_state())); }
diff --git a/chrome/browser/performance_manager/policies/oom_score_policy_lacros.cc b/chrome/browser/performance_manager/policies/oom_score_policy_lacros.cc index a2a4db6..01cfb8d 100644 --- a/chrome/browser/performance_manager/policies/oom_score_policy_lacros.cc +++ b/chrome/browser/performance_manager/policies/oom_score_policy_lacros.cc
@@ -110,10 +110,11 @@ std::set<base::ProcessId> pid_set; for (const auto& candidate : candidates) { - base::ProcessId pid = candidate.page_node() - ->GetMainFrameNode() - ->GetProcessNode() - ->GetProcessId(); + const FrameNode* main_frame_node = + candidate.page_node()->GetMainFrameNode(); + if (!main_frame_node) + continue; + base::ProcessId pid = main_frame_node->GetProcessNode()->GetProcessId(); if (pid == base::kNullProcessId || pid_set.find(pid) != pid_set.end()) continue;
diff --git a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.cc b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.cc index a4c51fd..d33c2b0f 100644 --- a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.cc +++ b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.cc
@@ -106,6 +106,10 @@ g_user_performance_tuning_manager = this; pref_change_registrar_.Init(local_state); +} + +void UserPerformanceTuningManager::Start() { + was_started_ = true; if (base::FeatureList::IsEnabled( performance_manager::features::kHighEfficiencyModeAvailable)) { @@ -140,6 +144,8 @@ } void UserPerformanceTuningManager::UpdateBatterySaverModeState() { + DCHECK(was_started_); + performance_manager::user_tuning::prefs::BatterySaverModeState state = performance_manager::user_tuning::prefs::GetCurrentBatterySaverModeState( pref_change_registrar_.prefs());
diff --git a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.h b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.h index 0765d0e..5bddcf0 100644 --- a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.h +++ b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager.h
@@ -93,11 +93,14 @@ std::unique_ptr<HighEfficiencyModeToggleDelegate> high_efficiency_mode_toggle_delegate = nullptr); + void Start(); + void OnHighEfficiencyModePrefChanged(); void OnBatterySaverModePrefChanged(); void UpdateBatterySaverModeState(); + bool was_started_ = false; bool battery_saver_mode_enabled_ = false; bool temporary_battery_saver_enabled_ = false; std::unique_ptr<FrameThrottlingDelegate> frame_throttling_delegate_;
diff --git a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager_unittest.cc b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager_unittest.cc index 71cc028..bc81039d 100644 --- a/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager_unittest.cc +++ b/chrome/browser/performance_manager/user_tuning/user_performance_tuning_manager_unittest.cc
@@ -24,6 +24,7 @@ manager_.reset(new UserPerformanceTuningManager( &local_state_, std::make_unique<FakeFrameThrottlingDelegate>(&throttling_enabled_))); + manager()->Start(); } UserPerformanceTuningManager* manager() {
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc index ab2f824..f0d4596 100644 --- a/chrome/browser/printing/print_job_worker.cc +++ b/chrome/browser/printing/print_job_worker.cc
@@ -51,7 +51,6 @@ #if BUILDFLAG(ENABLE_OOP_PRINTING) #include "chrome/browser/printing/print_backend_service_manager.h" #include "chrome/services/printing/public/mojom/print_backend_service.mojom.h" -#include "components/device_event_log/device_event_log.h" #include "printing/printing_features.h" #endif
diff --git a/chrome/browser/printing/print_view_manager.cc b/chrome/browser/printing/print_view_manager.cc index be2abdd..bb77e43 100644 --- a/chrome/browser/printing/print_view_manager.cc +++ b/chrome/browser/printing/print_view_manager.cc
@@ -33,7 +33,6 @@ #if BUILDFLAG(ENABLE_PRINT_CONTENT_ANALYSIS) #include "chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h" -#include "printing/printing_features.h" #endif // BUILDFLAG(ENABLE_PRINT_CONTENT_ANALYSIS) using content::BrowserThread;
diff --git a/chrome/browser/printing/print_view_manager_base.cc b/chrome/browser/printing/print_view_manager_base.cc index 6b867df..eff4bf0 100644 --- a/chrome/browser/printing/print_view_manager_base.cc +++ b/chrome/browser/printing/print_view_manager_base.cc
@@ -64,7 +64,6 @@ #if BUILDFLAG(ENABLE_PRINT_PREVIEW) #include "chrome/browser/printing/print_view_manager.h" -#include "components/prefs/pref_service.h" #endif #if BUILDFLAG(ENABLE_OOP_PRINTING)
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc index 1cf7ba6..b20ab8c 100644 --- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc +++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc
@@ -13,7 +13,6 @@ #include "base/test/scoped_feature_list.h" #include "chrome/browser/content_settings/cookie_settings_factory.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/privacy_sandbox/privacy_sandbox_service.h" #include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index 754df5997..1bf7f1e 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -202,7 +202,6 @@ #endif #if BUILDFLAG(ENABLE_EXTENSIONS) -#include "chrome/browser/apps/app_service/app_launch_params.h" #include "chrome/browser/extensions/devtools_util.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/common/extensions/api/url_handlers/url_handlers_parser.h"
diff --git a/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc b/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc index 8280a65..42f5508 100644 --- a/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc +++ b/chrome/browser/resource_coordinator/tab_activity_watcher_unittest.cc
@@ -11,7 +11,6 @@ #include "base/test/simple_test_tick_clock.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/resource_coordinator/lifecycle_unit.h" -#include "chrome/browser/resource_coordinator/tab_activity_watcher.h" #include "chrome/browser/resource_coordinator/tab_lifecycle_unit.h" #include "chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h" #include "chrome/browser/resource_coordinator/tab_manager_features.h"
diff --git a/chrome/browser/resource_coordinator/tab_manager.cc b/chrome/browser/resource_coordinator/tab_manager.cc index 3de3927..50a7cbe9 100644 --- a/chrome/browser/resource_coordinator/tab_manager.cc +++ b/chrome/browser/resource_coordinator/tab_manager.cc
@@ -38,7 +38,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/resource_coordinator/resource_coordinator_parts.h" #include "chrome/browser/resource_coordinator/tab_lifecycle_unit_external.h" -#include "chrome/browser/resource_coordinator/tab_manager.h" #include "chrome/browser/resource_coordinator/tab_manager_features.h" #include "chrome/browser/resource_coordinator/tab_manager_resource_coordinator_signal_observer.h" #include "chrome/browser/resource_coordinator/tab_manager_stats_collector.h"
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb index 09dfd7f0..f96d091 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_am.xtb
@@ -67,7 +67,7 @@ <translation id="1334095593597963605">የቁምፊ እና ቃል ማስተጋባት</translation> <translation id="1334570596456017464">ግርጌ አደር</translation> <translation id="133801305381959373">ምንም አርትዖት ሊደረግበት የሚችል የጽሑፍ መስክ የለም</translation> -<translation id="1342835525016946179">ጽሑፍ</translation> +<translation id="1342835525016946179">ጽሁፍ</translation> <translation id="1346059596910821859">ጠቃሚ ምክር</translation> <translation id="1354356357730355833">ቅዳ</translation> <translation id="135978014023467274">ወደ ChromeVox 63 አዘምነዋል!</translation> @@ -88,7 +88,7 @@ <translation id="1465097259579587977">ፈጥኣን አቀማመጠ ገጽን ዳግም አስነሳ</translation> <translation id="1480046233931937785">ክሬዲቶች</translation> <translation id="1487494366197411587">በChromebook ላይ የSearch ቁልፉ ልክ ከግራው Shift በላይ ነው።</translation> -<translation id="1498498210836053409">ጽሑፍ ሲያርትዑ ተለጣፊ ሁነታ ይጥፋ (ዘመናዊ ተለጣፊ ሁነታ)</translation> +<translation id="1498498210836053409">ጽሁፍ ሲያርትዑ ተለጣፊ ሁነታ ይጥፋ (ዘመናዊ ተለጣፊ ሁነታ)</translation> <translation id="1499041187027566160">ድምጽ ጨምር</translation> <translation id="1502086903961450562">ቀዳሚ ስዕላዊ</translation> <translation id="1506187449813838456">የድምጽ ቅጥነት ይጨምሩ</translation> @@ -132,7 +132,7 @@ <translation id="1765245556747822181">አንድ ጣት ወደ ላይ ያንሸራትቱ</translation> <translation id="1771761307086386028">ወደ ቀኝ ይሸብልሉ</translation> <translation id="1781173782405573156">የማለፊያ ቁልፍ</translation> -<translation id="1787176709638001873">የይለፍ ቃል አርትዖት ጽሑፍ</translation> +<translation id="1787176709638001873">የይለፍ ቃል አርትዖት ጽሁፍ</translation> <translation id="180203835522132923">+ O፣ ከዚያ Wን ይፈልጉ</translation> <translation id="1810107444790159527">የዝርዝር ሳጥን</translation> <translation id="1812527064848182527">የመሬት ገጽታ</translation> @@ -161,7 +161,7 @@ <translation id="203030071582665758">ምንም ቀዳሚ የደረጃ 4 ርዕስ የለም</translation> <translation id="2045055672832940894">ምንም ቀዳሚ መቆጣጠሪያ የለም</translation> <translation id="2045606329038304310">የቅጽ መስክ ቁጥጥር</translation> -<translation id="2063539687800151747">የተቀረጸ ጽሑፍ</translation> +<translation id="2063539687800151747">የተቀረጸ ጽሁፍ</translation> <translation id="2086961585857038472">ቀጣይ ቃል</translation> <translation id="2087981446621639008">dscrplst dtl</translation> <translation id="2089387485033699258">en</translation> @@ -170,7 +170,7 @@ <translation id="2110480898214777136">በገጽ፣ መገናኛ ወይም ሌላ መያዣ ውስጥ ከመጀመሪያው እስከ መጨረሻው ወይም ከመጨረሻው እስከ መጀመሪያው ድረስ ይጠቅልሉ</translation> <translation id="2119965627982867824">spnbtn</translation> <translation id="2121067395472282800">የመዳረሻ ቁልፍ፦<ph name="KEY" /></translation> -<translation id="2126597928985245619">ለዚህ ንጥል የሚገኝ ጽሑፍ የለም</translation> +<translation id="2126597928985245619">ለዚህ ንጥል የሚገኝ ጽሁፍ የለም</translation> <translation id="2127747486437921899">ሰያፍ</translation> <translation id="2152179395627233441">የመለማመቻ ቦታን ዝጋ</translation> <translation id="2163782704988363449">እርማት</translation> @@ -211,7 +211,7 @@ <translation id="2419852971200420169">ዝርዝር መግለጫ</translation> <translation id="2422937916923936891">የምናሌ ንጥል አመልካች ሳጥን</translation> <translation id="2428534162001909979">የትዕዛዝ ምናሌዎች</translation> -<translation id="242998846562331953">የግርጌ ጽሑፍ</translation> +<translation id="242998846562331953">የግርጌ ጽሁፍ</translation> <translation id="2435422727584637732">ብሩህ ሰማያዊ</translation> <translation id="2438712309510062123">ጠቁም</translation> <translation id="2450814015951372393">አመልካች ሳጥን</translation> @@ -359,7 +359,7 @@ <translation id="3283583562490372694">ምልክት አልተደረበትም</translation> <translation id="3286372614333682499">የምስል ፍሬ</translation> <translation id="3286390186030710347">ተንሸራታች</translation> -<translation id="3300348286427369683">የበለጸገ ጽሑፍ ድጋፍ። ChromeVox አሁን የመዝለል ትዕዛዞችን፣ የብሬይል ጠቋሚ ማዞርን፣ ምርጫን እና ተጨማሪ ነገሮችን ጨምሮ የበለጸገ ጽሑፍ መስኮችን ይደግፋል።</translation> +<translation id="3300348286427369683">የበለጸገ ጽሁፍ ድጋፍ። ChromeVox አሁን የመዝለል ትዕዛዞችን፣ የብሬይል ጠቋሚ ማዞርን፣ ምርጫን እና ተጨማሪ ነገሮችን ጨምሮ የበለጸገ ጽሁፍ መስኮችን ይደግፋል።</translation> <translation id="3300733168898541351">ቀልብስ</translation> <translation id="3307886118343381874">ወደ የሠንጠረዡ መጨረሻ ሂድ</translation> <translation id="3312997241656799641">ቀጣይ የተጎበኘ አገናኝ</translation> @@ -515,7 +515,7 @@ <translation id="4372435075475052704">min:<ph name="X" /></translation> <translation id="4372705107434148843">የማቆሚያ ንግግር</translation> <translation id="4376316291247992553">ግራፊክን እንደ ብሬይል ይመልከቱ</translation> -<translation id="437809255587011096">የማስታወቅ ጽሑፍ ቅጥ</translation> +<translation id="437809255587011096">የማስታወቅ ጽሁፍ ቅጥ</translation> <translation id="4378308539633073595">ወደ ፊት ያሸብልሉ</translation> <translation id="4384583879834880242">ጥያቄ እና መልስ</translation> <translation id="4391478986194775161">cntntinfo</translation> @@ -587,7 +587,7 @@ <translation id="492295894462528572">መቅድም</translation> <translation id="495046168593986294">ወደ ላይ ይሸብልሉ</translation> <translation id="495170559598752135">እርምጃዎች</translation> -<translation id="4953585991029886728">ጽሑፍ ያርትዑ</translation> +<translation id="4953585991029886728">ጽሁፍ ያርትዑ</translation> <translation id="4973717656530883744">ዝቅተኛ <ph name="X" /></translation> <translation id="4974612477719259470">ምንም ቀዳሚ አዝራር የለም</translation> <translation id="4979404613699303341">ቀዳሚ አዝራር</translation> @@ -630,7 +630,7 @@ <translation id="5290220123487191192">በመደበኝነት በሚጠቀሙባቸው ጥቂት ምልክቶች እንጀምር። ለማግበር የሚፈልጉትን ንጥል ከደረሱ ማያ ገጹን በአንድ ጣት ሁለቴ መታ ያድርጉ። ለመቀጠል አሁን ሁለቴ መታ ያድርጉ።</translation> <translation id="5302048478445481009">ቋንቋ</translation> <translation id="5302089807023311274">የዋቢ መጽሐፍት ማጣቀሻ</translation> -<translation id="530391007967514163">ታች ወዳለው ጽሑፍ በመዳሰስ ለመዝለል ይሞክሩ።</translation> +<translation id="530391007967514163">ታች ወዳለው ጽሁፍ በመዳሰስ ለመዝለል ይሞክሩ።</translation> <translation id="5304943142864553931"><ph name="TITLE" />፣ ትር</translation> <translation id="5308380583665731573">ይገናኙ</translation> <translation id="5310788376443009632">የተወገዱ፦</translation> @@ -678,7 +678,7 @@ <translation id="5562645715554321347">hdnggrp</translation> <translation id="5574412348552378458">የChromeVox መማር ሁነታ</translation> <translation id="5582839680698949063">ዋና ምናሌ</translation> -<translation id="5585044216466955529">ጽሑፍ፣ የኢሜይል ግቤት ያርትዑ</translation> +<translation id="5585044216466955529">ጽሁፍ፣ የኢሜይል ግቤት ያርትዑ</translation> <translation id="5597170376237141345">ቀጣይ አመልካች ሳጥን</translation> <translation id="5598905979683743333"><ph name="NAME" />፣ ሬዲዮ አዝራር አልተመረጠም</translation> <translation id="5601172225407283979">ነባሪ እርምጃ አከናውን</translation> @@ -839,7 +839,7 @@ <translation id="675895815784134693">pgbar</translation> <translation id="6759710362319508545">መርጃዎች</translation> <translation id="67862343314499040">ወይን ጠጅ</translation> -<translation id="6786800275320335305">ጽሑፍ</translation> +<translation id="6786800275320335305">ጽሁፍ</translation> <translation id="6790428901817661496">አጫውት</translation> <translation id="6790781785997195160">አንዴ ልምምድ ካደረጉ በኋላ የቀጣይ ትምህርት አዝራሩን ያግኙ። ከዚያ ለመቀጠል ሁለቴ መታ ያድርጉ።</translation> <translation id="6793101435925451627">lstbx</translation> @@ -851,7 +851,7 @@ <translation id="6837853484260746864">ድምፅ ይምረጡ፦</translation> <translation id="6858047746862060282">ቅድመ-ታሪክ</translation> <translation id="6859876496651143278">አንድ ጣት ወደ ግራ ያንሸራትቱ</translation> -<translation id="6865519907510167493">የተሳሰተ ጽሑፍ</translation> +<translation id="6865519907510167493">የተሳሰተ ጽሁፍ</translation> <translation id="6873188295213080042">ፍንጭ፦ ለመዳሰስ Searchን ይዘው የቀስት ቁልፎቹን ይጫኑ።</translation> <translation id="6894148351896207544">የአሁኑን ሰዓት እና ቀን ተናገር</translation> <translation id="6896758677409633944">ቅዳ</translation> @@ -909,7 +909,7 @@ <translation id="7244947685630430863">ምንም ቀዳሚ ስዕላዊ የለም</translation> <translation id="7248671827512403053">መተግበሪያ</translation> <translation id="725969808843520477">ቀጣይ የሬዲዮ አዝራር</translation> -<translation id="7261612856573623172">የስርዓት ጽሑፍ-ወደ-ንግግር ድምጽ</translation> +<translation id="7261612856573623172">የስርዓት ጽሁፍ-ወደ-ንግግር ድምጽ</translation> <translation id="7269119382257320590">ምንም ስርዓተ ነጥብ የለም</translation> <translation id="7271278495464744706">ብዙ ቃላት ያላቸው ማብራሪያዎችን አንቃ</translation> <translation id="7273174640290488576">ባዶ</translation> @@ -969,7 +969,7 @@ <translation id="7674576868851035240">ቀጣይ አገናኝ</translation> <translation id="7674768236845044097">mark</translation> <translation id="7676847077928500578">የጽሑፍ ወደ ንግግር ቅንብሮችን ዳግም አቀናብር</translation> -<translation id="7684431668231950609">ጽሑፍ፣ የዩ አር ኤል ግቤት ያርትዑ</translation> +<translation id="7684431668231950609">ጽሁፍ፣ የዩ አር ኤል ግቤት ያርትዑ</translation> <translation id="7685589220304187312">tlbar</translation> <translation id="7693840228159394336">ቀዳሚ የሬዲዮ አዝራር</translation> <translation id="7696631298608145306">ወደ ቀጣዩ ቃል ሂድ</translation> @@ -1022,7 +1022,7 @@ <translation id="8033827949643255796">ተመርጧል</translation> <translation id="8035962149453661158">max:<ph name="X" /></translation> <translation id="8037651341025652929">ድምዳሜ</translation> -<translation id="8042761080832772327">ጽሑፍ፣ የፍለጋ ግቤት ያርትዑ</translation> +<translation id="8042761080832772327">ጽሁፍ፣ የፍለጋ ግቤት ያርትዑ</translation> <translation id="8049189770492311300">ሰዓት ቆጣሪ</translation> <translation id="8057472523431225012">የአሁኑ ደረጃ</translation> <translation id="8058636807889143711">ምንም ቀጣይ የሒሳብ ሐረግ የለም</translation> @@ -1082,7 +1082,7 @@ <translation id="8463645336674919227">የሰዋስው ስሕተትን መተው</translation> <translation id="8465573210279050749">ቀዳሚውን ቃል ሰርዝ</translation> <translation id="847040613207937740">ምንም ቀጣይ አመልካች ሳጥን የለም</translation> -<translation id="8473540203671727883">ከመዳፊቱ ሥር ያለውን ጽሑፍ ይናገሩ</translation> +<translation id="8473540203671727883">ከመዳፊቱ ሥር ያለውን ጽሁፍ ይናገሩ</translation> <translation id="8476408756881832830">ChromeVox እየተናገረ ሳለ መልሶ ማጫወትን ባለበት አቁም</translation> <translation id="8476508772960940536">የመስኮት አጠቃላይ እይታ</translation> <translation id="8480873377842220259">አሁን አንዳንድ መሠረታዊ ዳሰሳን ይማራሉ። ማያ ገጹ ላይ ዘወር ዘወር ለማለት የፈልግ ቁልፉን ይዘው የቀስት ቁልፎቹን መጫን ይችላሉ። ለመቀጠል Search + ቀኝ ቀስትን ይጫኑ።</translation>
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.html b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.html index 1a5ac204..3772d80e 100644 --- a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.html +++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.html
@@ -58,7 +58,7 @@ grid-gap: var(--emoji-spacing); grid-template-columns: repeat(18,1fr); left: var(--emoji-group-tabs-left); - overflow-x: scroll; + overflow-x: hidden; padding-bottom: 10px; padding-top: 10px; /* Search field also has some padding below which adds to this. */ scroll-behavior: smooth;
diff --git a/chrome/browser/resources/chromeos/login/BUILD.gn b/chrome/browser/resources/chromeos/login/BUILD.gn index 8b2afbfd..946522d 100644 --- a/chrome/browser/resources/chromeos/login/BUILD.gn +++ b/chrome/browser/resources/chromeos/login/BUILD.gn
@@ -150,206 +150,12 @@ out_folder = "$target_gen_dir/$oobe_preprocessed_folder" out_manifest = "$target_gen_dir/$existing_unconditional_files_manifest" in_files = [ - "cr_ui.html", - "display_manager.html", - "i18n_setup.html", "i18n_setup.js", - "keyboard_utils.html", - "login_ui_tools.html", "oobe.css", "oobe_polymer3.js", "oobe_popup_overlay.css", "oobe_screen.css", "screens.js", - "components/behaviors/login_screen_behavior.html", - "components/behaviors/login_screen_behavior.js", - "components/behaviors/multi_step_behavior.html", - "components/behaviors/multi_step_behavior.js", - "components/behaviors/oobe_dialog_host_behavior.html", - "components/behaviors/oobe_dialog_host_behavior.js", - "components/behaviors/oobe_focus_behavior.html", - "components/behaviors/oobe_focus_behavior.js", - "components/behaviors/oobe_i18n_behavior.html", - "components/behaviors/oobe_i18n_behavior.js", - "components/behaviors/oobe_i18n_mixin.html", - "components/behaviors/oobe_i18n_mixin.js", - "components/behaviors/i18n_mixin.html", - "components/behaviors/i18n_mixin.js", - "components/behaviors/oobe_scrollable_behavior.html", - "components/behaviors/oobe_scrollable_behavior.js", - "components/buttons/oobe_next_button.html", - "components/buttons/oobe_next_button.js", - "components/buttons/oobe_base_button.html", - "components/buttons/oobe_base_button.js", - "components/buttons/oobe_back_button.html", - "components/buttons/oobe_back_button.js", - "components/buttons/oobe_text_button.html", - "components/buttons/oobe_text_button.js", - "components/buttons/oobe_icon_button.html", - "components/buttons/oobe_icon_button.js", - "components/common_styles/common_styles.html", - "components/common_styles/cr_card_radio_group_styles.html", - "components/common_styles/oobe_flex_layout_styles.html", - "components/common_styles/oobe_dialog_host_styles.html", - "components/dialogs/oobe_adaptive_dialog.html", - "components/dialogs/oobe_adaptive_dialog.js", - "components/dialogs/oobe_content_dialog.html", - "components/dialogs/oobe_content_dialog.js", - "components/dialogs/oobe_loading_dialog.html", - "components/dialogs/oobe_loading_dialog.js", - "components/dialogs/oobe_modal_dialog.html", - "components/dialogs/oobe_modal_dialog.js", - "components/display_manager_types.html", - "components/oobe_apps_list.html", - "components/oobe_apps_list.js", - "components/oobe_vars/oobe_shared_vars_css.html", - "components/oobe_carousel.html", - "components/oobe_carousel.js", - "components/oobe_slide.html", - "components/oobe_slide.js", - "components/progress_list_item/progress_list_item.html", - "components/progress_list_item/progress_list_item.js", - "components/hd_iron_icon.html", - "components/hd_iron_icon.js", - "components/gaia_dialog.html", - "components/gaia_dialog.js", - "components/gaia_header.html", - "components/gaia_header.js", - "components/gaia_input_form.html", - "components/gaia_input_form.js", - "components/gaia_button.html", - "components/gaia_button.js", - "components/keyboard_utils_for_injection.html", - "components/long_touch_detector.html", - "components/long_touch_detector.js", - "components/network_select_login.html", - "components/network_select_login.js", - "components/notification_card.html", - "components/notification_card.js", - "components/oobe_a11y_option.html", - "components/oobe_a11y_option.js", - "components/oobe_cr_lottie.html", - "components/oobe_cr_lottie.js", - "components/oobe_i18n_dropdown.html", - "components/oobe_i18n_dropdown.js", - "components/oobe_icons.html", - "components/oobe_network_icons.html", - "components/oobe_select.html", - "components/oobe_types.html", - "components/security_token_pin.html", - "components/security_token_pin.js", - "components/test_util.js", - "components/throbber_notice.html", - "components/throbber_notice.js", - "components/web_view_helper.html", - "components/web_view_loader.html", - "gaia_auth_host/authenticator.html", - "screens/common/app_downloading.html", - "screens/common/app_downloading.js", - "screens/common/app_launch_splash.html", - "screens/common/app_launch_splash.js", - "screens/common/assistant_optin.html", - "screens/common/assistant_optin.js", - "screens/common/autolaunch.html", - "screens/common/autolaunch.js", - "screens/common/consolidated_consent.html", - "screens/common/consolidated_consent.js", - "screens/common/device_disabled.html", - "screens/common/device_disabled.js", - "screens/common/enable_kiosk.html", - "screens/common/enable_kiosk.js", - "screens/common/error_message.html", - "screens/common/error_message.js", - "screens/common/family_link_notice.html", - "screens/common/family_link_notice.js", - "screens/common/fingerprint_setup.html", - "screens/common/fingerprint_setup.js", - "screens/common/gaia_signin.html", - "screens/common/gaia_signin.js", - "screens/common/gesture_navigation.html", - "screens/common/gesture_navigation.js", - "screens/common/guest_tos.html", - "screens/common/guest_tos.js", - "screens/common/hw_data_collection.html", - "screens/common/hw_data_collection.js", - "screens/common/managed_terms_of_service.html", - "screens/common/managed_terms_of_service.js", - "screens/common/marketing_opt_in.html", - "screens/common/marketing_opt_in.js", - "screens/common/multidevice_setup.html", - "screens/common/multidevice_setup.js", - "screens/common/offline_ad_login.html", - "screens/common/offline_ad_login.js", - "screens/common/oobe_eula.html", - "screens/common/oobe_eula.js", - "screens/common/oobe_reset.html", - "screens/common/oobe_reset.js", - "screens/common/os_install.html", - "screens/common/os_install.js", - "screens/common/os_trial.html", - "screens/common/os_trial.js", - "screens/common/parental_handoff.html", - "screens/common/parental_handoff.js", - "screens/common/pin_setup.html", - "screens/common/pin_setup.js", - "screens/common/recommend_apps.html", - "screens/common/recommend_apps.js", - "screens/common/saml_confirm_password.html", - "screens/common/saml_confirm_password.js", - "screens/common/signin_fatal_error.html", - "screens/common/signin_fatal_error.js", - "screens/common/smart_privacy_protection.html", - "screens/common/smart_privacy_protection.js", - "screens/common/sync_consent.html", - "screens/common/sync_consent.js", - "screens/common/theme_selection.html", - "screens/common/theme_selection.js", - "screens/common/tpm_error.html", - "screens/common/tpm_error.js", - "screens/common/user_creation.html", - "screens/common/user_creation.js", - "screens/common/wrong_hwid.html", - "screens/common/wrong_hwid.js", - "screens/login/active_directory_password_change.html", - "screens/login/active_directory_password_change.js", - "screens/login/encryption_migration.html", - "screens/login/encryption_migration.js", - "screens/login/gaia_password_changed.html", - "screens/login/gaia_password_changed.js", - "screens/login/lacros_data_migration.html", - "screens/login/lacros_data_migration.js", - "screens/login/offline_login.html", - "screens/login/offline_login.js", - "screens/login/management_transition.html", - "screens/login/management_transition.js", - "screens/login/checking_downloading_update.html", - "screens/login/checking_downloading_update.js", - "screens/login/update_required_card.html", - "screens/login/update_required_card.js", - "screens/oobe/auto_enrollment_check.html", - "screens/oobe/auto_enrollment_check.js", - "screens/oobe/demo_preferences.html", - "screens/oobe/demo_preferences.js", - "screens/oobe/demo_setup.html", - "screens/oobe/demo_setup.js", - "screens/oobe/enable_debugging.html", - "screens/oobe/enable_debugging.js", - "screens/oobe/enterprise_enrollment.html", - "screens/oobe/enterprise_enrollment.js", - "screens/oobe/hid_detection.html", - "screens/oobe/hid_detection.js", - "screens/oobe/update.html", - "screens/oobe/update.js", - "screens/oobe/oobe_network.html", - "screens/oobe/oobe_network.js", - "screens/oobe/packaged_license.html", - "screens/oobe/packaged_license.js", - "screens/oobe/quick_start.html", - "screens/oobe/quick_start.js", - "screens/oobe/welcome.html", - "screens/oobe/welcome.js", - "screens/oobe/welcome_dialog.html", - "screens/oobe/welcome_dialog.js", ] }
diff --git a/chrome/browser/resources/chromeos/login/components/BUILD.gn b/chrome/browser/resources/chromeos/login/components/BUILD.gn index 82881a8..51d9f83 100644 --- a/chrome/browser/resources/chromeos/login/components/BUILD.gn +++ b/chrome/browser/resources/chromeos/login/components/BUILD.gn
@@ -62,7 +62,6 @@ ":gaia_header_module", ":gaia_input_form_module", ":hd_iron_icon_module", - ":long_touch_detector_module", ":network_select_login_module", ":notification_card_module", ":oobe_a11y_option_module", @@ -147,7 +146,7 @@ js_library("long_touch_detector.m") { sources = [ "$root_gen_dir/chrome/browser/resources/chromeos/login/components/long_touch_detector.m.js" ] deps = [] - extra_deps = [ ":long_touch_detector_module" ] + extra_deps = [ ":modulize" ] } js_library("network_select_login.m") { @@ -316,12 +315,6 @@ namespace_rewrites = oobe_namespace_rewrites } -polymer_modulizer("long_touch_detector") { - js_file = "long_touch_detector.js" - html_file = "long_touch_detector.html" - html_type = "dom-module" -} - polymer_modulizer("network_select_login") { js_file = "network_select_login.js" html_file = "network_select_login.html" @@ -421,6 +414,7 @@ js_modulizer("modulize") { input_files = [ "display_manager_types.js", + "long_touch_detector.js", "oobe_select.js", "oobe_types.js", "web_view_helper.js",
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/i18n_mixin.html b/chrome/browser/resources/chromeos/login/components/behaviors/i18n_mixin.html deleted file mode 100644 index 94aee97..0000000 --- a/chrome/browser/resources/chromeos/login/components/behaviors/i18n_mixin.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!-- Copyright 2022 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {I18nMixin} from '.../i18n_mixin.m.js';` ---> -<link rel="import" href="chrome://resources/html/polymer.html"> -<script src="i18n_mixin.js"></script> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/login_screen_behavior.html b/chrome/browser/resources/chromeos/login/components/behaviors/login_screen_behavior.html deleted file mode 100644 index 9770f0b..0000000 --- a/chrome/browser/resources/chromeos/login/components/behaviors/login_screen_behavior.html +++ /dev/null
@@ -1,2 +0,0 @@ -<link rel="import" href="chrome://resources/html/cr.html"> -<script src="login_screen_behavior.js"></script> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/multi_step_behavior.html b/chrome/browser/resources/chromeos/login/components/behaviors/multi_step_behavior.html deleted file mode 100644 index 3dffa65..0000000 --- a/chrome/browser/resources/chromeos/login/components/behaviors/multi_step_behavior.html +++ /dev/null
@@ -1 +0,0 @@ -<script src="multi_step_behavior.js"></script> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_dialog_host_behavior.html b/chrome/browser/resources/chromeos/login/components/behaviors/oobe_dialog_host_behavior.html deleted file mode 100644 index 72a0f538..0000000 --- a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_dialog_host_behavior.html +++ /dev/null
@@ -1 +0,0 @@ -<script src="oobe_dialog_host_behavior.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_focus_behavior.html b/chrome/browser/resources/chromeos/login/components/behaviors/oobe_focus_behavior.html deleted file mode 100644 index f6c23e6..0000000 --- a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_focus_behavior.html +++ /dev/null
@@ -1,2 +0,0 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> -<script src="oobe_focus_behavior.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_i18n_behavior.html b/chrome/browser/resources/chromeos/login/components/behaviors/oobe_i18n_behavior.html deleted file mode 100644 index cc94129..0000000 --- a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_i18n_behavior.html +++ /dev/null
@@ -1,4 +0,0 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> - -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> -<script src="oobe_i18n_behavior.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_i18n_mixin.html b/chrome/browser/resources/chromeos/login/components/behaviors/oobe_i18n_mixin.html deleted file mode 100644 index b39a58f4..0000000 --- a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_i18n_mixin.html +++ /dev/null
@@ -1,12 +0,0 @@ -<!-- Copyright 2022 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {OOBE_UI_STATE} from '.../display_manager_types.m.js';` ---> -<link rel="import" href="chrome://resources/html/polymer.html"> -<link rel="import" href="./i18n_mixin.html"> -<script src="oobe_i18n_mixin.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_scrollable_behavior.html b/chrome/browser/resources/chromeos/login/components/behaviors/oobe_scrollable_behavior.html deleted file mode 100644 index 1009090..0000000 --- a/chrome/browser/resources/chromeos/login/components/behaviors/oobe_scrollable_behavior.html +++ /dev/null
@@ -1 +0,0 @@ -<script src="oobe_scrollable_behavior.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/components/buttons/oobe_base_button.html b/chrome/browser/resources/chromeos/login/components/buttons/oobe_base_button.html deleted file mode 100644 index bd02553..0000000 --- a/chrome/browser/resources/chromeos/login/components/buttons/oobe_base_button.html +++ /dev/null
@@ -1,2 +0,0 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> -<script src="oobe_base_button.js"></script> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/display_manager_types.html b/chrome/browser/resources/chromeos/login/components/display_manager_types.html deleted file mode 100644 index 9453782..0000000 --- a/chrome/browser/resources/chromeos/login/components/display_manager_types.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {OOBE_UI_STATE} from '.../display_manager_types.m.js';` --->
diff --git a/chrome/browser/resources/chromeos/login/components/keyboard_utils_for_injection.html b/chrome/browser/resources/chromeos/login/components/keyboard_utils_for_injection.html deleted file mode 100644 index 897eff0..0000000 --- a/chrome/browser/resources/chromeos/login/components/keyboard_utils_for_injection.html +++ /dev/null
@@ -1,10 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {KEYBOARD_UTILS_FOR_INJECTION} from - '.../keyboard_utils_for_injection.m.js';` ---> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/long_touch_detector.html b/chrome/browser/resources/chromeos/login/components/long_touch_detector.html deleted file mode 100644 index 12e7938c..0000000 --- a/chrome/browser/resources/chromeos/login/components/long_touch_detector.html +++ /dev/null
@@ -1 +0,0 @@ -<script src="long_touch_detector.js"></script> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_select.html b/chrome/browser/resources/chromeos/login/components/oobe_select.html deleted file mode 100644 index 422bd524..0000000 --- a/chrome/browser/resources/chromeos/login/components/oobe_select.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {getSelectedTitle} from '.../oobe_select.m.js';` ---> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_types.html b/chrome/browser/resources/chromeos/login/components/oobe_types.html deleted file mode 100644 index 3071c94e..0000000 --- a/chrome/browser/resources/chromeos/login/components/oobe_types.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {OobeTypes} from '.../oobe_types.m.js';` --->
diff --git a/chrome/browser/resources/chromeos/login/components/web_view_helper.html b/chrome/browser/resources/chromeos/login/components/web_view_helper.html deleted file mode 100644 index f355e8b5..0000000 --- a/chrome/browser/resources/chromeos/login/components/web_view_helper.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {WebViewHelper} from '.../web_view_helper.m.js';` ---> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/components/web_view_loader.html b/chrome/browser/resources/chromeos/login/components/web_view_loader.html deleted file mode 100644 index 7a499156..0000000 --- a/chrome/browser/resources/chromeos/login/components/web_view_loader.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {WebViewLoader} from '.../web_view_loader.m.js';` --->
diff --git a/chrome/browser/resources/chromeos/login/cr_ui.html b/chrome/browser/resources/chromeos/login/cr_ui.html deleted file mode 100644 index d56b97f2..0000000 --- a/chrome/browser/resources/chromeos/login/cr_ui.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {Oobe} from '.../cr_ui.m.js';` ---> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/display_manager.html b/chrome/browser/resources/chromeos/login/display_manager.html deleted file mode 100644 index a6abfce3..0000000 --- a/chrome/browser/resources/chromeos/login/display_manager.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {DisplayManager, invokePolymerMethod} from '.../display_manager.m.js';` ---> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/gaia_auth_host/authenticator.html b/chrome/browser/resources/chromeos/login/gaia_auth_host/authenticator.html deleted file mode 100644 index 302f5ec..0000000 --- a/chrome/browser/resources/chromeos/login/gaia_auth_host/authenticator.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {Authenticator, AuthFlow, AuthMode, SUPPORTED_PARAMS} from '.../authenticator.m.js';` ---> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/i18n_setup.html b/chrome/browser/resources/chromeos/login/i18n_setup.html deleted file mode 100644 index 19732f2..0000000 --- a/chrome/browser/resources/chromeos/login/i18n_setup.html +++ /dev/null
@@ -1,3 +0,0 @@ -<link rel="import" href="chrome://resources/html/load_time_data.html"> - -<script src="chrome://oobe/strings.js"></script>
diff --git a/chrome/browser/resources/chromeos/login/keyboard_utils.html b/chrome/browser/resources/chromeos/login/keyboard_utils.html deleted file mode 100644 index 7c3db492..0000000 --- a/chrome/browser/resources/chromeos/login/keyboard_utils.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {keyboard} from '.../keyboard_utils.m.js';` ---> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/login/login_ui_tools.html b/chrome/browser/resources/chromeos/login/login_ui_tools.html deleted file mode 100644 index dcfea1ad..0000000 --- a/chrome/browser/resources/chromeos/login/login_ui_tools.html +++ /dev/null
@@ -1,9 +0,0 @@ -<!-- Copyright 2021 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 just a dummy file to assist with the Polymer3 migration. - Adding this file as an import will force the Polymer3 version of - the file to add the directive: - - `import {addSubmitListener} from '.../login_ui_tools.m.js';` --->
diff --git a/chrome/browser/resources/gaia_auth_host/saml_username_autofill.js b/chrome/browser/resources/gaia_auth_host/saml_username_autofill.js index e4584fd..5bbedfe 100644 --- a/chrome/browser/resources/gaia_auth_host/saml_username_autofill.js +++ b/chrome/browser/resources/gaia_auth_host/saml_username_autofill.js
@@ -9,18 +9,6 @@ cr.define('samlUsernameAutofill', function() { /* #ignore */ 'use strict'; - // Regular expressions used to check for 3P IdP-related hosts - const AZURE_AD_HOST = /login\.microsoftonline\.com$/; - const OKTA_HOST = /\.okta\.com$/; - - /** - * Check url's host to determine if it comes from a supported IdP - * @param {URL?} url - */ - function isIdPSupported_(url) { - return Boolean(url.host.match(AZURE_AD_HOST) || url.host.match(OKTA_HOST)); - } - /** * Try to autofill email on login page for supported identity providers * @param {string} url Url of IdP login page @@ -43,9 +31,7 @@ if (!email) { return null; } - if (!isIdPSupported_(new URL(url))) { - return null; - } + url = appendParam(url, urlParameterNameToAutofillUsername, email); return url; }
diff --git a/chrome/browser/resources/gaia_auth_host/saml_username_autofill_test.unitjs b/chrome/browser/resources/gaia_auth_host/saml_username_autofill_test.unitjs index a4824b2..e154736 100644 --- a/chrome/browser/resources/gaia_auth_host/saml_username_autofill_test.unitjs +++ b/chrome/browser/resources/gaia_auth_host/saml_username_autofill_test.unitjs
@@ -8,11 +8,9 @@ 'saml_username_autofill.js' ]); -const AZURE_URL_FOR_TESTS = 'https://login.microsoftonline.com/example'; +const IDP_URL_FOR_TESTS = 'https://login.corp.example.com/example'; -const OKTA_URL_FOR_TESTS = 'https://example.okta.com/login/'; - -const UNSUPPORTED_IDP_URL_FOR_TESTS = 'https://evil.com/'; +const IDP_URL_FOR_TESTS_WITH_PARAMETER = 'https://login.corp.example.com/example?name=value'; const EMAIL_FOR_TESTS = 'example@domain.com'; @@ -28,40 +26,33 @@ } } -// Test success for Azure AD. -TEST_F('SamlUsernameAutofillUnitTest', 'AzureAD', function () { +// Test success for IdP url without parameters. +TEST_F('SamlUsernameAutofillUnitTest', 'SuccessNoParams', function () { const urlParameterNameToAutofillUsername = 'login_hint'; - const expectedResult = appendParam(AZURE_URL_FOR_TESTS, + const expectedResult = appendParam(IDP_URL_FOR_TESTS, urlParameterNameToAutofillUsername, EMAIL_FOR_TESTS); - const newUrl = samlUsernameAutofill.maybeAutofillUsername(AZURE_URL_FOR_TESTS, + const newUrl = samlUsernameAutofill.maybeAutofillUsername(IDP_URL_FOR_TESTS, urlParameterNameToAutofillUsername, EMAIL_FOR_TESTS); assertEquals(newUrl, expectedResult); }); -// Test success for Okta. -TEST_F('SamlUsernameAutofillUnitTest', 'Okta', function () { - const urlParameterNameToAutofillUsername = 'username'; - const expectedResult = appendParam(OKTA_URL_FOR_TESTS, +// Test success for IdP url with a parameter. +TEST_F('SamlUsernameAutofillUnitTest', 'SuccessWithParam', function () { + const urlParameterNameToAutofillUsername = 'login_hint'; + const expectedResult = appendParam(IDP_URL_FOR_TESTS_WITH_PARAMETER, urlParameterNameToAutofillUsername, EMAIL_FOR_TESTS); - const newUrl = samlUsernameAutofill.maybeAutofillUsername(OKTA_URL_FOR_TESTS, - urlParameterNameToAutofillUsername, EMAIL_FOR_TESTS); - - assertEquals(newUrl, expectedResult); -}); - -// Test that we don't autofill the username on unknown IdP page. -TEST_F('SamlUsernameAutofillUnitTest', 'UnsupportedIdP', function () { const newUrl = samlUsernameAutofill.maybeAutofillUsername( - UNSUPPORTED_IDP_URL_FOR_TESTS, 'login_hint', EMAIL_FOR_TESTS); + IDP_URL_FOR_TESTS_WITH_PARAMETER, urlParameterNameToAutofillUsername, + EMAIL_FOR_TESTS); - assertEquals(newUrl, null); + assertEquals(newUrl, expectedResult); }); // Test that we don't autofill the username when user's email is absent. TEST_F('SamlUsernameAutofillUnitTest', 'NoEmail', function () { const newUrl = samlUsernameAutofill.maybeAutofillUsername( - UNSUPPORTED_IDP_URL_FOR_TESTS, 'login_hint', ''); + IDP_URL_FOR_TESTS, 'login_hint', ''); assertEquals(newUrl, null); }); @@ -70,16 +61,16 @@ // url parameter. TEST_F('SamlUsernameAutofillUnitTest', 'NoUrlParameter', function () { const newUrl = samlUsernameAutofill.maybeAutofillUsername( - UNSUPPORTED_IDP_URL_FOR_TESTS, '', EMAIL_FOR_TESTS); + IDP_URL_FOR_TESTS, '', EMAIL_FOR_TESTS); assertEquals(newUrl, null); }); // Test that we don't autofill the username when login page doesn't use https. TEST_F('SamlUsernameAutofillUnitTest', 'HttpLoginPage', function () { - const httpMicrosoftUrl = 'http://login.microsoftonline.com/example'; + const httpUrl = 'http://login.corp.example.com/example'; const newUrl = samlUsernameAutofill.maybeAutofillUsername( - httpMicrosoftUrl, 'login_hint', EMAIL_FOR_TESTS); + httpUrl, 'login_hint', EMAIL_FOR_TESTS); assertEquals(newUrl, null); });
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_page.html b/chrome/browser/resources/settings/autofill_page/autofill_page.html index cfdeadc..6bb94c4 100644 --- a/chrome/browser/resources/settings/autofill_page/autofill_page.html +++ b/chrome/browser/resources/settings/autofill_page/autofill_page.html
@@ -33,7 +33,8 @@ search-label="$i18n{searchPasswords}" search-term="{{passwordFilter_}}"> <passwords-section id="passwordSection" filter="[[passwordFilter_]]" - focus-config="[[focusConfig_]]" prefs="{{prefs}}"> + focus-config="[[focusConfig_]]" prefs="{{prefs}}" + on-password-view-page-requested="onPasswordViewPageRequested_"> </passwords-section> </settings-subpage> </template> @@ -45,7 +46,8 @@ search-label="$i18n{searchPasswords}" search-term="{{passwordFilter_}}"> <passwords-device-section id="passwordDeviceSection" - filter="[[passwordFilter_]]" focus-config="[[focusConfig_]]"> + filter="[[passwordFilter_]]" focus-config="[[focusConfig_]]" + on-password-view-page-requested="onPasswordViewPageRequested_"> </passwords-device-section> </settings-subpage> </template> @@ -73,7 +75,8 @@ <template is="dom-if" route-path="/passwords/view"> <settings-subpage page-title="[[credential.urls.shown]]" favicon-site-url="[[credential.urls.link]]"> - <password-view credential="{{credential}}"> + <password-view credential="{{credential}}" + on-password-view-page-requested="onPasswordViewPageRequested_"> </password-view> </settings-subpage> </template> @@ -96,3 +99,10 @@ </settings-subpage> </template> </settings-animated-pages> + <if expr="is_chromeos"> + <template is="dom-if" if="[[showPasswordPromptDialog]]" restamp> + <settings-password-prompt-dialog on-token-obtained="onTokenObtained" + on-close="onPasswordPromptClose"> + </settings-password-prompt-dialog> + </template> + </if>
diff --git a/chrome/browser/resources/settings/autofill_page/autofill_page.ts b/chrome/browser/resources/settings/autofill_page/autofill_page.ts index cd2397b..c0b046d5 100644 --- a/chrome/browser/resources/settings/autofill_page/autofill_page.ts +++ b/chrome/browser/resources/settings/autofill_page/autofill_page.ts
@@ -9,6 +9,9 @@ */ import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js'; import 'chrome://resources/cr_elements/shared_vars_css.m.js'; +// <if expr="is_chromeos"> +import '../controls/password_prompt_dialog.js'; +// </if> import '../prefs/prefs.js'; import '../settings_page/settings_animated_pages.js'; import '../settings_page/settings_subpage.js'; @@ -25,9 +28,11 @@ import {getTemplate} from './autofill_page.html.js'; import {PasswordCheckMixin} from './password_check_mixin.js'; import {PasswordManagerImpl} from './password_manager_proxy.js'; +import {PasswordRequestorMixin} from './password_requestor_mixin.js'; +import {PasswordViewPageInteractions, PasswordViewPageRequestedEvent, PasswordViewPageUrlParams, recordPasswordViewInteraction} from './password_view.js'; -const SettingsAutofillPageElementBase = - PrefsMixin(PasswordCheckMixin(BaseMixin(PolymerElement))); +const SettingsAutofillPageElementBase = PrefsMixin( + PasswordCheckMixin(PasswordRequestorMixin(BaseMixin(PolymerElement)))); export class SettingsAutofillPageElement extends SettingsAutofillPageElementBase { @@ -90,6 +95,16 @@ private enablePasswordViewPage_: string; credential: chrome.passwordsPrivate.PasswordUiEntry|null; + // <if expr="is_chromeos"> + override onPasswordPromptClose(event: CloseEvent) { + super.onPasswordPromptClose(event); + if (!this.tokenObtained && + Router.getInstance().getCurrentRoute() === routes.PASSWORD_VIEW) { + Router.getInstance().navigateTo(routes.PASSWORDS); + } + } + // </if> + /** * Shows the manage addresses sub page. */ @@ -119,6 +134,36 @@ return this.leakedPasswords.length > 0 ? this.compromisedPasswordsCount : ''; } + + private onPasswordViewPageRequested_(event: PasswordViewPageRequestedEvent): + void { + const id = event.detail.entry.id; + + this.requestCredentialDetails(id) + .then((passwordUiEntry: chrome.passwordsPrivate.PasswordUiEntry) => { + this.credential = passwordUiEntry; + recordPasswordViewInteraction( + PasswordViewPageInteractions.CREDENTIAL_FOUND); + if (Router.getInstance().getCurrentRoute() !== routes.PASSWORD_VIEW) { + // If the current route is not |routes.PASSWORD_VIEW|, then the + // credential is requested due to a row click in passwords list. + // Route to the view page to display the credential. + const params = new URLSearchParams(); + params.set(PasswordViewPageUrlParams.ID, String(id)); + Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); + } + }) + .catch(() => { + if (Router.getInstance().getCurrentRoute() === routes.PASSWORD_VIEW) { + // If the credential is requested from the view page and is not + // retrieved, return to |routes.PASSWORDS|. There is nothing to show + // in |routes.PASSWORD_VIEW|. + recordPasswordViewInteraction( + PasswordViewPageInteractions.CREDENTIAL_NOT_FOUND); + Router.getInstance().navigateTo(routes.PASSWORDS); + } + }); + } } declare global {
diff --git a/chrome/browser/resources/settings/autofill_page/password_edit_dialog.ts b/chrome/browser/resources/settings/autofill_page/password_edit_dialog.ts index c6239e68..34f76b3 100644 --- a/chrome/browser/resources/settings/autofill_page/password_edit_dialog.ts +++ b/chrome/browser/resources/settings/autofill_page/password_edit_dialog.ts
@@ -31,7 +31,8 @@ import {PasswordManagerImpl} from './password_manager_proxy.js'; import {PasswordRequestorMixin} from './password_requestor_mixin.js'; -export type SavedPasswordEditedEvent = CustomEvent<number>; +export type SavedPasswordEditedEvent = + CustomEvent<chrome.passwordsPrivate.PasswordUiEntry>; const SAVED_PASSWORD_EDITED_EVENT_NAME = 'saved-password-edited'; @@ -531,7 +532,14 @@ .changeSavedPassword(this.existingEntry!.id, params) .then(newId => { if (this.isPasswordViewPageEnabled_) { - this.dispatchChangePasswordEvent_(newId); + const newEntry = { + ...this.existingEntry!, + username: this.username_, + password: this.password_, + note: this.note_, + id: newId, + }; + this.dispatchChangePasswordEvent_(newEntry); } }) .finally(() => { @@ -539,11 +547,12 @@ }); } - private dispatchChangePasswordEvent_(newId: number) { + private dispatchChangePasswordEvent_( + newEntry: chrome.passwordsPrivate.PasswordUiEntry) { this.dispatchEvent(new CustomEvent(SAVED_PASSWORD_EDITED_EVENT_NAME, { bubbles: true, composed: true, - detail: newId, + detail: newEntry, })); }
diff --git a/chrome/browser/resources/settings/autofill_page/password_list_item.ts b/chrome/browser/resources/settings/autofill_page/password_list_item.ts index 8a3f75d..ae694c6b 100644 --- a/chrome/browser/resources/settings/autofill_page/password_list_item.ts +++ b/chrome/browser/resources/settings/autofill_page/password_list_item.ts
@@ -21,26 +21,18 @@ import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {loadTimeData} from '../i18n_setup.js'; -import {routes} from '../route.js'; -import {Router} from '../router.js'; import {getTemplate} from './password_list_item.html.js'; -import {PasswordViewPageInteractions, PasswordViewPageUrlParams, recordPasswordViewInteraction} from './password_view.js'; +import {PASSWORD_VIEW_PAGE_REQUESTED_EVENT_NAME, PasswordViewPageInteractions, recordPasswordViewInteraction} from './password_view.js'; import {ShowPasswordMixin, ShowPasswordMixinInterface} from './show_password_mixin.js'; declare global { interface HTMLElementEventMap { [PASSWORD_MORE_ACTIONS_CLICKED_EVENT_NAME]: PasswordMoreActionsClickedEvent; - [PASSWORD_VIEW_PAGE_CLICKED_EVENT_NAME]: PasswordViewPageClickedEvent; } } -export type PasswordViewPageClickedEvent = CustomEvent<PasswordListItemElement>; - -export const PASSWORD_VIEW_PAGE_CLICKED_EVENT_NAME = - 'password-view-page-clicked'; - export type PasswordMoreActionsClickedEvent = CustomEvent<{ target: HTMLElement, listItem: PasswordListItemElement, @@ -132,16 +124,14 @@ if (!this.shouldShowSubpageButton_) { return; } - const params = new URLSearchParams(); - params.set(PasswordViewPageUrlParams.ID, this.entry.id.toString()); recordPasswordViewInteraction( PasswordViewPageInteractions.CREDENTIAL_ROW_CLICKED); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - this.dispatchEvent(new CustomEvent(PASSWORD_VIEW_PAGE_CLICKED_EVENT_NAME, { - bubbles: true, - composed: true, - detail: this, - })); + this.dispatchEvent( + new CustomEvent(PASSWORD_VIEW_PAGE_REQUESTED_EVENT_NAME, { + bubbles: true, + composed: true, + detail: this, + })); } private onPasswordMoreActionsButtonTap_() {
diff --git a/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts b/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts index 99c34278..9a069c4 100644 --- a/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts +++ b/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts
@@ -132,7 +132,15 @@ undoRemoveSavedPasswordOrException(): void; /** - * Gets the saved password for a given login pair. + * Gets the full credential for a given id. + * @param id The id for the password entry being being retrieved. + * @return A promise that resolves to the full |PasswordUiEntry|. + */ + requestCredentialDetails(id: number): + Promise<chrome.passwordsPrivate.PasswordUiEntry>; + + /** + * Gets the saved password for a given id and reason. * @param id The id for the password entry being being retrieved. * @param reason The reason why the plaintext password is requested. * @return A promise that resolves to the plaintext password. @@ -430,6 +438,22 @@ chrome.passwordsPrivate.undoRemoveSavedPasswordOrException(); } + requestCredentialDetails(id: number) { + return new Promise<chrome.passwordsPrivate.PasswordUiEntry>( + (resolve, reject) => { + chrome.passwordsPrivate.requestCredentialDetails( + id, + (passwordUiEntry: chrome.passwordsPrivate.PasswordUiEntry) => { + if (chrome.runtime.lastError) { + reject(chrome.runtime.lastError.message); + return; + } + + resolve(passwordUiEntry); + }); + }); + } + requestPlaintextPassword( id: number, reason: chrome.passwordsPrivate.PlaintextReason) { return new Promise<string>((resolve, reject) => {
diff --git a/chrome/browser/resources/settings/autofill_page/password_requestor_mixin.ts b/chrome/browser/resources/settings/autofill_page/password_requestor_mixin.ts index 17ad0499b..82ea024 100644 --- a/chrome/browser/resources/settings/autofill_page/password_requestor_mixin.ts +++ b/chrome/browser/resources/settings/autofill_page/password_requestor_mixin.ts
@@ -1,13 +1,15 @@ // Copyright 2022 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + /** * @fileoverview PasswordRequestorMixin is the mixin which bundles the - * |requestPlaintextPassword| API for conveniency. The mixin creates its own - * |BlockingRequestManager| in chromeos for handling the authentication. - * Elements implementing this mixin should include a - * 'settings-password-prompt-dialog' for Chrome OS. + * |requestPlaintextPassword| and |requestCredentialDetails| APIs for + * conveniency. The mixin creates its own |BlockingRequestManager| in chromeos + * for handling the authentication. Elements implementing this mixin should + * include a 'settings-password-prompt-dialog' for Chrome OS. */ + // <if expr="is_chromeos"> import {assert} from 'chrome://resources/js/assert_ts.js'; // </if> @@ -74,6 +76,28 @@ // </if> } + requestCredentialDetails(id: number): + Promise<chrome.passwordsPrivate.PasswordUiEntry> { + // <if expr="is_chromeos"> + // If no password was found, refresh auth token and retry. + return new Promise((resolve, reject) => { + PasswordManagerImpl.getInstance() + .requestCredentialDetails(id) + .then(resolve) + .catch(() => { + this.tokenRequestManager.request( + () => PasswordManagerImpl.getInstance() + .requestCredentialDetails(id) + .then(resolve) + .catch(reject)); + }); + }); + // </if> + // <if expr="not is_chromeos"> + return PasswordManagerImpl.getInstance().requestCredentialDetails(id); + // </if> + } + // <if expr="is_chromeos"> /** * When this event fired, it means that the password-prompt-dialog @@ -112,6 +136,8 @@ requestPlaintextPassword( id: number, reason: chrome.passwordsPrivate.PlaintextReason): Promise<string>; + requestCredentialDetails(id: number): + Promise<chrome.passwordsPrivate.PasswordUiEntry>; // <if expr="is_chromeos"> onTokenObtained(e: CustomEvent<chrome.quickUnlockPrivate.TokenInfo>): void; onPasswordPromptClose(event: CloseEvent): void;
diff --git a/chrome/browser/resources/settings/autofill_page/password_view.html b/chrome/browser/resources/settings/autofill_page/password_view.html index a152047d..d33bb058 100644 --- a/chrome/browser/resources/settings/autofill_page/password_view.html +++ b/chrome/browser/resources/settings/autofill_page/password_view.html
@@ -65,7 +65,8 @@ $i18n{editPasswordPasswordLabel} </div> <div class="row-container"> - <input id="passwordInput" readonly value="[[getPassword_(password_)]]" + <input id="passwordInput" readonly + value="[[getPasswordOrFederationText_(credential)]]" type="[[getPasswordInputType_(credential, isPasswordVisible_)]]" aria-label="$i18n{editPasswordPasswordLabel}"> <template is="dom-if" if="[[!isFederated_(credential)]]" restamp>
diff --git a/chrome/browser/resources/settings/autofill_page/password_view.ts b/chrome/browser/resources/settings/autofill_page/password_view.ts index edf78fa..9255c7da 100644 --- a/chrome/browser/resources/settings/autofill_page/password_view.ts +++ b/chrome/browser/resources/settings/autofill_page/password_view.ts
@@ -29,13 +29,25 @@ import {routes} from '../route.js'; import {Route, RouteObserverMixin, RouteObserverMixinInterface, Router} from '../router.js'; -import {MergePasswordsStoreCopiesMixin, MergePasswordsStoreCopiesMixinInterface} from './merge_passwords_store_copies_mixin.js'; import {SavedPasswordEditedEvent} from './password_edit_dialog.js'; +import {PasswordListItemElement} from './password_list_item.js'; import {PasswordRemovalMixin, PasswordRemovalMixinInterface} from './password_removal_mixin.js'; import {PasswordRemoveDialogPasswordsRemovedEvent} from './password_remove_dialog.js'; import {PasswordRequestorMixin, PasswordRequestorMixinInterface} from './password_requestor_mixin.js'; import {getTemplate} from './password_view.html.js'; +declare global { + interface HTMLElementEventMap { + [PASSWORD_VIEW_PAGE_REQUESTED_EVENT_NAME]: PasswordViewPageRequestedEvent; + } +} + +export type PasswordViewPageRequestedEvent = + CustomEvent<PasswordListItemElement>; + +export const PASSWORD_VIEW_PAGE_REQUESTED_EVENT_NAME = + 'password-view-page-requested'; + export interface PasswordViewElement { $: { toast: CrToastElement, @@ -43,12 +55,11 @@ } const PasswordViewElementBase = - PasswordRemovalMixin(PasswordRequestorMixin(MergePasswordsStoreCopiesMixin( - RouteObserverMixin(I18nMixin(PolymerElement))))) as { + PasswordRemovalMixin(PasswordRequestorMixin( + RouteObserverMixin(I18nMixin(PolymerElement)))) as { new (): PolymerElement & I18nMixinInterface & - RouteObserverMixinInterface & - MergePasswordsStoreCopiesMixinInterface & - PasswordRequestorMixinInterface & PasswordRemovalMixinInterface, + RouteObserverMixinInterface & PasswordRequestorMixinInterface & + PasswordRemovalMixinInterface, }; export enum PasswordRemovalUrlParams { @@ -87,6 +98,9 @@ } export class PasswordViewElement extends PasswordViewElementBase { + // TODO(crbug/1345899): Reroute to password list when the credential is + // deleted or update the page when credential is updated from other sources + // (e.g: sync). static get is() { return 'password-view'; } @@ -97,8 +111,6 @@ static get properties() { return { - id_: Number, - toastText_: { type: String, value: '', @@ -122,73 +134,92 @@ value: false, }, - password_: { - type: String, - value: '', - }, - showEditDialog_: { type: Boolean, value: false, }, - - // <if expr="is_chromeos"> - showPasswordPromptDialog_: Boolean, - // </if> - - /** - * Used to keep the password view page open when a credential is - * modified. savedPasswords may take its time to update. - */ - recentlyEdited_: Boolean, - }; } - static get observers() { - return ['savedPasswordsChanged_(savedPasswords.splices, id_)']; - } - - /** - * Valid value for id is null or number, undefined is set for early return in - * the observer. - */ - private id_: number|null|undefined; private toastText_: string; credential: chrome.passwordsPrivate.PasswordUiEntry|null; private isPasswordNotesEnabled_: boolean; private isPasswordVisible_: boolean; - private password_: string; - private recentlyEdited_: boolean; private showEditDialog_: boolean; + private visibilityChangedListener_: () => void; override currentRouteChanged(route: Route): void { if (route !== routes.PASSWORD_VIEW) { - this.id_ = undefined; - this.recentlyEdited_ = false; - this.password_ = ''; - this.credential = null; this.hideToast_(); + this.credential = null; + this.isPasswordVisible_ = false; + this.showEditDialog_ = false; return; } - const queryParameters = Router.getInstance().getQueryParameters(); - const convertToNullOrNumber = (input: string|null) => { - if (!input || Number.isNaN(Number(input))) { - return null; - } - return Number(input); - }; - this.id_ = convertToNullOrNumber( - queryParameters.get(PasswordViewPageUrlParams.ID)); + if (!this.credential) { + this.requestCredential_(); + } } + override ready() { + super.ready(); + + if (document.visibilityState !== 'visible') { + this.visibilityChangedListener_ = () => { + if (document.visibilityState === 'visible' && + Router.getInstance().getCurrentRoute() === routes.PASSWORD_VIEW && + !this.credential) { + this.requestCredential_(); + document.removeEventListener( + 'visibilitychange', this.visibilityChangedListener_); + } + }; + document.addEventListener( + 'visibilitychange', this.visibilityChangedListener_); + } + } + + override onPasswordRemoveDialogPasswordsRemoved( event: PasswordRemoveDialogPasswordsRemovedEvent) { super.onPasswordRemoveDialogPasswordsRemoved(event); this.rerouteAndShowRemovalNotification_(event.detail.removedFromStores); } + private getId_() { + const idInput = Router.getInstance().getQueryParameters().get( + PasswordViewPageUrlParams.ID); + + if (!idInput || Number.isNaN(Number(idInput))) { + return null; + } + return Number(idInput); + } + + // This method is responsible for requesting the credential details (password, + // note). If the user does not authenticate, the page will be redirected to + // the passwords main page. + // The method also is disabled when the tab is not visible to the user (e.g: a + // background tab) so that the native authentication dialog will not be shown. + private requestCredential_() { + const credentialId = this.getId_(); + if (credentialId === null || document.visibilityState !== 'visible') { + return; + } + + // wrap the id in a PasswordListItemElement: + const eventDetail = {entry: {id: credentialId}} as unknown as + PasswordListItemElement; + + this.dispatchEvent( + new CustomEvent(PASSWORD_VIEW_PAGE_REQUESTED_EVENT_NAME, { + bubbles: true, + composed: true, + detail: eventDetail, + })); + } + /** Gets the title text for the show/hide icon. */ private getPasswordButtonTitle_(): string { assert(!this.isFederated_()); @@ -211,10 +242,12 @@ /** * Show the password or a placeholder with 10 characters when password is not - * set. + * set. If the credential is a federated credential, it shows the federation + * text. */ - private getPassword_(): string { - return this.password_ || ' '.repeat(10); + private getPasswordOrFederationText_(): string { + return this.credential?.password || this.credential?.federationText || + ' '.repeat(10); } /** @@ -274,12 +307,7 @@ assert(!this.isFederated_()); recordPasswordViewInteraction( PasswordViewPageInteractions.PASSWORD_EDIT_BUTTON_CLICKED); - this.requestPlaintextPassword( - this.credential!.id, chrome.passwordsPrivate.PlaintextReason.EDIT) - .then(password => { - this.credential!.password = password; - this.showEditDialog_ = true; - }, () => {}); + this.showEditDialog_ = true; } private onEditDialogClosed_() { @@ -287,13 +315,10 @@ } private onSavedPasswordEdited_(event: SavedPasswordEditedEvent) { - this.recentlyEdited_ = true; // The dialog is recently closed. Use the new IDs to update the URL. const newParams = Router.getInstance().getQueryParameters(); - - if (event.detail !== undefined) { - newParams.set(PasswordViewPageUrlParams.ID, String(event.detail)); - } + this.credential = event.detail; + newParams.set(PasswordViewPageUrlParams.ID, String(event.detail.id)); Router.getInstance().updateRouteParams(newParams); } @@ -301,18 +326,12 @@ private onShowPasswordButtonClick_() { assert(!this.isFederated_()); if (this.isPasswordVisible_) { - this.password_ = ''; this.isPasswordVisible_ = false; return; } recordPasswordViewInteraction( PasswordViewPageInteractions.PASSWORD_SHOW_BUTTON_CLICKED); - this.requestPlaintextPassword( - this.credential!.id, chrome.passwordsPrivate.PlaintextReason.VIEW) - .then(password => { - this.password_ = password; - this.isPasswordVisible_ = true; - }, () => {}); + this.isPasswordVisible_ = true; } /** Reroutes to PASSWORDS page and shows the removal notification */ @@ -327,41 +346,6 @@ Router.getInstance().navigateTo(routes.PASSWORDS, params); } - private savedPasswordsChanged_() { - this.credential = null; - this.password_ = ''; - this.isPasswordVisible_ = false; - // When an observed property changes, the observer will be called. Make sure - // that all properties are set. - if (!this.savedPasswords.length || this.id_ === undefined) { - return; - } - const item = this.savedPasswords.find( - (item: chrome.passwordsPrivate.PasswordUiEntry) => { - return item.id === this.id_; - }); - - if (!item) { - if (!this.recentlyEdited_) { - // Rerouting might have happened due to the edited username. Do not - // reroute back. - recordPasswordViewInteraction( - PasswordViewPageInteractions.CREDENTIAL_NOT_FOUND); - Router.getInstance().navigateTo(routes.PASSWORDS); - } - return; - } - - this.credential = item; - if (item.federationText) { - this.password_ = item.federationText!; - } - this.showEditDialog_ = false; - this.recentlyEdited_ = false; - recordPasswordViewInteraction( - PasswordViewPageInteractions.CREDENTIAL_FOUND); - } - private hideToast_() { this.$.toast.hide(); }
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_list_handler.ts b/chrome/browser/resources/settings/autofill_page/passwords_list_handler.ts index 9324dc0..38192e30 100644 --- a/chrome/browser/resources/settings/autofill_page/passwords_list_handler.ts +++ b/chrome/browser/resources/settings/autofill_page/passwords_list_handler.ts
@@ -36,12 +36,12 @@ import {routes} from '../route.js'; import {Route, RouteObserverMixin, RouteObserverMixinInterface, Router} from '../router.js'; -import {PASSWORD_MORE_ACTIONS_CLICKED_EVENT_NAME, PASSWORD_VIEW_PAGE_CLICKED_EVENT_NAME, PasswordListItemElement, PasswordMoreActionsClickedEvent, PasswordViewPageClickedEvent} from './password_list_item.js'; +import {PASSWORD_MORE_ACTIONS_CLICKED_EVENT_NAME, PasswordListItemElement, PasswordMoreActionsClickedEvent} from './password_list_item.js'; import {PasswordManagerImpl, PasswordManagerProxy} from './password_manager_proxy.js'; import {PasswordRemovalMixin, PasswordRemovalMixinInterface} from './password_removal_mixin.js'; import {PasswordRemoveDialogPasswordsRemovedEvent} from './password_remove_dialog.js'; import {PasswordRequestorMixin, PasswordRequestorMixinInterface} from './password_requestor_mixin.js'; -import {PasswordRemovalUrlParams} from './password_view.js'; +import {PASSWORD_VIEW_PAGE_REQUESTED_EVENT_NAME, PasswordRemovalUrlParams, PasswordViewPageRequestedEvent} from './password_view.js'; import {getTemplate} from './passwords_list_handler.html.js'; export interface PasswordsListHandlerElement { @@ -188,8 +188,8 @@ this.passwordMoreActionsClickedHandler_); this.addEventListener( - PASSWORD_VIEW_PAGE_CLICKED_EVENT_NAME, - this.onPasswordViewPageClickedEvent); + PASSWORD_VIEW_PAGE_REQUESTED_EVENT_NAME, + this.onPasswordViewPageRequestedEvent); } override connectedCallback() { @@ -254,7 +254,8 @@ this.displayRemovalNotification_(event.detail.removedFromStores); } - private onPasswordViewPageClickedEvent(event: PasswordViewPageClickedEvent) { + private onPasswordViewPageRequestedEvent(event: + PasswordViewPageRequestedEvent) { this.activePassword_ = event.detail; }
diff --git a/chrome/browser/resources_integrity.cc b/chrome/browser/resources_integrity.cc index 8120999d..42c179be 100644 --- a/chrome/browser/resources_integrity.cc +++ b/chrome/browser/resources_integrity.cc
@@ -21,6 +21,7 @@ #include "base/task/thread_pool.h" #include "chrome/common/chrome_paths.h" #include "crypto/secure_hash.h" +#include "ui/base/buildflags.h" #if BUILDFLAG(IS_WIN) #include "chrome/app/chrome_exe_main_win.h" @@ -109,8 +110,10 @@ kSha256_resources_pak; base::span<const uint8_t, crypto::kSHA256Length> chrome_100_hash = kSha256_chrome_100_percent_pak; +#if BUILDFLAG(ENABLE_HIDPI) base::span<const uint8_t, crypto::kSHA256Length> chrome_200_hash = kSha256_chrome_200_percent_pak; +#endif #endif // BUILDFLAG(IS_WIN) scoped_refptr<base::SequencedTaskRunner> task_runner = @@ -126,9 +129,11 @@ chrome_100_hash, task_runner, base::BindOnce(&ReportPakIntegrity, "SafeBrowsing.PakIntegrity.Chrome100")); +#if BUILDFLAG(ENABLE_HIDPI) CheckResourceIntegrity( resources_pack_path.DirName().AppendASCII("chrome_200_percent.pak"), chrome_200_hash, task_runner, base::BindOnce(&ReportPakIntegrity, "SafeBrowsing.PakIntegrity.Chrome200")); +#endif }
diff --git a/chrome/browser/rlz/chrome_rlz_tracker_delegate.cc b/chrome/browser/rlz/chrome_rlz_tracker_delegate.cc index 81e5d6d..58660a4 100644 --- a/chrome/browser/rlz/chrome_rlz_tracker_delegate.cc +++ b/chrome/browser/rlz/chrome_rlz_tracker_delegate.cc
@@ -43,7 +43,6 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) #include "ash/constants/ash_switches.h" -#include "base/command_line.h" #endif ChromeRLZTrackerDelegate::ChromeRLZTrackerDelegate() {}
diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer_browsertest.cc b/chrome/browser/safe_browsing/download_protection/file_analyzer_browsertest.cc index 2c283bf..6b8d29f 100644 --- a/chrome/browser/safe_browsing/download_protection/file_analyzer_browsertest.cc +++ b/chrome/browser/safe_browsing/download_protection/file_analyzer_browsertest.cc
@@ -17,7 +17,6 @@ #include "chrome/test/base/in_process_browser_test.h" #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) -#include "chrome/browser/safe_browsing/download_protection/document_analysis_service.h" #include "chrome/services/file_util/public/cpp/sandboxed_document_analyzer.h" #endif
diff --git a/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.cc b/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.cc index 100f793..3367e3a 100644 --- a/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.cc +++ b/chrome/browser/safe_browsing/tailored_security/chrome_tailored_security_service.cc
@@ -24,7 +24,6 @@ #else #include "chrome/browser/safe_browsing/tailored_security/notification_handler_desktop.h" #include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/views/safe_browsing/tailored_security_desktop_dialog.h" #endif
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/DevicePickerBottomSheetContent.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/DevicePickerBottomSheetContent.java index 7a2ed73..6800fb0c 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/DevicePickerBottomSheetContent.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/DevicePickerBottomSheetContent.java
@@ -68,7 +68,8 @@ listView.setAdapter(mAdapter); listView.setOnItemClickListener(this); - listView.addFooterView(new ManageAccountDevicesLinkView(mContext)); + listView.addFooterView(LayoutInflater.from(mContext).inflate( + R.layout.send_tab_to_self_device_picker_footer, null)); } @Override
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/ManageAccountDevicesLinkView.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/ManageAccountDevicesLinkView.java index 61ad6d2..b7315b4 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/ManageAccountDevicesLinkView.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/ManageAccountDevicesLinkView.java
@@ -14,7 +14,7 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; -import android.widget.FrameLayout; +import android.widget.LinearLayout; import android.widget.TextView; import org.chromium.base.IntentUtils; @@ -32,13 +32,9 @@ import org.chromium.ui.text.SpanApplier; /** View containing the sharing account's avatar, email and a link to manage its target devices. */ -public class ManageAccountDevicesLinkView extends FrameLayout { +public class ManageAccountDevicesLinkView extends LinearLayout { private static final int ACCOUNT_AVATAR_SIZE_DP = 24; - public ManageAccountDevicesLinkView(Context context) { - this(context, null); - } - public ManageAccountDevicesLinkView(Context context, AttributeSet attrs) { super(context, attrs); inflateIfVisible();
diff --git a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/send_tab_to_self/SendTabToSelfBottomSheetRenderTest.java b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/send_tab_to_self/SendTabToSelfBottomSheetRenderTest.java index 299ab83..3b8e07ee 100644 --- a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/send_tab_to_self/SendTabToSelfBottomSheetRenderTest.java +++ b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/send_tab_to_self/SendTabToSelfBottomSheetRenderTest.java
@@ -52,7 +52,7 @@ public final RenderTestRule mRenderTestRule = RenderTestRule.Builder.withPublicCorpus() .setBugComponent(RenderTestRule.Component.UI_BROWSER_SHARING) - .setRevision(2) + .setRevision(3) .build(); @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @@ -138,4 +138,4 @@ return new AccountInfo(new CoreAccountId("id"), "test@gmail.com", "gaiaId", "John Doe", "John", bitmap, new AccountCapabilities(new HashMap<>())); } -} \ No newline at end of file +}
diff --git a/chrome/browser/sync/test/integration/single_client_workspace_desk_sync_test.cc b/chrome/browser/sync/test/integration/single_client_workspace_desk_sync_test.cc index 3b422a2..3f6652d 100644 --- a/chrome/browser/sync/test/integration/single_client_workspace_desk_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_workspace_desk_sync_test.cc
@@ -169,9 +169,9 @@ base::RunLoop loop; model->AddOrUpdateEntry( - std::make_unique<DeskTemplate>( - kTestUuid1_.AsLowercaseString(), DeskTemplateSource::kUser, - "template 1", AdvanceAndGetTime(), DeskTemplateType::kTemplate), + std::make_unique<DeskTemplate>(kTestUuid1_, DeskTemplateSource::kUser, + "template 1", AdvanceAndGetTime(), + DeskTemplateType::kTemplate), base::BindLambdaForTesting([&](DeskModel::AddOrUpdateEntryStatus status) { EXPECT_EQ(DeskModel::AddOrUpdateEntryStatus::kOk, status); loop.Quit();
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_be.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_be.xtb index ccab734..d5662f4 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_be.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_be.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="be"> +<translation id="1068168522143272502">Спіс адрасоў і спосабаў аплаты, якія можна ўводзіць аўтазапаўненнем пры афармленні заказаў, разгорнуты на палову экрана.</translation> +<translation id="567079066552447069">Спіс адрасоў і спосабаў аплаты, якія можна ўводзіць аўтазапаўненнем пры афармленні заказаў, закрыты.</translation> +<translation id="8264703973415044493">Спіс адрасоў і спосабаў аплаты, якія можна ўводзіць аўтазапаўненнем пры афармленні заказаў, разгорнуты на ўвесь экран.</translation> +<translation id="8315600272591552085">Спіс адрасоў і спосабаў аплаты, якія можна ўводзіць аўтазапаўненнем пры афармленні заказаў.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cs.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cs.xtb index dc153a85..a86979e 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cs.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cs.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="cs"> +<translation id="1068168522143272502">Seznam adres a platebních možností, které se mají vyplnit při placení, je otevřený na poloviční výšku.</translation> +<translation id="567079066552447069">Seznam adres a platebních možností, které se mají vyplnit při placení, je zavřený.</translation> +<translation id="8264703973415044493">Seznam adres a platebních možností, které se mají vyplnit při placení, je otevřený na celou výšku.</translation> +<translation id="8315600272591552085">Seznam adres a platebních možností, které se mají vyplnit při placení.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb index b06dc3a..f29b4a7 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="cy"> +<translation id="1068168522143272502">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu wedi agor ar hanner uchder.</translation> +<translation id="567079066552447069">Mae'r rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu ar gau.</translation> +<translation id="8264703973415044493">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu wedi agor ar uchder llawn.</translation> +<translation id="8315600272591552085">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_de.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_de.xtb index 43dd909..2f022abc 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_de.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_de.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="de"> +<translation id="1068168522143272502">Die Liste der Adressen und Zahlungsoptionen, die beim Zahlungsvorgang ausgefüllt werden sollen, ist halb geöffnet.</translation> +<translation id="567079066552447069">Die Liste der Adressen und Zahlungsoptionen, die während des Bezahlvorgangs ausgefüllt werden sollen, ist geschlossen.</translation> +<translation id="8264703973415044493">Die Liste der Adressen und Zahlungsoptionen, die während des Bezahlvorgangs ausgefüllt werden sollen, ist vollständig geöffnet.</translation> +<translation id="8315600272591552085">Die Liste der Adressen und Zahlungsoptionen, die beim Zahlungsvorgang ausgefüllt werden sollen.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es-419.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es-419.xtb index b652ed0..a2ec00b7 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es-419.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_es-419.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es-419"> +<translation id="1068168522143272502">La lista de direcciones y opciones de pago que se debe completar durante los flujos de confirmación de la compra está abierta a media altura.</translation> +<translation id="567079066552447069">La lista de direcciones y opciones de pago que se debe completar durante los flujos de confirmación de la compra está cerrada.</translation> +<translation id="8264703973415044493">La lista de direcciones y opciones de pago que se debe completar durante los flujos de confirmación de la compra se abrió en su totalidad.</translation> +<translation id="8315600272591552085">Lista de direcciones y opciones de pago que se debe completar durante los flujos de confirmación de la compra.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb index ab777bc5..48981c6 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="et"> +<translation id="1068168522143272502">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on avatud poolel kõrgusel.</translation> +<translation id="567079066552447069">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on suletud.</translation> +<translation id="8264703973415044493">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on avatud täiskõrgusel.</translation> +<translation id="8315600272591552085">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb index 6910975..34ef136a 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="eu"> +<translation id="1068168522143272502">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda altuera erdian irekita dago.</translation> +<translation id="567079066552447069">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda itxita dago.</translation> +<translation id="8264703973415044493">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda altuera osoan irekita dago.</translation> +<translation id="8315600272591552085">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fi.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fi.xtb index 60ba9aa..1e48595 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fi.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fi.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fi"> +<translation id="1068168522143272502">Maksuprosessin aikana täytettävien osoitteiden ja maksuvaihtoehtojen listat on avattu puoliksi.</translation> +<translation id="567079066552447069">Maksuprosessin aikana täytettävien osoitteiden ja maksuvaihtoehtojen listat on suljettu.</translation> +<translation id="8264703973415044493">Maksuprosessin aikana täytettävien osoitteiden ja maksuvaihtoehtojen listat on avattu täysin.</translation> +<translation id="8315600272591552085">Maksuprosessin aikana täytettävien osoitteiden ja maksuvaihtoehtojen listat.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hy.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hy.xtb index c9b28dd..1e8530e5 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hy.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hy.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hy"> +<translation id="1068168522143272502">Հասցեների և վճարման եղանակների ցանկը, որը ցուցադրվում է գնումների ձևակերպման ժամանակ, բացված է կիսով չափ։</translation> +<translation id="567079066552447069">Հասցեների և վճարման եղանակների ցանկը, որը ցուցադրվում է գնումների ձևակերպման ժամանակ, փակ է։</translation> +<translation id="8264703973415044493">Հասցեների և վճարման եղանակների ցանկը, որը ցուցադրվում է գնումների ձևակերպման ժամանակ, բացված է ամբողջությամբ։</translation> +<translation id="8315600272591552085">Հասցեների և վճարման եղանակների ցանկը, որը ցուցադրվում է գնումների ձևակերպման ժամանակ։</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ky.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ky.xtb index 6dae058..5558694 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ky.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ky.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ky"> +<translation id="1068168522143272502">Төлөө учурунда толтурула турган даректердин жана төлөм ыкмаларынын тизмеси жарым экранда ачылды.</translation> +<translation id="567079066552447069">Төлөө учурунда толтурула турган даректердин жана төлөм ыкмаларынын тизмеси жабылды.</translation> +<translation id="8264703973415044493">Төлөө учурунда толтурула турган даректердин жана төлөм ыкмаларынын тизмеси толук экранда ачылды.</translation> +<translation id="8315600272591552085">Төлөө учурунда толтурула турган даректердин жана төлөм ыкмаларынын тизмеси.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ms.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ms.xtb index 518685dd..8f711088 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ms.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ms.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ms"> +<translation id="1068168522143272502">Senarai alamat dan pilihan pembayaran yang perlu diisi semasa aliran semak keluar dibuka pada ketinggian separuh.</translation> +<translation id="567079066552447069">Senarai alamat dan pilihan pembayaran yang perlu diisi semasa aliran semak keluar ditutup.</translation> +<translation id="8264703973415044493">Senarai alamat dan pilihan pembayaran yang perlu diisi semasa aliran semak keluar dibuka pada ketinggian penuh.</translation> +<translation id="8315600272591552085">Senarai alamat dan pilihan pembayaran yang perlu diisi semasa aliran semak keluar.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_my.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_my.xtb index 60d303e4..d5ed0ab 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_my.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_my.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="my"> +<translation id="1068168522143272502">ငွေရှင်းသည့်အဆင့်များအတွင်း ဖြည့်ရမည့် လိပ်စာနှင့် ပေးချေမှုနည်းလမ်းများ စာရင်းကို မြင်ကွင်းတစ်ဝက် ဖွင့်ထားသည်။</translation> +<translation id="567079066552447069">ငွေရှင်းသည့်အဆင့်များအတွင်း ဖြည့်ရမည့် လိပ်စာနှင့် ပေးချေမှုနည်းလမ်းများ စာရင်းကို ပိတ်ထားသည်။</translation> +<translation id="8264703973415044493">ငွေရှင်းသည့်အဆင့်များအတွင်း ဖြည့်ရမည့် လိပ်စာနှင့် ပေးချေမှုနည်းလမ်းများ စာရင်းကို မြင်ကွင်းအပြည့် ဖွင့်ထားသည်။</translation> +<translation id="8315600272591552085">ငွေရှင်းသည့်အဆင့်များအတွင်း ဖြည့်ရမည့် လိပ်စာနှင့် ပေးချေမှုနည်းလမ်းများ စာရင်း။</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb index 6dfaa442..3b75c35 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ru"> +<translation id="1068168522143272502">Список адресов и способов оплаты для заполнения во время оформления покупок открыт на половину экрана.</translation> +<translation id="567079066552447069">Список адресов и способов оплаты для автозаполнения во время оформления покупок закрыт.</translation> +<translation id="8264703973415044493">Список адресов и способов оплаты для автозаполнения во время оформления покупок открыт на весь экран.</translation> +<translation id="8315600272591552085">Список адресов и способов оплаты для заполнения во время оформления покупок.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb index cc50fd5..0e04484 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="si"> +<translation id="1068168522143272502">අර්ධ උසින් විවෘත කරන ලද ගෙවා පිටවීමේ ප්රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation> +<translation id="567079066552447069">ගෙවා පිටවීමේ ප්රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව වසා ඇත.</translation> +<translation id="8264703973415044493">සම්පූර්ණ උසින් විවෘත කරන ලද ගෙවා පිටවීමේ ප්රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation> +<translation id="8315600272591552085">ගෙවා පිටවීමේ ප්රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sq.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sq.xtb index a954869..5f5649a 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sq.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sq.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sq"> +<translation id="1068168522143272502">Lista e adresave dhe opsioneve të pagesës që plotësohen gjatë flukseve të përfundimit të blerjes është hapur në gjysmë gjatësi.</translation> +<translation id="567079066552447069">Lista e adresave dhe opsioneve të pagesës që plotësohen gjatë flukseve të përfundimit të blerjes është mbyllur.</translation> +<translation id="8264703973415044493">Lista e adresave dhe opsioneve të pagesës që plotësohen gjatë flukseve të përfundimit të blerjes është hapur në gjatësinë e plotë.</translation> +<translation id="8315600272591552085">Lista e adresave dhe opsioneve të pagesës që plotësohen gjatë flukseve të përfundimit të blerjes.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb index 9a787b8..c5fbf61f 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sv"> +<translation id="1068168522143272502">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har öppnats över halva skärmen.</translation> +<translation id="567079066552447069">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har stängts.</translation> +<translation id="8264703973415044493">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har öppnats över hela skärmen.</translation> +<translation id="8315600272591552085">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb index 9aa61cb..258d31b 100644 --- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb +++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb
@@ -1,4 +1,8 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sw"> +<translation id="1068168522143272502">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefunguliwa katika nusu skrini.</translation> +<translation id="567079066552447069">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefungwa.</translation> +<translation id="8264703973415044493">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefunguliwa katika skrini nzima.</translation> +<translation id="8315600272591552085">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/ui/android/signin/java/res/layout/sync_consent_view.xml b/chrome/browser/ui/android/signin/java/res/layout/sync_consent_view.xml index aab3e2d..152a95b7 100644 --- a/chrome/browser/ui/android/signin/java/res/layout/sync_consent_view.xml +++ b/chrome/browser/ui/android/signin/java/res/layout/sync_consent_view.xml
@@ -48,26 +48,28 @@ android:layout_marginBottom="16dp" tools:ignore="ContentDescription" /> - <TextView + <org.chromium.ui.widget.TextViewWithLeading android:id="@+id/sync_consent_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8dp" - android:textAppearance="@style/TextAppearance.Headline.Primary" /> + android:textAppearance="@style/TextAppearance.Headline.Primary" + app:leading="@dimen/headline_size_leading" /> <TextView android:id="@+id/sync_consent_subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" - android:textAppearance="@style/TextAppearance.TextMedium.Secondary" /> + android:textAppearance="@style/TextAppearance.TextMedium.Secondary" + app:leading="@dimen/text_size_medium_leading" /> <org.chromium.components.browser_ui.widget.MaterialCardViewNoShadow + style="@style/MaterialCardStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="24dp" - android:paddingVertical="16dp" - style="@style/MaterialCardStyle"> + android:paddingVertical="16dp"> <LinearLayout android:id="@+id/sync_data_types" @@ -158,7 +160,8 @@ android:id="@+id/sync_consent_details_description" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="16dp" + android:layout_marginBottom="24dp" android:gravity="center" - android:textAppearance="@style/TextAppearance.TextMedium.Secondary" /> + android:textAppearance="@style/TextAppearance.TextSmall.Secondary" + app:leading="@dimen/text_size_small_leading" /> </org.chromium.chrome.browser.ui.signin.SyncConsentView>
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java index b50e135..72ca926 100644 --- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java +++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java
@@ -77,6 +77,9 @@ private static final String ARGUMENT_ACCOUNT_NAME = "SyncConsentFragmentBase.AccountName"; + /** Field trial group param for the tangible sync experiment. */ + private static final String PARAM_TANGIBLE_SYNC_GROUP = "group_id"; + // This bundle argument is optional; it is set only if the child status cannot be reliably // inferred by looking at the last used regular profile, because child sign auto sign in may // not have completed. @@ -95,6 +98,15 @@ int ADD_ACCOUNT = 2; } + /** Group name for different UIs in tangible sync experiment. */ + @IntDef({TangibleSyncGroup.GROUP_A, TangibleSyncGroup.GROUP_B, TangibleSyncGroup.GROUP_C}) + @Retention(RetentionPolicy.SOURCE) + @interface TangibleSyncGroup { + int GROUP_A = 1; + int GROUP_B = 2; + int GROUP_C = 3; + } + private final AccountManagerFacade mAccountManagerFacade; protected boolean mIsChild; @@ -489,10 +501,41 @@ } } + private static @TangibleSyncGroup int getTangibleSyncGroup() { + return ChromeFeatureList.getFieldTrialParamByFeatureAsInt(ChromeFeatureList.TANGIBLE_SYNC, + PARAM_TANGIBLE_SYNC_GROUP, TangibleSyncGroup.GROUP_A); + } + + private static @StringRes int getSyncConsentViewTitleText() { + switch (getTangibleSyncGroup()) { + case TangibleSyncGroup.GROUP_A: + return R.string.sync_consent_title; + case TangibleSyncGroup.GROUP_B: + return R.string.sync_consent_title_variation; + case TangibleSyncGroup.GROUP_C: + return R.string.sync_consent_title; + default: + throw new IllegalStateException("Invalid group id"); + } + } + + private static @StringRes int getSyncConsentViewSubtitleText() { + switch (getTangibleSyncGroup()) { + case TangibleSyncGroup.GROUP_A: + return R.string.sync_consent_subtitle; + case TangibleSyncGroup.GROUP_B: + return R.string.sync_consent_subtitle; + case TangibleSyncGroup.GROUP_C: + return R.string.sync_consent_subtitle_variation; + default: + throw new IllegalStateException("Invalid group id"); + } + } + private void updateSyncConsentViewText(@StringRes int refuseButtonTextId) { - mConsentTextTracker.setText(mSyncConsentView.getTitleView(), R.string.sync_consent_title); + mConsentTextTracker.setText(mSyncConsentView.getTitleView(), getSyncConsentViewTitleText()); mConsentTextTracker.setText( - mSyncConsentView.getSubtitleView(), R.string.sync_consent_subtitle); + mSyncConsentView.getSubtitleView(), getSyncConsentViewSubtitleText()); mConsentTextTracker.setText( mSyncConsentView.getBookmarksRow(), R.string.sync_consent_bookmarks_text);
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index a9c526c6..6408a8f 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -2904,9 +2904,15 @@ <message name="IDS_SYNC_CONSENT_TITLE" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on sync. 'Sync' is short for 'synchronization'. The tone should be informative and inviting. [CHAR_LIMIT=35]"> Turn on sync </message> - <message name="IDS_SYNC_CONSENT_SUBTITLE" desc="This string appears as a subheading a full-page screen that asks users if they want to turn on sync. This string explains to users that they can back up their Chrome data and use it on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. The word 'stuff' can be translated as 'data' or similar if there is no natural translation of 'stuff'. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting. [CHAR_LIMIT=100]"> + <message name="IDS_SYNC_CONSENT_TITLE_VARIATION" desc="This string appears as a heading on a full-page screen that asks users if they want to turn on sync. 'Sync' is short for 'synchronization'. [CHAR_LIMIT=20]"> + Sync + </message> + <message name="IDS_SYNC_CONSENT_SUBTITLE" desc="This string appears as a subheading on a full-page screen that asks users if they want to turn on sync. This string explains to users that they can back up their Chrome data and use it on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. The word 'stuff' can be translated as 'data' or similar if there is no natural translation of 'stuff'. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting. [CHAR_LIMIT=100]"> Back up your stuff and use it on any device </message> + <message name="IDS_SYNC_CONSENT_SUBTITLE_VARIATION" desc="This string appears as a subheading on a full-page screen that asks users if they want to turn on sync. This string explains to users that they can get their Chrome data on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting. [CHAR_LIMIT=100]"> + Sync your data on all devices + </message> <message name="IDS_SIGNIN_SYNC_TITLE" desc="Title of Sync feature for the screen that asks users to sign-in and turn on Sync."> Sync your passwords, history & more on all devices </message>
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SYNC_CONSENT_SUBTITLE_VARIATION.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SYNC_CONSENT_SUBTITLE_VARIATION.png.sha1 new file mode 100644 index 0000000..161bfd4 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SYNC_CONSENT_SUBTITLE_VARIATION.png.sha1
@@ -0,0 +1 @@ +3f442f87735a3f48869d68ca76e8079dad85bd79 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SYNC_CONSENT_TITLE_VARIATION.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SYNC_CONSENT_TITLE_VARIATION.png.sha1 new file mode 100644 index 0000000..470d795 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SYNC_CONSENT_TITLE_VARIATION.png.sha1
@@ -0,0 +1 @@ +e80a43317ffed0a0e64029dd83ed8db90aae9356 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb index 57df452..24b69dd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Meer beheer oor die advertensies wat jy sien</translation> <translation id="1477626028522505441">Kon <ph name="FILE_NAME" /> weens bedienerkwessies nie aflaai nie.</translation> <translation id="148482509007564431">Boekmerkstoorvloei</translation> -<translation id="1488775391433859242">Jy kan hierdie foon gebruik om op die rekenaar aan te meld wat hierdie QR-kode wys.</translation> <translation id="1492417797159476138">Jy het hierdie gebruikernaam reeds vir hierdie werf gestoor</translation> <translation id="1493287004536771723">Jy volg tans <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Dateer Google Play Dienste op om jou wagwoorde te bestuur</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> items is uitgevee</translation> <translation id="2536728043171574184">Bekyk tans 'n vanlyn kopie van hierdie bladsy</translation> <translation id="2546283357679194313">Webkoekies en werfdata</translation> -<translation id="2549516196460093976">Jy kan hierdie tablet gebruik om op die rekenaar aan te meld wat hierdie QR-kode wys.</translation> <translation id="2558569818338050235">Jou blaaigeskiedenis raak die advertensies wat jy sien</translation> <translation id="2561519700418191927">Videovoorskoue</translation> <translation id="2567385386134582609">PRENT</translation> @@ -475,6 +473,7 @@ <translation id="3557336313807607643">Voeg by kontakte</translation> <translation id="3560491354538957576">Werf kan belangstellings definieer</translation> <translation id="3563767357928833671">Knipbordinhoud word gewys</translation> +<translation id="3566639033325271639">Dateer instellings op</translation> <translation id="3566923219790363270">Chrome maak nog gereed vir VR. Herbegin Chrome later.</translation> <translation id="3568688522516854065">Meld aan en skakel sinkronisering aan om jou oortjies van jou ander toestelle af te kry</translation> <translation id="357465026686164600">Foon as sekuriteitsleutel</translation> @@ -569,6 +568,7 @@ <translation id="4116038641877404294">Laai bladsye af om hulle vanlyn te gebruik</translation> <translation id="4135200667068010335">Lys toestelle om 'n oortjie mee te deel, is toegemaak.</translation> <translation id="4137746084635924146">Huidige toesteltaal</translation> +<translation id="414128724510021958">Rekenaarwerwe wat by verstek versoek is</translation> <translation id="4141536112466364990">Leer Chrome</translation> <translation id="4162867837470729563">Lys deelopsies teen volle hoogte.</translation> <translation id="4165986682804962316">Werfinstellings</translation> @@ -1143,6 +1143,7 @@ <translation id="7196215469483532480">Privaatheidgidsverduideliking is teen volle hoogte oopgemaak</translation> <translation id="7207760545532569765">Stel <ph name="TAB_COUNT" /> oortjies as nuwe agtergrondoortjies terug.</translation> <translation id="7208109991155904980">Reaksie is verwyder</translation> +<translation id="7217781228893594884">Incognito-oortjies sal gesluit word wanneer jy Chrome verlaat</translation> <translation id="7222235798733126207">Beperkte deling tussen werwe</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 aflaai hangende}other{# aflaaie hangende}}</translation> <translation id="7242755609445462077">Gestileerde nota <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb index ad4c9f2d..3ed5442 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -41,7 +41,7 @@ <translation id="1202892408424955784">ክትትል የሚደረግባቸው ምርቶች</translation> <translation id="1204037785786432551">የማውረጃ አገናኝ</translation> <translation id="1204692632633423444">የChrome እርምጃ አዝራር፡- <ph name="ACTION" /></translation> -<translation id="1206892813135768548">የአገናኝ ጽሑፍ ቅዳ</translation> +<translation id="1206892813135768548">የአገናኝ ጽሁፍ ቅዳ</translation> <translation id="1208340532756947324">በመላ መሣሪያዎች ላይ ስምረትን ማብራት ለማስመር እና ግላዊነትን ለማላበስ</translation> <translation id="1209206284964581585">ለአሁን ደብቅ</translation> <translation id="1227058898775614466">የዳሰሳ ታሪክ</translation> @@ -105,7 +105,6 @@ <translation id="1474893630593443211">እርስዎ የሚመለከቷቸው ማስታወቂያዎች ላይ ተጨማሪ ቁጥጥር</translation> <translation id="1477626028522505441">በአገልጋይ ችግሮች ምክንያት <ph name="FILE_NAME" />ን ማውረድ አልተሳካም።</translation> <translation id="148482509007564431">የዕልባት ማስቀመጥ ፍሰት</translation> -<translation id="1488775391433859242">ይህን QR ኮድ ወደሚያሳየው ኮምፒውተር በመለያ ለመግባት ይህን ስልክ መጠቀም ይችላሉ።</translation> <translation id="1492417797159476138">ይህንን የተጠቃሚ ስም ለዚህ ጣቢያ ቀድሞውኑ አስቀምጠዋል</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" />ን እየተከተሉ ነው</translation> <translation id="1502010315804028179">የእርስዎን ይለፍ ቃላት ለማስተዳደር የGoogle Play አገልግሎቶችን ያዘምኑ</translation> @@ -153,7 +152,7 @@ <translation id="1749561566933687563">የእርስዎን ዕልባቶች ያስምሩ</translation> <translation id="1750259112639922169">የትር ቡድን - <ph name="TAB_COUNT" /> ትሮች</translation> <translation id="17513872634828108">ትሮችን ክፈት</translation> -<translation id="1754404134430936718">ጽሑፍ ተገልብጧል</translation> +<translation id="1754404134430936718">ጽሁፍ ተገልብጧል</translation> <translation id="1779766957982586368">መስኮት ዝጋ</translation> <translation id="1791662854739702043">የተጫነ</translation> <translation id="1792959175193046959">በማንኛውም ጊዜ ነባሪውን የማውረጃ ቦታ ይቀይሩ</translation> @@ -180,7 +179,7 @@ <translation id="1933845786846280168">የተመረጠው ትር</translation> <translation id="193571872656840963">ለዚህ ፈጣሪ ምስጋና ያቅርቡ</translation> <translation id="1943432128510653496">የይለፍ ቃላትን አስቀምጥ</translation> -<translation id="1952172573699511566">ሲቻል፣ ድር ጣቢያዎች በእርስዎ ተመራጭ ቋንቋ ጽሑፍ ይታያሉ።</translation> +<translation id="1952172573699511566">ሲቻል፣ ድር ጣቢያዎች በእርስዎ ተመራጭ ቋንቋ ጽሁፍ ይታያሉ።</translation> <translation id="1959679933317802873">ይዘትን በመጠባበቅ ላይ</translation> <translation id="1960290143419248813">የChrome ዝማኔዎች ከአሁን በኋላ ለዚህ የAndroid ዝማኔዎች አይደገፉም</translation> <translation id="1963976881984600709">መደበኛ ጥበቃ</translation> @@ -192,7 +191,7 @@ <translation id="1986685561493779662">ስሙ አስቀድሞ አለ</translation> <translation id="1995884366040846621">ለመቀጠል <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /> የእርስዎን ስም፣ ኢሜይል አድራሻ እና የመገለጫ ሥዕል ለዚህ ጣቢያ ያጋራል። የዚህን ጣቢያ <ph name="BEGIN_LINK1" />የግላዊነት መመሪያ<ph name="END_LINK1" /> ይመልከቱ።</translation> <translation id="2000419248597011803">ፍለጋዎችን ከአድራሻ አሞሌው እና ከፍለጋ ሳጥኑ እና አንዳንድ ኩኪዎችን ወደ ነባሪው የፍለጋ ፕሮግራምዎ ይልካል</translation> -<translation id="200114059308480249">በGoogle ፍለጋዎች ውስጥ በዙሪያው ያለው ጽሑፍ ይካተት?</translation> +<translation id="200114059308480249">በGoogle ፍለጋዎች ውስጥ በዙሪያው ያለው ጽሁፍ ይካተት?</translation> <translation id="2013642289801508067">{FILE_COUNT,plural, =1{# ፋይል}one{# ፋይሎች}other{# ፋይሎች}}</translation> <translation id="2021896219286479412">የሙሉ ማያ ገጽ ጣቢያ መቆጣጠሪያዎች</translation> <translation id="2038563949887743358">የዴስክቶፕ ጣቢያን ጠይቅን አብራ</translation> @@ -203,7 +202,7 @@ <translation id="2053105195397337973">ጣቢያዎችን በማንቃት ወቅት የማስታወቂያ አይፈለጌ መልዕክት እና መጭበርበርን እንዲያቆሙ እያስቻልን ክትትልን የምንገድብባቸውን መንገዶች እያሰስን ነው።</translation> <translation id="2056878612599315956">ጣቢያ ባለበት ቆሟል</translation> <translation id="2065944887543506430">{FILE_COUNT,plural, =1{1 ማውረድ አልተሳካም}one{# ማውረዶች አልተሳኩም}other{# ማውረዶች አልተሳኩም}}</translation> -<translation id="2067805253194386918">ጽሑፍ</translation> +<translation id="2067805253194386918">ጽሁፍ</translation> <translation id="2068748236079642969">የሚቀጥለውን ቪዲዮ ይመልከቱ</translation> <translation id="2074143993849053708">የረዳት ድምፅ ፍለጋ ስምምነት ዩአይ ተዘግቷል</translation> <translation id="2082238445998314030">ውጤት <ph name="RESULT_NUMBER" /> ከ<ph name="TOTAL_RESULTS" /></translation> @@ -276,14 +275,13 @@ <translation id="2513403576141822879">ከግላዊነት፣ ደህንነት እና የውሂብ ስብስብ ጋር ለሚዛመዱ ተጨማሪ ቅንብሮች <ph name="BEGIN_LINK" />ስምረት እና የGoogle አገልግሎቶች<ph name="END_LINK" /></translation> <translation id="2517472476991765520">ቃኝ</translation> <translation id="2523184218357549926">የሚጎበኙዋቸውን ገጾች ዩአርኤሎች ወደ Google ይልካል</translation> -<translation id="2527209463677295330">ተጨማሪ የገጽ ጽሑፍ በማካተት፣ የተሻሉ ውጤቶችን ማየት ይችላሉ</translation> +<translation id="2527209463677295330">ተጨማሪ የገጽ ጽሁፍ በማካተት፣ የተሻሉ ውጤቶችን ማየት ይችላሉ</translation> <translation id="2527497042232966453">ወደ ማንነት የማያሳውቁ ትሮች ተቀይሯል</translation> <translation id="2527779675047087889">የቅንጥብ ሰሌዳ ይዘቶችን ደብቅ</translation> <translation id="2532336938189706096">የድር ዕይታ</translation> <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> ንጥሎች ተሰርዟል</translation> <translation id="2536728043171574184">የዚህን ገጽ የመስመር ውጭ ቅጂ በመመልከት ላይ</translation> <translation id="2546283357679194313">ኩኪዎች እና የጣቢያ ውሂብ</translation> -<translation id="2549516196460093976">ይህን QR ኮድ ወደሚያሳየው ኮምፒውተር በመለያ ለመግባት ይህን ጡባዊ መጠቀም ይችላሉ።</translation> <translation id="2558569818338050235">የአሰሳ ታሪክዎ በሚያዩዋቸው ማስታወቂያዎች ላይ ተጽዕኖ ያሳድራል</translation> <translation id="2561519700418191927">የቪዲዮ ቅድመ-እይታዎች</translation> <translation id="2567385386134582609">ምስል</translation> @@ -306,7 +304,7 @@ <translation id="265156376773362237">መደበኛ ቅድሚያ መጫን</translation> <translation id="2656405586795711023">የድር መተግበሪያዎች</translation> <translation id="2669454659051515572">ይህን መሣሪያ የሚጠቀም ማንኛውም ሰው የወረዱ ፋይሎችን መመልከት ይችላል</translation> -<translation id="2702516483241149200">አዲስ፦ ወደዚህ ጽሑፍ የሚሸበለል አገናኝ ያጋሩ</translation> +<translation id="2702516483241149200">አዲስ፦ ወደዚህ ጽሁፍ የሚሸበለል አገናኝ ያጋሩ</translation> <translation id="2704606927547763573">ተቀድቷል</translation> <translation id="2707726405694321444">ገጹን አድስ</translation> <translation id="2709516037105925701">ራስ-ሙላ</translation> @@ -365,8 +363,8 @@ <translation id="2979025552038692506">የተመረጠው ማንነት የማያሳውቅ ትር</translation> <translation id="2979639724566107830">በአዲስ መስኮት ክፈት</translation> <translation id="2981364137500752533">እስከ 5 መስኮቶች ሊኖሩዎት ይችላሉ።</translation> -<translation id="2984978667043170458">በGoogle ፍለጋዎች ውስጥ በዙሪያው ያለውን ጽሑፍ ያካትቱ</translation> -<translation id="2987620471460279764">ከሌሎች መሣሪያዎች የተጋራ ጽሑፍ</translation> +<translation id="2984978667043170458">በGoogle ፍለጋዎች ውስጥ በዙሪያው ያለውን ጽሁፍ ያካትቱ</translation> +<translation id="2987620471460279764">ከሌሎች መሣሪያዎች የተጋራ ጽሁፍ</translation> <translation id="2989523299700148168">በቅርብ ጊዜ የተጎበኙ</translation> <translation id="2992473221983447149">የምስል መግለጫዎች</translation> <translation id="2994959273484668146"><ph name="DOMAIN" />ን አስወግድ</translation> @@ -444,7 +442,7 @@ <translation id="3374023511497244703">የእርስዎ እልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌላ የ Chrome ውሂብ ከእንግዲህ ወደ የእርስዎ Google መለያ ይሰምራል</translation> <translation id="3384347053049321195">ምስል አጋራ</translation> <translation id="3387650086002190359">በስርዓተ-ፋይል ስህተቶች ምክንያት <ph name="FILE_NAME" />ን ማውረድ አልተሳካም።</translation> -<translation id="3389286852084373014">ጽሑፍ ከልክ በላይ ግዙፍ ነው</translation> +<translation id="3389286852084373014">ጽሁፍ ከልክ በላይ ግዙፍ ነው</translation> <translation id="3391512812407811893">የግላዊነት Sandbox ሙከራዎች</translation> <translation id="3398320232533725830">የዕልባቶች አስተዳዳሪን ክፈት</translation> <translation id="3407392651057365886">ተጨማሪ ገጾች ቅድሚያ ይጫናሉ። ገጾች በሌሎች ጣቢያዎች ሲጠየቁ በGoogle አገልጋዮች በኩል ቅድሚያ ሊጫኑ ይችላሉ።</translation> @@ -523,7 +521,7 @@ <translation id="3858860766373142691">ስም</translation> <translation id="3861633093716975811">ታዋቂ ቪዲዮዎች</translation> <translation id="3874520961715512166">ጣቢያ ተወግዷል</translation> -<translation id="3892148308691398805">ጽሑፍ ቅዳ</translation> +<translation id="3892148308691398805">ጽሁፍ ቅዳ</translation> <translation id="3894427358181296146">አቃፊ ያክሉ</translation> <translation id="3899682235662194879">ሁሉንም ማንነት የማያሳውቅ ትሮች ይዝጉ</translation> <translation id="3908308510347173149"><ph name="PRODUCT_NAME" />ን ያዘምኑ</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">የግላዊነት መመሪያ ማብራሪያ በሙሉ ቁመት ላይ ተከፍቷል</translation> <translation id="7207760545532569765"><ph name="TAB_COUNT" /> ትሮችን እንደ አዲስ የዳራ ትሮች ወደነበሩበት መልስ።</translation> <translation id="7208109991155904980">ምላሽ ተንቀሳቅሷል</translation> +<translation id="7217781228893594884">ከChrome ለቀው ሲወጡ ማንነት የማያሳውቁ ትሮች ይቆለፋሉ</translation> <translation id="7222235798733126207">በጣቢያዎች መካከል የተገደበ ማጋራት</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 ውርድን በመጠባበቅ ላይ}one{# ውርዶችን በመጠባበቅ ላይ}other{# ውርዶችን በመጠባበቅ ላይ}}</translation> <translation id="7242755609445462077">ቅጥ ያለው ድምቀት <ph name="CURRENT_DATE" /></translation> @@ -1169,7 +1168,7 @@ <translation id="7359002509206457351">የመዳረሻ መክፈያ ዘዴዎች</translation> <translation id="7363349185727752629">የግላዊነት ምርጫዎችዎ መመሪያ</translation> <translation id="7375125077091615385">ዓይነት፦</translation> -<translation id="7376560087009844242">ተጨማሪ የገጽ ጽሑፍ በማካተት፣ ለመፈለግ ይንኩን ሲጠቀሙ የተሻሉ ውጤቶችን ማየት ይችላሉ። ይህንን ለመለወጥ ሁልጊዜ <ph name="BEGIN_LINK" />ቅንብሮች<ph name="END_LINK" />ን መጎብኘት ይችላሉ።</translation> +<translation id="7376560087009844242">ተጨማሪ የገጽ ጽሁፍ በማካተት፣ ለመፈለግ ይንኩን ሲጠቀሙ የተሻሉ ውጤቶችን ማየት ይችላሉ። ይህንን ለመለወጥ ሁልጊዜ <ph name="BEGIN_LINK" />ቅንብሮች<ph name="END_LINK" />ን መጎብኘት ይችላሉ።</translation> <translation id="7379900596734708416">ለጣቢያዎች ጠቆር ያለ ገጽታ ይገኛል</translation> <translation id="7400418766976504921">URL</translation> <translation id="7403691278183511381">Chrome የመጀመሪያ አሂድ ተሞክሮ</translation> @@ -1238,7 +1237,7 @@ <translation id="7709094866268987903">ያስወገዷቸው ፍላጎቶች እዚህ ይታያሉ</translation> <translation id="7709918231054955894">ሁሉንም የእርስዎን ትሮች ያግኙ</translation> <translation id="7725024127233776428">እርስዎ ዕልባት ያደረጉባቸው ገጾች እዚህ ላይ ብቅ ይላሉ</translation> -<translation id="7757787379047923882">ከ<ph name="DEVICE_NAME" /> የተጋራ ጽሑፍ</translation> +<translation id="7757787379047923882">ከ<ph name="DEVICE_NAME" /> የተጋራ ጽሁፍ</translation> <translation id="7762668264895820836">ኤስዲ ካርድ <ph name="SD_CARD_NUMBER" /></translation> <translation id="7762928140712606393">ተጨማሪ ባህሪያት እና የChrome\u2019 ከሁሉም በላይ ጠንካራ የሆነ ደህንነት ለማግኘት በመለያ ይግቡ</translation> <translation id="7764225426217299476">አድራሻ አክል</translation> @@ -1312,7 +1311,7 @@ <translation id="806745655614357130">የእኔን ውሂብ ለብቻው አቆይ</translation> <translation id="8073388330009372546">ምስሉን በአዲስ ትር ውስጥ ክፈት</translation> <translation id="8076492880354921740">ትሮች</translation> -<translation id="8078096376109663956">ጽሑፍ ብቻ ያጋሩ</translation> +<translation id="8078096376109663956">ጽሁፍ ብቻ ያጋሩ</translation> <translation id="8084114998886531721">የተቀመጠ ይለፍ ቃል</translation> <translation id="8084285576995584326">የእርስዎን የGoogle መለያ ውሂብ ይቆጣጠሩ</translation> <translation id="808747664143081553">ከመሣሪያው ጋር ተገናኝቷል</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb index 859095e3..71dc952 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">التحكّم بشكل أكبر في الإعلانات التي تظهر لك</translation> <translation id="1477626028522505441">تعذّر تنزيل الملف <ph name="FILE_NAME" /> بسبب مشاكل بالخادم.</translation> <translation id="148482509007564431">مسار حفظ الإشارات المرجعية</translation> -<translation id="1488775391433859242">يمكنك استخدام هذا الهاتف لتسجيل الدخول إلى حساب Google على جهاز الكمبيوتر الذي يعرض رمز الاستجابة السريعة هذا.</translation> <translation id="1492417797159476138">سبق لك حفظ اسم المستخدم لهذا الموقع الإلكتروني.</translation> <translation id="1493287004536771723">تتم حاليًا متابعة <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">لإدارة كلمات المرور، عليك تحديث "خدمات Google Play".</translation> @@ -284,7 +283,6 @@ <translation id="2536728043171574184">عرض نسخة بلا اتصال من هذه الصفحة</translation> <translation id="2546283357679194313">ملفات تعريف الارتباط وبيانات المواقع الإلكترونية </translation> -<translation id="2549516196460093976">يمكنك استخدام هذا الجهاز اللوحي لتسجيل الدخول إلى حساب Google على جهاز الكمبيوتر الذي يعرض رمز الاستجابة السريعة هذا.</translation> <translation id="2558569818338050235">يؤثر سجلّ تصفّحك في الإعلانات التي تظهر لك.</translation> <translation id="2561519700418191927">معاينات الفيديوهات</translation> <translation id="2567385386134582609">صورة</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb index 302f068..ec06e11a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">আপুনি দেখা বিজ্ঞাপনবোৰৰ ওপৰত অধিক নিয়ন্ত্ৰণ</translation> <translation id="1477626028522505441">ছার্ভাৰৰ সমস্যাৰ বাবে <ph name="FILE_NAME" /> ডাউনল'ড কৰিব পৰা নগ'ল।</translation> <translation id="148482509007564431">বুকমাৰ্ক ছেভ কৰাৰ ফ্ল’</translation> -<translation id="1488775391433859242">আপুনি এই কিউআৰ ক’ডটো প্ৰদৰ্শন কৰি থকা কম্পিউটাৰটোত ছাইন ইন কৰিবলৈ এই ফ’নটো ব্যৱহাৰ কৰিব পাৰে।</translation> <translation id="1492417797159476138">এই ছাইটটোৰ বাবে আপুনি ইতিমধ্যে এই ব্যৱহাৰকাৰীৰ নামটো ছেভ কৰিছে</translation> <translation id="1493287004536771723">আপুনি <ph name="SITE_NAME" />ক ফ'ল’ কৰি আছে</translation> <translation id="1502010315804028179">আপোনাৰ পাছৱৰ্ডসমূহ পৰিচালনা কৰিবলৈ, Google Play সেৱা আপডে'ট কৰক</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> টা সমল মচা হ’ল</translation> <translation id="2536728043171574184">এই পৃষ্ঠাটোৰ এটা অফলাইন প্ৰতিলিপি চাই আছে</translation> <translation id="2546283357679194313">কুকি আৰু ছাইট ডেটা</translation> -<translation id="2549516196460093976">আপুনি এই কিউআৰ ক’ডটো প্ৰদৰ্শন কৰি থকা কম্পিউটাৰটোত ছাইন ইন কৰিবলৈ এই টেবলেটটো ব্যৱহাৰ কৰিব পাৰে।</translation> <translation id="2558569818338050235">আপোনাৰ ব্ৰাউজিঙৰ ইতিহাসে আপুনি দেখা পোৱা বিজ্ঞাপন প্ৰভাৱিত কৰে</translation> <translation id="2561519700418191927">ভিডিঅ'ৰ পূৰ্বদৰ্শন</translation> <translation id="2567385386134582609">প্ৰতিচ্ছবি</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb index d90c1e1..0045e6f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Gördüyünüz reklamlar üzərində daha çox nəzarət</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> faylının endirilməsi server problemləri səbəbindən alınmadı.</translation> <translation id="148482509007564431">Əlfəcin saxlama prosesi</translation> -<translation id="1488775391433859242">Bu QR kodunu göstərən kompüterə daxil olmaq üçün bu telefondan istifadə edə bilərsiniz.</translation> <translation id="1492417797159476138">Hazırda bu istifadəçi adını bu sayt üçün yadda saxlamısınız</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> saytını izləyirsiniz</translation> <translation id="1502010315804028179">Parollarınızı idarə etmək üçün Google Play xidmətlərini güncəlləyin</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> element silindi</translation> <translation id="2536728043171574184">Bu səhifənin oflayn nüsxəsinə baxılır</translation> <translation id="2546283357679194313">Kukilər və sayt datası</translation> -<translation id="2549516196460093976">Bu QR kodunu göstərən kompüterə daxil olmaq üçün bu planşetdən istifadə edə bilərsiniz.</translation> <translation id="2558569818338050235">Baxış tarixçəniz gördüyünüz reklamlara təsir edir</translation> <translation id="2561519700418191927">Video önizləmələri</translation> <translation id="2567385386134582609">ŞƏKİL</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb index 5fe2126..b8f3e5a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Шырэйшыя магчымасці кіраваць тым, якая рэклама вам будзе паказвацца</translation> <translation id="1477626028522505441">Збой спампоўкі файла "<ph name="FILE_NAME" />" з-за праблем на серверы.</translation> <translation id="148482509007564431">Укладка захоўвання закладкі</translation> -<translation id="1488775391433859242">Вы можаце выкарыстоўваць гэты тэлефон, каб уваходзіць ва ўліковы запіс на камп'ютары, на якім паказваецца гэты QR-код.</translation> <translation id="1492417797159476138">Вы ўжо захавалі гэта імя карыстальніка для гэтага сайта</translation> <translation id="1493287004536771723">Вы падпісаны на сайт "<ph name="SITE_NAME" />"</translation> <translation id="1502010315804028179">Каб кіраваць паролямі, абнавіце сэрвісы Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Выдалена элементаў: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Вы праглядаеце пазасеткавую копію гэтай старонкі</translation> <translation id="2546283357679194313">Файлы сookie і даныя сайтаў</translation> -<translation id="2549516196460093976">Вы можаце выкарыстоўваць гэты планшэт, каб уваходзіць ва ўліковы запіс на камп'ютары, на якім паказваецца гэты QR-код.</translation> <translation id="2558569818338050235">Ваша гісторыя прагляду сайтаў уплывае на тое, якая рэклама вам паказваецца</translation> <translation id="2561519700418191927">Перадпрагляд відэа</translation> <translation id="2567385386134582609">ВІДАРЫС</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Тлумачэнні адносна дапаможніка па прыватнасці разгорнуты на ўвесь экран</translation> <translation id="7207760545532569765">Аднавіць некалькі (<ph name="TAB_COUNT" />) укладак як новую фонавую групу ўкладак.</translation> <translation id="7208109991155904980">Рэакцыя перамешчана</translation> +<translation id="7217781228893594884">Пры закрыцці Chrome укладкі ў рэжыме інкогніта будуць блакіравацца</translation> <translation id="7222235798733126207">Абмежаваны абмен данымі паміж сайтамі</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{Чакаецца 1 спампоўка}one{Чакаецца # спампоўка}few{Чакаецца # спампоўкі}many{Чакаецца # спамповак}other{Чакаецца # спампоўкі}}</translation> <translation id="7242755609445462077">Стылізаванае вылучанае змесціва (<ph name="CURRENT_DATE" />)</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb index a2487c1..d126ae6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Повече контрол над рекламите, които виждате</translation> <translation id="1477626028522505441">Изтеглянето на „<ph name="FILE_NAME" />“ не бе успешно поради проблеми в сървъра.</translation> <translation id="148482509007564431">Поток за запазване на отметка</translation> -<translation id="1488775391433859242">Можете да използвате този телефон, за да влезете в профила си на компютъра, на който се показва QR кодът.</translation> <translation id="1492417797159476138">Вече запазихте това потребителско име за този сайт</translation> <translation id="1493287004536771723">Следвате <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">За да управлявате паролите си, актуализирайте услугите за Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Изтрихте <ph name="NUMBER_OF_ITEMS" /> елемента</translation> <translation id="2536728043171574184">Преглеждате офлайн копие на страницата</translation> <translation id="2546283357679194313">„Бисквитки“ и данни за сайтове</translation> -<translation id="2549516196460093976">Можете да използвате този таблет, за да влезете в профила си на компютъра, на който се показва QR кодът.</translation> <translation id="2558569818338050235">Историята ви на сърфиране влияе върху рекламите, които виждате</translation> <translation id="2561519700418191927">Визуализиране на видеоклипове</translation> <translation id="2567385386134582609">ИЗОБРАЖЕНИЕ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb index 3fc49d0..78e5931 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">আপনি যে বিজ্ঞাপনগুলি দেখেন তাতে আরও নিয়ন্ত্রণ</translation> <translation id="1477626028522505441">সার্ভার সমস্যার কারণে <ph name="FILE_NAME" /> ডাউনলোড করা যায়নি।</translation> <translation id="148482509007564431">বুকমার্ক সেভ ফ্লো</translation> -<translation id="1488775391433859242">যে কম্পিউটারে এই QR কোড দেখানো হচ্ছে তাতে সাইন-ইন করার জন্য আপনি এই ফোনটি ব্যবহার করতে পারবেন।</translation> <translation id="1492417797159476138">আপনি আগেই এই সাইটের জন্য ইউজারনেমটি সেভ করেছেন</translation> <translation id="1493287004536771723">আপনি <ph name="SITE_NAME" /> ফলো করছেন</translation> <translation id="1502010315804028179">আপনার পাসওয়ার্ড ম্যানেজ করার জন্য, Google Play পরিষেবা আপডেট করুন</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" />টি আইটেম মোছা হয়েছে</translation> <translation id="2536728043171574184">এই পৃষ্ঠার একটি অফলাইন কপি দেখছেন</translation> <translation id="2546283357679194313">কুকিজ ও সাইট ডেটা</translation> -<translation id="2549516196460093976">যে কম্পিউটারে এই QR কোড দেখানো হচ্ছে তাতে সাইন-ইন করার জন্য আপনি এই ট্যাবলেটটি ব্যবহার করতে পারবেন।</translation> <translation id="2558569818338050235">আপনি যে বিজ্ঞাপনগুলি দেখেন তাতে আপনার ব্রাউজিং ইতিহাস প্রভাব ফেলতে পারে</translation> <translation id="2561519700418191927">ভিডিওর প্রিভিউ</translation> <translation id="2567385386134582609">ছবি</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb index 491c1ce..cb0b698 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Više kontrole nad oglasima koji vam se prikazuju</translation> <translation id="1477626028522505441">Preuzimanje fajla <ph name="FILE_NAME" /> nije uspjelo zbog problema sa serverom.</translation> <translation id="148482509007564431">Tok za pohranu oznaka</translation> -<translation id="1488775391433859242">Možete koristiti ovaj telefon da se prijavite na računar na kojem je prikazan ovaj QR kôd.</translation> <translation id="1492417797159476138">Već ste sačuvali ovo korisničko ime za ovu web lokaciju</translation> <translation id="1493287004536771723">Pratite web lokaciju <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Ažurirajte Google Play usluge da upravljate lozinkama</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Broj izbrisanih stavki: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Gledate kopiju ove stranice van mreže</translation> <translation id="2546283357679194313">Kolačići i podaci web lokacije</translation> -<translation id="2549516196460093976">Možete koristiti ovaj tablet da se prijavite na računar na kojem je prikazan ovaj QR kôd.</translation> <translation id="2558569818338050235">Vaša historija pregledanja utiče na oglase koje vidite</translation> <translation id="2561519700418191927">Pregledi videozapisa</translation> <translation id="2567385386134582609">SLIKA</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb index fde2add..05a367f7 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Més control sobre els anuncis que veus</translation> <translation id="1477626028522505441">No s'ha pogut baixar <ph name="FILE_NAME" /> a causa de problemes amb el servidor.</translation> <translation id="148482509007564431">Flux per desar l'adreça d'interès</translation> -<translation id="1488775391433859242">Pots utilitzar aquest telèfon per iniciar la sessió en l'ordinador que està mostrant aquest codi QR.</translation> <translation id="1492417797159476138">Ja has desat aquest nom d'usuari per a aquest lloc web</translation> <translation id="1493287004536771723">Segueixes <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Per gestionar les contrasenyes, actualitza Serveis de Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> elements suprimits</translation> <translation id="2536728043171574184">S'està mostrant una còpia sense connexió d'aquesta pàgina</translation> <translation id="2546283357679194313">Dades de llocs web i galetes</translation> -<translation id="2549516196460093976">Pots utilitzar aquesta tauleta per iniciar la sessió a l'ordinador que està mostrant el codi QR.</translation> <translation id="2558569818338050235">El teu historial de navegació afecta els anuncis que veus</translation> <translation id="2561519700418191927">Previsualitzacions de vídeo</translation> <translation id="2567385386134582609">IMATGE</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb index 60c5993..b91220a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Větší kontrola nad reklamami, které se vám zobrazují</translation> <translation id="1477626028522505441">Stažení souboru <ph name="FILE_NAME" /> se nezdařilo z důvodu problémů se serverem.</translation> <translation id="148482509007564431">Postup uložení záložky</translation> -<translation id="1488775391433859242">Tento telefon můžete použít k přihlášení na počítači, na kterém se zobrazuje tento QR kód.</translation> <translation id="1492417797159476138">Toto uživatelské jméno jste pro tento web už uložili</translation> <translation id="1493287004536771723">Sledujete web <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Pokud chcete spravovat hesla, aktualizujte Služby Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Byly smazány položky (celkem <ph name="NUMBER_OF_ITEMS" />)</translation> <translation id="2536728043171574184">Prohlížíte offline kopii stránky</translation> <translation id="2546283357679194313">Soubory cookie a data webových stránek</translation> -<translation id="2549516196460093976">Tento tablet můžete použít k přihlášení na počítači, na kterém se zobrazuje tento QR kód.</translation> <translation id="2558569818338050235">Vaše historie prohlížení ovlivňuje zobrazované reklamy</translation> <translation id="2561519700418191927">Náhledy videí</translation> <translation id="2567385386134582609">OBRÁZEK</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb index 1771efbc..d461780af 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Mwy o reolaeth dros yr hysbysebion rydych yn eu gweld</translation> <translation id="1477626028522505441">Wedi methu â lawrlwytho <ph name="FILE_NAME" /> oherwydd problemau gweinydd.</translation> <translation id="148482509007564431">Llif cadw nodau tudalen</translation> -<translation id="1488775391433859242">Gallwch ddefnyddio'r ffôn hwn i fewngofnodi ar y cyfrifiadur sy'n dangos y cod QR hwn.</translation> <translation id="1492417797159476138">Rydych eisoes wedi cadw'r enw defnyddiwr hwn ar gyfer y wefan hon.</translation> <translation id="1493287004536771723">Rydych yn dilyn <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">I reoli eich cyfrineiriau, diweddarwch wasanaethau Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Cafodd <ph name="NUMBER_OF_ITEMS" /> eitem eu dileu</translation> <translation id="2536728043171574184">Wrthi'n edrych ar gopi all-lein o'r dudalen hon</translation> <translation id="2546283357679194313">Cwcis a data gwefan</translation> -<translation id="2549516196460093976">Gallwch ddefnyddio'r llechen hon i fewngofnodi ar y cyfrifiadur sy'n dangos y cod QR hwn.</translation> <translation id="2558569818338050235">Mae eich hanes pori yn effeithio ar yr hysbysebion rydych yn eu gweld</translation> <translation id="2561519700418191927">Rhagolwg fideo</translation> <translation id="2567385386134582609">LLUN</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Esboniad canllaw preifatrwydd sydd wedi'i agor ar uchder llawn</translation> <translation id="7207760545532569765">Adfer <ph name="TAB_COUNT" /> o dabiau fel tabiau cefndirol newydd.</translation> <translation id="7208109991155904980">Wedi symud yr ymateb</translation> +<translation id="7217781228893594884">Bydd tabiau anhysbys yn cael eu cloi pan fyddwch yn gadael Chrome</translation> <translation id="7222235798733126207">Rhannu cyfyngedig rhwng gwefannau</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{Mae 1 lawrlwythiad ar y gweill}zero{Mae # lawrlwythiad ar y gweill}two{Mae # lawrlwythiad ar y gweill}few{Mae # lawrlwythiad ar y gweill}many{Mae # lawrlwythiad ar y gweill}other{Mae # lawrlwythiad ar y gweill}}</translation> <translation id="7242755609445462077">Amlygu sydd wedi'i arddullio <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb index a5e96a43..c5bfff4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Mere kontrol over de annoncer, du får vist</translation> <translation id="1477626028522505441">Download af <ph name="FILE_NAME" /> mislykkedes på grund af serverproblemer.</translation> <translation id="148482509007564431">Flow til lagring af bogmærker</translation> -<translation id="1488775391433859242">Du kan bruge denne telefon til at logge ind på den computer, der viser QR-koden.</translation> <translation id="1492417797159476138">Du har allerede gemt dette brugernavn for dette website</translation> <translation id="1493287004536771723">Du følger <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Opdater Google Play-tjenester for at administrere dine adgangskoder</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> elementer blev slettet</translation> <translation id="2536728043171574184">Du ser en offlinekopi af denne side</translation> <translation id="2546283357679194313">Cookies og websitedata</translation> -<translation id="2549516196460093976">Du kan bruge denne tablet til at logge ind på den computer, der viser QR-koden.</translation> <translation id="2558569818338050235">Din browserhistorik påvirker, hvilke annoncer du ser</translation> <translation id="2561519700418191927">Forhåndsvisning af videoer</translation> <translation id="2567385386134582609">BILLEDE</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Beskrivelsen af Privatlivsguide er åbnet i fuld højde</translation> <translation id="7207760545532569765">Gendan <ph name="TAB_COUNT" /> faner som nye baggrundsfaner.</translation> <translation id="7208109991155904980">Reaktionen er flyttet</translation> +<translation id="7217781228893594884">Inkognitofaner låses, når du lukker Chrome</translation> <translation id="7222235798733126207">Begrænset deling mellem websites</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 download afventer}one{# download afventer}other{# downloads afventer}}</translation> <translation id="7242755609445462077">Stiliseret note <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb index 27ddca33..4bb45a50 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Mehr Kontrolle über angezeigte Werbung</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> konnte aufgrund von Serverproblemen nicht heruntergeladen werden.</translation> <translation id="148482509007564431">Ablauf zum Speichern von Lesezeichen</translation> -<translation id="1488775391433859242">Du kannst dich über dieses Smartphone auf dem Computer anmelden, auf dem dieser QR-Code angezeigt wird.</translation> <translation id="1492417797159476138">Du hast diesen Nutzernamen für diese Website bereits gespeichert</translation> <translation id="1493287004536771723">Du folgst „<ph name="SITE_NAME" />“</translation> <translation id="1502010315804028179">Damit du deine Passwörter verwalten kannst, musst du die Google Play-Dienste aktualisieren</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> Einträge gelöscht</translation> <translation id="2536728043171574184">Eine Offline-Kopie dieser Seite wird angezeigt.</translation> <translation id="2546283357679194313">Cookies und Websitedaten</translation> -<translation id="2549516196460093976">Du kannst dich über dieses Tablet auf dem Computer anmelden, auf dem dieser QR-Code angezeigt wird.</translation> <translation id="2558569818338050235">Dein Browserverlauf hat Einfluss darauf, welche Werbung dir gezeigt wird</translation> <translation id="2561519700418191927">Videovorschauen</translation> <translation id="2567385386134582609">BILD</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb index 0ceff834..c289acd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Περισσότερος έλεγχος στις διαφημίσεις που βλέπετε</translation> <translation id="1477626028522505441">Η λήψη του αρχείου <ph name="FILE_NAME" /> απέτυχε λόγω προβλημάτων στον διακομιστή.</translation> <translation id="148482509007564431">Ροή αποθήκευσης σελιδοδείκτη</translation> -<translation id="1488775391433859242">Μπορείτε να χρησιμοποιήσετε αυτό το τηλέφωνο για να συνδεθείτε στον υπολογιστή όπου εμφανίζεται αυτός ο κωδικός QR.</translation> <translation id="1492417797159476138">Έχετε αποθηκεύσει ήδη αυτό το όνομα χρήστη για αυτόν τον ιστότοπο.</translation> <translation id="1493287004536771723">Ακολουθείτε τον ιστότοπο <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Για να διαχειριστείτε τους κωδικούς πρόσβασης, ενημερώστε τις υπηρεσίες Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Διαγράφηκαν <ph name="NUMBER_OF_ITEMS" /> στοιχεία</translation> <translation id="2536728043171574184">Προβολή ενός αντιγράφου αυτής της σελίδας εκτός σύνδεσης</translation> <translation id="2546283357679194313">Cookie και δεδομένα ιστότοπου</translation> -<translation id="2549516196460093976">Μπορείτε να χρησιμοποιήσετε αυτό το tablet για να συνδεθείτε στον υπολογιστή όπου εμφανίζεται αυτός ο κωδικός QR.</translation> <translation id="2558569818338050235">Το ιστορικό περιήγησής σας επηρεάζει τις διαφημίσεις που βλέπετε.</translation> <translation id="2561519700418191927">Προεπισκοπήσεις βίντεο</translation> <translation id="2567385386134582609">ΕΙΚΟΝΑ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb index 65d800d..a040286d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">More control over the ads that you see</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> download failed due to server issues.</translation> <translation id="148482509007564431">Bookmark save flow</translation> -<translation id="1488775391433859242">You can use this phone to sign in on the computer that’s displaying this QR code.</translation> <translation id="1492417797159476138">You already saved this username for this site</translation> <translation id="1493287004536771723">You’re following <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">To manage your passwords, update Google Play services</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> items deleted</translation> <translation id="2536728043171574184">Viewing an offline copy of this page</translation> <translation id="2546283357679194313">Cookies and site data</translation> -<translation id="2549516196460093976">You can use this tablet to sign in on the computer that’s displaying this QR code.</translation> <translation id="2558569818338050235">Your browsing history affects the ads that you see</translation> <translation id="2561519700418191927">Video previews</translation> <translation id="2567385386134582609">IMAGE</translation> @@ -475,6 +473,7 @@ <translation id="3557336313807607643">Add to contacts</translation> <translation id="3560491354538957576">Site can define Interests</translation> <translation id="3563767357928833671">Clipboard contents shown</translation> +<translation id="3566639033325271639">Update settings</translation> <translation id="3566923219790363270">Chrome is still preparing for VR. Restart Chrome later.</translation> <translation id="3568688522516854065">To get your tabs from your other devices, sign in and turn on sync</translation> <translation id="357465026686164600">Phone as a security key</translation> @@ -569,6 +568,7 @@ <translation id="4116038641877404294">Download pages to use them offline</translation> <translation id="4135200667068010335">List of devices with which to share a tab is closed.</translation> <translation id="4137746084635924146">Current device language</translation> +<translation id="414128724510021958">Desktop sites requested by default</translation> <translation id="4141536112466364990">Learn Chrome</translation> <translation id="4162867837470729563">List of sharing options at full height.</translation> <translation id="4165986682804962316">Site settings</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb index 692a3dfa..5b681fd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Más control sobre los anuncios que ves</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> no se pudo descargar debido a problemas del servidor.</translation> <translation id="148482509007564431">Flujo para guardar favoritos</translation> -<translation id="1488775391433859242">Puedes usar este teléfono para acceder en la computadora que muestra este código QR.</translation> <translation id="1492417797159476138">Ya guardaste este nombre de usuario en este sitio</translation> <translation id="1493287004536771723">Sigues a <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Para administrar tus contraseñas, actualiza los Servicios de Google Play.</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> elementos borrados</translation> <translation id="2536728043171574184">Visualizando una copia sin conexión de la página</translation> <translation id="2546283357679194313">Datos de sitios y cookies</translation> -<translation id="2549516196460093976">Puedes usar esta tablet para acceder en la computadora que muestra este código QR.</translation> <translation id="2558569818338050235">Tu historial de navegación afecta los anuncios que ves.</translation> <translation id="2561519700418191927">Vistas previas de los videos</translation> <translation id="2567385386134582609">IMAGEN</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">La explicación de la guía sobre privacidad está totalmente abierta.</translation> <translation id="7207760545532569765">Restablece <ph name="TAB_COUNT" /> pestañas como nuevas pestañas en segundo plano.</translation> <translation id="7208109991155904980">Se movió la reacción</translation> +<translation id="7217781228893594884">Las pestañas de incógnito se bloquearán cuando salgas de Chrome</translation> <translation id="7222235798733126207">Limitamos el uso compartido entre sitios</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 descarga pendiente}other{# descargas pendientes}}</translation> <translation id="7242755609445462077">Nota estilizada con contenido destacado (<ph name="CURRENT_DATE" />)</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb index f52634dc..546e6fb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Más control sobre los anuncios que ves</translation> <translation id="1477626028522505441">No se ha podido descargar <ph name="FILE_NAME" /> debido a problemas con el servidor.</translation> <translation id="148482509007564431">Flujo para guardar marcador</translation> -<translation id="1488775391433859242">Puedes usar este teléfono para iniciar sesión en el ordenador donde se muestra este código QR.</translation> <translation id="1492417797159476138">Ya has guardado ese nombre de usuario en este sitio web</translation> <translation id="1493287004536771723">Estás siguiendo a <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Para gestionar tus contraseñas, actualiza Servicios de Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> elementos eliminados</translation> <translation id="2536728043171574184">Viendo una copia sin conexión de esta página</translation> <translation id="2546283357679194313">Cookies y datos de sitios</translation> -<translation id="2549516196460093976">Puedes usar este tablet para iniciar sesión en el ordenador donde se muestra este código QR.</translation> <translation id="2558569818338050235">Tu historial de navegación influye en los anuncios que ves</translation> <translation id="2561519700418191927">Vistas previas de vídeos</translation> <translation id="2567385386134582609">IMAGEN</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb index fb4245a..ca2e0df 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Suurem kontroll kuvatavate reklaamide üle</translation> <translation id="1477626028522505441">Faili <ph name="FILE_NAME" /> allalaadimine ebaõnnestus serveriprobleemide tõttu.</translation> <translation id="148482509007564431">Järjehoidja salvestamise voog</translation> -<translation id="1488775391433859242">Võite kasutada telefoni selles arvutis sisselogimiseks, milles QR-koodi kuvatakse.</translation> <translation id="1492417797159476138">Olete selle kasutajanime selle saidi jaoks juba salvestanud</translation> <translation id="1493287004536771723">Jälgite saiti <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Oma paroolide haldamiseks värskendage Google Play teenuseid</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> üksust kustutati</translation> <translation id="2536728043171574184">Kuvatakse on lehe võrguühenduseta koopia</translation> <translation id="2546283357679194313">Küpsised ja saidiandmed</translation> -<translation id="2549516196460093976">Võite kasutada tahvelarvutit selles arvutis sisselogimiseks, milles QR-koodi kuvatakse.</translation> <translation id="2558569818338050235">Teie sirvimisajalugu mõjutab kuvatavaid reklaame</translation> <translation id="2561519700418191927">Video eelvaated</translation> <translation id="2567385386134582609">KUJUTIS</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb index 0ec4bb5..37b8d3c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Ikusten dituzun iragarkien gaineko kontrol handiagoa</translation> <translation id="1477626028522505441">Ezin izan da deskargatu <ph name="FILE_NAME" />, zerbitzariarekin arazoak daudelako.</translation> <translation id="148482509007564431">Laster-marka gordetzeko fluxua</translation> -<translation id="1488775391433859242">Telefono hau erabil dezakezu QR kode hau erakusten ari den ordenagailuan saioa hasteko.</translation> <translation id="1492417797159476138">Dagoeneko gorde duzu erabiltzaile-izen hau webgune honetarako</translation> <translation id="1493287004536771723">Hasi zara <ph name="SITE_NAME" /> webguneari jarraitzen</translation> <translation id="1502010315804028179">Pasahitza kudeatzeko, eguneratu Google Play Services</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Ezabatu dira <ph name="NUMBER_OF_ITEMS" /> elementu</translation> <translation id="2536728043171574184">Orriaren konexiorik gabeko kopia ikusten ari zara</translation> <translation id="2546283357679194313">Cookieak eta webguneetako datuak</translation> -<translation id="2549516196460093976">Tableta hau erabil dezakezu QR kode hau erakusten ari den ordenagailuan saioa hasteko.</translation> <translation id="2558569818338050235">Arakatze-historiak agertzen zaizkizun iragarkietan eragina du</translation> <translation id="2561519700418191927">Bideoen aurrebistak</translation> <translation id="2567385386134582609">IRUDIA</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb index 8d85a3a2..92c5936 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">کنترل بیشتر بر آگهیهایی که میبینید</translation> <translation id="1477626028522505441">بهدلیل مشکلاتی در سرور، بارگیری <ph name="FILE_NAME" /> انجام نشد.</translation> <translation id="148482509007564431">جریان ذخیره نشانک</translation> -<translation id="1488775391433859242">بااستفاده از این تلفن میتوانید در رایانهای که این رمزینه پاسخسریع را نمایش میدهد به سیستم وارد شوید.</translation> <translation id="1492417797159476138">قبلاً این نام کاربری را برای این سایت ذخیره کردهاید</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> را دنبال میکنید</translation> <translation id="1502010315804028179">برای مدیریت گذرواژههایتان، «خدمات Google Play» را بهروزرسانی کنید</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> مورد حذف شد</translation> <translation id="2536728043171574184">مشاهده یک کپی آفلاین از این صفحه</translation> <translation id="2546283357679194313">کوکیها و دادههای سایت</translation> -<translation id="2549516196460093976">بااستفاده از این رایانه لوحی میتوانید در رایانهای که این رمزینه پاسخسریع را نمایش میدهد به سیستم وارد شوید.</translation> <translation id="2558569818338050235">سابقه مرورتان بر آگهیهایی که میبینید تأثیر میگذارد</translation> <translation id="2561519700418191927">پیشنمایش ویدیو</translation> <translation id="2567385386134582609">تصویر</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb index 31d3829..8ade764 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Enemmän päätösvaltaa näkemiisi mainoksiin</translation> <translation id="1477626028522505441">Tiedoston <ph name="FILE_NAME" /> lataus epäonnistui palvelinongelman vuoksi.</translation> <translation id="148482509007564431">Kirjanmerkin tallennusvaiheet</translation> -<translation id="1488775391433859242">Voit kirjautua sisään tämän QR-koodin näyttävälle tietokoneelle tämän puhelimen avulla.</translation> <translation id="1492417797159476138">Tallensit jo tämän käyttäjänimen sivustolle</translation> <translation id="1493287004536771723">Seuraat tätä: <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Päivitä Google Play Palvelut, jotta voit ylläpitää salasanoja</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> kohdetta poistettu</translation> <translation id="2536728043171574184">Näkyvissä on sivun offline-versio.</translation> <translation id="2546283357679194313">Evästeet ja sivustotiedot</translation> -<translation id="2549516196460093976">Voit kirjautua sisään QR-koodin näyttävälle tietokoneelle tämän tabletin avulla.</translation> <translation id="2558569818338050235">Selaushistoria vaikuttaa näkemiisi mainoksiin</translation> <translation id="2561519700418191927">Videon esikatselut</translation> <translation id="2567385386134582609">KUVA</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Yksityisyysoppaan selitys kokonaan avattuna</translation> <translation id="7207760545532569765">Palauta <ph name="TAB_COUNT" /> välilehteä uusina taustavälilehtinä.</translation> <translation id="7208109991155904980">Reaktio siirretty</translation> +<translation id="7217781228893594884">Incognito-välilehdet lukitaan, kun poistut Chromesta</translation> <translation id="7222235798733126207">Rajoitettu sivustojen välinen jakaminen</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 lataus odottaa}other{# latausta odottaa}}</translation> <translation id="7242755609445462077">Tyylitelty korostus <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb index 84a85a1a..a6eddcc 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Higiit pang kontrol sa mga ad na nakikita mo</translation> <translation id="1477626028522505441">Hindi na-download ang <ph name="FILE_NAME" /> dahil sa mga isyu sa server.</translation> <translation id="148482509007564431">Proseso ng pag-save ng bookmark</translation> -<translation id="1488775391433859242">Puwede mong gamitin ang teleponong ito para mag-sign in sa computer na nagpapakita sa QR code na ito.</translation> <translation id="1492417797159476138">Na-save mo na ang username na ito para sa site na ito</translation> <translation id="1493287004536771723">Sinusubaybayan mo ang <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Para pamahalaan ang iyong mga password, i-update ang mga serbisyo ng Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> (na) item ang na-delete</translation> <translation id="2536728043171574184">Tinitingnan ang isang offline na kopya ng page na ito</translation> <translation id="2546283357679194313">Cookies at data ng site</translation> -<translation id="2549516196460093976">Puwede mong gamitin ang tablet na ito para mag-sign in sa computer na nagpapakita sa QR code na ito.</translation> <translation id="2558569818338050235">Naaapektuhan ng iyong history ng pag-browse ang mga ad na nakikita mo</translation> <translation id="2561519700418191927">Mga preview ng video</translation> <translation id="2567385386134582609">LARAWAN</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb index 4e5665f..7c4de58 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Plus de contrôle sur les annonces que vous voyez</translation> <translation id="1477626028522505441">Échec du téléchargement de <ph name="FILE_NAME" /> en raison de problèmes au niveau du serveur.</translation> <translation id="148482509007564431">Flux d'enregistrement des favoris</translation> -<translation id="1488775391433859242">Vous pouvez utiliser ce téléphone pour vous connecter à l'ordinateur qui affiche ce code QR.</translation> <translation id="1492417797159476138">Vous avez déjà enregistré ce nom d'utilisateur pour ce site</translation> <translation id="1493287004536771723">Vous suivez <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Mettez à jour les services Google Play pour gérer vos mots de passe</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> éléments supprimés</translation> <translation id="2536728043171574184">Affichage d’une copie hors ligne de cette page en cours</translation> <translation id="2546283357679194313">Témoins et données de site</translation> -<translation id="2549516196460093976">Vous pouvez utiliser cette tablette pour vous connecter à l'ordinateur qui affiche ce code QR.</translation> <translation id="2558569818338050235">Votre historique de navigation a une incidence sur les annonces que vous voyez</translation> <translation id="2561519700418191927">Aperçus de vidéos</translation> <translation id="2567385386134582609">IMAGE</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb index 22ad79bb..6339b2a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Meilleur contrôle sur les annonces que vous voyez</translation> <translation id="1477626028522505441">Échec du téléchargement du fichier "<ph name="FILE_NAME" />" en raison de problèmes liés au serveur.</translation> <translation id="148482509007564431">Flux d'enregistrement en tant que favori</translation> -<translation id="1488775391433859242">Vous pouvez utiliser ce téléphone pour vous connecter sur l'ordinateur qui affiche le code QR.</translation> <translation id="1492417797159476138">Vous avez déjà enregistré ce nom d'utilisateur pour ce site</translation> <translation id="1493287004536771723">Vous suivez <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Pour gérer vos mots de passe, mettez à jour les services Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> éléments supprimés</translation> <translation id="2536728043171574184">Affichage d'une copie hors connexion de la page</translation> <translation id="2546283357679194313">Cookies et données des sites</translation> -<translation id="2549516196460093976">Vous pouvez utiliser cette tablette pour vous connecter sur l'ordinateur qui affiche le code QR.</translation> <translation id="2558569818338050235">Votre historique de navigation influe sur les annonces que vous voyez</translation> <translation id="2561519700418191927">Aperçus vidéo</translation> <translation id="2567385386134582609">IMAGE</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb index a6f09c2..2dd39a8af 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Máis control sobre os anuncios que ves</translation> <translation id="1477626028522505441">Produciuse un erro ao descargar <ph name="FILE_NAME" /> debido a problemas co servidor.</translation> <translation id="148482509007564431">Fluxo para gardar marcadores</translation> -<translation id="1488775391433859242">Podes utilizar este teléfono para iniciar sesión no ordenador no que se mostra este código QR.</translation> <translation id="1492417797159476138">Xa gardaches este nome de usuario para este sitio</translation> <translation id="1493287004536771723">Estás seguindo <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Para xestionar os teus contrasinais, actualiza os servizos de Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> elementos eliminados</translation> <translation id="2536728043171574184">Visualización dunha copia sen conexión desta páxina</translation> <translation id="2546283357679194313">Cookies e datos dos sitios</translation> -<translation id="2549516196460093976">Podes utilizar esta tableta para iniciar sesión no ordenador no que se mostra este código QR.</translation> <translation id="2558569818338050235">O teu historial de navegación aféctalles aos anuncios que se che mostran</translation> <translation id="2561519700418191927">Vistas previas de vídeos</translation> <translation id="2567385386134582609">IMAXE</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb index 20467af..b2aa856 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">તમે જુઓ છો તે જાહેરાતો પર વધુ નિયંત્રણ</translation> <translation id="1477626028522505441">સર્વર સમસ્યાઓને કારણે <ph name="FILE_NAME" /> ડાઉનલોડ નિષ્ફળ થયું.</translation> <translation id="148482509007564431">બુકમાર્ક સાચવવાનો ફ્લો</translation> -<translation id="1488775391433859242">આ QR કોડ બતાવતા હોય એવા કમ્પ્યુટર પર સાઇન ઇન કરવા માટે તમે આ ફોનનો ઉપયોગ કરી શકો છો.</translation> <translation id="1492417797159476138">તમે આ સાઇટ માટે પહેલેથી જ વપરાશકર્તા નામ સાચવ્યું છે</translation> <translation id="1493287004536771723">તમે <ph name="SITE_NAME" />ને ફૉલો કરી રહ્યાં છો</translation> <translation id="1502010315804028179">તમારા પાસવર્ડ મેનેજ કરવા માટે, Google Play સેવાઓ અપડેટ કરો</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> આઇટમ કાઢી નાખી</translation> <translation id="2536728043171574184">આ પેજની ઓફલાઇન કૉપિ જોઈ રહ્યા છે</translation> <translation id="2546283357679194313">કૂકીઝ અને સાઇટ ડેટા</translation> -<translation id="2549516196460093976">આ QR કોડ બતાવતા હોય એવા કમ્પ્યુટર પર સાઇન ઇન કરવા માટે તમે આ ટૅબ્લેટનો ઉપયોગ કરી શકો છો.</translation> <translation id="2558569818338050235">તમારો બ્રાઉઝિંગ ઇતિહાસ તમે જુઓ છો તે જાહેરાતોને અસર કરે છે</translation> <translation id="2561519700418191927">વીડિયોના પ્રીવ્યૂ</translation> <translation id="2567385386134582609">છબી</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">પ્રાઇવસી સંબંધિત માર્ગદર્શિકાની સમજૂતી પૂરી ઊંચાઈ સુધી ખોલી છે</translation> <translation id="7207760545532569765"><ph name="TAB_COUNT" /> ટૅબને નવી બૅકગ્રાઉન્ડ ટૅબ તરીકે રિસ્ટોર કરો.</translation> <translation id="7208109991155904980">પ્રતિક્રિયા ખસેડવામાં આવી</translation> +<translation id="7217781228893594884">જ્યારે તમે Chrome છોડશો, ત્યારે છૂપી ટૅબ લૉક થઈ જશે</translation> <translation id="7222235798733126207">સાઇટ વચ્ચે મર્યાદિત શેરિંગ</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 ડાઉનલોડ બાકી}one{# ડાઉનલોડ બાકી}other{# ડાઉનલોડ બાકી}}</translation> <translation id="7242755609445462077">સ્ટાઇલિશ હાઇલાઇટ <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb index 536f38c..3f58888 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">आपको दिखाए जाने वाले विज्ञापनों पर आपका ज़्यादा कंट्रोल</translation> <translation id="1477626028522505441">सर्वर संबधी समस्याओं के कारण <ph name="FILE_NAME" /> डाउनलोड विफल रहा.</translation> <translation id="148482509007564431">बुकमार्क सेव फ़्लो</translation> -<translation id="1488775391433859242">इस फ़ोन का इस्तेमाल उस कंप्यूटर पर साइन इन करने के लिए किया जा सकता है जिस पर यह क्यूआर कोड दिख रहा है.</translation> <translation id="1492417797159476138">आपने इस साइट के लिए, यह उपयोगकर्ता नाम पहले ही सेव कर दिया है</translation> <translation id="1493287004536771723">आप <ph name="SITE_NAME" /> को फ़ॉलो कर रहे हैं</translation> <translation id="1502010315804028179">अपने पासवर्ड मैनेज करने के लिए, Google Play services को अपडेट करें</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> आइटम मिटाए गए</translation> <translation id="2536728043171574184">इस पृष्ठ की ऑफ़लाइन कॉपी देख रहे हैं</translation> <translation id="2546283357679194313">कुकी और साइट डेटा</translation> -<translation id="2549516196460093976">इस टैबलेट का इस्तेमाल उस कंप्यूटर पर साइन इन करने के लिए किया जा सकता है जिस पर यह क्यूआर कोड दिख रहा है.</translation> <translation id="2558569818338050235">आपके ब्राउज़िंग इतिहास का इस बात पर असर पड़ता है कि आपको कौनसे विज्ञापन दिखेंगे</translation> <translation id="2561519700418191927">वीडियो की झलक की सेटिंग</translation> <translation id="2567385386134582609">इमेज</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb index 36b8eda..929ba01 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Više kontrole nad oglasima koji vam se prikazuju</translation> <translation id="1477626028522505441">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspjelo zbog poteškoća s poslužiteljem.</translation> <translation id="148482509007564431">Tijek spremanja oznake</translation> -<translation id="1488775391433859242">Pomoću ovog telefona možete se prijaviti na računalu na kojem se prikazuje ovaj QR kôd.</translation> <translation id="1492417797159476138">Već ste spremili ovo korisničko ime za ovu web-lokaciju</translation> <translation id="1493287004536771723">Pratite web-lokaciju <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Ažurirajte usluge za Google Play da biste upravljali zaporkama</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Broj izbrisanih stavki: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Prikaz izvanmrežne kopije stranice</translation> <translation id="2546283357679194313">Kolačići i podaci o web-lokacijama</translation> -<translation id="2549516196460093976">Pomoću ovog tableta možete se prijaviti na računalu na kojem se prikazuje ovaj QR kôd.</translation> <translation id="2558569818338050235">Vaša povijest pregledavanja utječe na oglase koji vam se prikazuju</translation> <translation id="2561519700418191927">Pregledi videozapisa</translation> <translation id="2567385386134582609">SLIKA</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb index 93e27383..813a1c62 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Jobban szabályozhatja az Ön számára megjelenő hirdetéseket</translation> <translation id="1477626028522505441">A következő fájl letöltése szerverproblémák miatt nem sikerült: <ph name="FILE_NAME" />.</translation> <translation id="148482509007564431">Könyvjelzőmentési folyamat</translation> -<translation id="1488775391433859242">Ezzel a telefonnal bejelentkezhet a QR-kódot megjelenítő számítógépen.</translation> <translation id="1492417797159476138">Már elmentette ezt a felhasználónevet ehhez a webhelyhez</translation> <translation id="1493287004536771723">Követi a következő webhelyet: <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Jelszavai kezeléséhez frissítse a Google Play-szolgáltatásokat</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> elem törölve</translation> <translation id="2536728043171574184">Az oldal offline példányának megtekintése</translation> <translation id="2546283357679194313">Cookie-k és webhelyadatok</translation> -<translation id="2549516196460093976">Ezzel a táblagéppel bejelentkezhet a QR-kódot megjelenítő számítógépen.</translation> <translation id="2558569818338050235">Böngészési előzményei határozzák meg, hogy milyen hirdetések jelennek meg Önnek</translation> <translation id="2561519700418191927">Videó-előnézetek</translation> <translation id="2567385386134582609">KÉP</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb index 12f3a01..914fea3d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Ավելի շատ վերահսկողություն ձեզ ցուցադրվող գովազդի վրա</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> ֆայլի ներբեռնումը ձախողվեց՝ սերվերի հետ կապված խնդրի պատճառով:</translation> <translation id="148482509007564431">Էջանիշի պահման էջ</translation> -<translation id="1488775391433859242">Դուք կարող եք օգտագործել այս հեռախոսը՝ հաշիվ մուտք գործելու համակարգչում, որում ցուցադրված է այս QR կոդը։</translation> <translation id="1492417797159476138">Օգտանունն արդեն պահված է այս կայքի համար</translation> <translation id="1493287004536771723">Դուք հետևում եք <ph name="SITE_NAME" /> կայքին</translation> <translation id="1502010315804028179">Թարմացրեք Google Play ծառայությունները՝ ձեր գաղտնաբառերը կառավարելու համար</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> տարր ջնջվեց</translation> <translation id="2536728043171574184">Դուք դիտում եք տվյալ էջի անցանց պատճենը</translation> <translation id="2546283357679194313">Cookie ֆայլեր և կայքի տվյալներ</translation> -<translation id="2549516196460093976">Դուք կարող եք օգտագործել այս պլանշետը՝ հաշիվ մուտք գործելու համակարգչում, որում ցուցադրված է այս QR կոդը։</translation> <translation id="2558569818338050235">Ձեր այցելությունների պատմությունն ազդում է ձեզ ցուցադրվող գովազդի վրա</translation> <translation id="2561519700418191927">Տեսանյութերի նախադիտում</translation> <translation id="2567385386134582609">ՊԱՏԿԵՐ</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Տվյալների պաշտպանության ուղեցույցի մասին տեղեկությունները բացված են ամբողջությամբ</translation> <translation id="7207760545532569765">Վերականգնել <ph name="TAB_COUNT" /> ներդիրները որպես նոր ֆոնային ներդիրներ։</translation> <translation id="7208109991155904980">Արձագանքը տեղափոխվել է</translation> +<translation id="7217781228893594884">Ինկոգնիտո ներդիրները կկողպվեն, երբ դուք փակեք Chrome-ը</translation> <translation id="7222235798733126207">Կայքերի միջև տվյալների սահմանափակ փոխանակում</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{Կնեռբեռնվի 1 ֆայլ}one{Կներբեռնվի # ֆայլ}other{Կներբեռնվի # ֆայլ}}</translation> <translation id="7242755609445462077">Ոճավորված բովանդակություն՝ <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb index 4df2610..f7b1455f4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Lebih banyak kontrol atas iklan yang Anda lihat</translation> <translation id="1477626028522505441">Download <ph name="FILE_NAME" /> gagal karena masalah server.</translation> <translation id="148482509007564431">Alur penyimpanan bookmark</translation> -<translation id="1488775391433859242">Anda dapat menggunakan ponsel ini untuk login di komputer yang menampilkan kode QR ini.</translation> <translation id="1492417797159476138">Anda telah menyimpan nama pengguna ini untuk situs ini</translation> <translation id="1493287004536771723">Anda mengikuti <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Untuk mengelola sandi, update layanan Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> item dihapus</translation> <translation id="2536728043171574184">Melihat salinan offline halaman ini</translation> <translation id="2546283357679194313">Cookie dan data situs</translation> -<translation id="2549516196460093976">Anda dapat menggunakan tablet ini untuk login di komputer yang menampilkan kode QR ini.</translation> <translation id="2558569818338050235">Histori penjelajahan Anda memengaruhi iklan yang Anda lihat</translation> <translation id="2561519700418191927">Pratinjau video</translation> <translation id="2567385386134582609">GAMBAR</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb index d0b4b8c..c660f8b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Betri stjórn á auglýsingunum sem þú sérð</translation> <translation id="1477626028522505441">Niðurhal á <ph name="FILE_NAME" /> mistókst vegna vandamála á netþjóni.</translation> <translation id="148482509007564431">Vistun bókamerkja</translation> -<translation id="1488775391433859242">Þú getur notað þennan síma til að skrá þig inn í tölvunni sem birtir þennan QR-kóða.</translation> <translation id="1492417797159476138">Þú varst þegar búin(n) að vista þetta notandanafn fyrir vefsvæðið</translation> <translation id="1493287004536771723">Þú fylgist með <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Uppfærðu þjónustu Google Play til að stjórna aðgangsorðunum þínum</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> atriðum eytt</translation> <translation id="2536728043171574184">Skoðar ótengt afrit af þessari síðu</translation> <translation id="2546283357679194313">Fótspor og gögn vefsvæða</translation> -<translation id="2549516196460093976">Þú getur notað þessa spjaldtölvu til að skrá þig inn í tölvunni sem birtir þennan QR-kóða.</translation> <translation id="2558569818338050235">Vafraferillinn þinn hefur áhrif á hvaða auglýsingar þú sérð</translation> <translation id="2561519700418191927">Forskoðun myndskeiða</translation> <translation id="2567385386134582609">MYND</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb index 21e8c10..0e862702 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Maggiore controllo sugli annunci che ti vengono mostrati</translation> <translation id="1477626028522505441">Download di <ph name="FILE_NAME" /> non riuscito a causa di problemi del server.</translation> <translation id="148482509007564431">Flusso di salvataggio dei preferiti</translation> -<translation id="1488775391433859242">Puoi utilizzare questo telefono per accedere sul computer che mostra questo codice QR.</translation> <translation id="1492417797159476138">Hai già salvato questo nome utente per questo sito</translation> <translation id="1493287004536771723">Stai seguendo <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Per gestire le tue password, aggiorna Google Play Services</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> elementi eliminati</translation> <translation id="2536728043171574184">È visualizzata una copia offline della pagina</translation> <translation id="2546283357679194313">Cookie e dati dei siti</translation> -<translation id="2549516196460093976">Puoi utilizzare questo tablet per accedere sul computer che mostra questo codice QR.</translation> <translation id="2558569818338050235">La cronologia di navigazione incide sugli annunci che ti vengono mostrati</translation> <translation id="2561519700418191927">Anteprime video</translation> <translation id="2567385386134582609">IMMAGINE</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb index 0feab8b3..c67ac294 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">שליטה טובה יותר על המודעות שיוצגו לך</translation> <translation id="1477626028522505441">הורדת <ph name="FILE_NAME" /> נכשלה עקב בעיות בשרת.</translation> <translation id="148482509007564431">תהליך שמירת הסימנייה</translation> -<translation id="1488775391433859242">יש לך אפשרות להשתמש בטלפון הזה כדי להיכנס לחשבון במחשב שמוצג בו קוד ה-QR הזה.</translation> <translation id="1492417797159476138">שם המשתמש הזה כבר נשמר לאתר זה</translation> <translation id="1493287004536771723">בחרת לעקוב אחר <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">כדי לנהל את הסיסמאות, צריך לעדכן את Google Play Services</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> פריטים נמחקו</translation> <translation id="2536728043171574184">מוצג העתק לא מקוון של עמוד זה</translation> <translation id="2546283357679194313">נתוני אתר וקובצי Cookie</translation> -<translation id="2549516196460093976">יש לך אפשרות להשתמש בטאבלט הזה כדי להיכנס לחשבון במחשב שמוצג בו קוד ה-QR הזה.</translation> <translation id="2558569818338050235">היסטוריית הגלישה שלך משפיעה על המודעות שמוצגות לך</translation> <translation id="2561519700418191927">תצוגות מקדימות של סרטונים</translation> <translation id="2567385386134582609">תמונה</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">ההסבר על המדריך בנושא פרטיות נפתח בגובה מלא</translation> <translation id="7207760545532569765">שחזור של <ph name="TAB_COUNT" /> כרטיסיות ככרטיסיות חדשות ברקע.</translation> <translation id="7208109991155904980">התגובה הוזזה</translation> +<translation id="7217781228893594884">כרטיסיות פרטיות ננעלות כשסוגרים את Chrome</translation> <translation id="7222235798733126207">הגבלה על השיתוף בין אתרים</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{הורדה אחת בהמתנה}two{# הורדות בהמתנה}many{# הורדות בהמתנה}other{# הורדות בהמתנה}}</translation> <translation id="7242755609445462077">הדגשה מסוגננת <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb index a15b299d..a55a3b2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">表示される広告の詳細な管理</translation> <translation id="1477626028522505441">サーバーで問題が発生したため、<ph name="FILE_NAME" /> をダウンロードできませんでした。</translation> <translation id="148482509007564431">ブックマーク保存フロー</translation> -<translation id="1488775391433859242">この QR コードが表示されているパソコンに、このスマートフォンを使用してログインできます。</translation> <translation id="1492417797159476138">このユーザー名はこのサイトですでに保存されています</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> をフォローしています</translation> <translation id="1502010315804028179">パスワードを管理するには、Google Play 開発者サービスを更新してください</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" />件の項目を削除しました</translation> <translation id="2536728043171574184">このページのオフライン コピーを表示しています</translation> <translation id="2546283357679194313">Cookie とサイトデータ</translation> -<translation id="2549516196460093976">この QR コードが表示されているパソコンに、このタブレットを使用してログインできます。</translation> <translation id="2558569818338050235">閲覧履歴は表示される広告に影響します</translation> <translation id="2561519700418191927">動画プレビュー</translation> <translation id="2567385386134582609">画像</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb index bdd7e3c..c87c1c89 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">მეტი კონტროლი თქვენთვის ხილულ რეკლამაზე</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> ვერ ჩამოიტვირთა სერვერთან დაკავშირებული პრობლემების გამო.</translation> <translation id="148482509007564431">სანიშნეების შენახვის ნაკადი</translation> -<translation id="1488775391433859242">ამ ტელეფონის მეშვეობით შეგიძლიათ შეხვიდეთ კომპიუტერში, რომელზეც ნაჩვენებია ეს QR კოდი.</translation> <translation id="1492417797159476138">მომხმარებლის ეს სახელი ამ საიტისთვის უკვე შეინახეთ</translation> <translation id="1493287004536771723">თქვენ თვალს ადევნებთ <ph name="SITE_NAME" />-ს</translation> <translation id="1502010315804028179">თქვენი პაროლები რომ მართოთ, განაახლეთ Google Play services</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> ერთეული წაიშალა</translation> <translation id="2536728043171574184">თქვენ ამ გვერდის ხაზგარეშე ასლს ნახულობთ</translation> <translation id="2546283357679194313">ქუქი-ფაილები და საიტის მონაცემები</translation> -<translation id="2549516196460093976">ამ ტაბლეტის მეშვეობით შეგიძლიათ შეხვიდეთ კომპიუტერში, რომელზეც ნაჩვენებია ეს QR კოდი.</translation> <translation id="2558569818338050235">თქვენ მიერ ვების დათვალიერების ისტორია აისახება თქვენთვის ხილულ რეკლამაზე</translation> <translation id="2561519700418191927">ვიდეოების გადასახედი ვერსიები</translation> <translation id="2567385386134582609">სურათი</translation> @@ -475,6 +473,7 @@ <translation id="3557336313807607643">კონტაქტებში დამატება</translation> <translation id="3560491354538957576">საიტს შეუძლია ინტერესების განსაზღვრა</translation> <translation id="3563767357928833671">გაცვლის ბუფერის შიგთავსი ნაჩვენებია</translation> +<translation id="3566639033325271639">პარამეტრების განახლება</translation> <translation id="3566923219790363270">Chrome ჯერ კიდევ მზადდება VR-ისთვის. გადატვირთეთ Chrome მოგვიანებით.</translation> <translation id="3568688522516854065">თქვენს სხვა მოწყობილობაზე არსებულ ჩანართებზე წვდომისთვის შედით სისტემაში და ჩართეთ სინქრონიზაცია</translation> <translation id="357465026686164600">ტელეფონი უსაფრთხოების გასაღების სახით</translation> @@ -569,6 +568,7 @@ <translation id="4116038641877404294">ჩამოტვირთეთ გვერდები ხაზგარეშე რეჟიმში გამოსაყენებლად</translation> <translation id="4135200667068010335">მოწყობილობების სია, რომლებთანაც უნდა გაზიარდეს ჩანართი, დახურულია.</translation> <translation id="4137746084635924146">მოწყობილობის ამჟამინდელი ენა</translation> +<translation id="414128724510021958">ნაგულისხმევად მოთხოვნილია დესკტოპის საიტები</translation> <translation id="4141536112466364990">Chrome-ის სწავლა</translation> <translation id="4162867837470729563">გაზიარების ვარიანტების სია სრულ სიმაღლეზეა.</translation> <translation id="4165986682804962316">საიტის პარამეტრები</translation> @@ -1143,6 +1143,7 @@ <translation id="7196215469483532480">კონფიდენციალურობის სახელმძღვანელოს განმარტება გახსნილია სრულ სიმაღლეზე</translation> <translation id="7207760545532569765">ჩანართების (<ph name="TAB_COUNT" />), როგორც ფონური რეჟიმის ჩანართების ახალი ჯგუფის აღდგენა.</translation> <translation id="7208109991155904980">რეაქცია გადატანილია</translation> +<translation id="7217781228893594884">ინკოგნიტო ჩანართები ჩაიკეტება, როცა Chrome-იდან გახვალთ</translation> <translation id="7222235798733126207">საიტებს შორის შეზღუდული გაზიარება</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 ჩამოტვირთვა მოლოდინის რეჟიმშია}other{# ჩამოტვირთვა მოლოდინის რეჟიმშია}}</translation> <translation id="7242755609445462077">სტილიზებული გამოყოფილი კონტენტი — <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb index 4e3abe1..552755b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Көретін жарнамаларды көбірек бақылау</translation> <translation id="1477626028522505441">Сервердегі ақаулықтар себебінен <ph name="FILE_NAME" /> жүктелмеді.</translation> <translation id="148482509007564431">Бетбелгілерді сақтау ағыны</translation> -<translation id="1488775391433859242">Бұл телефонды осы QR кодын көрсетіп тұрған компьютерге кіру үшін пайдалана аласыз.</translation> <translation id="1492417797159476138">Бұл сайт үшін осы пайдаланушы аты сақтап қойылған.</translation> <translation id="1493287004536771723">Сіз <ph name="SITE_NAME" /> сайтына жазылғансыз</translation> <translation id="1502010315804028179">Құпия сөздеріңізді басқару үшін Google Play қызметтерін жаңартыңыз.</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> элемент жойылды.</translation> <translation id="2536728043171574184">Бұл беттің желіден тыс күйдегі көшірмесі көрсетілуде</translation> <translation id="2546283357679194313">Cookie файлдары және торап деректері</translation> -<translation id="2549516196460093976">Бұл планшетті осы QR кодын көрсетіп тұрған компьютерге кіру үшін пайдалана аласыз.</translation> <translation id="2558569818338050235">Браузерді қолдану тарихы сіз көретін жарнамаларға әсер етеді.</translation> <translation id="2561519700418191927">Бейнені алдын ала қарау</translation> <translation id="2567385386134582609">КЕСКІН</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Құпиялылық нұсқаулығы туралы түсіндірме толық ашылды.</translation> <translation id="7207760545532569765"><ph name="TAB_COUNT" /> қойындыны жаңа фондық қойындылар ретінде қалпына келтіру.</translation> <translation id="7208109991155904980">Эмоция жылжытылды.</translation> +<translation id="7217781228893594884">Инкогнито қойындылары Chrome-нан шыққан кезде құлыпталады.</translation> <translation id="7222235798733126207">Сайттар арасында бөлісуді шектеу</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 файл жүктеп алынуы керек}other{# файл жүктеп алынуы керек}}</translation> <translation id="7242755609445462077">Стильденген жазба: <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb index 53bb42c..42c3feb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">ការគ្រប់គ្រងបន្ថែមលើការផ្សាយពាណិជ្ជកម្មដែលអ្នកមើលឃើញ</translation> <translation id="1477626028522505441">ការដោនឡូត <ph name="FILE_NAME" /> បានបរាជ័យដោយសារមានបញ្ហាផ្នែកម៉ាស៊ីនមេ។</translation> <translation id="148482509007564431">លំហូរនៃការរក្សាទុកចំណាំ</translation> -<translation id="1488775391433859242">អ្នកអាចប្រើទូរសព្ទនេះ ដើម្បីចូលគណនីនៅលើកុំព្យូទ័រ ដែលកំពុងបង្ហាញកូដ QR នេះ។</translation> <translation id="1492417797159476138">អ្នកបានរក្សាទុកឈ្មោះអ្នកប្រើប្រាស់នេះសម្រាប់គេហទំព័រនេះរួចហើយ</translation> <translation id="1493287004536771723">អ្នកកំពុងតាមដាន <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">ដើម្បីគ្រប់គ្រងពាក្យសម្ងាត់របស់អ្នក សូមធ្វើបច្ចុប្បន្នភាពសេវាកម្ម Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">បានលុបធាតុ <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">កំពុងមើលច្បាប់ចម្លងនៃទំព័រនេះនៅក្រៅបណ្តាញ</translation> <translation id="2546283357679194313">ខុកឃី និងទិន្នន័យគេហទំព័រ</translation> -<translation id="2549516196460093976">អ្នកអាចប្រើថេប្លេតនេះ ដើម្បីចូលគណនីនៅលើកុំព្យូទ័រ ដែលកំពុងបង្ហាញកូដ QR នេះ។</translation> <translation id="2558569818338050235">ប្រវត្តិរុករកតាមអ៊ីនធឺណិតរបស់អ្នកមានឥទ្ធិពលលើការផ្សាយពាណិជ្ជកម្មដែលអ្នកមើលឃើញ</translation> <translation id="2561519700418191927">មើលវីដេអូសាកល្បង</translation> <translation id="2567385386134582609">រូបភាព</translation> @@ -475,6 +473,7 @@ <translation id="3557336313807607643">បញ្ចូលទៅក្នុងទំនាក់ទំនង</translation> <translation id="3560491354538957576">គេហទំព័រអាចកំណត់ចំណាប់អារម្មណ៍</translation> <translation id="3563767357928833671">ខ្លឹមសារឃ្លីបបតត្រូវបានបង្ហាញ</translation> +<translation id="3566639033325271639">ធ្វើបច្ចុប្បន្នភាពការកំណត់</translation> <translation id="3566923219790363270">Chrome កំពុងរៀបចំសម្រាប់ VR នៅឡើយ។ ចាប់ផ្តើម Chrome ឡើងវិញនៅពេលក្រោយ។</translation> <translation id="3568688522516854065">ដើម្បីទទួលបានផ្ទាំងរបស់អ្នកពីឧបករណ៍ផ្សេងទៀតរបស់អ្នក សូមចូលគណនី និងបើកសមកាលកម្ម</translation> <translation id="357465026686164600">ទូរសព្ទជាសោសុវត្ថិភាព</translation> @@ -569,6 +568,7 @@ <translation id="4116038641877404294">ទាញយកទំព័រដើម្បីប្រើពួកវាដោយគ្មានអ៊ីនធឺណិត</translation> <translation id="4135200667068010335">បានបិទបញ្ជីឧបករណ៍ដែលត្រូវចែករំលែកផ្ទាំងជាមួយ។</translation> <translation id="4137746084635924146">ភាសាឧបករណ៍បច្ចុប្បន្ន</translation> +<translation id="414128724510021958">គេហទំព័រកុំព្យូទ័រត្រូវបានស្នើសុំតាមលំនាំដើម</translation> <translation id="4141536112466364990">ស្វែងយល់អំពី Chrome</translation> <translation id="4162867837470729563">បញ្ជីជម្រើសចែករំលែកបានបើកពេញអេក្រង់។</translation> <translation id="4165986682804962316">ការកំណត់គេហទំព័រ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb index 9ea90eac..f3b12e2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">ನೀವು ನೋಡುವ ಜಾಹೀರಾತುಗಳ ಮೇಲೆ ಹೆಚ್ಚಿನ ನಿಯಂತ್ರಣ</translation> <translation id="1477626028522505441">ಸರ್ವರ್ ಸಮಸ್ಯೆಗಳ ಕಾರಣದಿಂದಾಗಿ <ph name="FILE_NAME" /> ಡೌನ್ಲೋಡ್ ವಿಫಲವಾಗಿದೆ.</translation> <translation id="148482509007564431">ಬುಕ್ಮಾರ್ಕ್ ಉಳಿಸಿ ಫ್ಲೋ</translation> -<translation id="1488775391433859242">ಈ QR ಕೋಡ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸುವ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಸೈನ್ ಇನ್ ಮಾಡಲು ನೀವು ಈ ಫೋನ್ ಅನ್ನು ಬಳಸಬಹುದು.</translation> <translation id="1492417797159476138">ಈ ಸೈಟ್ಗಾಗಿ ನೀವು ಈಗಾಗಲೇ ಈ ಬಳಕೆದಾರರ ಹೆಸರನ್ನು ಉಳಿಸಿದ್ದೀರಿ</translation> <translation id="1493287004536771723">ನೀವು <ph name="SITE_NAME" /> ಅನ್ನು ಅನುಸರಿಸುತ್ತಿದ್ದೀರಿ</translation> <translation id="1502010315804028179">ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು Google Play ಸೇವೆಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> ಐಟಂಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</translation> <translation id="2536728043171574184">ಈ ಪುಟದ ಆಫ್ಲೈನ್ ನಕಲನ್ನು ವೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="2546283357679194313">ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾ</translation> -<translation id="2549516196460093976">ಈ QR ಕೋಡ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸುವ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಸೈನ್ ಇನ್ ಮಾಡಲು ನೀವು ಈ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಬಳಸಬಹುದು.</translation> <translation id="2558569818338050235">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸ ನಿಮಗೆ ಕಾಣಿಸುವ ಜಾಹೀರಾತುಗಳ ಮೇಲೆ ಪ್ರಭಾವ ಬೀರುತ್ತದೆ</translation> <translation id="2561519700418191927">ವೀಡಿಯೊ ಪೂರ್ವವೀಕ್ಷಣೆಗಳು</translation> <translation id="2567385386134582609">ಚಿತ್ರ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb index d88aa0a..a53a32ed5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">표시되는 광고를 더 세부적으로 관리</translation> <translation id="1477626028522505441">서버 문제로 인해 <ph name="FILE_NAME" />을(를) 다운로드할 수 없습니다.</translation> <translation id="148482509007564431">북마크 저장 흐름</translation> -<translation id="1488775391433859242">이 휴대전화를 사용하여 이 QR 코드를 표시하는 컴퓨터에 로그인할 수 있습니다.</translation> <translation id="1492417797159476138">이미 사이트에 사용 중인 사용자 이름입니다.</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> 사이트를 팔로우 중입니다.</translation> <translation id="1502010315804028179">비밀번호를 관리하려면 Google Play 서비스를 업데이트하세요.</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" />개 항목 삭제함</translation> <translation id="2536728043171574184">이 페이지의 오프라인 사본 보는 중</translation> <translation id="2546283357679194313">쿠키 및 사이트 데이터</translation> -<translation id="2549516196460093976">이 태블릿을 사용하여 이 QR 코드를 표시하는 컴퓨터에 로그인할 수 있습니다.</translation> <translation id="2558569818338050235">사용자의 방문 기록에 맞춘 광고가 표시됩니다.</translation> <translation id="2561519700418191927">동영상 미리보기</translation> <translation id="2567385386134582609">이미지</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb index 92e7e9d..a91e133c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Көрсөтүлгөн жарнамаларды көзөмөлдөөнүн кошумча параметрлери</translation> <translation id="1477626028522505441">Сервердеги маселелерден улам <ph name="FILE_NAME" /> жүктөлүп алынган жок.</translation> <translation id="148482509007564431">Тематикасына жараша сакталган кыстармалар</translation> -<translation id="1488775391433859242">Бул телефон менен ушул QR коду көрүнүп турган компьютерге кире аласыз.</translation> <translation id="1492417797159476138">Бул сайт үчүн ушул колдонуучунун атын сактап койгонсуз</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> жаңылыктарына жазылдыңыз</translation> <translation id="1502010315804028179">Сырсөздөрдү тескөө үчүн Google Play кызматтарын жаңыртыңыз</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> нерсе өчүрүлдү</translation> <translation id="2536728043171574184">Бул барактын оффлайндагы көчүрмөсү көрсөтүлүүдө</translation> <translation id="2546283357679194313">Кукилер жана сайттын дайындары</translation> -<translation id="2549516196460093976">Бул планшет менен ушул QR коду көрүнүп турган компьютерге кире аласыз.</translation> <translation id="2558569818338050235">Жарнамалар көрүлгөн вебсайттарга жараша көрсөтүлөт</translation> <translation id="2561519700418191927">Видеолорду алдын ала көрүү</translation> <translation id="2567385386134582609">СҮРӨТ</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Купуялык жетектемесинин түшүндүрмөсү толугу менен ачылды</translation> <translation id="7207760545532569765"><ph name="TAB_COUNT" /> өтмөктү фондогу жаңы өтмөктөр катары калыбына келтирүү.</translation> <translation id="7208109991155904980">Реакция жылдырылды</translation> +<translation id="7217781228893594884">Chrome'дон чыкканыңызда жашыруун өтмөктөр кулпуланат</translation> <translation id="7222235798733126207">Сайттардын арасындагы бөлүшүү аракетин чектөө</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 жүктөп алуу күтүлүүдө}other{# жүктөп алуу күтүлүүдө}}</translation> <translation id="7242755609445462077">Cтилдештирилген бөлүп көрсөтүү: <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb index 42b5df4e..e500aa3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">ການຄວບຄຸມເພີ່ມເຕີມຕໍ່ໂຄສະນາທີ່ທ່ານເຫັນ</translation> <translation id="1477626028522505441">ການດາວໂຫຼດ <ph name="FILE_NAME" /> ລົ້ມເຫລວເນື່ອງຈາກບັນຫາເຊີບເວີ.</translation> <translation id="148482509007564431">ຂັ້ນຕອນການບັນທຶກບຸກມາກ</translation> -<translation id="1488775391433859242">ທ່ານສາມາດໃຊ້ໂທລະສັບນີ້ເພື່ອເຂົ້າສູ່ລະບົບຢູ່ຄອມພິວເຕີທີ່ສະແດງລະຫັດ QR ນີ້ໄດ້.</translation> <translation id="1492417797159476138">ທ່ານໄດ້ບັນທຶກຊື່ຜູ້ໃຊ້ນີ້ສຳລັບເວັບໄຊນີ້ຢູ່ກ່ອນແລ້ວ</translation> <translation id="1493287004536771723">ທ່ານກຳລັງຕິດຕາມ <ph name="SITE_NAME" /> ຢູ່</translation> <translation id="1502010315804028179">ເພື່ອຈັດການລະຫັດຜ່ານຂອງທ່ານ, ໃຫ້ອັບເດດບໍລິການ Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">ລຶບ <ph name="NUMBER_OF_ITEMS" /> ລາຍການແລ້ວ</translation> <translation id="2536728043171574184">ກຳລັງເຂົ້າເບິ່ງສຳເນົາອັອບລາຍຂອງໜ້ານີ້</translation> <translation id="2546283357679194313">ຄຸກກີ້ ແລະຂໍ້ມູນເວັບໄຊທ໌...</translation> -<translation id="2549516196460093976">ທ່ານສາມາດໃຊ້ແທັບເລັດນີ້ເພື່ອເຂົ້າສູ່ລະບົບຢູ່ຄອມພິວເຕີທີ່ສະແດງລະຫັດ QR ນີ້ໄດ້.</translation> <translation id="2558569818338050235">ປະຫວັດການທ່ອງເວັບຂອງທ່ານມີຜົນກັບໂຄສະນາທີ່ທ່ານເຫັນ</translation> <translation id="2561519700418191927">ຕົວຢ່າງວິດີໂອ</translation> <translation id="2567385386134582609">ຮູບ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb index 7571cec..cd127ba 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Geresnis rodomų skelbimų valdymas</translation> <translation id="1477626028522505441">Nepavyko atsisiųsti „<ph name="FILE_NAME" />“ dėl serverio problemų.</translation> <translation id="148482509007564431">Žymių išsaugojimo srautas</translation> -<translation id="1488775391433859242">Naudodami šį telefoną galite prisijungti prie kompiuterio, kuriame rodomas šis QR kodas.</translation> <translation id="1492417797159476138">Jau išsaugojote šį naudotojo vardą šioje svetainėje</translation> <translation id="1493287004536771723">Stebite „<ph name="SITE_NAME" />“</translation> <translation id="1502010315804028179">Kad galėtumėte tvarkyti slaptažodžius, atnaujinkite „Google Play“ paslaugas</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Ištrinta elementų: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Žiūrima neprisijungus naudojama šio puslapio kopija</translation> <translation id="2546283357679194313">Slapukai ir svetainės duomenys</translation> -<translation id="2549516196460093976">Naudodami šį planšetinį kompiuterį galite prisijungti prie kompiuterio, kuriame rodomas šis QR kodas.</translation> <translation id="2558569818338050235">Jūsų naršymo istorija paveikia, kokius skelbimus matote</translation> <translation id="2561519700418191927">Vaizdo įrašų peržiūros</translation> <translation id="2567385386134582609">VAIZDAS</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb index b10f7c3..1155966 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Lielāka kontrole pār jums rādītajām reklāmām</translation> <translation id="1477626028522505441">Neizdevās lejupielādēt failu <ph name="FILE_NAME" />, jo radās servera problēmas.</translation> <translation id="148482509007564431">Grāmatzīmes saglabāšanas plūsma</translation> -<translation id="1488775391433859242">Izmantojot šo tālruni, varat pierakstīties datorā, kurā tiek rādīts šis kvadrātkods.</translation> <translation id="1492417797159476138">Jūs jau saglabājāt šo lietotājvārdu šai vietnei</translation> <translation id="1493287004536771723">Jūs sekojat vietnei <ph name="SITE_NAME" />.</translation> <translation id="1502010315804028179">Lai pārvaldītu paroles, atjauniniet Google Play pakalpojumus.</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> vienumi tika izdzēsti</translation> <translation id="2536728043171574184">Skata šīs lapas kopiju bezsaistē</translation> <translation id="2546283357679194313">Sīkfaili un vietņu dati</translation> -<translation id="2549516196460093976">Izmantojot šo planšetdatoru, varat pierakstīties datorā, kurā tiek rādīts šis kvadrātkods.</translation> <translation id="2558569818338050235">Pārlūkošanas vēsture ietekmē to, kādas reklāmas jums tiek rādītas</translation> <translation id="2561519700418191927">Videoklipu priekšskatījumi</translation> <translation id="2567385386134582609">ATTĒLS</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb index 530249a..6fe8ef69 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Поголема контрола над рекламите што ги гледате</translation> <translation id="1477626028522505441">Преземањето на <ph name="FILE_NAME" /> не успеа поради проблеми со серверот.</translation> <translation id="148482509007564431">Тек за зачувување обележувач</translation> -<translation id="1488775391433859242">Може да го користите телефонов за да се најавите на компјутерот што го прикажува QR-кодов.</translation> <translation id="1492417797159476138">Веќе го зачувавте ова корисничко име за сајтов</translation> <translation id="1493287004536771723">Го следите <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">За да управувате со вашите лозинки, ажурирајте ги услугите на Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Избришани се <ph name="NUMBER_OF_ITEMS" /> ставки</translation> <translation id="2536728043171574184">Се прикажува офлајн копија на страницата</translation> <translation id="2546283357679194313">Колачиња и податоци од сајтот</translation> -<translation id="2549516196460093976">Може да го користите таблетов за да се најавите на компјутерот што го прикажува QR-кодов.</translation> <translation id="2558569818338050235">Вашата историја на прелистувањето влијае на рекламите што ги гледате</translation> <translation id="2561519700418191927">Прегледи на видео</translation> <translation id="2567385386134582609">СЛИКА</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb index d88e07e..0d7cdd4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">നിങ്ങൾ കാണുന്ന പരസ്യങ്ങളിൽ കൂടുതൽ നിയന്ത്രണം</translation> <translation id="1477626028522505441">സെർവർ പ്രശ്നങ്ങൾ കാരണം <ph name="FILE_NAME" /> ഡൗൺലോഡ് ചെയ്യാനായില്ല.</translation> <translation id="148482509007564431">ബുക്ക്മാർക്ക് സംരക്ഷിക്കൽ ഫ്ലോ</translation> -<translation id="1488775391433859242">ഈ QR കോഡ് ദൃശ്യമാക്കുന്ന കമ്പ്യൂട്ടറിൽ സൈൻ ഇൻ ചെയ്യാൻ നിങ്ങൾക്ക് ഈ ഫോൺ ഉപയോഗിക്കാം.</translation> <translation id="1492417797159476138">ഈ സൈറ്റിനായി നിങ്ങൾ ഇതിനകം തന്നെ ഈ ഉപയോക്തൃനാമം സംരക്ഷിച്ചു</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> എന്നതിനെ നിങ്ങൾ പിന്തുടരുന്നു</translation> <translation id="1502010315804028179">നിങ്ങളുടെ പാസ്വേഡുകൾ മാനേജ് ചെയ്യാൻ, Google Play സേവനങ്ങൾ അപ്ഡേറ്റ് ചെയ്യുക</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> ഇനങ്ങൾ ഇല്ലാതാക്കി</translation> <translation id="2536728043171574184">ഈ പേജിന്റെ ഒരു ഓഫ്ലൈൻ പതിപ്പ് കാണുന്നു</translation> <translation id="2546283357679194313">കുക്കികളും സൈറ്റ് ഡാറ്റയും</translation> -<translation id="2549516196460093976">ഈ QR കോഡ് ദൃശ്യമാക്കുന്ന കമ്പ്യൂട്ടറിൽ സൈൻ ഇൻ ചെയ്യാൻ നിങ്ങൾക്ക് ഈ ടാബ്ലെറ്റ് ഉപയോഗിക്കാം.</translation> <translation id="2558569818338050235">നിങ്ങളുടെ ബ്രൗസിംഗ് ചരിത്രം നിങ്ങൾ കാണുന്ന പരസ്യങ്ങളെ ബാധിക്കും</translation> <translation id="2561519700418191927">വീഡിയോ പ്രിവ്യൂകൾ</translation> <translation id="2567385386134582609">ചിത്രം</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb index 338a7f9c..87013a2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Хардаг зараа илүү сайн хянаарай</translation> <translation id="1477626028522505441">Серверийн алдаанаас шалтгаалан <ph name="FILE_NAME" />-г татаж чадсангүй.</translation> <translation id="148482509007564431">Хавчуурганы хадгалах урсгал</translation> -<translation id="1488775391433859242">Та энэ QR кодыг үзүүлж буй компьютерт нэвтрэхийн тулд энэ утсыг ашиглах боломжтой.</translation> <translation id="1492417797159476138">Та энэ сайтад аль хэдийн энэ хэрэглэгчийн нэрийг хадгалсан байна</translation> <translation id="1493287004536771723">Та <ph name="SITE_NAME" />-г дагаж байна</translation> <translation id="1502010315804028179">Нууц үгнүүдээ удирдахын тулд Google Play үйлчилгээг шинэчилнэ үү</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> зүйлийг устгасан</translation> <translation id="2536728043171574184">Энэ хуудсын офлайн хуулбарыг харж байна</translation> <translation id="2546283357679194313">Cookies болон сайтын дата</translation> -<translation id="2549516196460093976">Та энэ QR кодыг үзүүлж буй компьютерт нэвтрэхийн тулд энэ таблетыг ашиглах боломжтой.</translation> <translation id="2558569818338050235">Таны хөтчийн түүх таны хардаг зард нөлөөлнө</translation> <translation id="2561519700418191927">Видеоны урьдчилан үзэлтүүд</translation> <translation id="2567385386134582609">ЗУРАГ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb index ca056b8..54af9f15 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">तुम्ही पाहता त्या जाहिरातींवर अधिक नियंत्रण</translation> <translation id="1477626028522505441">सर्व्हर समस्यांमुळे <ph name="FILE_NAME" /> डाउनलोड अयशस्वी झाले.</translation> <translation id="148482509007564431">बुकमार्क सेव्ह करा फ्लो</translation> -<translation id="1488775391433859242">तुम्ही हा QR कोड प्रदर्शित करणाऱ्या कॉंप्युटरवर साइन इन करण्यासाठी हा फोन वापरू शकता.</translation> <translation id="1492417797159476138">तुम्ही या साइटसाठी आधीच वापरकर्ता नाव सेव्ह केले आहे</translation> <translation id="1493287004536771723">तुम्ही <ph name="SITE_NAME" /> ला फॉलो करत आहात</translation> <translation id="1502010315804028179">तुमचे पासवर्ड संपादित करण्यासाठी, Google Play सेवा अपडेट करा</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> आयटम हटवले</translation> <translation id="2536728043171574184">या पेजची ऑफलाइन प्रत पाहत आहे</translation> <translation id="2546283357679194313">कुकीज आणि साइट डेटा</translation> -<translation id="2549516196460093976">तुम्ही हा QR कोड प्रदर्शित करणाऱ्या कॉंप्युटरवर साइन इन करण्यासाठी हा टॅबलेट वापरू शकता.</translation> <translation id="2558569818338050235">तुमचा ब्राउझिंग इतिहास हा तुम्ही पाहता त्या जाहिरातींवर परिणाम करतो</translation> <translation id="2561519700418191927">व्हिडिओची पूर्वावलोकने</translation> <translation id="2567385386134582609">इमेज</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb index 825a09bb..b6d6a25 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Lebih kawalan terhadap iklan yang anda lihat</translation> <translation id="1477626028522505441">Muat turun <ph name="FILE_NAME" /> gagal disebabkan oleh masalah pelayan.</translation> <translation id="148482509007564431">Aliran penyimpanan penanda halaman</translation> -<translation id="1488775391433859242">Anda boleh menggunakan telefon ini untuk log masuk pada komputer yang memaparkan kod QR ini.</translation> <translation id="1492417797159476138">Anda telah pun menyimpan nama pengguna ini untuk tapak ini</translation> <translation id="1493287004536771723">Anda mengikuti <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Untuk mengurus kata laluan anda, kemas kini perkhidmatan Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> item dipadamkan</translation> <translation id="2536728043171574184">Melihat salinan luar talian halaman ini</translation> <translation id="2546283357679194313">Kuki dan data tapak</translation> -<translation id="2549516196460093976">Anda boleh menggunakan tablet ini untuk log masuk pada komputer yang memaparkan kod QR ini.</translation> <translation id="2558569818338050235">Sejarah penyemakan imbas anda mempengaruhi iklan yang anda lihat</translation> <translation id="2561519700418191927">Pratonton video</translation> <translation id="2567385386134582609">IMEJ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb index 83eeb904..72106e0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">သင်မြင်ရသည့် ကြော်ငြာများအား ပိုမိုထိန်းချုပ်နိုင်ခြင်း</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> ဒေါင်းလုဒ်မှာ အကြောင်း အမျိုးမျိုးကြောင့် မအောင်မြင်ခဲ့ပါ။</translation> <translation id="148482509007564431">လိပ်စာသိမ်းရန် လုပ်ငန်းစဉ်</translation> -<translation id="1488775391433859242">ဤ QR ကုဒ်ကို ပြထားသော ကွန်ပျူတာတွင် လက်မှတ်ထိုးဝင်ရန် ဤဖုန်းကိုသုံးနိုင်သည်။</translation> <translation id="1492417797159476138">ယခုဝဘ်ဆိုက်အတွက် ဤအသုံးပြုသူအမည်ကို သိမ်းပြီးဖြစ်သည်</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> ကို လိုက်ကြည့်နေသည်</translation> <translation id="1502010315804028179">စကားဝှက်များစီမံရန် Google Play ဝန်ဆောင်မှုများကို အပ်ဒိတ်လုပ်ပါ</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> ခုဖျက်ပြီးပြီ</translation> <translation id="2536728043171574184">ဤစာမျက်နှာ၏ အော့ဖ်လိုင်း မိတ္တူကို ကြည့်ရှုနေ</translation> <translation id="2546283357679194313">ကူကီးများ နှင့် ဆိုက် ဒေတာ</translation> -<translation id="2549516196460093976">ဤ QR ကုဒ်ကို ပြထားသော ကွန်ပျူတာတွင် လက်မှတ်ထိုးဝင်ရန် ဤတက်ဘလက်ကို သုံးနိုင်သည်။</translation> <translation id="2558569818338050235">သင်၏ ကြည့်ရှုခြင်းမှတ်တမ်းသည် သင်မြင်ရသည့်ကြော်ငြာများအပေါ် သက်ရောက်မှုရှိသည်</translation> <translation id="2561519700418191927">ဗီဒီယို အစမ်းကြည့်ရှုခြင်းများ</translation> <translation id="2567385386134582609">ဓာတ်ပုံ</translation> @@ -1142,6 +1140,7 @@ <translation id="7196215469483532480">ကိုယ်ရေးအချက်အလက်လုံခြုံမှုလမ်းညွှန် ရှင်းလင်းချက်ကို မြင်ကွင်းအပြည့်ဖွင့်ပြီးပြီ</translation> <translation id="7207760545532569765">နောက်ခံတဘ်အသစ်များအဖြစ် တဘ် <ph name="TAB_COUNT" /> ခုကို ပြန်ယူနိုင်ပါသည်။</translation> <translation id="7208109991155904980">တုံ့ပြန်မှုကို ရွှေ့လိုက်သည်</translation> +<translation id="7217781228893594884">Chrome မှ ထွက်သောအခါ ‘ရုပ်ဖျက်တဘ်များ’ ကို လော့ခ်ချပါမည်</translation> <translation id="7222235798733126207">ဝဘ်ဆိုက်များကြား မျှဝေမှုကန့်သတ်ထားခြင်း</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{ဒေါင်းလုဒ် ၁ ခုကို စောင့်နေသည်}other{ဒေါင်းလုဒ် # ခုကို စောင့်နေသည်}}</translation> <translation id="7242755609445462077">မြင်သာအောင်လုပ်ခြင်းတွင် ဟန်ပန်ပုံစံထည့်လိုက်သည် <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb index 86889dd0..444d7aef 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">तपाईंलाई कस्ता खालका विज्ञापन देखाइन्छ भन्ने कुरामा थप नियन्त्रण</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> डाउनलोड सर्भरको समस्याको कारण असफल भयो।</translation> <translation id="148482509007564431">बुकमार्क सेभ गर्ने फ्लो</translation> -<translation id="1488775391433859242">तपाईं यो QR कोड देखिइरहेको कम्प्युटरमा साइन इन गर्न यो फोन प्रयोग गर्न सक्नुहुन्छ।</translation> <translation id="1492417797159476138">तपाईंले यो साइटका लागि यो युजरनेम सुरक्षित गरिसक्नुभएको छ</translation> <translation id="1493287004536771723">तपाईं <ph name="SITE_NAME" /> फलो गर्दै हुनुहुन्छ</translation> <translation id="1502010315804028179">तपाईं आफ्ना पासवर्डहरू व्यवस्थापन गर्न चाहनुहुन्छ भने Google Play services अपडेट गर्नुहोस्</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> वस्तुहरू मेटाइए</translation> <translation id="2536728043171574184">यो पृष्ठको एक अफलाइन प्रतिलिपि हेर्दै</translation> <translation id="2546283357679194313">कुकीहरू र साइट डाटा</translation> -<translation id="2549516196460093976">तपाईं यो QR कोड देखिइरहेको कम्प्युटरमा साइन इन गर्न यो ट्याब्लेट प्रयोग गर्न सक्नुहुन्छ।</translation> <translation id="2558569818338050235">तपाईंको ब्राउजिङ इतिहासका कारण तपाईंलाई देखाइने विज्ञापनहरू फरक पर्न सक्छन्</translation> <translation id="2561519700418191927">भिडियोका प्रभ्युहरू</translation> <translation id="2567385386134582609">छवि</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb index 10e8f6b..d78d532 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Meer controle over de advertenties die je te zien krijgt</translation> <translation id="1477626028522505441">Downloaden van <ph name="FILE_NAME" /> is mislukt door serverproblemen.</translation> <translation id="148482509007564431">Proces voor bookmark opslaan</translation> -<translation id="1488775391433859242">Je kunt deze telefoon gebruiken om in te loggen op de computer waarop deze QR-code wordt getoond.</translation> <translation id="1492417797159476138">Je hebt deze gebruikersnaam al opgeslagen voor deze site</translation> <translation id="1493287004536771723">Je volgt <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Update Google Play-services om je wachtwoorden te beheren</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> items verwijderd</translation> <translation id="2536728043171574184">Een offline exemplaar van deze pagina bekijken</translation> <translation id="2546283357679194313">Cookies en sitegegevens</translation> -<translation id="2549516196460093976">Je kunt deze tablet gebruiken om in te loggen op de computer waarop deze QR-code wordt getoond.</translation> <translation id="2558569818338050235">Je browsegeschiedenis heeft invloed op de advertenties die je ziet</translation> <translation id="2561519700418191927">Videovoorbeelden</translation> <translation id="2567385386134582609">AFBEELDING</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb index 6838523..39523ad 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Mer kontroll over annonsene du ser</translation> <translation id="1477626028522505441">Nedlastingen av <ph name="FILE_NAME" /> ble avbrutt på grunn av tjenerproblemer.</translation> <translation id="148482509007564431">Flyt for lagring av bokmerke</translation> -<translation id="1488775391433859242">Du kan bruke denne telefonen til å logge på datamaskinen som viser denne QR-koden.</translation> <translation id="1492417797159476138">Du har allerede lagret dette brukernavnet for dette nettstedet</translation> <translation id="1493287004536771723">Du følger <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">For å administrere passordene dine, oppdater Google Play-tjenester</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Slettet <ph name="NUMBER_OF_ITEMS" /> elementer</translation> <translation id="2536728043171574184">Ser på en lokalt lagret versjon av denne siden</translation> <translation id="2546283357679194313">Informasjonskapsler og data fra nettsteder</translation> -<translation id="2549516196460093976">Du kan bruke dette nettbrettet til å logge på datamaskinen som viser denne QR-koden.</translation> <translation id="2558569818338050235">Nettleserloggen din påvirker hvilke annonser du ser</translation> <translation id="2561519700418191927">Videoforhåndsvisninger</translation> <translation id="2567385386134582609">BILDE</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb index 9fcd2ec3..a414832 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">ଆପଣ ଦେଖୁଥିବା ବିଜ୍ଞାପନଗୁଡ଼ିକ ଉପରେ ଅଧିକ ନିୟନ୍ତ୍ରଣ</translation> <translation id="1477626028522505441">ସର୍ଭର୍ ସମସ୍ୟା ଯୋଗୁଁ <ph name="FILE_NAME" /> ଡାଉନ୍ଲୋଡ୍ ହେବାରେ ବିଫଳ ହେଲା।</translation> <translation id="148482509007564431">ବୁକମାର୍କ ସେଭ ଫ୍ଲୋ</translation> -<translation id="1488775391433859242">ଏହି QR କୋଡ ଡିସପ୍ଲେ କରୁଥିବା କମ୍ପ୍ୟୁଟରରେ ସାଇନ ଇନ କରିବା ପାଇଁ ଆପଣ ଏହି ଫୋନକୁ ବ୍ୟବହାର କରିପାରିବେ।</translation> <translation id="1492417797159476138">ଆପଣ ଏହି ସାଇଟ୍ ପାଇଁ ଏହି ଉପଯୋଗକର୍ତ୍ତାନାମ ପୂର୍ବରୁ ସେଭ୍ କରିଛନ୍ତି</translation> <translation id="1493287004536771723">ଆପଣ <ph name="SITE_NAME" />କୁ ଅନୁସରଣ କରୁଛନ୍ତି</translation> <translation id="1502010315804028179">ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ପରିଚାଳନା କରିବା ପାଇଁ Google Play ସେବାଗୁଡ଼ିକୁ ଅପଡେଟ କରନ୍ତୁ</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" />ଟି ଆଇଟମ୍ ଡିଲିଟ୍ ହୋଇଛି</translation> <translation id="2536728043171574184">ଏହି ପୃଷ୍ଠାର ଏକ ଅଫ୍ଲାଇନ୍ କପି ଦେଖୁଛି</translation> <translation id="2546283357679194313">କୁକିସ୍ ଏବଂ ସାଇଟ୍ ଡାଟା</translation> -<translation id="2549516196460093976">ଏହି QR କୋଡ ଡିସପ୍ଲେ କରୁଥିବା କମ୍ପ୍ୟୁଟରରେ ସାଇନ ଇନ କରିବା ପାଇଁ ଆପଣ ଏହି ଟାବଲେଟକୁ ବ୍ୟବହାର କରିପାରିବେ।</translation> <translation id="2558569818338050235">ଆପଣ ଦେଖୁଥିବା ବିଜ୍ଞାପନଗୁଡ଼ିକୁ ଆପଣଙ୍କର ବ୍ରାଉଜିଂ ଇତିହାସ ପ୍ରଭାବିତ କରେ</translation> <translation id="2561519700418191927">ଭିଡିଓ ପ୍ରିଭ୍ୟୁଗୁଡ଼ିକ</translation> <translation id="2567385386134582609">ଛବି</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb index 78802d0a..9a48e09 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">ਤੁਹਾਨੂੰ ਦਿਸਣ ਵਾਲੇ ਵਿਗਿਆਪਨਾਂ 'ਤੇ ਤੁਹਾਡਾ ਜ਼ਿਆਦਾ ਕੰਟਰੋਲ</translation> <translation id="1477626028522505441">ਸਰਵਰ ਸਮੱਸਿਆਵਾਂ ਦੇ ਕਾਰਨ <ph name="FILE_NAME" /> ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਿਹਾ।</translation> <translation id="148482509007564431">ਬੁੱਕਮਾਰਕ ਰੱਖਿਅਤ ਕਰਨ ਸੰਬੰਧੀ ਪ੍ਰਵਾਹ</translation> -<translation id="1488775391433859242">ਤੁਸੀਂ ਇਸ QR ਕੋਡ ਨੂੰ ਦਿਖਾਉਣ ਵਾਲੇ ਕੰਪਿਊਟਰ 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਇਸ ਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ।</translation> <translation id="1492417797159476138">ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ ਇਸ ਸਾਈਟ ਲਈ ਇਹ ਵਰਤੋਂਕਾਰ ਨਾਮ ਰੱਖਿਅਤ ਕਰ ਚੁੱਕੇ ਹੋ</translation> <translation id="1493287004536771723">ਤੁਸੀਂ <ph name="SITE_NAME" /> ਦਾ ਅਨੁਸਰਣ ਕਰ ਰਹੇ ਹੋ</translation> <translation id="1502010315804028179">ਆਪਣੇ ਪਾਸਵਰਡਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ, Google Play ਸੇਵਾਵਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> ਆਈਟਮਾਂ ਮਿਟਾਈਆਂ ਗਈਆਂ</translation> <translation id="2536728043171574184">ਇਸ ਪੰਨੇ ਦੀ ਇੱਕ ਆਫ਼ਲਾਈਨ ਕਾਪੀ ਦੇਖ ਰਿਹਾ ਹੈ</translation> <translation id="2546283357679194313">ਕੁਕੀਜ਼ ਅਤੇ ਸਾਈਟ ਡਾਟਾ</translation> -<translation id="2549516196460093976">ਤੁਸੀਂ ਇਸ QR ਕੋਡ ਨੂੰ ਦਿਖਾਉਣ ਵਾਲੇ ਟੈਬਲੈੱਟ 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਇਸ ਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ।</translation> <translation id="2558569818338050235">ਤੁਹਾਡਾ ਬ੍ਰਾਊਜ਼ਿੰਗ ਇਤਿਹਾਸ ਤੁਹਾਨੂੰ ਦਿਸਣ ਵਾਲੇ ਵਿਗਿਆਪਨਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦਾ ਹੈ</translation> <translation id="2561519700418191927">ਵੀਡੀਓ ਦੀਆਂ ਪੂਰਵ-ਝਲਕਾਂ</translation> <translation id="2567385386134582609">ਇਮੇਜ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb index 83e5fb0..365db4b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Większa kontrola nad wyświetlanymi reklamami</translation> <translation id="1477626028522505441">Nie udało się pobrać pliku <ph name="FILE_NAME" /> z powodu problemów z serwerem.</translation> <translation id="148482509007564431">Procedura zapisywania zakładki</translation> -<translation id="1488775391433859242">Za pomocą tego telefonu możesz zalogować się na komputerze, na którym wyświetlany jest ten kod QR.</translation> <translation id="1492417797159476138">Ta nazwa użytkownika została już zapisana w tej witrynie</translation> <translation id="1493287004536771723">Obserwujesz stronę <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Aby zarządzać hasłami, zaktualizuj Usługi Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Usunięte elementy: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Oglądasz kopię offline tej strony</translation> <translation id="2546283357679194313">Pliki cookie i dane stron</translation> -<translation id="2549516196460093976">Za pomocą tego tabletu możesz zalogować się na komputerze, na którym wyświetlany jest ten kod QR.</translation> <translation id="2558569818338050235">Historia przeglądania wpływa na wyświetlane reklamy</translation> <translation id="2561519700418191927">Podglądy filmów</translation> <translation id="2567385386134582609">OBRAZ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb index 56254e72..7ce3c69 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -105,13 +105,12 @@ <translation id="1474893630593443211">Mais controle sobre os anúncios que você vê</translation> <translation id="1477626028522505441">Falha no download do arquivo <ph name="FILE_NAME" /> devido a problemas de servidor.</translation> <translation id="148482509007564431">Fluxo para adicionar aos favoritos</translation> -<translation id="1488775391433859242">Você pode usar o smartphone para fazer login no computador que está mostrando o código QR.</translation> <translation id="1492417797159476138">Você já salvou este nome de usuário para este site</translation> <translation id="1493287004536771723">Você está seguindo o site <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Atualize o Google Play Services para gerenciar suas senhas.</translation> <translation id="1506061864768559482">Mecanismo de pesquisa</translation> <translation id="1513352483775369820">Favoritos e histórico da Web</translation> -<translation id="1513814250881909472">Sincronizar para acessar suas guias de outros dispositivos</translation> +<translation id="1513814250881909472">Sincronize para acessar suas guias de outros dispositivos</translation> <translation id="1513858653616922153">Excluir senha</translation> <translation id="1514552811327923157">Solicitação do Sandbox de privacidade aberta no tamanho máximo</translation> <translation id="1518421282666914498">GIF de emoticon <ph name="CURRENT_DATE_ISO" /></translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Itens excluídos: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Vendo uma cópia off-line desta página</translation> <translation id="2546283357679194313">Cookies e dados do site</translation> -<translation id="2549516196460093976">Você pode usar o tablet para fazer login no computador que está mostrando o código QR.</translation> <translation id="2558569818338050235">Seu histórico de navegação afeta os anúncios que você vê</translation> <translation id="2561519700418191927">Visualizações de vídeo</translation> <translation id="2567385386134582609">IMAGEM</translation> @@ -573,7 +571,7 @@ <translation id="4162867837470729563">Lista de opções de compartilhamento no tamanho máximo.</translation> <translation id="4165986682804962316">Configurações do site</translation> <translation id="4170011742729630528">O serviço não está disponível. Tente novamente mais tarde.</translation> -<translation id="4177222230309051052">Ter acesso a todos seus favoritos</translation> +<translation id="4177222230309051052">Acesse todos os seus favoritos</translation> <translation id="4181841719683918333">Idiomas</translation> <translation id="4195643157523330669">Abrir em uma nova guia</translation> <translation id="4196597275619698563">Criar card</translation> @@ -731,7 +729,7 @@ <translation id="4988526792673242964">Páginas</translation> <translation id="499724277181351974">Navegar: <ph name="WEBSITE_TITLE" /> (<ph name="WEBSITE_URL" />)</translation> <translation id="5001388021414335527">Siga este site</translation> -<translation id="500351648694011114">Navegar com mais facilidade</translation> +<translation id="500351648694011114">Navegue com mais facilidade</translation> <translation id="5004416275253351869">Controles de atividade do Google</translation> <translation id="5005141133360250920">Reação excluída</translation> <translation id="5005498671520578047">Copiar senha</translation> @@ -888,7 +886,7 @@ <translation id="5864419784173784555">Aguardando outro download…</translation> <translation id="5865733239029070421">Envia estatísticas de uso e relatórios de erros automaticamente para o Google</translation> <translation id="5869522115854928033">Senhas salvas</translation> -<translation id="5869789175361934029">Continuar de outro dispositivo</translation> +<translation id="5869789175361934029">Continue de outro dispositivo</translation> <translation id="587735546353481577">Para seguir um site, acesse-o, abra o menu do Google Chrome e toque em "Seguir".</translation> <translation id="5879072387416556377">Receba sugestões melhores</translation> <translation id="5880748256563468367">Acessar o feed</translation> @@ -1476,7 +1474,7 @@ <translation id="8909135823018751308">Compartilhar...</translation> <translation id="8912362522468806198">Conta do Google</translation> <translation id="8920114477895755567">Aguardando detalhes dos pais.</translation> -<translation id="8921980840204105660">Sincronizar para acessar seus favoritos de outros dispositivos</translation> +<translation id="8921980840204105660">Sincronize para acessar seus favoritos de outros dispositivos</translation> <translation id="8922289737868596582">Use o botão Mais opções para fazer o download de páginas e acessá-las off-line</translation> <translation id="8924575305646776101"><ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="892496902842311796">O <ph name="LANG" /> está pronto</translation> @@ -1549,7 +1547,7 @@ <translation id="96681097142096641">Ver página simplificada?</translation> <translation id="968900484120156207">As páginas visitadas são exibidas aqui</translation> <translation id="970715775301869095"><ph name="MINUTES" /> minutos restantes</translation> -<translation id="978443947993957527">Veja conteúdo personalizado</translation> +<translation id="978443947993957527">Receba conteúdo personalizado</translation> <translation id="981121421437150478">Off-line</translation> <translation id="983192555821071799">Fechar todas as guias</translation> <translation id="987264212798334818">Geral</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb index e5261b7..abd7247 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Mais controlo sobre os anúncios que vê</translation> <translation id="1477626028522505441">A transferência de <ph name="FILE_NAME" /> falhou devido a problemas do servidor.</translation> <translation id="148482509007564431">Fluxo de armazenamento de marcadores</translation> -<translation id="1488775391433859242">Pode utilizar este telemóvel para iniciar sessão no computador que está a apresentar este código QR.</translation> <translation id="1492417797159476138">Já guardou este nome de utilizador para este site.</translation> <translation id="1493287004536771723">Está a seguir <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Para gerir as palavras-passe, atualize os Serviços do Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> itens eliminados</translation> <translation id="2536728043171574184">Visualização de uma cópia offline desta página</translation> <translation id="2546283357679194313">Cookies e dados de Web sites</translation> -<translation id="2549516196460093976">Pode utilizar este tablet para iniciar sessão no computador que está a apresentar este código QR.</translation> <translation id="2558569818338050235">O seu histórico de navegação afeta os anúncios que vê</translation> <translation id="2561519700418191927">Pré-visualizações de vídeo</translation> <translation id="2567385386134582609">IMAGEM</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb index e27ebcd..21393e2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Control îmbunătățit asupra anunțurilor pe care le vezi</translation> <translation id="1477626028522505441">Descărcarea fișierului <ph name="FILE_NAME" /> nu a reușit din cauza unor probleme de server.</translation> <translation id="148482509007564431">Fluxul de salvare a marcajului</translation> -<translation id="1488775391433859242">Poți să folosești acest telefon pentru a te conecta la computerul care afișează acest cod QR.</translation> <translation id="1492417797159476138">Ai salvat deja acest nume de utilizator pentru site</translation> <translation id="1493287004536771723">Urmărești <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Pentru a gestiona parolele, actualizează serviciile Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Elemente șterse: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Se afișează o versiune offline a acestei pagini</translation> <translation id="2546283357679194313">Cookie-uri și date privind site-ul</translation> -<translation id="2549516196460093976">Poți folosi această tabletă pentru a te conecta la computerul care afișează acest cod QR.</translation> <translation id="2558569818338050235">Istoricul tău de navigare influențează anunțurile pe care le vezi</translation> <translation id="2561519700418191927">Previzualizările videoclipului</translation> <translation id="2567385386134582609">IMAGINE</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb index e09627c..2f24173 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Больше возможностей для управления рекламой</translation> <translation id="1477626028522505441">Не удалось скачать файл <ph name="FILE_NAME" /> из-за неполадок на сервере.</translation> <translation id="148482509007564431">Страница сохранения закладки</translation> -<translation id="1488775391433859242">Вы сможете использовать этот телефон, чтобы входить в аккаунт на компьютере, где показан QR-код.</translation> <translation id="1492417797159476138">Вы уже сохранили это имя пользователя для данного сайта.</translation> <translation id="1493287004536771723">Вы подписались на сайт "<ph name="SITE_NAME" />"</translation> <translation id="1502010315804028179">Чтобы управлять паролями, обновите сервисы Google Play.</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Удалено записей: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Офлайн-копия страницы</translation> <translation id="2546283357679194313">Файлы сookie и данные сайтов</translation> -<translation id="2549516196460093976">Вы сможете использовать этот планшет, чтобы входить в аккаунт на компьютере, где показан QR-код.</translation> <translation id="2558569818338050235">Реклама для показа вам подбирается с учетом вашей истории браузера</translation> <translation id="2561519700418191927">Предварительный просмотр видео</translation> <translation id="2567385386134582609">ИЗОБРАЖЕНИЕ</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Пояснение для руководства по конфиденциальности открыто на весь экран</translation> <translation id="7207760545532569765">Восстановить вкладки (<ph name="TAB_COUNT" />) и открыть их в фоновом режиме.</translation> <translation id="7208109991155904980">Отклик перемещен</translation> +<translation id="7217781228893594884">Вкладки инкогнито будут блокироваться при закрытии Chrome.</translation> <translation id="7222235798733126207">Ограниченный обмен данными между сайтами</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{Ожидание скачивания 1 файла…}one{Ожидание скачивания # файла…}few{Ожидание скачивания # файлов…}many{Ожидание скачивания # файлов…}other{Ожидание скачивания # файла…}}</translation> <translation id="7242755609445462077">Стилизованный контент: <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb index a961a3d4..69f15c6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">ඔබ දකින වෙළඳ දැන්වීම් පිළිබඳ වැඩි පාලනයක්</translation> <translation id="1477626028522505441">සේවාදායකයේ දෝෂ නිසා <ph name="FILE_NAME" /> බාගැනීම අසාර්ථක විය.</translation> <translation id="148482509007564431">පිටුසන් සුරැකීම් ප්රවාහය</translation> -<translation id="1488775391433859242">මෙම QR කේතය සංදර්ශනය කරන පරිගණකයට පිරීමට ඔබට මෙම දුරකථනය භාවිත කළ හැකිය.</translation> <translation id="1492417797159476138">ඔබ දැනටමත් මෙම පරිශීලක නම මෙම වෙබ් අඩවිය සඳහා සුරැක ඇත</translation> <translation id="1493287004536771723">ඔබ <ph name="SITE_NAME" /> අනුගමනය කරයි</translation> <translation id="1502010315804028179">ඔබේ මුරපද කළමනා කිරීමට, Google Play සේවා යාවත්කාලීන කරන්න</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">අයිතම <ph name="NUMBER_OF_ITEMS" />ක් මකන ලදි</translation> <translation id="2536728043171574184">මෙම පිටුවෙහි නොබැඳි පිටපතක් බලමින්</translation> <translation id="2546283357679194313">කුකීස් සහ අඩවි දත්ත</translation> -<translation id="2549516196460093976">මෙම QR කේතය සංදර්ශනය කරන පරිගණකයට පිරීමට ඔබට මෙම ටැබ්ලටය භාවිත කළ හැකිය.</translation> <translation id="2558569818338050235">ඔබගේ බ්රවුස් කිරීමේ ඉතිහාසය ඔබ දකින වෙළඳ දැන්වීම්වලට බලපායි</translation> <translation id="2561519700418191927">වීඩියෝ පෙරදසුන්</translation> <translation id="2567385386134582609">රූපය</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">පෞද්ගලිකත්ව මාර්ගෝපදේශ පැහැදිලි කිරීම පූර්ණ උසකින් විවෘත වේ</translation> <translation id="7207760545532569765">නව පසුබිම් ටැබ සමූහයක් ලෙස ටැබ <ph name="TAB_COUNT" />ක් ප්රතිසාධනය කරන්න.</translation> <translation id="7208109991155904980">ප්රතිචාරය ගෙන යන ලදි</translation> +<translation id="7217781228893594884">ඔබ Chrome වෙතින් පිටවන විට අප්රකට පටිති අගුළු දමනු ඇත</translation> <translation id="7222235798733126207">අඩවි අතර සීමිත බෙදා ගැනීම</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{බාගැනීම් 1ක් පොරොත්තුවෙන්}one{බාගැනීම් #ක් පොරොත්තුවෙන්}other{බාගැනීම් #ක් පොරොත්තුවෙන්}}</translation> <translation id="7242755609445462077">විලාසගත උද්දීපනය <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb index feb7356..79331ae2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Viac kontroly nad zobrazovanými reklamami</translation> <translation id="1477626028522505441">Súbor <ph name="FILE_NAME" /> sa nepodarilo stiahnuť z dôvodu problémov so serverom.</translation> <translation id="148482509007564431">Postup uloženia záložky</translation> -<translation id="1488775391433859242">Pomocou tohto telefónu sa môžete prihlásiť v počítači, v ktorom je zobrazený tento QR kód.</translation> <translation id="1492417797159476138">Toto používateľské meno ste pre tento web už uložili</translation> <translation id="1493287004536771723">Sledujete web <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Ak chcete svoje heslá spravovať, aktualizujte Služby Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Odstránené položky: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Zobrazuje sa offline kópia tejto stránky</translation> <translation id="2546283357679194313">Súbory cookie a dáta webov</translation> -<translation id="2549516196460093976">Pomocou tohto tabletu sa môžete prihlásiť v počítači, v ktorom je zobrazený tento QR kód.</translation> <translation id="2558569818338050235">Vaša história prehliadania ovplyvňuje zobrazované reklamy</translation> <translation id="2561519700418191927">Ukážky videí</translation> <translation id="2567385386134582609">OBRÁZOK</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb index a71d8d5..8410781b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Več nadzora nad prikazanimi oglasi</translation> <translation id="1477626028522505441">Prenos datoteke <ph name="FILE_NAME" /> ni uspel zaradi težav s strežnikom.</translation> <translation id="148482509007564431">Postopek shranjevanja zaznamka</translation> -<translation id="1488775391433859242">Ta telefon lahko uporabite za prijavo v računalniku, v katerem je prikazana ta koda QR.</translation> <translation id="1492417797159476138">Za to spletno mesto ste že shranili to uporabniško ime.</translation> <translation id="1493287004536771723">Spremljate spletno mesto <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Če želite upravljati gesla, posodobite storitve Google Play.</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Št. izbrisanih elementov: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Ogled kopije te strani za način brez povezave.</translation> <translation id="2546283357679194313">Piškotki in podatki o spletnih mestih</translation> -<translation id="2549516196460093976">Ta tablični računalnik lahko uporabite za prijavo v računalniku, v katerem je prikazana ta koda QR.</translation> <translation id="2558569818338050235">Zgodovina brskanja vpliva na prikazane oglase.</translation> <translation id="2561519700418191927">Predogledi videoposnetkov</translation> <translation id="2567385386134582609">SLIKA</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb index db96b24..282fe38 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Më shumë kontroll mbi reklamat që shikon</translation> <translation id="1477626028522505441">Shkarkimi i <ph name="FILE_NAME" /> dështoi për shkak të problemeve të serverit.</translation> <translation id="148482509007564431">Fluksi i ruajtjes së faqeshënuesve</translation> -<translation id="1488775391433859242">Mund ta përdorësh këtë telefon për t'u identifikuar në kompjuterin që po shfaq këtë kod QR.</translation> <translation id="1492417797159476138">E ke ruajtur tashmë këtë emër përdoruesi për këtë sajt</translation> <translation id="1493287004536771723">Po ndjek <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Për të menaxhuar fjalëkalimet e tua, përditëso shërbimet e Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> artikuj të fshirë</translation> <translation id="2536728043171574184">Po shikon një kopje jashtë linje të kësaj faqeje</translation> <translation id="2546283357679194313">Kukit dhe të dhënat e faqes</translation> -<translation id="2549516196460093976">Mund ta përdorësh këtë tablet për t'u identifikuar në kompjuterin që po shfaq këtë kod QR.</translation> <translation id="2558569818338050235">Historiku yt i shfletimit ndikon te reklamat që shikon</translation> <translation id="2561519700418191927">Pamjet paraprake të videove</translation> <translation id="2567385386134582609">IMAZHI</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Shpjegimi i udhëzuesit të privatësisë u hap në lartësi të plotë</translation> <translation id="7207760545532569765">Restauro <ph name="TAB_COUNT" /> skeda si skeda të reja në sfond.</translation> <translation id="7208109991155904980">Reagimi u zhvendos</translation> +<translation id="7217781228893594884">Skedat "e fshehta" do të kyçen kur të largohesh nga Chrome</translation> <translation id="7222235798733126207">Ndarje e kufizuar mes sajteve</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{1 shkarkim në pritje}other{# shkarkime në pritje}}</translation> <translation id="7242755609445462077">Theksimi i stilizuar (<ph name="CURRENT_DATE" />)</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb index 2b17c374..325b97ba 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Veća kontrola nad oglasima koje vidite</translation> <translation id="1477626028522505441">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspelo zbog problema na serveru.</translation> <translation id="148482509007564431">Tok čuvanja obeleživača</translation> -<translation id="1488775391433859242">Možete da koristite ovaj telefon da biste se prijavili na računaru koji prikazuje ovaj QR kôd.</translation> <translation id="1492417797159476138">Već ste sačuvali ovo korisničko ime za ovaj sajt</translation> <translation id="1493287004536771723">Pratite <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Da biste upravljali lozinkama, ažurirajte Google Play usluge</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Izbrisanih stavki: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Pregledate oflajn kopiju ove stranice</translation> <translation id="2546283357679194313">Kolačići i podaci o sajtovima</translation> -<translation id="2549516196460093976">Možete da koristite ovaj tablet da biste se prijavili na računaru koji prikazuje ovaj QR kôd.</translation> <translation id="2558569818338050235">Istorija pregledanja utiče na oglase koji vam se prikazuju</translation> <translation id="2561519700418191927">Pregledi video snimaka</translation> <translation id="2567385386134582609">SLIKA</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb index 54f8306a..9ba62cb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Већа контрола над огласима које видите</translation> <translation id="1477626028522505441">Преузимање датотеке <ph name="FILE_NAME" /> није успело због проблема на серверу.</translation> <translation id="148482509007564431">Ток чувања обележивача</translation> -<translation id="1488775391433859242">Можете да користите овај телефон да бисте се пријавили на рачунару који приказује овај QR кôд.</translation> <translation id="1492417797159476138">Већ сте сачували ово корисничко име за овај сајт</translation> <translation id="1493287004536771723">Пратите <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Да бисте управљали лозинкама, ажурирајте Google Play услуге</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Избрисаних ставки: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Прегледате офлајн копију ове странице</translation> <translation id="2546283357679194313">Колачићи и подаци о сајтовима</translation> -<translation id="2549516196460093976">Можете да користите овај таблет да бисте се пријавили на рачунару који приказује овај QR кôд.</translation> <translation id="2558569818338050235">Историја прегледања утиче на огласе који вам се приказују</translation> <translation id="2561519700418191927">Прегледи видео снимака</translation> <translation id="2567385386134582609">СЛИКА</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb index 97f28398..c519bc5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Mer kontroll över vilka annonser som visas</translation> <translation id="1477626028522505441">Det gick inte att ladda ned <ph name="FILE_NAME" /> på grund av serverfel.</translation> <translation id="148482509007564431">Flöde för att spara bokmärken</translation> -<translation id="1488775391433859242">Du kan logga in med telefonens hjälp på den dator där den här QR-koden visas.</translation> <translation id="1492417797159476138">Du har redan sparat användarnamnet för den här webbplatsen</translation> <translation id="1493287004536771723">Du följer <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Uppdatera Google Play-tjänsterna för att hantera dina lösenord</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> objekt har tagits bort</translation> <translation id="2536728043171574184">En offlinekopia av sidan visas</translation> <translation id="2546283357679194313">Cookies och webbplatsdata</translation> -<translation id="2549516196460093976">Du kan logga in med surfplattans hjälp på den dator där den här QR-koden visas.</translation> <translation id="2558569818338050235">Webbhistoriken påverkar vilka annonser som visas</translation> <translation id="2561519700418191927">Förhandsgranskningar av video</translation> <translation id="2567385386134582609">BILD</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb index f1841f88..1c4e9048 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Udhibiti zaidi wa matangazo unayoyaona</translation> <translation id="1477626028522505441">Kipakuliwa cha <ph name="FILE_NAME" /> hakijafaulu kwa sababu ya matatizo ya seva.</translation> <translation id="148482509007564431">Utaratibu wa kuhifadhi alamisho</translation> -<translation id="1488775391433859242">Unaweza kutumia simu hii kuingia katika akaunti kwenye kompyuta inayoonyesha msimbo huu wa QR.</translation> <translation id="1492417797159476138">Tayari umehifadhi jina hili la mtumiaji kwa ajili ya tovuti hii</translation> <translation id="1493287004536771723">Unafuatilia <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Ili udhibiti manenosiri yako, sasisha Huduma za Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Umefuta vipengee <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Unaangalia nakala ya nje ya mtandao ya ukurasa huu</translation> <translation id="2546283357679194313">Data ya vidakuzi na tovuti</translation> -<translation id="2549516196460093976">Unaweza kutumia kompyuta hii kibao kuingia katika akaunti kwenye kompyuta inayoonyesha msimbo huu wa QR.</translation> <translation id="2558569818338050235">Historia yako ya kuvinjari huathiri matangazo unayoyaona</translation> <translation id="2561519700418191927">Maonyesho ya kukagua video</translation> <translation id="2567385386134582609">PICHA</translation> @@ -1143,6 +1141,7 @@ <translation id="7196215469483532480">Maelezo kuhusu mwongozo wa faragha yamefunguliwa kwenye skrini nzima</translation> <translation id="7207760545532569765">Rejesha vichupo <ph name="TAB_COUNT" /> viwe vichupo vipya vinavyofanya kazi chinichini.</translation> <translation id="7208109991155904980">Maoni yamehamishwa</translation> +<translation id="7217781228893594884">Vichupo fiche vitafungwa utakapoondoka kwenye Chrome</translation> <translation id="7222235798733126207">Ushiriki uliodhibitiwa kati ya tovuti</translation> <translation id="7227218174981371415">{FILE_COUNT,plural, =1{Inasubiri kupakua faili 1}other{Inasubri kupakua faili #}}</translation> <translation id="7242755609445462077">Maandishi yaliyoangaziwa yenye mitindo <ph name="CURRENT_DATE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb index cf467c1..0c9c62e6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">நீங்கள் பார்க்கும் விளம்பரங்களுக்கான கூடுதல் கட்டுப்பாடு</translation> <translation id="1477626028522505441">சேவையகச் சிக்கல்களால் <ph name="FILE_NAME" />ஐப் பதிவிறக்க முடியவில்லை.</translation> <translation id="148482509007564431">புக்மார்க் சேமிப்புச் செயல்முறை</translation> -<translation id="1488775391433859242">இந்த QR குறியீட்டைக் காட்டும் கம்ப்யூட்டரில் உள்நுழைய இந்த ஃபோனைப் பயன்படுத்தலாம்.</translation> <translation id="1492417797159476138">இந்தத் தளத்தில் இந்தப் பயனர்பெயரை ஏற்கெனவே சேமித்துள்ளீர்கள்</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> தளத்தைப் பின்தொடர்கிறீர்கள்</translation> <translation id="1502010315804028179">கடவுச்சொற்களை நிர்வகிக்க Google Play சேவைகளைப் புதுப்பிக்க வேண்டும்</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> வரலாற்று உள்ளடக்கங்கள் நீக்கப்பட்டன</translation> <translation id="2536728043171574184">இந்தப் பக்கத்தின் ஆஃப்லைன் நகலைப் பார்க்கிறீர்கள்</translation> <translation id="2546283357679194313">குக்கீகளும் தள தரவும்</translation> -<translation id="2549516196460093976">இந்த QR குறியீட்டைக் காட்டும் கம்ப்யூட்டரில் உள்நுழைய இந்த டேப்லெட்டைப் பயன்படுத்தலாம்.</translation> <translation id="2558569818338050235">நீங்கள் இதுவரை இணையத்தில் பார்த்தவற்றைப் பொறுத்தே விளம்பரங்கள் உங்களுக்குக் காட்டப்படும்</translation> <translation id="2561519700418191927">வீடியோ மாதிரிகாட்சிகள்</translation> <translation id="2567385386134582609">படம்</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb index d6d46618e..9f3d0b9 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">మీరు చూసే యాడ్లపై మరింత కంట్రోల్</translation> <translation id="1477626028522505441">సర్వర్ సమస్యల కారణంగా <ph name="FILE_NAME" /> డౌన్లోడ్ విఫలమైంది.</translation> <translation id="148482509007564431">బుక్మార్క్ను సేవ్ చేయడానికి దశలు</translation> -<translation id="1488775391433859242">ఈ QR కోడ్ను చూపించే కంప్యూటర్లో సైన్ ఇన్ చేయడానికి మీరు ఈ ఫోన్ను ఉపయోగించవచ్చు.</translation> <translation id="1492417797159476138">మీరు ఇప్పటికే ఈ సైట్ కోసం ఈ యూజర్నేమ్ను సేవ్ చేశారు</translation> <translation id="1493287004536771723">మీరు <ph name="SITE_NAME" />ను ఫాలో చేస్తున్నారు</translation> <translation id="1502010315804028179">మీ పాస్వర్డ్లను మేనేజ్ చేయడానికి, Google Play సర్వీసులను అప్డేట్ చేయండి</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> అంశాలు తొలగించబడ్డాయి</translation> <translation id="2536728043171574184">ఈ పేజీ ఆఫ్లైన్ కాపీని వీక్షిస్తున్నారు</translation> <translation id="2546283357679194313">కుక్కీలు మరియు సైట్ డేటా</translation> -<translation id="2549516196460093976">ఈ QR కోడ్ను చూపించే కంప్యూటర్లో సైన్ ఇన్ చేయడానికి మీరు ఈ టాబ్లెట్ను ఉపయోగించవచ్చు.</translation> <translation id="2558569818338050235">మీ బ్రౌజింగ్ హిస్టరీ, మీరు చూసే యాడ్లను ప్రభావితం చేస్తుంది</translation> <translation id="2561519700418191927">వీడియో ప్రివ్యూలు</translation> <translation id="2567385386134582609">చిత్రం</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb index 3909231..236fc3a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">ควบคุมโฆษณาที่คุณเห็นได้มากขึ้น</translation> <translation id="1477626028522505441">การดาวน์โหลด <ph name="FILE_NAME" /> ล้มเหลวเพราะเซิร์ฟเวอร์มีปัญหา</translation> <translation id="148482509007564431">ขั้นตอนการบันทึกบุ๊กมาร์ก</translation> -<translation id="1488775391433859242">คุณสามารถใช้โทรศัพท์เครื่องนี้เพื่อลงชื่อเข้าใช้ในคอมพิวเตอร์ที่แสดงคิวอาร์โค้ดนี้</translation> <translation id="1492417797159476138">คุณบันทึกชื่อผู้ใช้นี้สำหรับเว็บไซต์นี้แล้ว</translation> <translation id="1493287004536771723">คุณกำลังติดตาม <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">อัปเดตบริการ Google Play จัดการรหัสผ่าน</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">ลบแล้ว <ph name="NUMBER_OF_ITEMS" /> รายการ</translation> <translation id="2536728043171574184">ดูสำเนาแบบออฟไลน์ของหน้านี้</translation> <translation id="2546283357679194313">คุกกี้และข้อมูลเว็บไซต์</translation> -<translation id="2549516196460093976">คุณสามารถใช้แท็บเล็ตเครื่องนี้เพื่อลงชื่อเข้าใช้ในคอมพิวเตอร์ที่แสดงคิวอาร์โค้ดนี้</translation> <translation id="2558569818338050235">ประวัติการท่องเว็บของคุณส่งผลต่อโฆษณาที่คุณเห็น</translation> <translation id="2561519700418191927">ตัวอย่างวิดีโอ</translation> <translation id="2567385386134582609">รูปภาพ</translation> @@ -573,7 +571,7 @@ <translation id="4162867837470729563">รายการตัวเลือกการแชร์ที่ระดับเต็มความสูงของหน้าจอ</translation> <translation id="4165986682804962316">การตั้งค่าเว็บไซต์</translation> <translation id="4170011742729630528">บริการนี้ยังไม่สามารถใช้ได้ โปรดลองอีกครั้งในภายหลัง</translation> -<translation id="4177222230309051052">ซิงค์บุ๊กมาร์กทั้งหมด</translation> +<translation id="4177222230309051052">รับบุ๊กมาร์กทั้งหมด</translation> <translation id="4181841719683918333">ภาษา</translation> <translation id="4195643157523330669">เปิดในแท็บใหม่</translation> <translation id="4196597275619698563">สร้างการ์ด</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb index 5beb994..bfab30a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Gördüğünüz reklamlar üzerinde daha fazla kontrol</translation> <translation id="1477626028522505441">Sunucu sorunları nedeniyle <ph name="FILE_NAME" /> dosyası indirilemedi.</translation> <translation id="148482509007564431">Yer işareti kaydetme akışı</translation> -<translation id="1488775391433859242">Bu QR kodunu gösteren bilgisayarda oturum açmak için bu telefonu kullanabilirsiniz.</translation> <translation id="1492417797159476138">Bu site için bu kullanıcı adını zaten kaydettiniz</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> kaynağını takip ediyorsunuz</translation> <translation id="1502010315804028179">Şifrelerinizi yönetmek için Google Play Hizmetlerini güncelleyin</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> öğe silindi</translation> <translation id="2536728043171574184">Bu sayfanın çevrimdışı bir kopyası görüntüleniyor</translation> <translation id="2546283357679194313">Çerezler ve site verileri</translation> -<translation id="2549516196460093976">Bu QR kodunu gösteren bilgisayarda oturum açmak için bu tableti kullanabilirsiniz.</translation> <translation id="2558569818338050235">Tarama geçmişiniz, gördüğünüz reklamları etkiler</translation> <translation id="2561519700418191927">Video önizlemeleri</translation> <translation id="2567385386134582609">IMAGE</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb index d5f749c..73ca6a2d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Краще керування оголошеннями, які вам показуються</translation> <translation id="1477626028522505441">Файл <ph name="FILE_NAME" /> не завантажено через проблеми із сервером.</translation> <translation id="148482509007564431">Вікно зберігання закладки</translation> -<translation id="1488775391433859242">Ви можете використовувати цей телефон, щоб входити на комп’ютері, де відображається цей QR-код.</translation> <translation id="1492417797159476138">Ви вже зберегли це ім'я користувача для цього сайту</translation> <translation id="1493287004536771723">Ви підписалися на сайт <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Щоб керувати паролями, оновіть сервіси Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Видалено елементів: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="2536728043171574184">Перегляд копії сторінки в режимі офлайн</translation> <translation id="2546283357679194313">Файли cookie та дані із сайтів</translation> -<translation id="2549516196460093976">Ви можете використовувати цей планшет, щоб входити на комп’ютері, де відображається цей QR-код.</translation> <translation id="2558569818338050235">Ваша історія веб-перегляду впливає на оголошення, що вам показуються</translation> <translation id="2561519700418191927">Анімовані значки відео</translation> <translation id="2567385386134582609">ЗОБРАЖЕННЯ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb index b339f7a8..5015f4d4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">آپ کے دیکھے جانے والے اشتہارات پر مزید کنٹرول</translation> <translation id="1477626028522505441">سروس کے مسائل کی وجہ سے <ph name="FILE_NAME" /> کو ڈاؤن لوڈ کرنا ناکام ہوگیا۔</translation> <translation id="148482509007564431">بُک مارک محفوظ کرنے کا فلو</translation> -<translation id="1488775391433859242">آپ اس فون کا استعمال کمپیوٹر پر سائن ان کرنے کے لیے کر سکتے ہیں جو یہ QR کوڈ ڈسپلے کر رہا ہے۔</translation> <translation id="1492417797159476138">آپ نے پہلے ہی اس سائٹ کے لئے یہ صارف نام محفوظ کر لیا ہے</translation> <translation id="1493287004536771723">آپ <ph name="SITE_NAME" /> کی پیروی کر رہے ہیں</translation> <translation id="1502010315804028179">اپنے پاس ورڈز کا نظم کرنے کے لیے، Google Play سروسز کو اپ ڈیٹ کریں</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> آئٹمز حذف ہو گئے</translation> <translation id="2536728043171574184">اس صفحہ کی ایک آف لائن کاپی دیکھی جا رہی ہے</translation> <translation id="2546283357679194313">کوکیز اور سائٹ ڈیٹا</translation> -<translation id="2549516196460093976">آپ اس ٹیبلیٹ کا استعمال کمپیوٹر پر لاگ ان کرنے کے لیے کر سکتے ہیں جو یہ QR کوڈ ڈسپلے کر رہا ہے۔</translation> <translation id="2558569818338050235">آپ کی براؤزنگ کی سرگزشت آپ کے دیکھے جانے والے اشتہارات کو متاثر کرتی ہے</translation> <translation id="2561519700418191927">ویڈیو کے پیش مناظر</translation> <translation id="2567385386134582609">تصویر</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb index a370ce07..5011c5f8 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Chiqadigan reklamani kengroq boshqarish</translation> <translation id="1477626028522505441">Serverdagi turli muammolar tufayli “<ph name="FILE_NAME" />” fayli yuklab olinmadi.</translation> <translation id="148482509007564431">Bukmarklarni saqlash jarayoni</translation> -<translation id="1488775391433859242">Ekranida yuqoridagi QR kod aks etgan kompyuterda hisobga shu telefon orqali kirish mumkin.</translation> <translation id="1492417797159476138">Bu sayt uchun login allaqachon saqlangan</translation> <translation id="1493287004536771723"><ph name="SITE_NAME" /> tasmasiga obuna boʻlgansiz</translation> <translation id="1502010315804028179">Parollarni boshqarish uchun Google Play xizmatlarini yangilang</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> ta element oʻchirib tashlandi</translation> <translation id="2536728043171574184">Bu sahifaning oflayn nusxasi ko‘rilmoqda</translation> <translation id="2546283357679194313">Cookie fayllari va sayt ma’lumotlari</translation> -<translation id="2549516196460093976">Ekranida yuqoridagi QR kod aks etgan kompyuterda hisobga shu planshet orqali kirish mumkin.</translation> <translation id="2558569818338050235">Ochilgan saytlar tarixi chiqadigan reklamaga taʼsir qiladi</translation> <translation id="2561519700418191927">Video eskizlar</translation> <translation id="2567385386134582609">TASVIR</translation> @@ -475,6 +473,7 @@ <translation id="3557336313807607643">Kontaktlarga saqlash</translation> <translation id="3560491354538957576">Sayt qiziqishlarni taxmin qilishi mumkin</translation> <translation id="3563767357928833671">Vaqtincha xotira kontenti chiqarildi</translation> +<translation id="3566639033325271639">Sozlamalarni yangilash</translation> <translation id="3566923219790363270">Chrome hali ham VR rejimga tayyorlanmoqda. Chromeni keyinroq qayta ishga tushirish.</translation> <translation id="3568688522516854065">Boshqa qurilmalaringizdagi brauzer sahifalarini ko‘rish uchun hisobingizga kiring va sinxronizatsiyani yoqing</translation> <translation id="357465026686164600">Elektron kalit sifatidagi telefon</translation> @@ -569,6 +568,7 @@ <translation id="4116038641877404294">Saytlarni oflayn ko‘rish uchun yuklab oling</translation> <translation id="4135200667068010335">Yopiq varaq uzatiladigan qurilmalar roʻyxati.</translation> <translation id="4137746084635924146">Qurilmadagi joriy til</translation> +<translation id="414128724510021958">Standart holatda saytlarning kompyuter versiyasi talab etiladi</translation> <translation id="4141536112466364990">Chrome haqida</translation> <translation id="4162867837470729563">Ruxsat parametrlari roʻyxatini toʻliq hajmda ochilgan.</translation> <translation id="4165986682804962316">Sayt sozlamalari</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb index b77f10b..042114e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Tăng khả năng kiểm soát quảng cáo bạn thấy</translation> <translation id="1477626028522505441">Tải xuống <ph name="FILE_NAME" /> không thành công do sự cố máy chủ.</translation> <translation id="148482509007564431">Luồng lưu dấu trang</translation> -<translation id="1488775391433859242">Bạn có thể dùng điện thoại này để đăng nhập trên chiếc máy tính đang hiển thị mã QR này.</translation> <translation id="1492417797159476138">Bạn đã lưu tên người dùng này cho trang web này</translation> <translation id="1493287004536771723">Bạn đang theo dõi <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Để quản lý mật khẩu, hãy cập nhật Dịch vụ Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">Đã xóa <ph name="NUMBER_OF_ITEMS" /> mục</translation> <translation id="2536728043171574184">Xem bản sao ngoại tuyến của trang này</translation> <translation id="2546283357679194313">Cookie và dữ liệu trang web</translation> -<translation id="2549516196460093976">Bạn có thể dùng máy tính bảng này để đăng nhập trên chiếc máy tính đang hiển thị mã QR này.</translation> <translation id="2558569818338050235">Nhật ký duyệt web của bạn ảnh hưởng tới quảng cáo mà bạn thấy</translation> <translation id="2561519700418191927">Bản xem trước video</translation> <translation id="2567385386134582609">HÌNH ẢNH</translation> @@ -475,6 +473,7 @@ <translation id="3557336313807607643">Thêm vào danh bạ</translation> <translation id="3560491354538957576">Trang web có thể xác định mối quan tâm</translation> <translation id="3563767357928833671">Đã hiện nội dung của bảng nhớ tạm</translation> +<translation id="3566639033325271639">Cập nhật chế độ cài đặt</translation> <translation id="3566923219790363270">Chrome vẫn đang chuẩn bị mô-đun Thực tế ảo. Hãy khởi động lại Chrome sau.</translation> <translation id="3568688522516854065">Để sử dụng các thẻ từ những thiết bị khác, hãy đăng nhập và bật tính năng đồng bộ hóa</translation> <translation id="357465026686164600">Điện thoại làm khoá bảo mật</translation> @@ -569,6 +568,7 @@ <translation id="4116038641877404294">Tải trang xuống để sử dụng ngoại tuyến</translation> <translation id="4135200667068010335">Danh sách các thiết bị mà bạn có thể chia sẻ một thẻ đã đóng.</translation> <translation id="4137746084635924146">Ngôn ngữ hiện tại của thiết bị</translation> +<translation id="414128724510021958">Yêu cầu trang web dành cho máy tính (theo mặc định)</translation> <translation id="4141536112466364990">Tìm hiểu Chrome</translation> <translation id="4162867837470729563">Danh sách các lựa chọn chia sẻ được mở trên toàn màn hình.</translation> <translation id="4165986682804962316">Cài đặt trang web</translation> @@ -593,7 +593,7 @@ <translation id="4269820728363426813">Sao chép địa chỉ liên kết</translation> <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Bật phương thức khóa màn hình trong phần cài đặt Android<ph name="END_LINK" /></translation> <translation id="4293476595220860475">Bằng việc sử dụng Chrome, bạn đồng ý với <ph name="BEGIN_TOS_LINK" />Điều khoản dịch vụ của Google<ph name="END_TOS_LINK" /> cũng như <ph name="BEGIN_ATOS_LINK" />Điều khoản dịch vụ bổ sung của Google Chrome và ChromeOS<ph name="END_ATOS_LINK" />. <ph name="BEGIN_PRIVACY_LINK" />Chính sách quyền riêng tư<ph name="END_PRIVACY_LINK" /> cũng được áp dụng.</translation> -<translation id="4296252229500326964">Thẻ Ẩn danh mới</translation> +<translation id="4296252229500326964">Thẻ ẩn danh mới</translation> <translation id="4298388696830689168">Các trang web liên kết</translation> <translation id="4303044213806199882">chrome_screenshot_<ph name="CURRENT_TIMESTAMP_MS" /></translation> <translation id="4307992518367153382">Cơ bản</translation> @@ -1087,7 +1087,7 @@ <translation id="686366188661646310">Xóa mật khẩu?</translation> <translation id="6864459304226931083">Tải hình ảnh xuống</translation> <translation id="6865313869410766144">Dữ liệu tự động điền vào biểu mẫu</translation> -<translation id="6867400383614725881">Thẻ Ẩn danh mới</translation> +<translation id="6867400383614725881">Thẻ ẩn danh mới</translation> <translation id="6869056123412990582">máy tính</translation> <translation id="6882836635272038266">Chế độ bảo vệ thông thường chống lại các trang web, tệp đã tải xuống và tiện ích được xác định là nguy hiểm.</translation> <translation id="6883204995689174413">Chia sẻ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb index 09a33c4..9f10d67a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">更好地控制您看到的广告</translation> <translation id="1477626028522505441">未能成功下载 <ph name="FILE_NAME" />,因为服务器出现了问题。</translation> <translation id="148482509007564431">书签保存流程</translation> -<translation id="1488775391433859242">您可以使用此手机在显示该二维码的计算机上登录。</translation> <translation id="1492417797159476138">您已为此网站保存该用户名</translation> <translation id="1493287004536771723">您已关注 <ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">如需管理您的密码,请更新 Google Play 服务</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">删除了 <ph name="NUMBER_OF_ITEMS" /> 项</translation> <translation id="2536728043171574184">正在查看此网页的离线副本</translation> <translation id="2546283357679194313">Cookie 和网站数据</translation> -<translation id="2549516196460093976">您可以使用此平板电脑在显示该二维码的计算机上登录。</translation> <translation id="2558569818338050235">您的浏览记录会影响您看到的广告</translation> <translation id="2561519700418191927">视频预览</translation> <translation id="2567385386134582609">图片</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb index a959786c..e9bf25d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">更全面控制系統顯示的廣告</translation> <translation id="1477626028522505441">伺服器發生問題,因此無法下載 <ph name="FILE_NAME" />。</translation> <translation id="148482509007564431">書籤儲存流程</translation> -<translation id="1488775391433859242">您可在正在顯示此 QR 碼的電腦上使用此手機來登入。</translation> <translation id="1492417797159476138">您已為此網站儲存此使用者名稱</translation> <translation id="1493287004536771723">您正在追蹤「<ph name="SITE_NAME" />」</translation> <translation id="1502010315804028179">如要管理密碼,請更新 Google Play 服務</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547">已刪除 <ph name="NUMBER_OF_ITEMS" /> 個項目</translation> <translation id="2536728043171574184">正在瀏覽此網頁的離線版本</translation> <translation id="2546283357679194313">Cookie 和網站數據</translation> -<translation id="2549516196460093976">您可在正在顯示此 QR 碼的電腦上使用此平板電腦來登入。</translation> <translation id="2558569818338050235">您的瀏覽記錄會影響系統顯示的廣告</translation> <translation id="2561519700418191927">影片預覽</translation> <translation id="2567385386134582609">圖片</translation> @@ -475,6 +473,7 @@ <translation id="3557336313807607643">新增至通訊錄</translation> <translation id="3560491354538957576">網站可以定義興趣</translation> <translation id="3563767357928833671">顯示咗剪貼簿嘅內容</translation> +<translation id="3566639033325271639">更新設定</translation> <translation id="3566923219790363270">Chrome 仍在準備 VR。請稍後再重新啟動 Chrome。</translation> <translation id="3568688522516854065">如要取得其他裝置上的分頁,請登入並開啟同步處理功能</translation> <translation id="357465026686164600">使用手機作為安全密鑰</translation> @@ -569,6 +568,7 @@ <translation id="4116038641877404294">下載網頁,以便在離線時使用</translation> <translation id="4135200667068010335">要共用分頁嘅裝置清單閂咗。</translation> <translation id="4137746084635924146">目前的裝置語言</translation> +<translation id="414128724510021958">已根據預設要求顯示桌面版網站</translation> <translation id="4141536112466364990">瞭解 Chrome</translation> <translation id="4162867837470729563">分享選項清單宜家顯示喺成個畫面。</translation> <translation id="4165986682804962316">網站設定</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb index dcaa34c..b8c0551 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">進一步控管系統向你顯示的廣告</translation> <translation id="1477626028522505441">伺服器發生問題,因此無法下載 <ph name="FILE_NAME" />。</translation> <translation id="148482509007564431">書籤儲存流程</translation> -<translation id="1488775391433859242">你可以使用這支手機,登入顯示這個 QR 圖碼的電腦。</translation> <translation id="1492417797159476138">你已在這個網站上儲存此使用者名稱</translation> <translation id="1493287004536771723">你正在追蹤「<ph name="SITE_NAME" />」</translation> <translation id="1502010315804028179">如要管理密碼,請更新 Google Play 服務</translation> @@ -282,7 +281,6 @@ <translation id="2534155362429831547">已刪除 <ph name="NUMBER_OF_ITEMS" /> 個項目</translation> <translation id="2536728043171574184">目前瀏覽的是這個網頁的離線複本</translation> <translation id="2546283357679194313">Cookie 和網站資料</translation> -<translation id="2549516196460093976">你可以使用這部平板電腦,登入顯示這個 QR 圖碼的電腦。</translation> <translation id="2558569818338050235">你的瀏覽記錄會影響系統向你顯示的廣告</translation> <translation id="2561519700418191927">影片預覽</translation> <translation id="2567385386134582609">圖片</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb index 3456ae1..8b45db64 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -105,7 +105,6 @@ <translation id="1474893630593443211">Ukulawula okwengeziwe ngokuphathelene nezikhangiso ozibonayo</translation> <translation id="1477626028522505441">Ukulandwa kwe-<ph name="FILE_NAME" /> kuhlulekile ngenxa yezinkinga zeseva.</translation> <translation id="148482509007564431">Ukugeleza kokonga ibhukhimakhi</translation> -<translation id="1488775391433859242">Ungasebenzisa le foni ukuze ungene ngemvume kukhompuyutha ebonisa le khodi ye-QR.</translation> <translation id="1492417797159476138">Ulondoloze leli gama lomsebenzisi kakade mayelana naleli sayithi</translation> <translation id="1493287004536771723">Ulandela i-<ph name="SITE_NAME" /></translation> <translation id="1502010315804028179">Ukuze uphathe amaphasiwedi akho, buyekeza amasevisi e-Google Play</translation> @@ -283,7 +282,6 @@ <translation id="2534155362429831547"><ph name="NUMBER_OF_ITEMS" /> izinto ezisusiwe</translation> <translation id="2536728043171574184">Kubukwa ikhophi engaxhunyiwe kwi-inthanethi yaleli khasi</translation> <translation id="2546283357679194313">Amakhukhi nedatha yesayithi</translation> -<translation id="2549516196460093976">Ungasebenzisa le thebulethi ukuze ungene ngemvume kukhompuyutha ebonisa le khodi ye-QR.</translation> <translation id="2558569818338050235">Umlando wakho wokubhrawuza uthinta izikhangiso ozibonayo</translation> <translation id="2561519700418191927">Ukubuka kuqala kwevidiyo</translation> <translation id="2567385386134582609">ISITHOMBE</translation>
diff --git a/chrome/browser/ui/app_list/search/search_controller_impl_new.cc b/chrome/browser/ui/app_list/search/search_controller_impl_new.cc index 5964396..f9f8fab 100644 --- a/chrome/browser/ui/app_list/search/search_controller_impl_new.cc +++ b/chrome/browser/ui/app_list/search/search_controller_impl_new.cc
@@ -193,29 +193,12 @@ if (!result) return; - // In the general case, actions are forwarded to the RemovedResultsRanker. - // Currently only "remove" actions are supported (and not e.g. "append" - // actions). - // - // In the special case, actions are delegated to the result itself. This is - // when, for example, supported actions can be handled by a provider backend, - // as is the case with some actions for some Omnibox results. At the moment we - // are temporarily handling Omnibox result removal requests in the general - // case, using RemovedResultsRanker, because the omnibox autocomplete - // controller supports removal of zero-state results but not of non-zero state - // results. - // - // TODO(crbug.com/1272361): Call result->InvokeAction(action) for all Omnibox - // action requests, once the autocomplete controller supports removal of - // non-zero state results. if (action == ash::SearchResultActionType::kRemove) { ranker_->Remove(result); // We need to update the currently published results to not include the // just-removed result. Manually set the result as filtered and re-publish. result->scoring().filter = true; Publish(); - } else if (result->result_type() == ash::AppListSearchResultType::kOmnibox) { - result->InvokeAction(action); } }
diff --git a/chrome/browser/ui/ash/assistant/assistant_setup.cc b/chrome/browser/ui/ash/assistant/assistant_setup.cc index 3b291a9..c0384e9 100644 --- a/chrome/browser/ui/ash/assistant/assistant_setup.cc +++ b/chrome/browser/ui/ash/assistant/assistant_setup.cc
@@ -24,7 +24,7 @@ #include "components/prefs/pref_service.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -using chromeos::assistant::ConsentFlowUi; +using ::ash::assistant::ConsentFlowUi; namespace { @@ -101,11 +101,11 @@ } void AssistantSetup::SyncSettingsState() { - chromeos::assistant::SettingsUiSelector selector; - chromeos::assistant::ConsentFlowUiSelector* consent_flow_ui = + ash::assistant::SettingsUiSelector selector; + ash::assistant::ConsentFlowUiSelector* consent_flow_ui = selector.mutable_consent_flow_ui_selector(); consent_flow_ui->set_flow_id( - chromeos::assistant::ActivityControlSettingsUiSelector:: + ash::assistant::ActivityControlSettingsUiSelector:: ASSISTANT_SUW_ONBOARDING_ON_CHROME_OS); ash::assistant::AssistantSettings::Get()->GetSettings( selector.SerializeAsString(), @@ -114,7 +114,7 @@ } void AssistantSetup::OnGetSettingsResponse(const std::string& settings) { - chromeos::assistant::SettingsUi settings_ui; + ash::assistant::SettingsUi settings_ui; if (!settings_ui.ParseFromString(settings)) return;
diff --git a/chrome/browser/ui/ash/desks/desks_client_browsertest.cc b/chrome/browser/ui/ash/desks/desks_client_browsertest.cc index 79b7079a..6537998 100644 --- a/chrome/browser/ui/ash/desks/desks_client_browsertest.cc +++ b/chrome/browser/ui/ash/desks/desks_client_browsertest.cc
@@ -776,9 +776,8 @@ // non empty desks are launched when this test is updated to use the real // workflow. auto desk_template = std::make_unique<ash::DeskTemplate>( - kDeskUuid.AsLowercaseString(), ash::DeskTemplateSource::kUser, - base::UTF16ToUTF8(kDeskName), base::Time::Now(), - ash::DeskTemplateType::kTemplate); + kDeskUuid, ash::DeskTemplateSource::kUser, base::UTF16ToUTF8(kDeskName), + base::Time::Now(), ash::DeskTemplateType::kTemplate); SetTemplate(std::move(desk_template)); auto check_launch_template_desk_name =
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc index 0f256b23..e2aef29a8 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -53,6 +53,8 @@ #include "components/autofill/core/browser/data_model/autofill_offer_data.h" #include "components/autofill/core/browser/form_data_importer.h" #include "components/autofill/core/browser/payments/card_unmask_challenge_option.h" +#include "components/autofill/core/browser/payments/credit_card_cvc_authenticator.h" +#include "components/autofill/core/browser/payments/credit_card_otp_authenticator.h" #include "components/autofill/core/browser/payments/payments_client.h" #include "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h" #include "components/autofill/core/browser/ui/popup_item_ids.h" @@ -168,6 +170,18 @@ return MerchantPromoCodeManagerFactory::GetForProfile(profile); } +CreditCardCVCAuthenticator* ChromeAutofillClient::GetCVCAuthenticator() { + if (!cvc_authenticator_) + cvc_authenticator_ = std::make_unique<CreditCardCVCAuthenticator>(this); + return cvc_authenticator_.get(); +} + +CreditCardOtpAuthenticator* ChromeAutofillClient::GetOtpAuthenticator() { + if (!otp_authenticator_) + otp_authenticator_ = std::make_unique<CreditCardOtpAuthenticator>(this); + return otp_authenticator_.get(); +} + PrefService* ChromeAutofillClient::GetPrefs() { return const_cast<PrefService*>(base::as_const(*this).GetPrefs()); }
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h index 9b69685c..567ca6b 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.h +++ b/chrome/browser/ui/autofill/chrome_autofill_client.h
@@ -69,6 +69,8 @@ PersonalDataManager* GetPersonalDataManager() override; AutocompleteHistoryManager* GetAutocompleteHistoryManager() override; MerchantPromoCodeManager* GetMerchantPromoCodeManager() override; + CreditCardCVCAuthenticator* GetCVCAuthenticator() override; + CreditCardOtpAuthenticator* GetOtpAuthenticator() override; PrefService* GetPrefs() override; const PrefService* GetPrefs() const override; syncer::SyncService* GetSyncService() override; @@ -245,6 +247,8 @@ std::u16string GetAccountHolderEmail(); std::unique_ptr<payments::PaymentsClient> payments_client_; + std::unique_ptr<CreditCardCVCAuthenticator> cvc_authenticator_; + std::unique_ptr<CreditCardOtpAuthenticator> otp_authenticator_; std::unique_ptr<FormDataImporter> form_data_importer_; base::WeakPtr<AutofillPopupControllerImpl> popup_controller_; std::unique_ptr<LogManager> log_manager_;
diff --git a/chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_controller.h b/chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_controller.h index c41a0839..e9d7f095 100644 --- a/chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_controller.h +++ b/chrome/browser/ui/autofill_assistant/password_change/mock_password_change_run_controller.h
@@ -51,6 +51,7 @@ ShowCompletionScreen, (base::RepeatingClosure done_button_callback), (override)); + MOCK_METHOD(void, OpenPasswordManager, (), (override)); MOCK_METHOD(void, ShowErrorScreen, (), (override)); MOCK_METHOD(void, OnGeneratedPasswordSelected, (bool), (override)); MOCK_METHOD(bool, PasswordWasSuccessfullyChanged, (), (override));
diff --git a/chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h b/chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h index f7394e2..3ef4e27 100644 --- a/chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h +++ b/chrome/browser/ui/autofill_assistant/password_change/password_change_run_controller.h
@@ -70,11 +70,14 @@ virtual void ShowCompletionScreen( base::RepeatingClosure done_button_callback) = 0; + // Opens Chrome's password manager. + virtual void OpenPasswordManager() = 0; + // Shows the error screen. virtual void ShowErrorScreen() = 0; - // Whether a password change run has resulted in the password being - // successfully changed. + // Returns whether a password change run has resulted in a successfully + // changed password. virtual bool PasswordWasSuccessfullyChanged() = 0; // Returns a weak pointer to this controller.
diff --git a/chrome/browser/ui/passwords/ui_utils.cc b/chrome/browser/ui/passwords/ui_utils.cc index bf0f48c4..1eab298 100644 --- a/chrome/browser/ui/passwords/ui_utils.cc +++ b/chrome/browser/ui/passwords/ui_utils.cc
@@ -213,6 +213,7 @@ case ManagePasswordsReferrer::kTouchToFill: case ManagePasswordsReferrer::kPasswordBreachDialog: case ManagePasswordsReferrer::kSafetyCheck: + case ManagePasswordsReferrer::kAutomatedPasswordChangeSuccessLink: NOTREACHED(); }
diff --git a/chrome/browser/ui/startup/credential_provider_signin_dialog_win_browsertest.cc b/chrome/browser/ui/startup/credential_provider_signin_dialog_win_browsertest.cc index 3c07d96..6eec21c 100644 --- a/chrome/browser/ui/startup/credential_provider_signin_dialog_win_browsertest.cc +++ b/chrome/browser/ui/startup/credential_provider_signin_dialog_win_browsertest.cc
@@ -212,14 +212,13 @@ run_loop.RunUntilIdle(); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_EQ(result_value_.DictSize(), 1u); - const base::DictionaryValue* result_dict; - EXPECT_TRUE(result_value_.GetAsDictionary(&result_dict)); - int exit_code; - EXPECT_TRUE( - result_dict->GetInteger(credential_provider::kKeyExitCode, &exit_code)); - EXPECT_EQ(credential_provider::kUiecAbort, exit_code); + const base::Value::Dict& result_dict = result_value_.GetDict(); + absl::optional<int> exit_code = + result_dict.FindInt(credential_provider::kKeyExitCode); + EXPECT_TRUE(exit_code); + EXPECT_EQ(credential_provider::kUiecAbort, exit_code.value()); EXPECT_TRUE(result_access_token_.empty()); EXPECT_TRUE(result_refresh_token_.empty()); } @@ -247,7 +246,7 @@ WaitForDialogToLoad(); SendSigninCompleteMessage(test_data_storage_.MakeSignInResponseValue()); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_EQ(result_value_.DictSize(), 1u); EXPECT_TRUE(result_access_token_.empty()); EXPECT_TRUE(result_refresh_token_.empty()); @@ -263,7 +262,7 @@ test_data_storage_.GetSuccessAccessToken(), test_data_storage_.GetSuccessRefreshToken())); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_EQ(result_value_.DictSize(), 1u); EXPECT_TRUE(result_access_token_.empty()); EXPECT_TRUE(result_refresh_token_.empty()); @@ -279,7 +278,7 @@ test_data_storage_.GetSuccessAccessToken(), test_data_storage_.GetSuccessRefreshToken())); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_EQ(result_value_.DictSize(), 1u); EXPECT_TRUE(result_access_token_.empty()); EXPECT_TRUE(result_refresh_token_.empty()); @@ -295,7 +294,7 @@ test_data_storage_.GetSuccessAccessToken(), test_data_storage_.GetSuccessRefreshToken())); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_EQ(result_value_.DictSize(), 1u); EXPECT_TRUE(result_access_token_.empty()); EXPECT_TRUE(result_refresh_token_.empty()); @@ -311,7 +310,7 @@ test_data_storage_.GetSuccessEmail(), std::string(), test_data_storage_.GetSuccessRefreshToken())); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_EQ(result_value_.DictSize(), 1u); EXPECT_TRUE(result_access_token_.empty()); EXPECT_TRUE(result_refresh_token_.empty()); @@ -327,7 +326,7 @@ test_data_storage_.GetSuccessEmail(), test_data_storage_.GetSuccessAccessToken(), std::string())); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_EQ(result_value_.DictSize(), 1u); EXPECT_TRUE(result_access_token_.empty()); EXPECT_TRUE(result_refresh_token_.empty()); @@ -339,22 +338,21 @@ WaitForDialogToLoad(); SendValidSigninCompleteMessage(); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_GT(result_value_.DictSize(), 1u); - const base::DictionaryValue* result_dict; - EXPECT_TRUE(result_value_.GetAsDictionary(&result_dict)); - std::string id_in_dict; - EXPECT_TRUE(result_dict->GetString(credential_provider::kKeyId, &id_in_dict)); - std::string email_in_dict; - EXPECT_TRUE( - result_dict->GetString(credential_provider::kKeyEmail, &email_in_dict)); - std::string password_in_dict; - EXPECT_TRUE(result_dict->GetString(credential_provider::kKeyPassword, - &password_in_dict)); + const base::Value::Dict& dict = result_value_.GetDict(); + const std::string* id_in_dict = dict.FindString(credential_provider::kKeyId); + ASSERT_NE(id_in_dict, nullptr); + const std::string* email_in_dict = + dict.FindString(credential_provider::kKeyEmail); + ASSERT_NE(email_in_dict, nullptr); + const std::string* password_in_dict = + dict.FindString(credential_provider::kKeyPassword); + ASSERT_NE(password_in_dict, nullptr); - EXPECT_EQ(id_in_dict, test_data_storage_.GetSuccessId()); - EXPECT_EQ(email_in_dict, test_data_storage_.GetSuccessEmail()); - EXPECT_EQ(password_in_dict, test_data_storage_.GetSuccessPassword()); + EXPECT_EQ(*id_in_dict, test_data_storage_.GetSuccessId()); + EXPECT_EQ(*email_in_dict, test_data_storage_.GetSuccessEmail()); + EXPECT_EQ(*password_in_dict, test_data_storage_.GetSuccessPassword()); EXPECT_EQ(result_access_token_, test_data_storage_.GetSuccessAccessToken()); EXPECT_EQ(result_refresh_token_, test_data_storage_.GetSuccessRefreshToken()); } @@ -393,7 +391,7 @@ SendSigninCompleteMessage(signin_result); EXPECT_TRUE(signin_complete_called_); - EXPECT_TRUE(result_value_.is_dict()); + ASSERT_TRUE(result_value_.is_dict()); EXPECT_EQ(exit_code_, expected_error_code); const base::Value* exit_code_value = result_value_.FindKeyOfType( credential_provider::kKeyExitCode, base::Value::Type::INTEGER);
diff --git a/chrome/browser/ui/startup/credential_provider_signin_info_fetcher_win.cc b/chrome/browser/ui/startup/credential_provider_signin_info_fetcher_win.cc index 23facc80..5465b7b 100644 --- a/chrome/browser/ui/startup/credential_provider_signin_info_fetcher_win.cc +++ b/chrome/browser/ui/startup/credential_provider_signin_info_fetcher_win.cc
@@ -65,8 +65,12 @@ void CredentialProviderSigninInfoFetcher::OnGetTokenInfoResponse( std::unique_ptr<base::DictionaryValue> token_info) { DCHECK(token_handle_.empty()); - bool has_error = !token_info->GetString("token_handle", &token_handle_) || - token_handle_.empty(); + if (const std::string* token_handle = + token_info->GetDict().FindString("token_handle"); + token_handle) { + token_handle_ = *token_handle; + } + bool has_error = token_handle_.empty(); WriteResultsIfFinished(has_error); } @@ -75,9 +79,16 @@ DCHECK(!mdm_access_token_.empty()); DCHECK(!mdm_id_token_.empty()); DCHECK(full_name_.empty()); - bool has_error = - !user_info->GetString("name", &full_name_) || full_name_.empty(); - user_info->GetString("picture", &picture_url_); + if (const std::string* full_name = user_info->GetDict().FindString("name"); + full_name) { + full_name_ = *full_name; + } + if (const std::string* picture_url = + user_info->GetDict().FindString("picture"); + picture_url) { + picture_url_ = *picture_url; + } + bool has_error = full_name_.empty(); WriteResultsIfFinished(has_error); }
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.cc b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.cc index 3987159..590972f 100644 --- a/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.cc +++ b/chrome/browser/ui/views/autofill_assistant/password_change/password_change_run_view.cc
@@ -315,13 +315,10 @@ .SetTextContext(views::style::CONTEXT_LABEL) .SetID(static_cast<int>(ChildrenViewsIds::kDescription)) .Build()); - - // TODO(crbug.com/1329179): Navidate user to password manager - // components/password_manager/core/browser/manage_passwords_referrer.h description_view->AddStyleRange( gfx::Range(offset, offset + password_manager_link.length()), - views::StyledLabel::RangeStyleInfo::CreateForLink( - static_cast<base::RepeatingClosure>(base::DoNothing()))); + views::StyledLabel::RangeStyleInfo::CreateForLink(base::BindRepeating( + &PasswordChangeRunController::OpenPasswordManager, controller_))); views::View* button_container = body_->AddChildView(CreateButtonContainer()); button_container->AddChildView(CreateButton(
diff --git a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc index 3caf100..b7bb8e7 100644 --- a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc +++ b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc
@@ -19,6 +19,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/common/referrer.h" #include "net/base/url_util.h" +#include "third_party/blink/public/common/loader/loader_constants.h" #include "ui/base/window_open_disposition.h" #include "ui/views/layout/flex_layout_types.h" #include "ui/views/layout/flex_layout_view.h" @@ -75,7 +76,11 @@ } void AboutThisSiteSidePanelView::LoadProgressChanged(double progress) { - SetContentVisible(progress == 1.0); + // Ignore the initial load progress since the navigation might be intercepted + // by AboutThisSiteSidePanelThrottle. + if (progress == blink::kInitialLoadProgress) + return; + SetContentVisible(progress == blink::kFinalLoadProgress); } void AboutThisSiteSidePanelView::OpenUrl(const content::OpenURLParams& params) {
diff --git a/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc b/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc index c156d88..23a5b07 100644 --- a/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_cookies_content_view.cc
@@ -126,9 +126,6 @@ InitBlockingThirdPartyCookiesRow(); InitCookiesDialogButton(); - // Update the text displaying the number of allowed sites. - cookies_dialog_button_->SetSubtitleText(num_allowed_sites_text); - // Update the text displaying the number of blocked sites. blocking_third_party_cookies_subtitle_label_->SetText(num_blocked_sites_text); @@ -146,6 +143,12 @@ fps_button_->SetSubtitleText(fps_button_subtitle); } + // Update the text displaying the number of allowed sites. + cookies_dialog_button_->SetSubtitleText(num_allowed_sites_text); + + // Update the text displaying the number of blocked sites. + blocking_third_party_cookies_subtitle_label_->SetText(num_blocked_sites_text); + PreferredSizeChanged(); }
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc index 73fc7790..adf1c636 100644 --- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc +++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -514,65 +514,62 @@ } std::ostream& operator<<(std::ostream& os, const StateSnapshot& snapshot) { - base::Value root(base::Value::Type::DICTIONARY); - base::Value& profiles_value = - *root.SetKey("profiles", base::Value(base::Value::Type::DICTIONARY)); + base::Value::Dict root; + base::Value::Dict& profiles_dict = *root.EnsureDict("profiles"); for (const auto& profile_pair : snapshot.profiles) { - base::Value profile_value(base::Value::Type::DICTIONARY); + base::Value::Dict profile_dict; - base::Value browsers_value(base::Value::Type::DICTIONARY); + base::Value::Dict browsers_dict; const ProfileState& profile = profile_pair.second; for (const auto& browser_pair : profile.browsers) { - base::Value browser_value(base::Value::Type::DICTIONARY); + base::Value::Dict browser_dict; const BrowserState& browser = browser_pair.second; - browser_value.SetStringKey("browser", - base::StringPrintf("%p", browser.browser)); + browser_dict.Set("browser", base::StringPrintf("%p", browser.browser)); - base::Value tab_values(base::Value::Type::DICTIONARY); + base::Value::Dict tab_dicts; for (const auto& tab_pair : browser.tabs) { - base::Value tab_value(base::Value::Type::DICTIONARY); + base::Value::Dict tab_dict; const TabState& tab = tab_pair.second; - tab_value.SetStringKey("url", tab.url.spec()); - tab_value.SetBoolKey("is_installable", tab.is_installable); - tab_values.SetKey(base::StringPrintf("%p", tab_pair.first), - std::move(tab_value)); + tab_dict.Set("url", tab.url.spec()); + tab_dict.Set("is_installable", tab.is_installable); + tab_dicts.Set(base::StringPrintf("%p", tab_pair.first), + std::move(tab_dict)); } - browser_value.SetKey("tabs", std::move(tab_values)); - browser_value.SetStringKey("active_tab", - base::StringPrintf("%p", browser.active_tab)); - browser_value.SetStringKey("app_id", browser.app_id); - browser_value.SetBoolKey("install_icon_shown", - browser.install_icon_shown); - browser_value.SetBoolKey("launch_icon_shown", browser.launch_icon_shown); + browser_dict.Set("tabs", std::move(tab_dicts)); + browser_dict.Set("active_tab", + base::StringPrintf("%p", browser.active_tab)); + browser_dict.Set("app_id", browser.app_id); + browser_dict.Set("install_icon_shown", browser.install_icon_shown); + browser_dict.Set("launch_icon_shown", browser.launch_icon_shown); - browsers_value.SetKey(base::StringPrintf("%p", browser_pair.first), - std::move(browser_value)); + browsers_dict.Set(base::StringPrintf("%p", browser_pair.first), + std::move(browser_dict)); } - base::Value app_values(base::Value::Type::DICTIONARY); + base::Value::Dict app_dicts; for (const auto& app_pair : profile.apps) { - base::Value app_value(base::Value::Type::DICTIONARY); + base::Value::Dict app_dict; const AppState& app = app_pair.second; - app_value.SetStringKey("id", app.id); - app_value.SetStringKey("name", app.name); - app_value.SetIntKey("effective_display_mode", - static_cast<int>(app.effective_display_mode)); - app_value.SetIntKey("user_display_mode", - static_cast<int>(app.effective_display_mode)); - app_value.SetStringKey("manifest_launcher_icon_filename", - app.manifest_launcher_icon_filename); - app_value.SetBoolKey("is_installed_locally", app.is_installed_locally); - app_value.SetBoolKey("is_shortcut_created", app.is_shortcut_created); - app_value.SetBoolKey("is_isolated", app.is_isolated); + app_dict.Set("id", app.id); + app_dict.Set("name", app.name); + app_dict.Set("effective_display_mode", + static_cast<int>(app.effective_display_mode)); + app_dict.Set("user_display_mode", + static_cast<int>(app.effective_display_mode)); + app_dict.Set("manifest_launcher_icon_filename", + app.manifest_launcher_icon_filename); + app_dict.Set("is_installed_locally", app.is_installed_locally); + app_dict.Set("is_shortcut_created", app.is_shortcut_created); + app_dict.Set("is_isolated", app.is_isolated); - app_values.SetKey(app_pair.first, std::move(app_value)); + app_dicts.Set(app_pair.first, std::move(app_dict)); } - profile_value.SetKey("browsers", std::move(browsers_value)); - profile_value.SetKey("apps", std::move(app_values)); - profiles_value.SetKey(base::StringPrintf("%p", profile_pair.first), - std::move(profile_value)); + profile_dict.Set("browsers", std::move(browsers_dict)); + profile_dict.Set("apps", std::move(app_dicts)); + profiles_dict.Set(base::StringPrintf("%p", profile_pair.first), + std::move(profile_dict)); } os << root.DebugString(); return os; @@ -916,7 +913,7 @@ { ListPrefUpdate updateList(profile()->GetPrefs(), prefs::kWebAppSettings); updateList->GetList().EraseIf([&](const base::Value& item) { - return item.FindKey(kManifestId)->GetString() == url.spec(); + return *item.GetDict().FindString(kManifestId) == url.spec(); }); } AfterStateChangeAction(); @@ -1509,8 +1506,8 @@ ListPrefUpdate update(profile()->GetPrefs(), prefs::kWebAppInstallForceList); size_t removed_count = - update->EraseListValueIf([&](const base::Value& item) { - const base::Value* url_value = item.FindKey(kUrlKey); + update->GetList().EraseIf([&](const base::Value& item) { + const base::Value* url_value = item.GetDict().Find(kUrlKey); return url_value && url_value->GetString() == url.spec(); }); ASSERT_GT(removed_count, 0U); @@ -2358,14 +2355,13 @@ WebAppTestInstallWithOsHooksObserver observer(profile()); observer.BeginListening(); { - base::Value item(base::Value::Type::DICTIONARY); - item.SetKey(kUrlKey, base::Value(url.spec())); - item.SetKey(kDefaultLaunchContainerKey, - std::move(default_launch_container)); - item.SetKey(kCreateDesktopShortcutKey, base::Value(create_shortcut)); + base::Value::Dict item; + item.Set(kUrlKey, url.spec()); + item.Set(kDefaultLaunchContainerKey, std::move(default_launch_container)); + item.Set(kCreateDesktopShortcutKey, create_shortcut); ListPrefUpdate update(profile()->GetPrefs(), prefs::kWebAppInstallForceList); - update->Append(item.Clone()); + update->GetList().Append(std::move(item)); } active_app_id_ = observer.Wait(); } @@ -2374,16 +2370,17 @@ const char* policy) { GURL url = GetAppStartURL(site); { - ListPrefUpdate updateList(profile()->GetPrefs(), prefs::kWebAppSettings); - updateList->EraseListValueIf([&](const base::Value& item) { - return item.FindKey(kManifestId)->GetString() == url.spec(); + ListPrefUpdate update(profile()->GetPrefs(), prefs::kWebAppSettings); + base::Value::List& update_list = update->GetList(); + update_list.EraseIf([&](const base::Value& item) { + return *item.GetDict().FindString(kManifestId) == url.spec(); }); - base::Value dictItem(base::Value::Type::DICTIONARY); - dictItem.SetKey(kManifestId, base::Value(url.spec())); - dictItem.SetKey(kRunOnOsLogin, base::Value(policy)); + base::Value::Dict dict_item; + dict_item.Set(kManifestId, url.spec()); + dict_item.Set(kRunOnOsLogin, policy); - updateList.Get()->Append(std::move(dictItem)); + update_list.Append(std::move(dict_item)); } } @@ -2408,8 +2405,8 @@ ListPrefUpdate update(profile()->GetPrefs(), prefs::kWebAppInstallForceList); size_t removed_count = - update->EraseListValueIf([&](const base::Value& item) { - const base::Value* url_value = item.FindKey(kUrlKey); + update->GetList().EraseIf([&](const base::Value& item) { + const base::Value* url_value = item.GetDict().Find(kUrlKey); return url_value && url_value->GetString() == url_spec; }); ASSERT_GT(removed_count, 0U);
diff --git a/chrome/browser/ui/webui/access_code_cast/access_code_cast_dialog.cc b/chrome/browser/ui/webui/access_code_cast/access_code_cast_dialog.cc index 2e34740c..367406fe 100644 --- a/chrome/browser/ui/webui/access_code_cast/access_code_cast_dialog.cc +++ b/chrome/browser/ui/webui/access_code_cast/access_code_cast_dialog.cc
@@ -36,7 +36,7 @@ // The default width, height without footnote, height with footnote for the dialog container. const int kDialogWidthDefault = 448; -const int kDialogHeightDefault = 295; +const int kDialogHeightDefault = 271; const int kDialogHeightFootnote = 330; AccessCodeCastDialog::AccessCodeCastDialog(
diff --git a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc index 221c1cc09..e88bb8b 100644 --- a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc +++ b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc
@@ -31,6 +31,19 @@ namespace chromeos { +// TODO(https://crbug.com/1164001): move to forward declaration +namespace assistant { +using ::ash::assistant::ActivityControlSettingsUiSelector; +using ::ash::assistant::ClassicActivityControlUiTexts; +using ::ash::assistant::ConsentFlowUi; +using ::ash::assistant::ConsentFlowUiSelector; +using ::ash::assistant::ConsentFlowUiUpdate; +using ::ash::assistant::SettingSetId; +using ::ash::assistant::SettingsUi; +using ::ash::assistant::SettingsUiSelector; +using ::ash::assistant::SettingsUiUpdate; +} // namespace assistant + namespace { // Possible native assistant icons
diff --git a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.h b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.h index 9f567a3..619377d7 100644 --- a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.h +++ b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.h
@@ -56,16 +56,16 @@ bool opted_in); // Construct SettingsUiSelector for the ConsentFlow UI. -assistant::SettingsUiSelector GetSettingsUiSelector(); +ash::assistant::SettingsUiSelector GetSettingsUiSelector(); // Construct SettingsUiUpdate for user opt-in. -assistant::SettingsUiUpdate GetSettingsUiUpdate( +ash::assistant::SettingsUiUpdate GetSettingsUiUpdate( const std::string& consent_token); using SettingZippyList = google::protobuf::RepeatedPtrField< - assistant::ClassicActivityControlUiTexts::SettingZippy>; + ash::assistant::ClassicActivityControlUiTexts::SettingZippy>; using ActivityControlUi = - assistant::ConsentFlowUi::ConsentUi::ActivityControlUi; + ash::assistant::ConsentFlowUi::ConsentUi::ActivityControlUi; // Helper method to create zippy data. base::Value CreateZippyData(const ActivityControlUi& activity_control_ui, bool is_minor_mode); @@ -74,7 +74,7 @@ base::Value CreateDisclosureData(const SettingZippyList& disclosure_list); // Get string constants for settings ui. -base::Value GetSettingsUiStrings(const assistant::SettingsUi& settings_ui, +base::Value GetSettingsUiStrings(const ash::assistant::SettingsUi& settings_ui, bool activity_control_needed, bool equal_weight_buttons);
diff --git a/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc index 2207e6d5..9a9a9e99 100644 --- a/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc
@@ -36,6 +36,18 @@ namespace chromeos { +// TODO(https://crbug.com/1164001): remove after migrating to ash. +namespace assistant { +using ::ash::assistant::ConsentFlowUi_ConsentStatus_ALREADY_CONSENTED; +using ::ash::assistant::ConsentFlowUi_ConsentStatus_ASK_FOR_CONSENT; +using ::ash::assistant::ConsentFlowUiUpdateResult; +using ::ash::assistant::EmailOptInUpdateResult; +using ::ash::assistant::GetSettingsUiResponse; +using ::ash::assistant::SettingsResponseHeader_AcceptRejectLayout_EQUAL_WEIGHT; +using ::ash::assistant::SettingsUiSelector; +using ::ash::assistant::SettingsUiUpdateResult; +} // namespace assistant + namespace { constexpr char kSkipPressed[] = "skip-pressed";
diff --git a/chrome/browser/ui/webui/settings/on_startup_handler.cc b/chrome/browser/ui/webui/settings/on_startup_handler.cc index f4227e3..dbc605a 100644 --- a/chrome/browser/ui/webui/settings/on_startup_handler.cc +++ b/chrome/browser/ui/webui/settings/on_startup_handler.cc
@@ -62,19 +62,20 @@ FireWebUIListener(kOnStartupNtpExtensionEventName, GetNtpExtension()); } -base::Value::Dict OnStartupHandler::GetNtpExtension() { +base::Value OnStartupHandler::GetNtpExtension() { const extensions::Extension* ntp_extension = extensions::GetExtensionOverridingNewTabPage(profile_); if (!ntp_extension) { - return base::Value::Dict(); + return base::Value(); } - base::Value::Dict dict; - dict.Set("id", ntp_extension->id()); - dict.Set("name", ntp_extension->name()); - dict.Set("canBeDisabled", !extensions::ExtensionSystem::Get(profile_) - ->management_policy() - ->MustRemainEnabled(ntp_extension, nullptr)); + base::Value dict(base::Value::Type::DICTIONARY); + dict.SetStringKey("id", ntp_extension->id()); + dict.SetStringKey("name", ntp_extension->name()); + dict.SetBoolKey("canBeDisabled", + !extensions::ExtensionSystem::Get(profile_) + ->management_policy() + ->MustRemainEnabled(ntp_extension, nullptr)); return dict; }
diff --git a/chrome/browser/ui/webui/settings/on_startup_handler.h b/chrome/browser/ui/webui/settings/on_startup_handler.h index bc9fb7b7..4c5967f 100644 --- a/chrome/browser/ui/webui/settings/on_startup_handler.h +++ b/chrome/browser/ui/webui/settings/on_startup_handler.h
@@ -42,7 +42,7 @@ HandleValidateStartupPage_Invalid); // Info for extension controlling the NTP or empty value. - base::Value::Dict GetNtpExtension(); + base::Value GetNtpExtension(); // Handler for the "getNtpExtension" message. No arguments. void HandleGetNtpExtension(const base::Value::List& args);
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index a4ff483..b91ef55 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1660607946-c55ac51ed3ad2d99676608338c73d1e6acc4162c.profdata +chrome-linux-main-1660650975-0429cc669493803dc7829079efcbdbb7910f7af8.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 1f3d417..1e0cf01 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1660607946-21fc3ac742bbf512e36ac315bd686a31e4bae5f8.profdata +chrome-mac-arm-main-1660650975-30813d08c6ccb5b6f1a6077df2f97a642093a30b.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index c07fd3b..3da6c4c3 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1660607946-f1457d50bd4512f77090bbaad1f58f950b8f9471.profdata +chrome-mac-main-1660650975-78f2abc50319e2e21df10a82759f3c1451ffd523.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 150fc90..b9a2c5f 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1660607946-9644f6ef70baeac7eebd3b368b81b4f239b82703.profdata +chrome-win32-main-1660650975-ee2eda6f820d2789a82040d13a5e68a0c91b2dda.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 5e09d28c..a07a7c1e 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1660607946-dd44455994bd6ed145d7eb27db7171b2d89adea3.profdata +chrome-win64-main-1660650975-11c0305a3d05e803f31899ae4eaf2cadee7a5b99.profdata
diff --git a/chrome/common/extensions/api/scripting.idl b/chrome/common/extensions/api/scripting.idl index d87a872..6d85d91 100644 --- a/chrome/common/extensions/api/scripting.idl +++ b/chrome/common/extensions/api/scripting.idl
@@ -34,7 +34,7 @@ // The <a href="https://developer.chrome.com/extensions/webNavigation#document_ids">IDs</a> // of specific documentIds to inject into. This must not be set if // <code>frameIds</code> is set. - [nodoc] DOMString[]? documentIds; + DOMString[]? documentIds; // Whether the script should inject into all frames within the tab. Defaults // to false. @@ -109,7 +109,7 @@ long frameId; // The document associated with the injection. - [nodoc] DOMString documentId; + DOMString documentId; }; // Describes a content script to be injected into a web page registered
diff --git a/chrome/common/extensions/api/tabs.json b/chrome/common/extensions/api/tabs.json index 421c39e..b106797 100644 --- a/chrome/common/extensions/api/tabs.json +++ b/chrome/common/extensions/api/tabs.json
@@ -210,7 +210,6 @@ "documentId": { "type": "string", "optional": true, - "nodoc": true, "description": "Open a port to a specific <a href='webNavigation#document_ids'>document</a> identified by <code>documentId</code> instead of all frames in the tab." } }, @@ -280,7 +279,6 @@ "documentId": { "type": "string", "optional": true, - "nodoc": true, "description": "Send a message to a specific <a href='webNavigation#document_ids'>document</a> identified by <code>documentId</code> instead of all frames in the tab." } },
diff --git a/chrome/common/extensions/api/web_navigation.json b/chrome/common/extensions/api/web_navigation.json index 78b8643..00bb144 100644 --- a/chrome/common/extensions/api/web_navigation.json +++ b/chrome/common/extensions/api/web_navigation.json
@@ -38,7 +38,7 @@ "description": "The ID of the process that runs the renderer for this tab." }, "frameId": { "type": "integer", "optional": true, "minimum": 0, "description": "The ID of the frame in the given tab." }, - "documentId": { "type": "string", "optional": true, "nodoc": true, "description": "The UUID of the document. If the frameId and/or tabId are provided they will be validated to match the document found by provided document ID." } + "documentId": { "type": "string", "optional": true, "description": "The UUID of the document. If the frameId and/or tabId are provided they will be validated to match the document found by provided document ID." } } } ], @@ -65,24 +65,20 @@ }, "documentId": { "type": "string", - "description": "A UUID of the document loaded.", - "nodoc": true + "description": "A UUID of the document loaded." }, "parentDocumentId": { "type": "string", "optional": true, - "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", - "nodoc": true + "description": "A UUID of the parent document owning this frame. This is not set if there is no parent." }, "documentLifecycle": { "$ref": "extensionTypes.DocumentLifecycle", - "description": "The lifecycle the document is in.", - "nodoc": true + "description": "The lifecycle the document is in." }, "frameType": { "$ref": "extensionTypes.FrameType", - "description": "The type of frame the navigation occurred in.", - "nodoc": true + "description": "The type of frame the navigation occurred in." } } } @@ -136,24 +132,20 @@ }, "documentId": { "type": "string", - "description": "A UUID of the document loaded.", - "nodoc": true + "description": "A UUID of the document loaded." }, "parentDocumentId": { "type": "string", "optional": true, - "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", - "nodoc": true + "description": "A UUID of the parent document owning this frame. This is not set if there is no parent." }, "documentLifecycle": { "$ref": "extensionTypes.DocumentLifecycle", - "description": "The lifecycle the document is in.", - "nodoc": true + "description": "The lifecycle the document is in." }, "frameType": { "$ref": "extensionTypes.FrameType", - "description": "The type of frame the navigation occurred in.", - "nodoc": true + "description": "The type of frame the navigation occurred in." } } } @@ -190,9 +182,9 @@ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique for a given tab and process."}, "parentFrameId": {"type": "integer", "description": "The ID of the parent frame, or <code>-1</code> if this is the main frame."}, "timeStamp": {"type": "number", "description": "The time when the browser was about to start the navigation, in milliseconds since the epoch."}, - "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in.","nodoc": true} + "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in."} } } ] @@ -222,10 +214,10 @@ "transitionType": {"$ref": "TransitionType", "description": "Cause of the navigation."}, "transitionQualifiers": {"type": "array", "description": "A list of transition qualifiers.", "items": {"$ref": "TransitionQualifier"}}, "timeStamp": {"type": "number", "description": "The time when the navigation was committed, in milliseconds since the epoch."}, - "documentId": {"type": "string", "description": "A UUID of the document loaded.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in.","nodoc": true} + "documentId": {"type": "string", "description": "A UUID of the document loaded."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in."} } } ] @@ -253,10 +245,10 @@ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "The ID of the parent frame, or <code>-1</code> if this is the main frame."}, "timeStamp": {"type": "number", "description": "The time when the page's DOM was fully constructed, in milliseconds since the epoch."}, - "documentId": {"type": "string", "description": "A UUID of the document loaded.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in.","nodoc": true} + "documentId": {"type": "string", "description": "A UUID of the document loaded."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in."} } } ] @@ -284,10 +276,10 @@ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "The ID of the parent frame, or <code>-1</code> if this is the main frame."}, "timeStamp": {"type": "number", "description": "The time when the document finished loading, in milliseconds since the epoch."}, - "documentId": {"type": "string", "description": "A UUID of the document loaded.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in.","nodoc": true} + "documentId": {"type": "string", "description": "A UUID of the document loaded."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in."} } } ] @@ -320,10 +312,10 @@ "parentFrameId": {"type": "integer", "description": "The ID of the parent frame, or <code>-1</code> if this is the main frame."}, "error": {"type": "string", "description": "The error description."}, "timeStamp": {"type": "number", "description": "The time when the error occurred, in milliseconds since the epoch."}, - "documentId": {"type": "string", "description": "A UUID of the document loaded.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in.","nodoc": true} + "documentId": {"type": "string", "description": "A UUID of the document loaded."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in."} } } ] @@ -380,10 +372,10 @@ "transitionType": {"$ref": "TransitionType", "description": "Cause of the navigation."}, "transitionQualifiers": {"type": "array", "description": "A list of transition qualifiers.", "items": {"$ref": "TransitionQualifier"}}, "timeStamp": {"type": "number", "description": "The time when the navigation was committed, in milliseconds since the epoch."}, - "documentId": {"type": "string", "description": "A UUID of the document loaded.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in.","nodoc": true} + "documentId": {"type": "string", "description": "A UUID of the document loaded."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in."} } } ] @@ -429,10 +421,10 @@ "transitionType": {"$ref": "TransitionType", "description": "Cause of the navigation."}, "transitionQualifiers": {"type": "array", "description": "A list of transition qualifiers.", "items": {"$ref": "TransitionQualifier"}}, "timeStamp": {"type": "number", "description": "The time when the navigation was committed, in milliseconds since the epoch."}, - "documentId": {"type": "string", "description": "A UUID of the document loaded.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in.","nodoc": true} + "documentId": {"type": "string", "description": "A UUID of the document loaded."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle","description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType","description": "The type of frame the navigation occurred in."} } } ]
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 61600f8..5d9fcf5 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -1266,6 +1266,7 @@ "//components/autofill/content/browser:test_support", "//components/autofill/content/common/mojom", "//components/autofill/content/renderer:test_support", + "//components/autofill_assistant/browser/public:unit_test_support", "//components/back_forward_cache", "//components/background_fetch", "//components/background_sync", @@ -1681,6 +1682,7 @@ "../browser/autofill/autofill_server_browsertest.cc", "../browser/autofill/content_autofill_driver_browsertest.cc", "../browser/autofill/form_structure_browsertest.cc", + "../browser/autofill_assistant/password_change/apc_external_action_delegate_browsertest.cc", "../browser/background_fetch/background_fetch_browsertest.cc", "../browser/background_sync/background_sync_browsertest.cc", "../browser/background_sync/background_sync_content_setting_browsertest.cc",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java index fafbb6b..ea4da51 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
@@ -21,6 +21,7 @@ import org.chromium.components.signin.AccountUtils; import org.chromium.components.signin.base.AccountCapabilities; import org.chromium.components.signin.base.AccountInfo; +import org.chromium.components.signin.base.CoreAccountId; import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.AccountInfoServiceProvider; import org.chromium.components.signin.identitymanager.IdentityManager; @@ -43,6 +44,7 @@ public static final String TEST_ACCOUNT_EMAIL = "test@gmail.com"; private final @NonNull FakeAccountManagerFacade mFakeAccountManagerFacade; + // TODO(https://crbug.com/1352119): Revise this test rule and make this non-nullable. private final @Nullable FakeAccountInfoService mFakeAccountInfoService; public AccountManagerTestRule() { @@ -54,7 +56,7 @@ } public AccountManagerTestRule(@NonNull FakeAccountManagerFacade fakeAccountManagerFacade, - @NonNull FakeAccountInfoService fakeAccountInfoService) { + @Nullable FakeAccountInfoService fakeAccountInfoService) { mFakeAccountManagerFacade = fakeAccountManagerFacade; mFakeAccountInfoService = fakeAccountInfoService; } @@ -78,8 +80,11 @@ * Sets up the AccountManagerFacade mock. */ public void setUpRule() { - TestThreadUtils.runOnUiThreadBlocking( - () -> { AccountInfoServiceProvider.setInstanceForTests(mFakeAccountInfoService); }); + TestThreadUtils.runOnUiThreadBlocking(() -> { + if (mFakeAccountInfoService != null) { + AccountInfoServiceProvider.setInstanceForTests(mFakeAccountInfoService); + } + }); AccountManagerFacadeProvider.setInstanceForTests(mFakeAccountManagerFacade); } @@ -88,7 +93,7 @@ */ public void tearDownRule() { AccountManagerFacadeProvider.resetInstanceForTests(); - AccountInfoServiceProvider.resetForTests(); + if (mFakeAccountInfoService != null) AccountInfoServiceProvider.resetForTests(); } /** @@ -112,7 +117,6 @@ * @return The CoreAccountInfo for the account added. */ public AccountInfo addAccount(String accountName, @NonNull AccountCapabilities capabilities) { - assert mFakeAccountInfoService != null; final String baseName = accountName.split("@", 2)[0]; return addAccount( accountName, baseName + ".full", baseName + ".given", createAvatar(), capabilities); @@ -134,10 +138,13 @@ */ public AccountInfo addAccount(String email, String fullName, String givenName, @Nullable Bitmap avatar, @NonNull AccountCapabilities capabilities) { - assert mFakeAccountInfoService != null; + String gaiaId = FakeAccountManagerFacade.toGaiaId(email); + AccountInfo accountInfo = new AccountInfo(new CoreAccountId(gaiaId), email, gaiaId, + fullName, givenName, avatar, capabilities); mFakeAccountManagerFacade.addAccount(AccountUtils.createAccountFromName(email)); - return mFakeAccountInfoService.addAccountInfo( - email, fullName, givenName, avatar, capabilities); + // TODO(https://crbug.com/1352119): Revise this test rule and remove the condition here. + if (mFakeAccountInfoService != null) mFakeAccountInfoService.addAccountInfo(accountInfo); + return accountInfo; } /**
diff --git a/chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.js b/chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.js index 0d47b306..5c6f3d3 100644 --- a/chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.js +++ b/chrome/test/data/webui/chromeos/os_feedback_ui/share_data_page_test.js
@@ -15,7 +15,7 @@ import {getDeepActiveElement} from 'chrome://resources/js/util.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {assertArrayEquals, assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; +import {assertArrayEquals, assertEquals, assertFalse, assertNotEquals, assertTrue} from '../../chai_assert.js'; import {eventToPromise, flushTasks, isVisible} from '../../test_util.js'; /** @type {string} */ @@ -644,4 +644,56 @@ assertEquals( 1, feedbackServiceProvider.getOpenBluetoothLogsInfoDialogCallCount()); }); + + /** + * Test that sendBluetoothLogs flag is true and categoryTag is marked as + * 'BluetoothReportWithLogs' when bluetooth logs checkbox is checked. + */ + test('sendReportWithBluetoothLogsFlagChecked', async () => { + await initializePage(); + page.feedbackContext = fakeFeedbackContext; + + const bluetoothLogsCheckbox = getElement('#bluetoothLogsCheckbox'); + + // Check the bluetoothLogs checkbox, it is default to be checked. + assertTrue(!!bluetoothLogsCheckbox); + assertTrue(bluetoothLogsCheckbox.checked); + + // Report should have sendBluetoothLogs flag true,and category marked as + // "BluetoothReportWithLogs". + const requestWithBluetoothFlag = (await clickSendAndWait(page)).report; + + assertTrue(requestWithBluetoothFlag.sendBluetoothLogs); + assertTrue(!!requestWithBluetoothFlag.feedbackContext.categoryTag); + assertEquals( + 'BluetoothReportWithLogs', + requestWithBluetoothFlag.feedbackContext.categoryTag); + }); + + /** + * Test that sendBluetoothLogs flag is false and categoryTag is not marked as + * 'BluetoothReportWithLogs' when bluetooth logs checkbox is unchecked. + */ + test('sendReportWithoutBluetoothLogsFlagChecked', async () => { + await initializePage(); + page.feedbackContext = fakeFeedbackContext; + + const bluetoothLogsCheckbox = getElement('#bluetoothLogsCheckbox'); + + // BluetoothLogs checkbox is default to be checked. + assertTrue(!!bluetoothLogsCheckbox); + assertTrue(bluetoothLogsCheckbox.checked); + + // Verify that unchecking the checkbox will remove the flag in the report. + bluetoothLogsCheckbox.click(); + assertFalse(bluetoothLogsCheckbox.checked); + await flushTasks(); + + // Report should not have sendBluetoothLogs flag, + // and category marked as "BluetoothReportWithLogs". + const requestWithoutBluetoothFlag = (await clickSendAndWait(page)).report; + + assertFalse(requestWithoutBluetoothFlag.sendBluetoothLogs); + assertFalse(!!requestWithoutBluetoothFlag.feedbackContext.categoryTag); + }); }
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn index 49b896b2..cf1963e6 100644 --- a/chrome/test/data/webui/settings/BUILD.gn +++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -11,6 +11,7 @@ preprocessed_files = [ "about_page_tests.ts", "appearance_page_test.ts", + "autofill_page_test.ts", "clear_browsing_data_test.ts", "cookies_page_test.ts", "downloads_page_test.ts", @@ -54,7 +55,6 @@ "advanced_page_test.ts", "all_sites_tests.ts", "appearance_fonts_page_test.ts", - "autofill_page_test.ts", "autofill_section_test.ts", "avatar_icon_test.ts", "basic_page_test.ts",
diff --git a/chrome/test/data/webui/settings/autofill_page_test.ts b/chrome/test/data/webui/settings/autofill_page_test.ts index a5f39d8..41bba4e 100644 --- a/chrome/test/data/webui/settings/autofill_page_test.ts +++ b/chrome/test/data/webui/settings/autofill_page_test.ts
@@ -5,11 +5,11 @@ // clang-format off import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {DomIf, flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {AutofillManagerImpl, PasswordsSectionElement, PaymentsManagerImpl, SettingsAutofillSectionElement, SettingsPaymentsSectionElement} from 'chrome://settings/lazy_load.js'; +import {AutofillManagerImpl, PasswordsSectionElement, PasswordListItemElement, PaymentsManagerImpl, SettingsAutofillSectionElement, SettingsPaymentsSectionElement} from 'chrome://settings/lazy_load.js'; import {buildRouter, Router, routes} from 'chrome://settings/settings.js'; import {CrSettingsPrefs, OpenWindowProxyImpl, PasswordManagerImpl, SettingsAutofillPageElement, SettingsPluralStringProxyImpl, SettingsPrefsElement} from 'chrome://settings/settings.js'; import {SettingsRoutes} from 'chrome://settings/settings_routes.js'; -import {assertDeepEquals, assertEquals, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js'; +import {assertDeepEquals, assertEquals, assertFalse, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js'; import {TestPluralStringProxy} from 'chrome://webui-test/test_plural_string_proxy.js'; import {flushTasks} from 'chrome://webui-test/test_util.js'; @@ -303,6 +303,10 @@ profile: { password_manager_leak_detection: {}, }, + credentials_enable_service: { + enforcement: chrome.settingsPrivate.Enforcement.ENFORCED, + value: false, + }, }; document.body.innerHTML = ''; document.body.appendChild(autofillPage); @@ -362,24 +366,95 @@ '#passwordManagerSubLabel')!.innerText.trim()); }); - test('Credential urls is used in the subpage header', async function() { - const SHOWN_URL = 'www.google.com'; - loadTimeData.overrideValues({enablePasswordViewPage: true}); - Router.resetInstanceForTesting(buildRouter()); - routes.PASSWORD_VIEW = - (Router.getInstance().getRoutes() as SettingsRoutes).PASSWORD_VIEW; - const autofillSection = createAutofillPageSection(); + ['passwords-section', 'password-view'].forEach( + testCase => test( + `After "password-view-page-requested" event from ${ + testCase}, password view page is visible after auth`, + async function() { + const SHOWN_URL = 'www.google.com'; + loadTimeData.overrideValues({enablePasswordViewPage: true}); + Router.resetInstanceForTesting(buildRouter()); + routes.PASSWORD_VIEW = + (Router.getInstance().getRoutes() as SettingsRoutes) + .PASSWORD_VIEW; + const autofillSection = createAutofillPageSection(); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW); - await flushTasks(); - const subpage = - autofillSection.shadowRoot!.querySelector('settings-subpage'); + const entry = createPasswordEntry({url: SHOWN_URL, id: 1}); - autofillSection.credential = createPasswordEntry({url: SHOWN_URL, id: 1}); - flush(); + if (testCase === 'passwords-section') { + autofillSection.shadowRoot! + .querySelector<DomIf>('dom-if[route-path="/passwords"]')!.if = + true; + } else { + autofillSection.shadowRoot! + .querySelector<DomIf>( + 'dom-if[route-path="/passwords/view"]')!.if = true; + } + await flushTasks(); + const dispatchingElement = + autofillSection.shadowRoot!.querySelector(testCase)!; + const eventDetail = document.createElement('password-list-item'); + eventDetail.entry = entry; - assertTrue(!!subpage); - assertEquals(`http://${SHOWN_URL}/login`, subpage.faviconSiteUrl); - assertEquals(SHOWN_URL, subpage.pageTitle); - }); + passwordManager.setRequestCredentialDetailsResponse(entry); + + dispatchingElement.dispatchEvent( + new CustomEvent('password-view-page-requested', { + bubbles: true, + composed: true, + detail: eventDetail, + })); + await flushTasks(); + + assertEquals( + routes.PASSWORD_VIEW, Router.getInstance().getCurrentRoute()); + assertDeepEquals(entry, autofillSection.credential); + + const subpage = + [...autofillSection.shadowRoot!.querySelectorAll( + 'settings-subpage')] + .find( + (element: HTMLElement) => + element.classList.contains('iron-selected')); + assertTrue(!!subpage); + assertEquals(`http://${SHOWN_URL}/login`, subpage.faviconSiteUrl!); + assertEquals(SHOWN_URL, subpage.pageTitle!); + })); + + test( + `After "password-view-page-requested" event with invalid id, + password main page is opened`, + async function() { + loadTimeData.overrideValues({enablePasswordViewPage: true}); + Router.resetInstanceForTesting(buildRouter()); + routes.PASSWORD_VIEW = + (Router.getInstance().getRoutes() as SettingsRoutes).PASSWORD_VIEW; + const autofillSection = createAutofillPageSection(); + + autofillSection.shadowRoot! + .querySelector<DomIf>('dom-if[route-path="/passwords/view"]')!.if = + true; + await flushTasks(); + Router.getInstance().setCurrentRoute( + routes.PASSWORD_VIEW, new URLSearchParams('id=123'), false); + await flushTasks(); + + // <if expr="is_chromeos"> + autofillSection.tokenRequestManager.resolve(); + await flushTasks(); + // </if> + + const eventDetail = {entry: {id: 123}} as unknown as + PasswordListItemElement; + autofillSection.shadowRoot!.querySelector('password-view')! + .dispatchEvent(new CustomEvent('password-view-page-requested', { + bubbles: true, + composed: true, + detail: eventDetail, + })); + await flushTasks(); + + assertEquals(routes.PASSWORDS, Router.getInstance().getCurrentRoute()); + assertFalse(!!autofillSection.credential); + }); });
diff --git a/chrome/test/data/webui/settings/password_edit_dialog_test.ts b/chrome/test/data/webui/settings/password_edit_dialog_test.ts index 36f1f70..510ccf6 100644 --- a/chrome/test/data/webui/settings/password_edit_dialog_test.ts +++ b/chrome/test/data/webui/settings/password_edit_dialog_test.ts
@@ -701,7 +701,10 @@ assertEquals(expectedParams.note, params.note); await dispatchedEvent.then((event) => { - assertEquals(43, event.detail); + assertEquals(43, event.detail.id); + assertEquals(expectedParams.username, event.detail.username); + assertEquals(expectedParams.password, event.detail.password); + assertEquals(expectedParams.note, event.detail.note); }); });
diff --git a/chrome/test/data/webui/settings/password_view_test.ts b/chrome/test/data/webui/settings/password_view_test.ts index 0f98766e..618e620 100644 --- a/chrome/test/data/webui/settings/password_view_test.ts +++ b/chrome/test/data/webui/settings/password_view_test.ts
@@ -65,6 +65,28 @@ let passwordManager: TestPasswordManagerProxy; + async function loadViewPage( + credential?: chrome.passwordsPrivate.PasswordUiEntry, id?: number) { + let requestedId; + if (id !== undefined) { + requestedId = id; + } else if (!!credential && credential.id !== undefined) { + requestedId = id; + } else { + requestedId = -1; + } + const params = new URLSearchParams({id: String(requestedId)}); + Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); + const page = document.createElement('password-view'); + if (credential) { + page.credential = credential; + } + document.body.appendChild(page); + + await flushTasks(); + return page; + } + setup(function() { loadTimeData.overrideValues( {enablePasswordViewPage: true, enablePasswordNotes: false}); @@ -84,22 +106,15 @@ loadTimeData.overrideValues( {enablePasswordNotes: notesEnabled}); - const passwordList = [ - createPasswordEntry({ - url: SITE, - username: USERNAME, - id: ID, - note: NOTE, - }), - ]; + const passwordEntry = createPasswordEntry({ + url: SITE, + username: USERNAME, + id: ID, + note: NOTE, + }); - passwordManager.data.passwords = passwordList; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); + const page = await loadViewPage(passwordEntry); - await flushTasks(); assertVisibilityOfPageElements(page, /*visibility=*/ true); if (notesEnabled) { assertEquals( @@ -113,29 +128,30 @@ })); [{ - id: 1, - storedIn: chrome.passwordsPrivate.PasswordStoreSet.ACCOUNT, - username: USERNAME, + requestedId: 1, + expectedStoredIn: chrome.passwordsPrivate.PasswordStoreSet.ACCOUNT, + expectedUsername: USERNAME, }, { - id: 2, - storedIn: chrome.passwordsPrivate.PasswordStoreSet.DEVICE, - username: USERNAME, + requestedId: 2, + expectedStoredIn: chrome.passwordsPrivate.PasswordStoreSet.DEVICE, + expectedUsername: USERNAME, }, { - id: 3, - storedIn: chrome.passwordsPrivate.PasswordStoreSet.DEVICE_AND_ACCOUNT, - username: USERNAME2, + requestedId: 3, + expectedStoredIn: + chrome.passwordsPrivate.PasswordStoreSet.DEVICE_AND_ACCOUNT, + expectedUsername: USERNAME2, }, { - id: 4, - storedIn: chrome.passwordsPrivate.PasswordStoreSet.ACCOUNT, - username: USERNAME2, + requestedId: 4, + expectedStoredIn: chrome.passwordsPrivate.PasswordStoreSet.ACCOUNT, + expectedUsername: USERNAME2, }, ] .forEach( item => test( - `IDs match to correct credentials for id: ${item.id}`, + `IDs match to correct credentials for id: ${item.requestedId}`, async function() { const passwordList = [ // entry in the account store @@ -168,87 +184,49 @@ }), ]; - passwordManager.data.passwords = passwordList; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams(); - params.set('id', String(item.id)); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); + const requestedCredential = passwordList.find( + passwordUiEntry => passwordUiEntry.id === item.requestedId); + const page = await loadViewPage(requestedCredential!); - await flushTasks(); assertVisibilityOfPageElements(page, /*visibility=*/ true); - assertEquals(item.id, page.credential!.id); - assertEquals(item.storedIn, page.credential!.storedIn); - assertEquals(item.username, page.credential!.username); + assertEquals(item.requestedId, page.credential!.id); + assertEquals(item.expectedStoredIn, page.credential!.storedIn); + assertEquals(item.expectedUsername, page.credential!.username); assertEquals(SITE, page.credential!.urls.shown); })); test('Empty note shows placeholder text', async function() { loadTimeData.overrideValues({enablePasswordNotes: true}); - const passwordList = [ - createPasswordEntry({url: SITE, username: USERNAME, id: ID}), - ]; + const passwordEntry = + createPasswordEntry({url: SITE, username: USERNAME, id: ID}); - passwordManager.data.passwords = passwordList; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - - await flushTasks(); + const page = await loadViewPage(passwordEntry); assertEquals( 'No note added', page.shadowRoot!.querySelector('settings-textarea')!.value); }); - test('Invalid IDs routes to passwords page', async function() { - const passwordList = [ - createPasswordEntry({url: SITE, username: USERNAME, id: ID}), - ]; - - passwordManager.data.passwords = passwordList; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: 'invalid'}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - - await flushTasks(); - assertVisibilityOfPageElements(page, /*visibility=*/ false); - - assertEquals(routes.PASSWORDS, Router.getInstance().getCurrentRoute()); - }); - test('Federated credential layout', async function() { - const passwordList = [ - createPasswordEntry({ - federationText: 'with chromium.org', - url: SITE, - username: USERNAME, - id: ID, - }), - ]; - passwordManager.data.passwords = passwordList; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); + const passwordEntry = createPasswordEntry({ + federationText: 'with chromium.org', + url: SITE, + username: USERNAME, + id: ID, + }); - await flushTasks(); + const page = await loadViewPage(passwordEntry); + assertVisibilityOfFederatedCredentialElements(page); }); test('Clicking show password button shows / hides it', async function() { - const passwordList = [ - createPasswordEntry({url: SITE, username: USERNAME, id: ID}), - ]; + const passwordEntry = + createPasswordEntry({url: SITE, username: USERNAME, id: ID}); + passwordEntry.password = PASSWORD; - passwordManager.data.passwords = passwordList; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - await flushTasks(); + const page = await loadViewPage(passwordEntry); + const passwordInput = page.shadowRoot!.querySelector<HTMLInputElement>('#passwordInput'); const showButton = page.shadowRoot!.querySelector<HTMLButtonElement>( @@ -256,91 +234,27 @@ assertTrue(!!passwordInput); assertTrue(!!showButton); assertEquals('password', passwordInput.type); - assertEquals(' '.repeat(10), passwordInput.value); + assertEquals(PASSWORD, passwordInput.value); assertTrue(showButton.classList.contains('icon-visibility')); + // hide the password showButton.click(); + flush(); - // this will fail because setPlaintextPassword is not called. - await passwordManager.whenCalled('requestPlaintextPassword'); - await flushTasks(); - assertEquals('password', passwordInput.type); - assertEquals(' '.repeat(10), passwordInput.value); - assertTrue(showButton.classList.contains('icon-visibility')); - - passwordManager.setPlaintextPassword(PASSWORD); - // show the password - showButton.click(); - - const {id, reason} = - await passwordManager.whenCalled('requestPlaintextPassword'); - await flushTasks(); - assertEquals(ID, id); - assertEquals(chrome.passwordsPrivate.PlaintextReason.VIEW, reason); assertEquals('text', passwordInput.type); assertEquals(PASSWORD, passwordInput.value); assertTrue(showButton.classList.contains('icon-visibility-off')); - // hide the password by re-clicking + // hide the password showButton.click(); flush(); + assertEquals('password', passwordInput.type); - assertEquals(' '.repeat(10), passwordInput.value); + assertEquals(PASSWORD, passwordInput.value); assertTrue(showButton.classList.contains('icon-visibility')); }); test( - 'When saved passwords change credential is still shown', - async function() { - const passwordEntry = - createPasswordEntry({url: SITE, username: USERNAME, id: ID}); - - passwordManager.data.passwords = [passwordEntry]; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - await flushTasks(); - assertTrue(!!page.credential); - assertEquals(SITE, page.credential.urls.shown); - assertEquals(USERNAME, page.credential.username); - - passwordManager.lastCallback.addSavedPasswordListChangedListener! - ([passwordEntry].concat([ - createPasswordEntry({url: 'site2.com', username: 'user2', id: 1}), - ])); - - await flushTasks(); - assertTrue(!!page.credential); - assertEquals(SITE, page.credential.urls.shown); - assertEquals(USERNAME, page.credential.username); - assertEquals(ID, page.credential.id); - }); - - test( - 'When saved passwords change and credential is removed, page is empty', - async function() { - const passwordList = [ - createPasswordEntry({url: SITE, username: USERNAME, id: ID}), - ]; - - passwordManager.setPlaintextPassword(PASSWORD); - passwordManager.data.passwords = passwordList; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - - await flushTasks(); - assertVisibilityOfPageElements(page, /*visibility=*/ true); - - passwordManager.lastCallback.addSavedPasswordListChangedListener!([]); - - await flushTasks(); - assertVisibilityOfPageElements(page, /*visibility=*/ false); - }); - - test( 'When edit button is tapped, the edit dialog is open with credential. ' + 'When the username is changed, view page gets updated', async function() { @@ -348,23 +262,14 @@ const NEW_ID = ID + 1; const entry = createPasswordEntry({url: SITE, username: USERNAME, id: ID}); + entry.password = PASSWORD; - passwordManager.setPlaintextPassword(PASSWORD); - passwordManager.data.passwords = [entry]; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - - await flushTasks(); + const page = await loadViewPage(entry); page.shadowRoot!.querySelector<HTMLButtonElement>( '#editButton')!.click(); flush(); - await passwordManager.whenCalled('requestPlaintextPassword'); - await flushTasks(); - const editDialog = page.shadowRoot!.querySelector('password-edit-dialog'); assertTrue(!!editDialog); @@ -379,11 +284,6 @@ editDialog.$.actionButton.click(); await flushTasks(); - entry.username = NEW_USERNAME; - entry.id = NEW_ID; - passwordManager.lastCallback.addSavedPasswordListChangedListener! - ([entry]); - assertFalse(isVisible(editDialog)); assertEquals(NEW_USERNAME, page.credential!.username); @@ -401,14 +301,7 @@ const entry = createPasswordEntry( {url: SITE, username: USERNAME, id: ID, inAccountStore: false}); - passwordManager.setPlaintextPassword(PASSWORD); - passwordManager.data.passwords = [entry]; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - - await flushTasks(); + const page = await loadViewPage(entry); page.shadowRoot!.querySelector<HTMLButtonElement>( '#deleteButton')!.click(); @@ -428,23 +321,17 @@ 'When delete button is clicked for a password on device and account, ' + 'remove dialog is opened', async function() { - passwordManager.setPlaintextPassword(PASSWORD); - passwordManager.data.passwords = [ - createPasswordEntry({ - url: SITE, - username: USERNAME, - id: ID, - inAccountStore: true, - inProfileStore: true, - }), - ]; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({ - id: '0', + const entry = createPasswordEntry({ + url: SITE, + username: USERNAME, + id: ID, + inAccountStore: true, + inProfileStore: true, }); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - await flushTasks(); + entry.password = PASSWORD; + entry.note = NOTE; + + const page = await loadViewPage(entry); page.shadowRoot!.querySelector<HTMLButtonElement>( '#deleteButton')!.click(); @@ -452,15 +339,7 @@ const dialog = page.shadowRoot!.querySelector('password-remove-dialog'); assertTrue(!!dialog); - assertDeepEquals( - createPasswordEntry({ - url: SITE, - username: USERNAME, - id: ID, - inAccountStore: true, - inProfileStore: true, - }), - dialog.duplicatedPassword); + assertDeepEquals(entry, dialog.duplicatedPassword); // click delete on the dialog. dialog.$.removeButton.click(); @@ -481,24 +360,44 @@ }); test('Copy password button shows the copy toast', async function() { - const passwordList = [ - createPasswordEntry({url: SITE, username: USERNAME, id: ID}), - ]; + const passwordEntry = + createPasswordEntry({url: SITE, username: USERNAME, id: ID}); - passwordManager.setPlaintextPassword(PASSWORD); - passwordManager.data.passwords = passwordList; - const page = document.createElement('password-view'); - document.body.appendChild(page); - const params = new URLSearchParams({id: String(ID)}); - Router.getInstance().navigateTo(routes.PASSWORD_VIEW, params); - await flushTasks(); + const page = await loadViewPage(passwordEntry); const copyButton = page.shadowRoot!.querySelector<HTMLButtonElement>( '#copyPasswordButton')!; assertFalse(page.$.toast.open); + + passwordManager.setPlaintextPassword(PASSWORD); copyButton.click(); await passwordManager.whenCalled('requestPlaintextPassword'); await flushTasks(); assertTrue(page.$.toast.open); }); + + test( + 'When visibility state is hidden on page load, ' + + 'credential is not requested until the page becomes visible', + async function() { + let eventCount = 0; + const eventHandler = (_event: any) => { + eventCount += 1; + }; + document.addEventListener('password-view-page-requested', eventHandler); + Object.defineProperty( + document, 'visibilityState', {value: 'hidden', writable: true}); + document.dispatchEvent(new Event('visibilitychange')); + + const page = await loadViewPage(); + + assertEquals(0, eventCount); + assertFalse(!!page.credential); + + Object.defineProperty( + document, 'visibilityState', {value: 'visible', writable: true}); + document.dispatchEvent(new Event('visibilitychange')); + await flushTasks(); + assertEquals(1, eventCount); + }); });
diff --git a/chrome/test/data/webui/settings/passwords_section_test.ts b/chrome/test/data/webui/settings/passwords_section_test.ts index 5c8d683..6ffe17d 100644 --- a/chrome/test/data/webui/settings/passwords_section_test.ts +++ b/chrome/test/data/webui/settings/passwords_section_test.ts
@@ -815,7 +815,7 @@ '#showPasswordButton')!.classList.contains('icon-visibility')); }); - test('clickingTheRowOpensSubpageWhenViewPageEnabled', async function() { + test('clickingTheRowDispatchesEventWhenViewPageEnabled', async function() { loadTimeData.overrideValues({enablePasswordViewPage: true}); Router.resetInstanceForTesting(buildRouter()); routes.PASSWORD_VIEW = @@ -834,15 +834,13 @@ assertFalse(isVisible(passwordListItem.$.moreActionsButton)); const subpageButton = passwordListItem.$.seePasswordDetails; assertTrue(isVisible(subpageButton)); + passwordManager.setRequestCredentialDetailsResponse(item); + const PasswordViewPageRequestedEvent = + eventToPromise('password-view-page-requested', passwordListItem); subpageButton.click(); - await flushTasks(); - - const router = Router.getInstance(); - assertEquals(routes.PASSWORD_VIEW, router.getCurrentRoute()); - const expectedParams = new URLSearchParams(); - expectedParams.set('username', USERNAME); - expectedParams.set('site', URL); - assertDeepEquals(expectedParams, router.getQueryParameters()); + await PasswordViewPageRequestedEvent.then((event) => { + assertDeepEquals(passwordListItem, event.detail); + }); }); // Tests that pressing 'Edit password' sets the corresponding password.
diff --git a/chrome/test/data/webui/settings/test_password_manager_proxy.ts b/chrome/test/data/webui/settings/test_password_manager_proxy.ts index 4691221..6d4efcf 100644 --- a/chrome/test/data/webui/settings/test_password_manager_proxy.ts +++ b/chrome/test/data/webui/settings/test_password_manager_proxy.ts
@@ -92,6 +92,8 @@ private getUrlCollectionResponse_: chrome.passwordsPrivate.UrlCollection| null = null; private changeSavedPasswordResponse_: number|null = null; + private requestCredentialDetailsResponse_: + chrome.passwordsPrivate.PasswordUiEntry|null = null; constructor() { super([ @@ -116,6 +118,7 @@ 'removeSavedPassword', 'requestExportProgressStatus', 'requestPlaintextPassword', + 'requestCredentialDetails', 'startAutomatedPasswordChange', 'startBulkPasswordCheck', 'stopBulkPasswordCheck', @@ -208,6 +211,19 @@ this.plaintextPassword_ = plaintextPassword; } + requestCredentialDetails(id: number) { + this.methodCalled('requestCredentialDetails', {id}); + if (!this.requestCredentialDetailsResponse_) { + return Promise.reject(new Error('Could not obtain credential details')); + } + return Promise.resolve(this.requestCredentialDetailsResponse_); + } + + setRequestCredentialDetailsResponse( + credential: chrome.passwordsPrivate.PasswordUiEntry) { + this.requestCredentialDetailsResponse_ = credential; + } + // Sets the return value of isOptedInForAccountStorage calls and notifies // the last added listener. setIsOptedInForAccountStorageAndNotify(optIn: boolean) {
diff --git a/chromeos/ash/components/network/BUILD.gn b/chromeos/ash/components/network/BUILD.gn index 8c73ffa..970e315 100644 --- a/chromeos/ash/components/network/BUILD.gn +++ b/chromeos/ash/components/network/BUILD.gn
@@ -25,6 +25,7 @@ "//chromeos/dbus/common", "//chromeos/dbus/permission_broker", "//chromeos/login/login_state", + "//chromeos/services/hotspot_config/public/mojom", "//chromeos/services/network_config/public/mojom", "//components/account_id", "//components/device_event_log", @@ -94,6 +95,8 @@ "hermes_metrics_util.h", "hidden_network_handler.cc", "hidden_network_handler.h", + "hotspot_state_handler.cc", + "hotspot_state_handler.h", "managed_cellular_pref_handler.cc", "managed_cellular_pref_handler.h", "managed_network_configuration_handler.cc", @@ -251,6 +254,7 @@ "//chromeos/dbus:test_support", "//chromeos/dbus/permission_broker", "//chromeos/login/login_state", + "//chromeos/services/hotspot_config/public/mojom", "//chromeos/services/network_config:in_process_instance", "//chromeos/services/network_config/public/cpp:test_support", "//components/onc", @@ -286,6 +290,7 @@ "firewall_hole_unittest.cc", "geolocation_handler_unittest.cc", "hidden_network_handler_unittest.cc", + "hotspot_state_handler_unittest.cc", "managed_cellular_pref_handler_unittest.cc", "managed_network_configuration_handler_unittest.cc", "network_cert_loader_unittest.cc",
diff --git a/chromeos/ash/components/network/DEPS b/chromeos/ash/components/network/DEPS index a972410..d00cfa4 100644 --- a/chromeos/ash/components/network/DEPS +++ b/chromeos/ash/components/network/DEPS
@@ -10,6 +10,7 @@ "+chromeos/dbus", "+chromeos/components/onc", "+chromeos/login/login_state", + "+chromeos/services/hotspot_config/public", "+chromeos/services/network_config/public", "+components/account_id", "+components/certificate_matching",
diff --git a/chromeos/ash/components/network/hotspot_state_handler.cc b/chromeos/ash/components/network/hotspot_state_handler.cc new file mode 100644 index 0000000..5bd3f29 --- /dev/null +++ b/chromeos/ash/components/network/hotspot_state_handler.cc
@@ -0,0 +1,189 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/ash/components/network/hotspot_state_handler.h" + +#include "base/values.h" +#include "chromeos/ash/components/dbus/shill/shill_manager_client.h" +#include "chromeos/ash/components/network/network_event_log.h" +#include "third_party/cros_system_api/dbus/shill/dbus-constants.h" + +namespace ash { + +namespace hotspot_config { +namespace mojom = ::chromeos::hotspot_config::mojom; +} // namespace hotspot_config + +namespace { + +hotspot_config::mojom::HotspotState ShillTetheringStateToMojomState( + const std::string& shill_state) { + using HotspotState = hotspot_config::mojom::HotspotState; + + if (shill_state == shill::kTetheringStateActive) { + return HotspotState::kEnabled; + } + + if (shill_state == shill::kTetheringStateIdle) { + return HotspotState::kDisabled; + } + + if (shill_state == shill::kTetheringStateStarting) { + return HotspotState::kEnabling; + } + + if (shill_state == shill::kTetheringStateStopping) { + return HotspotState::kDisabling; + } + + NOTREACHED() << "Unexpeted shill tethering state: " << shill_state; + return HotspotState::kDisabled; +} + +size_t GetActiveClientCount(const base::Value& status) { + const base::Value* active_clients = + status.FindListKey(shill::kTetheringStatusClientsProperty); + if (!active_clients) { + NET_LOG(ERROR) << shill::kTetheringStatusClientsProperty << " not found in " + << shill::kTetheringStatusProperty; + return 0; + } + return active_clients->GetList().size(); +} + +} // namespace + +HotspotStateHandler::HotspotStateHandler() = default; + +HotspotStateHandler::~HotspotStateHandler() { + if (ShillManagerClient::Get()) { + ShillManagerClient::Get()->RemovePropertyChangedObserver(this); + } +} + +void HotspotStateHandler::Init() { + // Add as an observer here so that new hotspot state updated after this call + // are recognized. + ShillManagerClient::Get()->AddPropertyChangedObserver(this); + ShillManagerClient::Get()->GetProperties( + base::BindOnce(&HotspotStateHandler::OnManagerProperties, + weak_ptr_factory_.GetWeakPtr())); +} + +void HotspotStateHandler::AddObserver(Observer* observer) { + observer_list_.AddObserver(observer); +} + +void HotspotStateHandler::RemoveObserver(Observer* observer) { + observer_list_.RemoveObserver(observer); +} + +bool HotspotStateHandler::HasObserver(Observer* observer) const { + return observer_list_.HasObserver(observer); +} + +const hotspot_config::mojom::HotspotState& +HotspotStateHandler::GetHotspotState() const { + return hotspot_state_; +} + +size_t HotspotStateHandler::GetHotspotActiveClientCount() const { + return active_client_count_; +} + +void HotspotStateHandler::OnPropertyChanged(const std::string& key, + const base::Value& value) { + if (key == shill::kTetheringStatusProperty) + UpdateHotspotStatus(value); +} + +void HotspotStateHandler::OnManagerProperties( + absl::optional<base::Value> properties) { + if (!properties) { + NET_LOG(ERROR) << "HotspotStateHandler: Failed to get manager properties."; + return; + } + + const base::Value* status = + properties->FindDictKey(shill::kTetheringStatusProperty); + if (!status) { + NET_LOG(EVENT) << "HotspotStateHandler: No dict value for: " + << shill::kTetheringStatusProperty; + return; + } + UpdateHotspotStatus(*status); +} + +void HotspotStateHandler::UpdateHotspotStatus(const base::Value& status) { + const std::string* state = + status.FindStringKey(shill::kTetheringStatusStateProperty); + if (!state) { + NET_LOG(EVENT) << "HotspotStateHandler: No string value for: " + << shill::kTetheringStatusStateProperty << " in " + << shill::kTetheringStatusProperty; + return; + } + + if (*state == shill::kTetheringStateFailure) { + // Fall back to either idle or active state if the current state is enabling + // or disabling. + FallbackStateOnFailure(); + + const std::string* error = + status.FindStringKey(shill::kTetheringStatusErrorProperty); + if (!error) { + NET_LOG(ERROR) + << "HotspotStateHandler: Failed to get hotspot status error."; + } else { + NET_LOG(ERROR) << "HotspotStateHandler: Hotspot status error: " << *error; + } + NotifyHotspotStateFailed(error ? *error : std::string()); + return; + } + + hotspot_config::mojom::HotspotState mojom_state = + ShillTetheringStateToMojomState(*state); + if (mojom_state != hotspot_state_) { + hotspot_state_ = mojom_state; + NotifyHotspotStatusChanged(); + } + + if (mojom_state != hotspot_config::mojom::HotspotState::kEnabled) { + active_client_count_ = 0; + return; + } + size_t active_client_count = GetActiveClientCount(status); + if (active_client_count == active_client_count_) + return; + + active_client_count_ = active_client_count; + NotifyHotspotStatusChanged(); +} + +void HotspotStateHandler::FallbackStateOnFailure() { + using HotspotState = hotspot_config::mojom::HotspotState; + if (hotspot_state_ == HotspotState::kEnabled || + hotspot_state_ == HotspotState::kDisabled) { + return; + } + + if (hotspot_state_ == HotspotState::kEnabling) { + hotspot_state_ = HotspotState::kDisabled; + } else if (hotspot_state_ == HotspotState::kDisabling) { + hotspot_state_ = HotspotState::kEnabled; + } + NotifyHotspotStatusChanged(); +} + +void HotspotStateHandler::NotifyHotspotStatusChanged() { + for (auto& observer : observer_list_) + observer.OnHotspotStatusChanged(); +} + +void HotspotStateHandler::NotifyHotspotStateFailed(const std::string& error) { + for (auto& observer : observer_list_) + observer.OnHotspotStateFailed(error); +} + +} // namespace ash \ No newline at end of file
diff --git a/chromeos/ash/components/network/hotspot_state_handler.h b/chromeos/ash/components/network/hotspot_state_handler.h new file mode 100644 index 0000000..e53505a --- /dev/null +++ b/chromeos/ash/components/network/hotspot_state_handler.h
@@ -0,0 +1,85 @@ +// Copyright 2022 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 CHROMEOS_ASH_COMPONENTS_NETWORK_HOTSPOT_STATE_HANDLER_H_ +#define CHROMEOS_ASH_COMPONENTS_NETWORK_HOTSPOT_STATE_HANDLER_H_ + +#include <memory> + +#include "base/component_export.h" +#include "base/memory/weak_ptr.h" +#include "base/observer_list.h" +#include "chromeos/ash/components/dbus/shill/shill_property_changed_observer.h" +#include "chromeos/services/hotspot_config/public/mojom/cros_hotspot_config.mojom.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +namespace base { +class Value; +} // namespace base + +namespace ash { + +// This class caches hotspot related status and implements methods to get +// current state, active client count, capabilities and configure the hotspot +// configurations. +class COMPONENT_EXPORT(CHROMEOS_NETWORK) HotspotStateHandler + : public ShillPropertyChangedObserver { + public: + class Observer : public base::CheckedObserver { + public: + ~Observer() override = default; + + // Invoked when hotspot state or active client count is changed. + virtual void OnHotspotStatusChanged() = 0; + // Invoked when hotspot state is failed. + virtual void OnHotspotStateFailed(const std::string& error) = 0; + }; + + HotspotStateHandler(); + HotspotStateHandler(const HotspotStateHandler&) = delete; + HotspotStateHandler& operator=(const HotspotStateHandler&) = delete; + ~HotspotStateHandler() override; + + void Init(); + // Return the latest hotspot state + const chromeos::hotspot_config::mojom::HotspotState& GetHotspotState() const; + // Return the latest hotspot active client count + size_t GetHotspotActiveClientCount() const; + + void AddObserver(Observer* observer); + void RemoveObserver(Observer* observer); + bool HasObserver(Observer* observer) const; + + private: + // ShillPropertyChangedObserver overrides + void OnPropertyChanged(const std::string& key, + const base::Value& value) override; + + // Callback to handle the manager properties with hotspot related properties. + void OnManagerProperties(absl::optional<base::Value> properties); + + // Update the cached hotspot_state_ and active_client_count_ from hotspot + // status in Shill. + void UpdateHotspotStatus(const base::Value& status); + + // Fall back the hotspot state to idle or active when enable/disable hotspot + // operation is failed. + void FallbackStateOnFailure(); + + // Notify observers that hotspot state or active client count was changed. + void NotifyHotspotStatusChanged(); + + // Notify observers that hotspot state was failure. + void NotifyHotspotStateFailed(const std::string& error); + + chromeos::hotspot_config::mojom::HotspotState hotspot_state_ = + chromeos::hotspot_config::mojom::HotspotState::kDisabled; + size_t active_client_count_ = 0; + base::ObserverList<Observer> observer_list_; + base::WeakPtrFactory<HotspotStateHandler> weak_ptr_factory_{this}; +}; + +} // namespace ash + +#endif // CHROMEOS_ASH_COMPONENTS_NETWORK_HOTSPOT_STATE_HANDLER_H_
diff --git a/chromeos/ash/components/network/hotspot_state_handler_unittest.cc b/chromeos/ash/components/network/hotspot_state_handler_unittest.cc new file mode 100644 index 0000000..b26d2661 --- /dev/null +++ b/chromeos/ash/components/network/hotspot_state_handler_unittest.cc
@@ -0,0 +1,192 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/ash/components/network/hotspot_state_handler.h" + +#include "ash/constants/ash_features.h" +#include "base/test/scoped_feature_list.h" +#include "base/test/task_environment.h" +#include "base/values.h" +#include "chromeos/ash/components/dbus/shill/shill_clients.h" +#include "chromeos/ash/components/dbus/shill/shill_manager_client.h" +#include "chromeos/services/hotspot_config/public/mojom/cros_hotspot_config.mojom.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/cros_system_api/dbus/shill/dbus-constants.h" + +namespace ash { + +class TestObserver : public HotspotStateHandler::Observer { + public: + TestObserver() = default; + ~TestObserver() override = default; + + // HotspotStateHandler::Observer: + void OnHotspotStatusChanged() override { hotspot_status_changed_count_++; } + + void OnHotspotStateFailed(const std::string& error) override { + hotspot_state_failed_count_++; + last_hotspot_failed_error_ = error; + } + + size_t hotspot_status_changed_count() { + return hotspot_status_changed_count_; + } + size_t hotspot_state_failed_count() { return hotspot_state_failed_count_; } + + const std::string& last_hotspot_failed_error() { + return last_hotspot_failed_error_; + } + + private: + size_t hotspot_status_changed_count_ = 0u; + size_t hotspot_state_failed_count_ = 0u; + std::string last_hotspot_failed_error_; +}; + +class HotspotStateHandlerTest : public ::testing::Test { + public: + void SetUp() override { + feature_list_.InitAndEnableFeature(features::kHotspot); + shill_clients::InitializeFakes(); + base::RunLoop().RunUntilIdle(); + + if (hotspot_state_handler_ && + hotspot_state_handler_->HasObserver(&observer_)) { + hotspot_state_handler_->RemoveObserver(&observer_); + } + hotspot_state_handler_ = std::make_unique<HotspotStateHandler>(); + hotspot_state_handler_->AddObserver(&observer_); + hotspot_state_handler_->Init(); + } + + void TearDown() override { + hotspot_state_handler_->RemoveObserver(&observer_); + hotspot_state_handler_.reset(); + shill_clients::Shutdown(); + } + + protected: + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; + base::test::ScopedFeatureList feature_list_; + std::unique_ptr<HotspotStateHandler> hotspot_state_handler_; + TestObserver observer_; +}; + +TEST_F(HotspotStateHandlerTest, GetHotspotState) { + EXPECT_EQ(hotspot_state_handler_->GetHotspotState(), + chromeos::hotspot_config::mojom::HotspotState::kDisabled); + + // Update tethering status to active in Shill. + base::Value status_dict(base::Value::Type::DICTIONARY); + status_dict.GetDict().Set(shill::kTetheringStatusStateProperty, + base::Value(shill::kTetheringStateActive)); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(hotspot_state_handler_->GetHotspotState(), + chromeos::hotspot_config::mojom::HotspotState::kEnabled); + EXPECT_EQ(1u, observer_.hotspot_status_changed_count()); + EXPECT_EQ(0u, observer_.hotspot_state_failed_count()); + + // Update tethering status to idle in Shill. + status_dict.GetDict().Set(shill::kTetheringStatusStateProperty, + base::Value(shill::kTetheringStateIdle)); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(hotspot_state_handler_->GetHotspotState(), + chromeos::hotspot_config::mojom::HotspotState::kDisabled); + EXPECT_EQ(2u, observer_.hotspot_status_changed_count()); + EXPECT_EQ(0u, observer_.hotspot_state_failed_count()); + + // Simulate user starting tethering and failed. + status_dict.GetDict().Set(shill::kTetheringStatusStateProperty, + base::Value(shill::kTetheringStateStarting)); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + // Update tethering status to failure in Shill. + status_dict.GetDict().Set(shill::kTetheringStatusStateProperty, + base::Value(shill::kTetheringStateFailure)); + status_dict.GetDict().Set( + shill::kTetheringStatusErrorProperty, + base::Value(shill::kTetheringErrorUpstreamNotReady)); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(hotspot_state_handler_->GetHotspotState(), + chromeos::hotspot_config::mojom::HotspotState::kDisabled); + EXPECT_EQ(4u, observer_.hotspot_status_changed_count()); + EXPECT_EQ(1u, observer_.hotspot_state_failed_count()); + EXPECT_EQ(shill::kTetheringErrorUpstreamNotReady, + observer_.last_hotspot_failed_error()); + + // Verify the edge case where the state is failure but error is not provided. + status_dict.GetDict().Set(shill::kTetheringStatusStateProperty, + base::Value(shill::kTetheringStateStarting)); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + status_dict.GetDict().Set(shill::kTetheringStatusStateProperty, + base::Value(shill::kTetheringStateFailure)); + status_dict.GetDict().Remove(shill::kTetheringStatusErrorProperty); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(hotspot_state_handler_->GetHotspotState(), + chromeos::hotspot_config::mojom::HotspotState::kDisabled); + EXPECT_EQ(6u, observer_.hotspot_status_changed_count()); + EXPECT_EQ(2u, observer_.hotspot_state_failed_count()); + EXPECT_EQ(std::string(), observer_.last_hotspot_failed_error()); +} + +TEST_F(HotspotStateHandlerTest, GetHotspotActiveClientCount) { + EXPECT_EQ(0u, hotspot_state_handler_->GetHotspotActiveClientCount()); + + base::Value status_dict(base::Value::Type::DICTIONARY); + status_dict.GetDict().Set(shill::kTetheringStatusStateProperty, + base::Value(shill::kTetheringStateActive)); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(0u, hotspot_state_handler_->GetHotspotActiveClientCount()); + EXPECT_EQ(1u, observer_.hotspot_status_changed_count()); + + // Update tethering status with one active client. + base::Value active_clients_list(base::Value::Type::LIST); + base::Value client(base::Value::Type::DICTIONARY); + client.GetDict().Set(shill::kTetheringStatusClientIPv4Property, + base::Value("IPV4:001")); + client.GetDict().Set(shill::kTetheringStatusClientHostnameProperty, + base::Value("hostname1")); + client.GetDict().Set(shill::kTetheringStatusClientMACProperty, + base::Value("persist")); + active_clients_list.Append(std::move(client)); + status_dict.GetDict().Set(shill::kTetheringStatusClientsProperty, + std::move(active_clients_list)); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(1u, hotspot_state_handler_->GetHotspotActiveClientCount()); + EXPECT_EQ(2u, observer_.hotspot_status_changed_count()); + + status_dict.GetDict().Set(shill::kTetheringStatusStateProperty, + base::Value(shill::kTetheringStateIdle)); + status_dict.GetDict().Remove(shill::kTetheringStatusClientsProperty); + ShillManagerClient::Get()->GetTestInterface()->SetManagerProperty( + shill::kTetheringStatusProperty, status_dict); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(0u, hotspot_state_handler_->GetHotspotActiveClientCount()); + EXPECT_EQ(3u, observer_.hotspot_status_changed_count()); +} + +} // namespace ash
diff --git a/chromeos/ash/components/network/network_handler.cc b/chromeos/ash/components/network/network_handler.cc index 42a9148..4e20bf7 100644 --- a/chromeos/ash/components/network/network_handler.cc +++ b/chromeos/ash/components/network/network_handler.cc
@@ -17,6 +17,7 @@ #include "chromeos/ash/components/network/client_cert_resolver.h" #include "chromeos/ash/components/network/geolocation_handler.h" #include "chromeos/ash/components/network/hidden_network_handler.h" +#include "chromeos/ash/components/network/hotspot_state_handler.h" #include "chromeos/ash/components/network/managed_cellular_pref_handler.h" #include "chromeos/ash/components/network/managed_network_configuration_handler_impl.h" #include "chromeos/ash/components/network/metrics/connection_info_metrics_logger.h" @@ -67,6 +68,9 @@ if (base::FeatureList::IsEnabled(features::kHiddenNetworkMigration)) { hidden_network_handler_.reset(new HiddenNetworkHandler()); } + if (ash::features::IsHotspotEnabled()) { + hotspot_state_handler_ = std::make_unique<HotspotStateHandler>(); + } if (NetworkCertLoader::IsInitialized()) { network_cert_migrator_.reset(new NetworkCertMigrator()); client_cert_resolver_.reset(new ClientCertResolver()); @@ -126,6 +130,9 @@ hidden_network_handler_->Init(network_state_handler_.get(), network_configuration_handler_.get()); } + if (ash::features::IsHotspotEnabled()) { + hotspot_state_handler_->Init(); + } managed_cellular_pref_handler_->Init(network_state_handler_.get()); esim_policy_login_metrics_logger_->Init( network_state_handler_.get(), @@ -252,6 +259,10 @@ return hidden_network_handler_.get(); } +HotspotStateHandler* NetworkHandler::hotspot_state_handler() { + return hotspot_state_handler_.get(); +} + ManagedCellularPrefHandler* NetworkHandler::managed_cellular_pref_handler() { return managed_cellular_pref_handler_.get(); }
diff --git a/chromeos/ash/components/network/network_handler.h b/chromeos/ash/components/network/network_handler.h index 91cb21e..1b4865c8 100644 --- a/chromeos/ash/components/network/network_handler.h +++ b/chromeos/ash/components/network/network_handler.h
@@ -28,6 +28,7 @@ class ESimPolicyLoginMetricsLogger; class GeolocationHandler; class HiddenNetworkHandler; +class HotspotStateHandler; class ManagedCellularPrefHandler; class ManagedNetworkConfigurationHandler; class ManagedNetworkConfigurationHandlerImpl; @@ -105,6 +106,7 @@ CellularInhibitor* cellular_inhibitor(); CellularPolicyHandler* cellular_policy_handler(); HiddenNetworkHandler* hidden_network_handler(); + HotspotStateHandler* hotspot_state_handler(); NetworkStateHandler* network_state_handler(); NetworkDeviceHandler* network_device_handler(); NetworkProfileHandler* network_profile_handler(); @@ -149,6 +151,7 @@ std::unique_ptr<CellularMetricsLogger> cellular_metrics_logger_; std::unique_ptr<ConnectionInfoMetricsLogger> connection_info_metrics_logger_; std::unique_ptr<HiddenNetworkHandler> hidden_network_handler_; + std::unique_ptr<HotspotStateHandler> hotspot_state_handler_; std::unique_ptr<ESimPolicyLoginMetricsLogger> esim_policy_login_metrics_logger_; std::unique_ptr<VpnNetworkMetricsHelper> vpn_network_metrics_helper_;
diff --git a/chromeos/ash/components/string_matching/BUILD.gn b/chromeos/ash/components/string_matching/BUILD.gn index 0f33ed56..fb35373 100644 --- a/chromeos/ash/components/string_matching/BUILD.gn +++ b/chromeos/ash/components/string_matching/BUILD.gn
@@ -41,6 +41,7 @@ sources = [ "fuzzy_tokenized_string_match_unittest.cc", + "prefix_matcher_unittest.cc", "sequence_matcher_unittest.cc", "term_break_iterator_unittest.cc", "tokenized_string_char_iterator_unittest.cc",
diff --git a/chromeos/ash/components/string_matching/prefix_matcher.cc b/chromeos/ash/components/string_matching/prefix_matcher.cc index b3c5b22..f4bfc26 100644 --- a/chromeos/ash/components/string_matching/prefix_matcher.cc +++ b/chromeos/ash/components/string_matching/prefix_matcher.cc
@@ -10,24 +10,12 @@ namespace ash::string_matching { -namespace { - -// TODO(crbug.com/1336160): Add unit tests. -// // TODO(crbug.com/1336160): Paradigm shift 1: Reconsider the value of -// search-via-acronym, i.e. the logic around `kIsFrontOfWordMultiplier`. +// search-via-acronym, i.e. the logic around `kIsFrontOfTokenCharScore`. // // TODO(crbug.com/1336160): Paradigm shift 2: Consider scoring matching prefixes // of tokens with equal value, regardless of whether the token is a first token -// or non-first token. Currently, PrefixMatcher advances monotonically through -// the chars of the query. This means that a strong prefix match in a non-first -// text token will be missed if there is a weaker match in the first text token. -// Consider modifying algorithm such that these matches won't be missed. Example -// of current behavior: -// -// Query `abcde` and text `aff abcde`. The first `a` of query and text match, -// therefore the `a` of query is consumed and is never considered for rematch -// elsewhere. +// or non-first token. // // PrefixMatcher: // @@ -35,7 +23,7 @@ // the current char of the text to be matched. Different factors are chosen // based on where the match happens: // -// 1) `kIsPrefixMultiplier` is used when the matched portion is a prefix of both +// 1) `kIsPrefixCharScore` is used when the matched portion is a prefix of both // the query and the text, which implies that the matched chars are at the same // position in query and text. This is the most preferred case thus it has the // highest score. @@ -43,42 +31,36 @@ // When the current char of the query and the text do not match, the algorithm // moves to the next token in the text and tries to match from there. // -// 2) `kIsFrontOfWordMultiplier` will be used if the first char of the token +// 2) `kIsFrontOfTokenCharScore` will be used if the first char of the token // matches the current char of the query. // -// 3) Otherwise, the match is considered as weak, and `kIsWeakHitMultiplier` is +// 3) Otherwise, the match is considered as weak, and `kIsWeakHitCharScore` is // used. // // Examples: // // For text: 'Google Chrome'. // -// Query 'go' would yield kIsPrefixMultiplier for each char. -// Query 'gc' would use kIsPrefixMultiplier for 'g' and -// kIsFrontOfWordMultiplier for 'c'. -// Query 'ch' would use kIsFrontOfWordMultiplier for 'c' and -// kIsWeakHitMultiplier for 'h'. -const double kIsPrefixMultiplier = 1.0; -const double kIsFrontOfWordMultiplier = 0.8; -const double kIsWeakHitMultiplier = 0.6; +// Query 'go' would yield kIsPrefixCharScore for each char. +// Query 'gc' would use kIsPrefixCharScore for 'g' and +// kIsFrontOfTokenCharScore for 'c'. +// Query 'ch' would use kIsFrontOfTokenCharScore for 'c' and +// kIsWeakHitCharScore for 'h'. -// A relevance score that represents no match. -const double kNoMatchScore = 0.0; - -} // namespace +// kNoMatchScore is a relevance score that represents no match. PrefixMatcher::PrefixMatcher(const TokenizedString& query, const TokenizedString& text) : query_iter_(query), text_iter_(text), current_match_(gfx::Range::InvalidRange()), - current_relevance_(kNoMatchScore) {} + current_relevance_(constants::kNoMatchScore) {} bool PrefixMatcher::Match() { while (!RunMatch()) { // No match found and no more states to try. Bail out. if (states_.empty()) { - current_relevance_ = kNoMatchScore; + current_relevance_ = constants::kNoMatchScore; current_hits_.clear(); return false; } @@ -95,7 +77,7 @@ return true; } -PrefixMatcher::State::State() : relevance(kNoMatchScore) {} +PrefixMatcher::State::State() : relevance(constants::kNoMatchScore) {} PrefixMatcher::State::~State() = default; PrefixMatcher::State::State(double relevance, const gfx::Range& current_match, @@ -116,11 +98,11 @@ PushState(); if (query_iter_.GetArrayPos() == text_iter_.GetArrayPos()) - current_relevance_ += kIsPrefixMultiplier; + current_relevance_ += constants::kIsPrefixCharScore; else if (text_iter_.IsFirstCharOfToken()) - current_relevance_ += kIsFrontOfWordMultiplier; + current_relevance_ += constants::kIsFrontOfTokenCharScore; else - current_relevance_ += kIsWeakHitMultiplier; + current_relevance_ += constants::kIsWeakHitCharScore; if (!current_match_.IsValid()) current_match_.set_start(text_iter_.GetArrayPos()); @@ -131,18 +113,27 @@ text_iter_.NextChar(); have_match_already = true; } else { - // There are two possibilities here: - // 1. Need to AdvanceToNextTextToken() after having at least a match in - // current token (e.g. match the first character of the token) and the - // next character doesn't match. - // 2. Need to AdvanceToNextTextToken() because there is no match in - // current token. - // If there is no match in current token and we already have match (in - // previous tokens) before, a token is skipped and we consider this as no - // match. - if (text_iter_.IsFirstCharOfToken() && have_match_already) + // Character mismatch. Multiple possibilities: + + if (text_iter_.IsFirstCharOfToken()) { + if (have_match_already) { + // We have a mismatch in the first letter of the current token, and + // have observed matches in previous tokens. Consider this a no match. + return false; + } else { + // No matches have been found so far. Skip over current token. + AdvanceToNextTextToken(); + } + } else if (text_iter_.IsSecondCharOfToken()) { + // We have a match in the first letter of the current token, and the + // next character doesn't match. In this case we can + // AdvanceToNextTextToken(). + AdvanceToNextTextToken(); + } else { + // Mismatch is in the third or further char of the text token. Consider + // this a no match. return false; - AdvanceToNextTextToken(); + } } }
diff --git a/chromeos/ash/components/string_matching/prefix_matcher.h b/chromeos/ash/components/string_matching/prefix_matcher.h index 9311147e..9139055 100644 --- a/chromeos/ash/components/string_matching/prefix_matcher.h +++ b/chromeos/ash/components/string_matching/prefix_matcher.h
@@ -10,6 +10,17 @@ namespace ash::string_matching { +// These are described in more detail in the .cc file. +namespace constants { + +constexpr double kIsPrefixCharScore = 1.0; +constexpr double kIsFrontOfTokenCharScore = 0.8; +constexpr double kIsWeakHitCharScore = 0.6; + +constexpr double kNoMatchScore = 0.0; + +} // namespace constants + // PrefixMatcher matches the chars of a given query as prefix of tokens in // a given text or as prefix of the acronyms of those text tokens. class PrefixMatcher {
diff --git a/chromeos/ash/components/string_matching/prefix_matcher_unittest.cc b/chromeos/ash/components/string_matching/prefix_matcher_unittest.cc new file mode 100644 index 0000000..766226451 --- /dev/null +++ b/chromeos/ash/components/string_matching/prefix_matcher_unittest.cc
@@ -0,0 +1,140 @@ +// Copyright (c) 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/ash/components/string_matching/prefix_matcher.h" + +#include "chromeos/ash/components/string_matching/tokenized_string.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace ash::string_matching { + +namespace { + +using constants::kIsFrontOfTokenCharScore; +using constants::kIsPrefixCharScore; +using constants::kIsWeakHitCharScore; +using constants::kNoMatchScore; + +constexpr double kAbsError = 1e-5; + +} // namespace + +class PrefixMatcherTest : public testing::Test {}; + +// Note on expected score calculations: +// +// When a query successfully matches to a text, each letter of the query +// contributes some amount towards a final total. The expected score in +// each test is then the sum over all of the contributions of the individual +// query letters. This is described in more detail in prefix_matcher.cc. +// +// When a query does not successfully match to a text, the overall expected +// score is `kNoMatchScore`. + +TEST_F(PrefixMatcherTest, ExactMatch) { + TokenizedString query(u"abc def"); + TokenizedString text(u"abc def"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kIsPrefixCharScore * 6; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +TEST_F(PrefixMatcherTest, ExactPrefixMatch) { + TokenizedString query(u"abc def"); + TokenizedString text(u"abc defgh ijklm"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kIsPrefixCharScore * 6; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +TEST_F(PrefixMatcherTest, ExactPrefixMatchFirstToken) { + TokenizedString query(u"ab"); + TokenizedString text(u"abc def"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kIsPrefixCharScore * 2; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +TEST_F(PrefixMatcherTest, ExactPrefixMatchNonFirstToken) { + TokenizedString query(u"de"); + TokenizedString text(u"abc def"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kIsFrontOfTokenCharScore + kIsWeakHitCharScore; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +TEST_F(PrefixMatcherTest, AcronymMatchConsecutiveTokensWithFirstTokenMatch) { + TokenizedString query(u"abc"); + TokenizedString text(u"axx bxx cxx dxx exx"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kIsPrefixCharScore + (kIsFrontOfTokenCharScore * 2); + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +TEST_F(PrefixMatcherTest, AcronymMatchConsecutiveTokensWithNonFirstTokenMatch) { + TokenizedString query(u"bcd"); + TokenizedString text(u"axx bxx cxx dxx exx"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kIsFrontOfTokenCharScore * 3; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +TEST_F(PrefixMatcherTest, AcronymMatchNonConsecutiveTokens) { + TokenizedString query(u"acd"); + TokenizedString text(u"axx bxx cxx dxx exx"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kNoMatchScore; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +// TODO(crbug.com/1336160): Fully separate acronym matching from prefix +// matching. +TEST_F(PrefixMatcherTest, MixedAcronymAndPrefixMatching) { + TokenizedString query(u"adefg"); + TokenizedString text(u"abc def ghi"); + + PrefixMatcher pm(query, text); + pm.Match(); + // Individual character's score contributions in order of matched letters (a, + // d, e, f, g). + double expected_score = kIsPrefixCharScore + kIsFrontOfTokenCharScore + + (kIsWeakHitCharScore * 2) + kIsFrontOfTokenCharScore; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +TEST_F(PrefixMatcherTest, FinalPartialTokenConsideredMatch) { + TokenizedString query(u"abc de"); + TokenizedString text(u"abc def"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kIsPrefixCharScore * 5; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +TEST_F(PrefixMatcherTest, NonFinalPartialTokenConsideredNonMatch) { + TokenizedString query(u"abce"); + TokenizedString text(u"a bcd e"); + + PrefixMatcher pm(query, text); + pm.Match(); + double expected_score = kNoMatchScore; + EXPECT_NEAR(pm.relevance(), expected_score, kAbsError); +} + +} // namespace ash::string_matching
diff --git a/chromeos/ash/components/string_matching/tokenized_string_char_iterator.cc b/chromeos/ash/components/string_matching/tokenized_string_char_iterator.cc index 31746191..84efbfa7 100644 --- a/chromeos/ash/components/string_matching/tokenized_string_char_iterator.cc +++ b/chromeos/ash/components/string_matching/tokenized_string_char_iterator.cc
@@ -61,6 +61,10 @@ return current_token_iter_ && current_token_iter_->char_offset() == 0; } +bool TokenizedStringCharIterator::IsSecondCharOfToken() const { + return current_token_iter_ && current_token_iter_->char_offset() == 1; +} + TokenizedStringCharIterator::State TokenizedStringCharIterator::GetState() const { return State(current_token_,
diff --git a/chromeos/ash/components/string_matching/tokenized_string_char_iterator.h b/chromeos/ash/components/string_matching/tokenized_string_char_iterator.h index 20322304..34dae42 100644 --- a/chromeos/ash/components/string_matching/tokenized_string_char_iterator.h +++ b/chromeos/ash/components/string_matching/tokenized_string_char_iterator.h
@@ -58,6 +58,9 @@ // Returns true if the current char is the first char of the current token. bool IsFirstCharOfToken() const; + // Returns true if the current char is the second char of the current token. + bool IsSecondCharOfToken() const; + // Helpers to get and restore the iterator's state. State GetState() const; void SetState(const State& state);
diff --git a/chromeos/ash/components/string_matching/tokenized_string_match_unittest.cc b/chromeos/ash/components/string_matching/tokenized_string_match_unittest.cc index 8ee05a80..c3dba20 100644 --- a/chromeos/ash/components/string_matching/tokenized_string_match_unittest.cc +++ b/chromeos/ash/components/string_matching/tokenized_string_match_unittest.cc
@@ -66,7 +66,6 @@ {"John Doe", "jdoe", "[J]ohn [Doe]"}, {"John Doe", "johnd", "[John D]oe"}, {"Secure Shell", "she", "Secure [She]ll"}, - {"Simple Secure Shell", "sish", "[Si]mple Secure [Sh]ell"}, {"Netflix", "flix", "Net[flix]"}, };
diff --git a/chromeos/ash/services/assistant/assistant_settings_impl.cc b/chromeos/ash/services/assistant/assistant_settings_impl.cc index 0161c6d7..1872ea2 100644 --- a/chromeos/ash/services/assistant/assistant_settings_impl.cc +++ b/chromeos/ash/services/assistant/assistant_settings_impl.cc
@@ -19,14 +19,6 @@ namespace ash::assistant { -// TODO(https://crbug.com/1164001): remove after migrating to ash. -namespace { -using ::chromeos::assistant::ActivityControlSettingsUiSelector; -using ::chromeos::assistant::ConsentFlowUiSelector; -using ::chromeos::assistant::SettingsUi; -using ::chromeos::assistant::SettingsUiSelector; -} // namespace - AssistantSettingsImpl::AssistantSettingsImpl(ServiceContext* context) : context_(context) {}
diff --git a/chromeos/ash/services/assistant/public/proto/about_me_settings_ui.proto b/chromeos/ash/services/assistant/public/proto/about_me_settings_ui.proto index daffec3..edd4af1 100644 --- a/chromeos/ash/services/assistant/public/proto/about_me_settings_ui.proto +++ b/chromeos/ash/services/assistant/public/proto/about_me_settings_ui.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; message AboutMeSettingsUi { // Nickname and its pronunciation. These fields would be empty if user has
diff --git a/chromeos/ash/services/assistant/public/proto/activity_control_settings_common.proto b/chromeos/ash/services/assistant/public/proto/activity_control_settings_common.proto index 942bd49..e5e10d15 100644 --- a/chromeos/ash/services/assistant/public/proto/activity_control_settings_common.proto +++ b/chromeos/ash/services/assistant/public/proto/activity_control_settings_common.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; // UI texts for the ClassicActivityControl UI type which follows the "classic" // pattern of: title, intro text, one zippy per setting with [name, short
diff --git a/chromeos/ash/services/assistant/public/proto/activity_control_settings_ui.proto b/chromeos/ash/services/assistant/public/proto/activity_control_settings_ui.proto index 1cc93993..8fb90c9 100644 --- a/chromeos/ash/services/assistant/public/proto/activity_control_settings_ui.proto +++ b/chromeos/ash/services/assistant/public/proto/activity_control_settings_ui.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; message ActivityControlSettingsUiSelector { // An ID that uniquely identifies a single consent screen / client integration
diff --git a/chromeos/ash/services/assistant/public/proto/assistant_device_settings_ui.proto b/chromeos/ash/services/assistant/public/proto/assistant_device_settings_ui.proto index edec56e..e4316d1 100644 --- a/chromeos/ash/services/assistant/public/proto/assistant_device_settings_ui.proto +++ b/chromeos/ash/services/assistant/public/proto/assistant_device_settings_ui.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; message AssistantDevice { // The type of assistant device.
diff --git a/chromeos/ash/services/assistant/public/proto/consent_flow_ui.proto b/chromeos/ash/services/assistant/public/proto/consent_flow_ui.proto index aabb897..765c30fa 100644 --- a/chromeos/ash/services/assistant/public/proto/consent_flow_ui.proto +++ b/chromeos/ash/services/assistant/public/proto/consent_flow_ui.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; import "activity_control_settings_ui.proto"; import "activity_control_settings_common.proto";
diff --git a/chromeos/ash/services/assistant/public/proto/email_opt_in_ui.proto b/chromeos/ash/services/assistant/public/proto/email_opt_in_ui.proto index 26084a9..c7e7cc8 100644 --- a/chromeos/ash/services/assistant/public/proto/email_opt_in_ui.proto +++ b/chromeos/ash/services/assistant/public/proto/email_opt_in_ui.proto
@@ -7,7 +7,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; // Represents the subsection of the ConsentUi that displays and conveys an // opt-in to receive email update abouts the Assistant.
diff --git a/chromeos/ash/services/assistant/public/proto/gaia_user_context_ui.proto b/chromeos/ash/services/assistant/public/proto/gaia_user_context_ui.proto index 00658dc..8715404 100644 --- a/chromeos/ash/services/assistant/public/proto/gaia_user_context_ui.proto +++ b/chromeos/ash/services/assistant/public/proto/gaia_user_context_ui.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; // Parameters about the GAIA user's context. // It only applies to the primary user under the multi-user scenario.
diff --git a/chromeos/ash/services/assistant/public/proto/get_settings_ui.proto b/chromeos/ash/services/assistant/public/proto/get_settings_ui.proto index 156dacf..4955d2a3 100644 --- a/chromeos/ash/services/assistant/public/proto/get_settings_ui.proto +++ b/chromeos/ash/services/assistant/public/proto/get_settings_ui.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; import "header.proto"; import "settings_ui.proto";
diff --git a/chromeos/ash/services/assistant/public/proto/header.proto b/chromeos/ash/services/assistant/public/proto/header.proto index 0996b1d..504e57a 100644 --- a/chromeos/ash/services/assistant/public/proto/header.proto +++ b/chromeos/ash/services/assistant/public/proto/header.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; // Metadata for the response back to the user. message SettingsResponseHeader {
diff --git a/chromeos/ash/services/assistant/public/proto/settings_ui.proto b/chromeos/ash/services/assistant/public/proto/settings_ui.proto index 8cbbcc7..72a0a64 100644 --- a/chromeos/ash/services/assistant/public/proto/settings_ui.proto +++ b/chromeos/ash/services/assistant/public/proto/settings_ui.proto
@@ -6,7 +6,7 @@ option optimize_for = LITE_RUNTIME; -package chromeos.assistant; +package ash.assistant; import "about_me_settings_ui.proto"; import "assistant_device_settings_ui.proto";
diff --git a/chromeos/ash/services/assistant/test_support/fake_assistant_settings_impl.cc b/chromeos/ash/services/assistant/test_support/fake_assistant_settings_impl.cc index 81d0614b..fc470a3 100644 --- a/chromeos/ash/services/assistant/test_support/fake_assistant_settings_impl.cc +++ b/chromeos/ash/services/assistant/test_support/fake_assistant_settings_impl.cc
@@ -12,13 +12,6 @@ namespace ash::assistant { -// TODO(https://crbug.com/1164001): remove after migrating to ash. -namespace { -using ::chromeos::assistant::ConsentFlowUi_ConsentStatus_ALREADY_CONSENTED; -using ::chromeos::assistant::GetSettingsUiResponse; -using ::chromeos::assistant::SettingsUi; -} // namespace - FakeAssistantSettingsImpl::FakeAssistantSettingsImpl() = default; FakeAssistantSettingsImpl::~FakeAssistantSettingsImpl() = default;
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd index f7f1f34..b7508cf 100644 --- a/chromeos/chromeos_strings.grd +++ b/chromeos/chromeos_strings.grd
@@ -2664,103 +2664,104 @@ </message> <!-- Shimless RMA --> + <!-- WARNING The below strings for Shimless RMA use translatable="false" because Shimless RMA is an English only app. --> <!-- Component names. Used by select components and calibration pages--> - <message name="IDS_SHIMLESS_RMA_COMPONENT_AUDIO" desc="Name of device audio processing component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_AUDIO" translateable="false" desc="Name of device audio processing component."> Audio </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_BATTERY" desc="Name of device battery component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_BATTERY" translateable="false" desc="Name of device battery component."> Battery </message> <message name="IDS_SHIMLESS_RMA_COMPONENT_STORAGE" desc="Name of device SSD storage component."> Storage </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_VPD_CACHE" desc="Name of device Vital Product Data SPI flash storage component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_VPD_CACHE" translateable="false" desc="Name of device Vital Product Data SPI flash storage component."> Vpd Cached </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_NETWORK" desc="Name of device network component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_NETWORK" translateable="false" desc="Name of device network component."> Network </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_CAMERA" desc="Name of device camera component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_CAMERA" translateable="false" desc="Name of device camera component."> Camera </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_STYLUS" desc="Name of device stylus support component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_STYLUS" translateable="false" desc="Name of device stylus support component."> Stylus support </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_TOUCHPAD" desc="Name of device touchpad component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_TOUCHPAD" translateable="false" desc="Name of device touchpad component."> Touchpad </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_TOUCHSCREEN" desc="Name of device touchscreen component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_TOUCHSCREEN" translateable="false" desc="Name of device touchscreen component."> Touchscreen </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_MEMORY" desc="Name of device memory components."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_MEMORY" translateable="false" desc="Name of device memory components."> Memory </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_DISPLAY_PANEL" desc="Name of device display panel component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_DISPLAY_PANEL" translateable="false" desc="Name of device display panel component."> Display </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_CELLULAR" desc="Name of device cellular network component. Used for wireless internet service through a service provider such as Google Fi."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_CELLULAR" translateable="false" desc="Name of device cellular network component. Used for wireless internet service through a service provider such as Google Fi."> Cellular </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_ETHERNET" desc="Name of device ethernet component. Used for wired internet connection."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_ETHERNET" translateable="false" desc="Name of device ethernet component. Used for wired internet connection."> Ethernet </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_WIRELESS" desc="Name of device Wi-Fi network component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_WIRELESS" translateable="false" desc="Name of device Wi-Fi network component."> Wireless </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_BASE_ACCELEROMETER" desc="Name of device accelerometer component in the base (e.g. mainboard and keyboard) part of the device."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_BASE_ACCELEROMETER" translateable="false" desc="Name of device accelerometer component in the base (e.g. mainboard and keyboard) part of the device."> Base Accelerometer </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_LID_ACCELEROMETER" desc="Name of device accelerometer component in the lid (e.g. screen) of the component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_LID_ACCELEROMETER" translateable="false" desc="Name of device accelerometer component in the lid (e.g. screen) of the component."> Lid Accelerometer </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_BASE_GYROSCOPE" desc="Name of device gyroscope component in the base (e.g. mainboard and keyboard) part of the device."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_BASE_GYROSCOPE" translateable="false" desc="Name of device gyroscope component in the base (e.g. mainboard and keyboard) part of the device."> Base Gyroscope </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_LID_GYROSCOPE" desc="Name of device component in the lid (e.g. screen) of the component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_LID_GYROSCOPE" translateable="false" desc="Name of device component in the lid (e.g. screen) of the component."> Lid Gyroscope </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_SCREEN" desc="Name of device screen component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_SCREEN" translateable="false" desc="Name of device screen component."> Screen </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_KEYBOARD" desc="Name of device keyboard component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_KEYBOARD" translateable="false" desc="Name of device keyboard component."> Keyboard </message> - <message name="IDS_SHIMLESS_RMA_COMPONENT_POWER_BUTTON" desc="Name of device power button component."> + <message name="IDS_SHIMLESS_RMA_COMPONENT_POWER_BUTTON" translateable="false" desc="Name of device power button component."> Power Button </message> <!-- Splash screen --> - <message name="IDS_SHIMLESS_RMA_SPLASH_TITLE" desc="Message to display while waiting for RMA to initialize at boot."> + <message name="IDS_SHIMLESS_RMA_SPLASH_TITLE" translateable="false" desc="Message to display while waiting for RMA to initialize at boot."> <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> repair </message> - <message name="IDS_SHIMLESS_RMA_SPLASH_REMEMBERING" desc="Message that lets the user know that we are resuming repair."> + <message name="IDS_SHIMLESS_RMA_SPLASH_REMEMBERING" translateable="false" desc="Message that lets the user know that we are resuming repair."> Resuming repair process… </message> <!-- Common buttons --> - <message name="IDS_SHIMLESS_RMA_EXIT_BUTTON" desc="Button used to exit RMA finalization, when allowed."> + <message name="IDS_SHIMLESS_RMA_EXIT_BUTTON" translateable="false" desc="Button used to exit RMA finalization, when allowed."> Exit </message> - <message name="IDS_SHIMLESS_RMA_BACK_BUTTON" desc="Button used to go back to the previous step of RMA finalization, when allowed."> + <message name="IDS_SHIMLESS_RMA_BACK_BUTTON" translateable="false" desc="Button used to go back to the previous step of RMA finalization, when allowed."> Back </message> - <message name="IDS_SHIMLESS_RMA_NEXT_BUTTON" desc="Default text for the button used to progress to the next step of RMA finalization."> + <message name="IDS_SHIMLESS_RMA_NEXT_BUTTON" translateable="false" desc="Default text for the button used to progress to the next step of RMA finalization."> Next </message> - <message name="IDS_SHIMLESS_RMA_SKIP_BUTTON" desc="Default text for the button used to skip to the next step of RMA finalization."> + <message name="IDS_SHIMLESS_RMA_SKIP_BUTTON" translateable="false" desc="Default text for the button used to skip to the next step of RMA finalization."> Skip </message> - <message name="IDS_SHIMLESS_RMA_OK_BUTTON" desc="Default text for OK button used to acknowledge and close dialogs."> + <message name="IDS_SHIMLESS_RMA_OK_BUTTON" translateable="false" desc="Default text for OK button used to acknowledge and close dialogs."> OK </message> - <message name="IDS_SHIMLESS_RMA_CANCEL_BUTTON" desc="Button used to cancel and close dialogs."> + <message name="IDS_SHIMLESS_RMA_CANCEL_BUTTON" translateable="false" desc="Button used to cancel and close dialogs."> Cancel </message> - <message name="IDS_SHIMLESS_RMA_RETRY_BUTTON" desc="Default text for Retry button used to retry an action."> + <message name="IDS_SHIMLESS_RMA_RETRY_BUTTON" translateable="false" desc="Default text for Retry button used to retry an action."> Retry </message> - <message name="IDS_SHIMLESS_RMA_TRY_AGAIN_BUTTON" desc="Default text for Try Again button used to retry an action."> + <message name="IDS_SHIMLESS_RMA_TRY_AGAIN_BUTTON" translateable="false" desc="Default text for Try Again button used to retry an action."> Try again </message> - <message name="IDS_SHIMLESS_RMA_DONE_BUTTON" desc="Default text for Done button when action is completed for closing a dialog."> + <message name="IDS_SHIMLESS_RMA_DONE_BUTTON" translateable="false" desc="Default text for Done button when action is completed for closing a dialog."> Done </message> <!-- Exit dialog --> @@ -2789,132 +2790,132 @@ <message name="IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_SUCCESS" translateable="false" desc="Successfully checked that device components are approved for this device."> Components are installed correctly. </message> - <message name="IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_FAIL" desc="Validation check found that device components are NOT approved for this device."> + <message name="IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_FAIL" translateable="false" desc="Validation check found that device components are NOT approved for this device."> <ph name="LINK_BEGIN"><a id="unqualifiedComponentsLink"></ph>Unqualified components<ph name="LINK_END"></a></ph> detected. If you choose to confirm this has been installed, please do so now. </message> <message name="IDS_SHIMLESS_RMA_GET_STARTED_BUTTON_LABEL" translateable="false" desc="The label for the button to start the RMA process."> Get started </message> - <message name="IDS_SHIMLESS_RMA_UNQUALIFIED_COMPONENTS_TITLE" desc="The title for the dialog showing the list of components unqualfiied by ChromeOS."> + <message name="IDS_SHIMLESS_RMA_UNQUALIFIED_COMPONENTS_TITLE" translateable="false" desc="The title for the dialog showing the list of components unqualfiied by ChromeOS."> Unqualified components </message> <!-- Network connect page --> - <message name="IDS_SHIMLESS_RMA_CONNECT_PAGE_TITLE" desc="Title for the connect to wifi page."> + <message name="IDS_SHIMLESS_RMA_CONNECT_PAGE_TITLE" translateable="false" desc="Title for the connect to wifi page."> Get connected </message> - <message name="IDS_SHIMLESS_RMA_CONNECT_PAGE_DESCRIPTION" desc="Description for the connect to wifi page."> + <message name="IDS_SHIMLESS_RMA_CONNECT_PAGE_DESCRIPTION" translateable="false" desc="Description for the connect to wifi page."> Connecting to Wi-Fi is recommended to make the repair process easier. Your network will be saved. </message> - <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONFIG_NAME" desc="Title for the network configuration dialog for an existing network."> + <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONFIG_NAME" translateable="false" desc="Title for the network configuration dialog for an existing network."> Configure <ph name="NAME">$1<ex>My WiFi network</ex></ph> </message> - <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_JOIN_TYPE" desc="Title for the network configuration dialog for a new network."> + <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_JOIN_TYPE" translateable="false" desc="Title for the network configuration dialog for a new network."> Join <ph name="TYPE">$1<ex>WiFi</ex></ph> network </message> - <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONNECT" desc="Text for connect to wifi button."> + <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONNECT" translateable="false" desc="Text for connect to wifi button."> Connect </message> - <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_DISCONNECT" desc="Text for disconnect to wifi button."> + <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_DISCONNECT" translateable="false" desc="Text for disconnect to wifi button."> Disconnect </message> - <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_CANCEL" desc="Text for cancel connect to wifi button."> + <message name="IDS_SHIMLESS_RMA_CONNECT_DIALOG_CANCEL" translateable="false" desc="Text for cancel connect to wifi button."> Cancel </message> <!-- Select components page --> - <message name="IDS_SHIMLESS_RMA_SELECT_COMPONENTS_PAGE_TITLE" desc="The title for the select replaced components page."> + <message name="IDS_SHIMLESS_RMA_SELECT_COMPONENTS_PAGE_TITLE" translateable="false" desc="The title for the select replaced components page."> Select which components were replaced </message> - <message name="IDS_SHIMLESS_RMA_UNDETECTED_COMPONENT_LABEL" desc="The text label shown as a tooltip for components which are not detected on the device."> + <message name="IDS_SHIMLESS_RMA_UNDETECTED_COMPONENT_LABEL" translateable="false" desc="The text label shown as a tooltip for components which are not detected on the device."> This component couldn't be detected. </message> - <message name="IDS_SHIMLESS_RMA_REWORK_FLOW_LINK" desc="The text with a link that will redirect the user to the reworking flow. The reworking flow is only used when the user wants to repurpose the mainboard for another device."> + <message name="IDS_SHIMLESS_RMA_REWORK_FLOW_LINK" translateable="false" desc="The text with a link that will redirect the user to the reworking flow. The reworking flow is only used when the user wants to repurpose the mainboard for another device."> If you are reworking a mainboard to use in another device, go to the <ph name="LINK_BEGIN"><a id="reworkFlowLink"></ph>rework flow<ph name="LINK_END"></a></ph>. </message> <!-- Choose destination page --> - <message name="IDS_SHIMLESS_RMA_CHOOSE_DESTINATION" desc="Title for the page shown when choosing the return destination of the device after repair."> + <message name="IDS_SHIMLESS_RMA_CHOOSE_DESTINATION" translateable="false" desc="Title for the page shown when choosing the return destination of the device after repair."> After repair, who will be using the device? </message> - <message name="IDS_SHIMLESS_RMA_SAME_OWNER" desc="Text shown next to the return to original owner radio button."> + <message name="IDS_SHIMLESS_RMA_SAME_OWNER" translateable="false" desc="Text shown next to the return to original owner radio button."> Device will go to the same user </message> - <message name="IDS_SHIMLESS_RMA_NEW_OWNER" desc="Text shown next to the return to a new owner radio button."> + <message name="IDS_SHIMLESS_RMA_NEW_OWNER" translateable="false" desc="Text shown next to the return to a new owner radio button."> Device will go to a different user or organization </message> - <message name="IDS_SHIMLESS_RMA_NEW_OWNER_DESCRIPTION" desc="Detailed description of when to choose return to a new owner."> + <message name="IDS_SHIMLESS_RMA_NEW_OWNER_DESCRIPTION" translateable="false" desc="Detailed description of when to choose return to a new owner."> This will reset the device to factory settings (Powerwash). </message> - <message name="IDS_SHIMLESS_RMA_NOT_SURE_OWNER" desc="Text shown next to the radio button for when the technician is not sure whether the device goes to the same owner or a different owner."> + <message name="IDS_SHIMLESS_RMA_NOT_SURE_OWNER" translateable="false" desc="Text shown next to the radio button for when the technician is not sure whether the device goes to the same owner or a different owner."> Not sure </message> <!-- Choose write protect disable method page --> - <message name="IDS_SHIMLESS_RMA_CHOOSE_WP_DISABLE_METHOD_PAGE_TITLE" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> + <message name="IDS_SHIMLESS_RMA_CHOOSE_WP_DISABLE_METHOD_PAGE_TITLE" translateable="false" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> Select how you would like to turn off Write Protect </message> - <message name="IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_OPTION" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> + <message name="IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_OPTION" translateable="false" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> Manually turn off </message> - <message name="IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_DESCRIPTION" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> + <message name="IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_DESCRIPTION" translateable="false" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> You'll need to take apart the device </message> - <message name="IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_OPTION" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> + <message name="IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_OPTION" translateable="false" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> Perform RMA Server Unlock (RSU) </message> - <message name="IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_DESCRIPTION" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> + <message name="IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_DESCRIPTION" translateable="false" desc="Title for the page offering the options for disabling write protect on this device. Disabling write protection allows the new components to be calibrated and the system to be updated with information about them."> You'll need an RSU-enabled security key, a QR code scanner, and a second device with an internet connection </message> <!-- Enter RSU code page --> - <message name="IDS_SHIMLESS_RMA_RSU_CODE_PAGE_TITLE" desc="Title for the RSU challenge page."> + <message name="IDS_SHIMLESS_RMA_RSU_CODE_PAGE_TITLE" translateable="false" desc="Title for the RSU challenge page."> Perform RMA Server Unlock </message> - <message name="IDS_SHIMLESS_RMA_RSU_CODE_INSTRUCTIONS" desc="Instructions for the RSU challenge page."> + <message name="IDS_SHIMLESS_RMA_RSU_CODE_INSTRUCTIONS" translateable="false" desc="Instructions for the RSU challenge page."> Use this QR code to get the 8 character unlock code. You can also manually type <ph name="LINK_BEGIN"><a id="rsuCodeDialogLink"></ph>this URL<ph name="LINK_END"></a></ph>. </message> - <message name="IDS_SHIMLESS_RMA_RSU_CODE_LABEL" desc="Label for the RSU code input box."> + <message name="IDS_SHIMLESS_RMA_RSU_CODE_LABEL" translateable="false" desc="Label for the RSU code input box."> Enter the 8-characters </message> - <message name="IDS_SHIMLESS_RMA_RSU_CODE_ERROR_LABEL" desc="Label shown for an incorrect RSU code."> + <message name="IDS_SHIMLESS_RMA_RSU_CODE_ERROR_LABEL" translateable="false" desc="Label shown for an incorrect RSU code."> Incorrect code </message> - <message name="IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_TITLE" desc="Title for the dialog that shows the RSU challenge code link."> + <message name="IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_TITLE" translateable="false" desc="Title for the dialog that shows the RSU challenge code link."> Manually type this URL to get the RSU code </message> - <message name="IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_DONE_BUTTON" desc="Label for the button that closes the dialog."> + <message name="IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_DONE_BUTTON" translateable="false" desc="Label for the button that closes the dialog."> Done </message> <!-- Manual write protect disable complete page --> - <message name="IDS_SHIMLESS_RMA_WP_DISABLE_COMPLETE_PAGE_TITLE" desc="Title for the write protect disable complete page. Displays next steps, either reassemble device or leave wp disabled until further notice."> + <message name="IDS_SHIMLESS_RMA_WP_DISABLE_COMPLETE_PAGE_TITLE" translateable="false" desc="Title for the write protect disable complete page. Displays next steps, either reassemble device or leave wp disabled until further notice."> Write Protect is turned off </message> - <message name="IDS_SHIMLESS_RMA_WP_DISABLE_REASSEMBLE_NOW_MESSAGE" desc="Inform the user they can reassemble their device i.e. put the battery back in."> + <message name="IDS_SHIMLESS_RMA_WP_DISABLE_REASSEMBLE_NOW_MESSAGE" translateable="false" desc="Inform the user they can reassemble their device i.e. put the battery back in."> You can put the device back together now </message> - <message name="IDS_SHIMLESS_RMA_WP_DISABLE_LEAVE_DISASSEMBLED_MESSAGE" desc="Warn the user to leave their device disassembled i.e. leave the battery out."> + <message name="IDS_SHIMLESS_RMA_WP_DISABLE_LEAVE_DISASSEMBLED_MESSAGE" translateable="false" desc="Warn the user to leave their device disassembled i.e. leave the battery out."> Don't put the device back together yet </message> <!-- Check calibration page --> - <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_PAGE_TITLE" desc="Title for the page shown when confirming components to calibrate after calibration fails."> + <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_PAGE_TITLE" translateable="false" desc="Title for the page shown when confirming components to calibrate after calibration fails."> Couldn't calibrate some components </message> - <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_INSTRUCTIONS" desc="The text instructions shown when confirming components to calibrate after calibration fails."> + <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_INSTRUCTIONS" translateable="false" desc="The text instructions shown when confirming components to calibrate after calibration fails."> Select 1 or more components and try again, or skip calibration </message> - <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TITLE" desc="The title for the dialog warning users they have components that failed calibration."> + <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TITLE" translateable="false" desc="The title for the dialog warning users they have components that failed calibration."> Proceed with failed calibrations? </message> - <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TEXT" desc="The text in the dialog warning users the consequences of proceeding with components that failed calibration."> + <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TEXT" translateable="false" desc="The text in the dialog warning users the consequences of proceeding with components that failed calibration."> Components may not work correctly unless calibrated </message> - <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_SKIP_CALIBRATION_LABEL" desc="The label for the button letting the user skip component calibration."> + <message name="IDS_SHIMLESS_RMA_CALIBRATION_FAILED_SKIP_CALIBRATION_LABEL" translateable="false" desc="The label for the button letting the user skip component calibration."> Skip calibration </message> <!-- Setup calibration page --> - <message name="IDS_SHIMLESS_RMA_SETUP_CALIBRATION_PAGE_TITLE" desc="Title for the page that displays specific instructions required for some calibration steps."> + <message name="IDS_SHIMLESS_RMA_SETUP_CALIBRATION_PAGE_TITLE" translateable="false" desc="Title for the page that displays specific instructions required for some calibration steps."> Calibrate components </message> - <message name="IDS_SHIMLESS_RMA_BASE_CALIBRATION_INSTRUCTIONS" desc="Instructions for calibrating gyroscope and accelerometer located in the base of the device."> + <message name="IDS_SHIMLESS_RMA_BASE_CALIBRATION_INSTRUCTIONS" translateable="false" desc="Instructions for calibrating gyroscope and accelerometer located in the base of the device."> Before proceeding, place your laptop on a flat surface </message> - <message name="IDS_SHIMLESS_RMA_LID_CALIBRATION_INSTRUCTIONS" desc="Instructions for calibrating gyroscope and accelerometer located in the lid of the device."> + <message name="IDS_SHIMLESS_RMA_LID_CALIBRATION_INSTRUCTIONS" translateable="false" desc="Instructions for calibrating gyroscope and accelerometer located in the lid of the device."> Before proceeding, place your whole device (base and lid) on a flat surface. </message> <!-- Finalize device page --> @@ -2928,211 +2929,211 @@ Complete. </message> <!-- Device provisioning page --> - <message name="IDS_SHIMLESS_RMA_PROVISIONING_TITLE" desc="Title for the device provisioning page. Provisioning is when component specific data is set e.g. erasing fingerprint data from the thumb reader or regenerating the device stable secret before returning the device to a new owner."> + <message name="IDS_SHIMLESS_RMA_PROVISIONING_TITLE" translateable="false" desc="Title for the device provisioning page. Provisioning is when component specific data is set e.g. erasing fingerprint data from the thumb reader or regenerating the device stable secret before returning the device to a new owner."> Provisioning the device... </message> - <message name="IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_TITLE" desc="The title of the dialog that shows up when provisioning failed because Write Protect is still on."> + <message name="IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_TITLE" translateable="false" desc="The title of the dialog that shows up when provisioning failed because Write Protect is still on."> Turn off Write Protect </message> - <message name="IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_BODY" desc="The body of the dialog that shows up when provisioning failed because Write Protect is still on."> + <message name="IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_BODY" translateable="false" desc="The body of the dialog that shows up when provisioning failed because Write Protect is still on."> Write Protect has been turned on unexpectedly. Please turn off Write Protect manually before trying again. </message> <!-- Repair complete page --> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED" desc="Title for the page shown when the RMA process repair process is completed."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED" translateable="false" desc="Title for the page shown when the RMA process repair process is completed."> Repair is complete </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DESCRIPTION" desc="Notice for the user that repair is complete and they can shutdown when ready or run diagnostics/view logs."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DESCRIPTION" translateable="false" desc="Notice for the user that repair is complete and they can shutdown when ready or run diagnostics/view logs."> Your repair was successful. You can shut down the device or take some additional actions. </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_BUTTON" desc="Label of the button that launches the post-boot diagnostics SWA."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_BUTTON" translateable="false" desc="Label of the button that launches the post-boot diagnostics SWA."> Run Diagnostics </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_DESCRIPTION" desc="Description of what the diagnostics SWA is for"> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_DESCRIPTION" translateable="false" desc="Description of what the diagnostics SWA is for"> Confirm everything's in the right place and view the diagnostic report </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_BUTTON" desc="Label for the button that opens the view/save logs dialog"> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_BUTTON" translateable="false" desc="Label for the button that opens the view/save logs dialog"> See RMA logs </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_DESCRIPTION" desc="Description of what the logs dialog is used for."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_DESCRIPTION" translateable="false" desc="Description of what the logs dialog is used for."> See what's been fixed </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_BUTTON" desc="Label of the button that triggers a shutdown with battery cutoff."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_BUTTON" translateable="false" desc="Label of the button that triggers a shutdown with battery cutoff."> Battery cutoff </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_DESCRIPTION" desc="Explanation of why user would choose battery cutoff."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_DESCRIPTION" translateable="false" desc="Explanation of why user would choose battery cutoff."> Perform battery cutoff for devices being shipped or stored </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_INSTRUCTIONS" desc="Instructions for battery cutoff. These instructions will display when a power cable is attached and the button is disabled."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_INSTRUCTIONS" translateable="false" desc="Instructions for battery cutoff. These instructions will display when a power cable is attached and the button is disabled."> Unplug the device to perform battery cutoff </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_SHUT_DOWN_BUTTON_LABEL" desc="Label for the shutdown button."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_SHUT_DOWN_BUTTON_LABEL" translateable="false" desc="Label for the shutdown button."> Shut down </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_REBOOT_BUTTON_LABEL" desc="Label for the reboot button."> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_REBOOT_BUTTON_LABEL" translateable="false" desc="Label for the reboot button."> Reboot </message> - <message name="IDS_SHIMLESS_RMA_LOGS_TITLE" desc="Title for the logs dialog displayed on repair complete page"> + <message name="IDS_SHIMLESS_RMA_LOGS_TITLE" translateable="false" desc="Title for the logs dialog displayed on repair complete page"> RMA Logs </message> - <message name="IDS_SHIMLESS_RMA_LOGS_CANCEL_BUTTON" desc="Label for the logs dialog cancel button"> + <message name="IDS_SHIMLESS_RMA_LOGS_CANCEL_BUTTON" translateable="false" desc="Label for the logs dialog cancel button"> Cancel </message> - <message name="IDS_SHIMLESS_RMA_LOGS_SAVE_BUTTON" desc="Label for the logs dialog save to USB button. This triggers saving to the root of a USB drive with no option to select location or title of the logs. It is automatic as the file browser is not available to the shimless RMA app."> + <message name="IDS_SHIMLESS_RMA_LOGS_SAVE_BUTTON" translateable="false" desc="Label for the logs dialog save to USB button. This triggers saving to the root of a USB drive with no option to select location or title of the logs. It is automatic as the file browser is not available to the shimless RMA app."> Save to USB </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_TITLE" desc="Title for the powerwash dialog displayed on repair complete page"> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_TITLE" translateable="false" desc="Title for the powerwash dialog displayed on repair complete page"> Powerwash (factory reset) required </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_SHUTDOWN_DESCRIPTION" desc="Contents of the powerwash dialog displayed on repair complete page when trying to shut down"> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_SHUTDOWN_DESCRIPTION" translateable="false" desc="Contents of the powerwash dialog displayed on repair complete page when trying to shut down"> Before shutting down, powerwash your device. If your device has a lid, wait until powerwash completes before closing the lid. Powerwash may take up to a minute to complete. </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_REBOOT_DESCRIPTION" desc="Contents of the powerwash dialog displayed on repair complete page when trying to reboot"> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_REBOOT_DESCRIPTION" translateable="false" desc="Contents of the powerwash dialog displayed on repair complete page when trying to reboot"> Before restarting, powerwash your device. If your device has a lid, wait until powerwash completes before closing the lid. Powerwash may take up to a minute to complete. </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_BUTTON" desc="Label for the button that starts a powerwash"> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_BUTTON" translateable="false" desc="Label for the button that starts a powerwash"> Powerwash </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_CUTOFF_COUNTDOWN_DESCRIPTION" desc="Contents of the countdown dialog displayed on repair complete page when trying to cut off the battery"> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_CUTOFF_COUNTDOWN_DESCRIPTION" translateable="false" desc="Contents of the countdown dialog displayed on repair complete page when trying to cut off the battery"> Device will shut down in 5 seconds </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_SHUTDOWN_BUTTON" desc="Label for the button in the battery cutoff countdown dialog that shuts down the device and cuts off the battery immediately"> + <message name="IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_SHUTDOWN_BUTTON" translateable="false" desc="Label for the button in the battery cutoff countdown dialog that shuts down the device and cuts off the battery immediately"> Shut down </message> - <message name="IDS_SHIMLESS_RMA_LOGS_SAVE_SUCCESS" desc="The text telling the user that saving the logs to a external USB was successful and showing them the saved file location."> + <message name="IDS_SHIMLESS_RMA_LOGS_SAVE_SUCCESS" translateable="false" desc="The text telling the user that saving the logs to a external USB was successful and showing them the saved file location."> Saved to "<ph name="FILE_LOCATION">$1<ex>/USB/Home/MyFiles</ex></ph>" </message> - <message name="IDS_SHIMLESS_RMA_LOGS_SAVE_FAIL" desc="The text telling the user that saving the logs to a external USB failed. The expectation would be for the user to try a different external storage device."> + <message name="IDS_SHIMLESS_RMA_LOGS_SAVE_FAIL" translateable="false" desc="The text telling the user that saving the logs to a external USB failed. The expectation would be for the user to try a different external storage device."> File couldn't be saved. Try plugging in a different external storage, or try again later. </message> <!-- Powerwash dialog --> - <message name="IDS_SHIMLESS_RMA_POWERWASH_DIALOG_TITLE" desc="Title for the powerwash dialog displayed on the repair complete page and on the restock page"> + <message name="IDS_SHIMLESS_RMA_POWERWASH_DIALOG_TITLE" translateable="false" desc="Title for the powerwash dialog displayed on the repair complete page and on the restock page"> Powerwash (factory reset) required </message> - <message name="IDS_SHIMLESS_RMA_POWERWASH_DIALOG_SHUTDOWN_DESCRIPTION" desc="Contents of the powerwash dialog displayed on repair complete page when trying to shut down and on the restock page"> + <message name="IDS_SHIMLESS_RMA_POWERWASH_DIALOG_SHUTDOWN_DESCRIPTION" translateable="false" desc="Contents of the powerwash dialog displayed on repair complete page when trying to shut down and on the restock page"> Before shutting down, powerwash your device. If your device has a lid, wait until powerwash completes before closing the lid. Powerwash may take up to a minute to complete. </message> - <message name="IDS_SHIMLESS_RMA_POWERWASH_DIALOG_REBOOT_DESCRIPTION" desc="Contents of the powerwash dialog displayed on repair complete page when trying to reboot"> + <message name="IDS_SHIMLESS_RMA_POWERWASH_DIALOG_REBOOT_DESCRIPTION" translateable="false" desc="Contents of the powerwash dialog displayed on repair complete page when trying to reboot"> Before restarting, powerwash your device. If your device has a lid, wait until powerwash completes before closing the lid. Powerwash may take up to a minute to complete. </message> - <message name="IDS_SHIMLESS_RMA_POWERWASH_DIALOG_POWERWASH_BUTTON" desc="Label for the button that starts a powerwash"> + <message name="IDS_SHIMLESS_RMA_POWERWASH_DIALOG_POWERWASH_BUTTON" translateable="false" desc="Label for the button that starts a powerwash"> Powerwash </message> <!-- Run calibration page --> - <message name="IDS_SHIMLESS_RMA_RUN_CALIBRATION_PAGE_TITLE" desc="Title for the page shown when running component calibration steps."> + <message name="IDS_SHIMLESS_RMA_RUN_CALIBRATION_PAGE_TITLE" translateable="false" desc="Title for the page shown when running component calibration steps."> Calibrating components... </message> - <message name="IDS_SHIMLESS_RMA_RUN_CALIBRATION_COMPLETE_TITLE" desc="Title for the page shown when component calibration steps are complete."> + <message name="IDS_SHIMLESS_RMA_RUN_CALIBRATION_COMPLETE_TITLE" translateable="false" desc="Title for the page shown when component calibration steps are complete."> Calibration complete </message> <!-- OS update page --> - <message name="IDS_SHIMLESS_RMA_UPDATE_OS_PAGE_TITLE" desc="Title of ChromeOS update page."> + <message name="IDS_SHIMLESS_RMA_UPDATE_OS_PAGE_TITLE" translateable="false" desc="Title of ChromeOS update page."> Make sure Chrome OS is up to date </message> - <message name="IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_TOP" desc="Description when components not qualified for ChromeOS are detected."> + <message name="IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_TOP" translateable="false" desc="Description when components not qualified for ChromeOS are detected."> <ph name="LINK_BEGIN"><a id="unqualifiedComponentsLink"></ph>Unqualified components<ph name="LINK_END"></a></ph> found. To make sure all qualified components are identified, update your Chrome OS to the latest version. </message> - <message name="IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_BOTTOM" desc="Description when components not qualified for ChromeOS are detected."> + <message name="IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_BOTTOM" translateable="false" desc="Description when components not qualified for ChromeOS are detected."> If you still see the issue after the update, it's possible the component is newly qualified and hasn't made it to the database yet. </message> - <message name="IDS_SHIMLESS_RMA_UPDATE_OS_OUT_OF_DATE" desc="The instructions shown when there is a ChromeOS update available."> + <message name="IDS_SHIMLESS_RMA_UPDATE_OS_OUT_OF_DATE" translateable="false" desc="The instructions shown when there is a ChromeOS update available."> Update to the latest version of Chrome OS for an optimized repair process </message> - <message name="IDS_SHIMLESS_RMA_CURRENT_VERSION_OUT_OF_DATE" desc="Label that shows the when the currently installed version of ChromeOS is out of date."> + <message name="IDS_SHIMLESS_RMA_CURRENT_VERSION_OUT_OF_DATE" translateable="false" desc="Label that shows the when the currently installed version of ChromeOS is out of date."> Current version <ph name="VERSION_NUMBER">$1<ex>90.0.1234.56</ex></ph> is out of date </message> - <message name="IDS_SHIMLESS_RMA_UPDATE_VERSION_AND_RESTART" desc="Label for the button that updates the device to the latest version of ChromeOS then restarts the device."> + <message name="IDS_SHIMLESS_RMA_UPDATE_VERSION_AND_RESTART" translateable="false" desc="Label for the button that updates the device to the latest version of ChromeOS then restarts the device."> Update to <ph name="VERSION_NUMBER">$1</ph> & restart </message> - <message name="IDS_SHIMLESS_RMA_UPDATING_OS_VERSION" desc="The message shown while updating the device's OS version."> + <message name="IDS_SHIMLESS_RMA_UPDATING_OS_VERSION" translateable="false" desc="The message shown while updating the device's OS version."> Updating OS version </message> - <message name="IDS_SHIMLESS_RMA_UPDATE_OS_ERROR_MESSAGE" desc="The message shown if there were errors while updating the OS."> + <message name="IDS_SHIMLESS_RMA_UPDATE_OS_ERROR_MESSAGE" translateable="false" desc="The message shown if there were errors while updating the OS."> Couldn't download the update </message> <!-- Manually disable wp page --> - <message name="IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS" desc="The text instructions for how to manually disable write-protect on the device."> + <message name="IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS" translateable="false" desc="The text instructions for how to manually disable write-protect on the device."> Disable write-protect to continue to the next screen. Go to the device manufacturer's support page for instructions. </message> - <message name="IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE" desc="The title for the page to manually disable write-protect on the device."> + <message name="IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE" translateable="false" desc="The title for the page to manually disable write-protect on the device."> Turn off Write Protect </message> - <message name="IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS_REBOOT" desc="The text instructions that inform the technician that the device will reboot."> + <message name="IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS_REBOOT" translateable="false" desc="The text instructions that inform the technician that the device will reboot."> System will restart after verifying Write Protection status </message> - <message name="IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE_REBOOT" desc="The title for the page that informs the technician that the device will reboot."> + <message name="IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE_REBOOT" translateable="false" desc="The title for the page that informs the technician that the device will reboot."> Preparing for restart... </message> <!-- Restock mainboard page --> - <message name="IDS_SHIMLESS_RMA_RESTOCK_PAGE_TITLE" desc="The title for the page notifying user device is in a good state for restocking the mainboard."> + <message name="IDS_SHIMLESS_RMA_RESTOCK_PAGE_TITLE" translateable="false" desc="The title for the page notifying user device is in a good state for restocking the mainboard."> Continue repair? </message> - <message name="IDS_SHIMLESS_RMA_RESTOCK_INSTRUCTIONS" desc="Instructions for what to do in the restock state. As the device will return to this state when rebooted after restocking the user can shutdown or continue RMA"> + <message name="IDS_SHIMLESS_RMA_RESTOCK_INSTRUCTIONS" translateable="false" desc="Instructions for what to do in the restock state. As the device will return to this state when rebooted after restocking the user can shutdown or continue RMA"> You can continue with the full repair or powerwash (factory reset) the device to restock the mainboard. </message> - <message name="IDS_SHIMLESS_RMA_RESTOCK_SHUTDOWN_BUTTON" desc="Label for the button that triggers device shutdown on the restock page."> + <message name="IDS_SHIMLESS_RMA_RESTOCK_SHUTDOWN_BUTTON" translateable="false" desc="Label for the button that triggers device shutdown on the restock page."> Shut down </message> - <message name="IDS_SHIMLESS_RMA_RESTOCK_CONTINUE_BUTTON" desc="Label for the continue button on the restock page."> + <message name="IDS_SHIMLESS_RMA_RESTOCK_CONTINUE_BUTTON" translateable="false" desc="Label for the continue button on the restock page."> Continue </message> <!-- Manually enable wp page --> - <message name="IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_TITLE" desc="The title for the page to manually enable write-protect on the device, afer device provisioning completes."> + <message name="IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_TITLE" translateable="false" desc="The title for the page to manually enable write-protect on the device, afer device provisioning completes."> Turn on Write Protect </message> - <message name="IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_INSTRUCTIONS" desc="The text instructions to manually enable write-protect on the device."> + <message name="IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_INSTRUCTIONS" translateable="false" desc="The text instructions to manually enable write-protect on the device."> Enable write-protect to continue to the next screen. Go to the device manufacturer's support page for instructions. </message> <!-- Confirm device information page --> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_TITLE" desc="The title for the page for confirming the device info."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_TITLE" translateable="false" desc="The title for the page for confirming the device info."> Please confirm device information </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_INSTRUCTIONS" desc="The instructions for the page for confirming the device info."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_INSTRUCTIONS" translateable="false" desc="The instructions for the page for confirming the device info."> Change device information as needed. </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SERIAL_NUMBER_LABEL" desc="The label for the text input showing the device's serial number."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SERIAL_NUMBER_LABEL" translateable="false" desc="The label for the text input showing the device's serial number."> Serial number </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REGION_LABEL" desc="The label for the text input showing the device's current region."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REGION_LABEL" translateable="false" desc="The label for the text input showing the device's current region."> Region </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_WHITE_LABEL_LABEL" desc="The label for the text input showing the device's white-label."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_WHITE_LABEL_LABEL" translateable="false" desc="The label for the text input showing the device's white-label."> White-label </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_EMPTY_WHITE_LABEL_LABEL" desc="The label for the selection option that clears the device's white-label."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_EMPTY_WHITE_LABEL_LABEL" translateable="false" desc="The label for the selection option that clears the device's white-label."> --no white-label-- </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_LABEL" desc="The label for the text input showing the device's SKU."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_LABEL" translateable="false" desc="The label for the text input showing the device's SKU."> SKU </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REVERT_BUTTON_LABEL" desc="The label for the button that resets the input back to its original value."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REVERT_BUTTON_LABEL" translateable="false" desc="The label for the button that resets the input back to its original value."> Revert </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_WARNING" desc="The text warning explaining when the device's SKU should be changed."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_WARNING" translateable="false" desc="The text warning explaining when the device's SKU should be changed."> The SKU should only be changed if the new component(s) are different from the ones they replaced. For example, a touchscreen replacing a non-touchscreen, or memory being upgraded from 8GB to 16GB. </message> - <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DRAM_PART_NUMBER_LABEL" desc="The label for the text input showing the device's dram part number."> + <message name="IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DRAM_PART_NUMBER_LABEL" translateable="false" desc="The label for the text input showing the device's dram part number."> DRAM part number </message> <!-- RO firmware reimaging page --> - <message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_IMAGE_TITLE" desc="The title for the page when the device firmware is expected to be installed."> + <message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_IMAGE_TITLE" translateable="false" desc="The title for the page when the device firmware is expected to be installed."> Install firmware image </message> - <message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_COMPLETE_TITLE" desc="The title for the page when the device firmware installation is complete."> + <message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_COMPLETE_TITLE" translateable="false" desc="The title for the page when the device firmware installation is complete."> Install complete </message> - <message name="IDS_SHIMLESS_RMA_FIRMWARE_WAIT_FOR_USB" desc="The prompt to insert a thumb drive with the recovery image for this device."> + <message name="IDS_SHIMLESS_RMA_FIRMWARE_WAIT_FOR_USB" translateable="false" desc="The prompt to insert a thumb drive with the recovery image for this device."> Insert external storage, such as a USB drive or an SD card, with the downloaded Chromebook Recovery Utility image </message> - <message name="IDS_SHIMLESS_RMA_FIRMWARE_FILE_NOT_FOUND" desc="The message when a thumb drive is detected but it does not conatin a valid recovery image for this device."> + <message name="IDS_SHIMLESS_RMA_FIRMWARE_FILE_NOT_FOUND" translateable="false" desc="The message when a thumb drive is detected but it does not conatin a valid recovery image for this device."> Couldn’t find firmware image. Insert external storage, such as a USB drive or an SD card, with the downloaded Chromebook Recovery Utility image. </message> - <message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATING" desc="The message when the firmware is being installed."> + <message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATING" translateable="false" desc="The message when the firmware is being installed."> Installing firmware... </message> - <message name="IDS_SHIMLESS_RMA_FIRMWARE_REBOOT" desc="The message when firmware is installed and the required reboot is about to take place."> + <message name="IDS_SHIMLESS_RMA_FIRMWARE_REBOOT" translateable="false" desc="The message when firmware is installed and the required reboot is about to take place."> Install is complete. Preparing to restart... </message> - <message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_COMPLETE" desc="The message when firmware installation is complete and the device has rebooted."> + <message name="IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_COMPLETE" translateable="false" desc="The message when firmware installation is complete and the device has rebooted."> Install is complete. You can now remove your USB drive or SD card. </message> <!-- Onboarding update page --> @@ -3173,79 +3174,80 @@ need permission to update </message> <!-- Critical error page --> - <message name="IDS_SHIMLESS_RMA_CRITICAL_ERROR_TITLE" desc="The title for the critical error page. Critical errors cause the RMA process to attempt to exit to login or reboot the device at users discretion. It will try to cancel RMA, but if that fails the next boot may also trigger an RMA critical error."> + <message name="IDS_SHIMLESS_RMA_CRITICAL_ERROR_TITLE" translateable="false" desc="The title for the critical error page. Critical errors cause the RMA process to attempt to exit to login or reboot the device at users discretion. It will try to cancel RMA, but if that fails the next boot may also trigger an RMA critical error."> <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> repair error </message> - <message name="IDS_SHIMLESS_RMA_CRITICAL_ERROR_MESSAGE" desc="The message for the critical error when Shimless RMA app is launched when not in RMA. This should never happen."> + <message name="IDS_SHIMLESS_RMA_CRITICAL_ERROR_MESSAGE" translateable="false" desc="The message for the critical error when Shimless RMA app is launched when not in RMA. This should never happen."> We're running into errors. Try rebooting or recover the firmware using a USB thumbdrive. </message> - <message name="IDS_SHIMLESS_RMA_CRITICAL_EXIT_BUTTON" desc="Label for the exit button on the error page."> + <message name="IDS_SHIMLESS_RMA_CRITICAL_EXIT_BUTTON" translateable="false" desc="Label for the exit button on the error page."> Exit <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> repair </message> - <message name="IDS_SHIMLESS_RMA_CRITICAL_REBOOT_BUTTON" desc="Label for the button that attempts to cancel RMA and reboot the device."> + <message name="IDS_SHIMLESS_RMA_CRITICAL_REBOOT_BUTTON" translateable="false" desc="Label for the button that attempts to cancel RMA and reboot the device."> Restart </message> <!-- Hardware error page --> - <message name="IDS_SHIMLESS_RMA_HARDWARE_ERROR_TITLE" desc="The title for the hardware error page. Hardware errors occur on the finalization and the provisioning step and can only be resolved by replacing the main board."> + <message name="IDS_SHIMLESS_RMA_HARDWARE_ERROR_TITLE" translateable="false" desc="The title for the hardware error page. Hardware errors occur on the finalization and the provisioning step and can only be resolved by replacing the main board."> Can't complete repair </message> - <message name="IDS_SHIMLESS_RMA_HARDWARE_ERROR_MESSAGE" desc="The message for the hardware error explaining how to fix it."> + <message name="IDS_SHIMLESS_RMA_HARDWARE_ERROR_MESSAGE" translateable="false" desc="The message for the hardware error explaining how to fix it."> Something went wrong. This is most likely due to a hardware issue. Replace the main board and try the repair process again. </message> - <message name="IDS_SHIMLESS_RMA_HARDWARE_SHUTDOWN_BUTTON" desc="Label for the shut down button on the hardware error page."> + <message name="IDS_SHIMLESS_RMA_HARDWARE_SHUTDOWN_BUTTON" translateable="false" desc="Label for the shut down button on the hardware error page."> Shut down </message> <!-- Reboot page --> - <message name="IDS_SHIMLESS_RMA_REBOOT_PAGE_TITLE" desc="The title for the reboot page. The reboot page is shown when the device is preparing to reboot."> + <message name="IDS_SHIMLESS_RMA_REBOOT_PAGE_TITLE" translateable="false" desc="The title for the reboot page. The reboot page is shown when the device is preparing to reboot."> Preparing to restart... </message> - <message name="IDS_SHIMLESS_RMA_REBOOT_PAGE_MESSAGE" desc="The message for the reboot page explaining how soon the device will reboot."> + <message name="IDS_SHIMLESS_RMA_REBOOT_PAGE_MESSAGE" translateable="false" desc="The message for the reboot page explaining how soon the device will reboot."> System will restart in <ph name="DELAY_DURATION">$1<ex>5</ex></ph> seconds. </message> - <message name="IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_TITLE" desc="The title for the shut down page. The shut down page is shown when the device is preparing to shut down."> + <message name="IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_TITLE" translateable="false" desc="The title for the shut down page. The shut down page is shown when the device is preparing to shut down."> Preparing to shut down... </message> - <message name="IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_MESSAGE" desc="The message for the shut down page explaining how soon the device will shut down."> + <message name="IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_MESSAGE" translateable="false" desc="The message for the shut down page explaining how soon the device will shut down."> System will shut down in <ph name="DELAY_DURATION">$1<ex>5</ex></ph> seconds. </message> <!-- Wipe device page --> - <message name="IDS_SHIMLESS_RMA_WIPE_DEVICE_TITLE" desc="Title for the page where the user chooses whether to erase the data or keep/preserve the data on the device."> + <message name="IDS_SHIMLESS_RMA_WIPE_DEVICE_TITLE" translateable="false" desc="Title for the page where the user chooses whether to erase the data or keep/preserve the data on the device."> Device is going to the same user. Erase user data? </message> - <message name="IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION" desc="Label for the option to wipe/erase the data on the device."> + <message name="IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION" translateable="false" desc="Label for the option to wipe/erase the data on the device."> Erase all data </message> - <message name="IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION_DESCRIPTION" desc="Description for the option to wipe/erase the data on the device."> + <message name="IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION_DESCRIPTION" translateable="false" desc="Description for the option to wipe/erase the data on the device."> This will reset the device to factory settings (Powerwash). </message> - <message name="IDS_SHIMLESS_RMA_WIPE_DEVICE_PRESERVE_DATA_OPTION" desc="Label for the option to preserve/save the data on the device."> + <message name="IDS_SHIMLESS_RMA_WIPE_DEVICE_PRESERVE_DATA_OPTION" translateable="false" desc="Label for the option to preserve/save the data on the device."> Keep user data </message> <!-- Illustrations --> - <message name="IDS_SHIMLESS_RMA_BASE_ON_FLAT_SURFACE_ALT_TEXT" desc="Alt text for illustration showing how to put the device base flat on a surface."> + <message name="IDS_SHIMLESS_RMA_BASE_ON_FLAT_SURFACE_ALT_TEXT" translateable="false" desc="Alt text for illustration showing how to put the device base flat on a surface."> Put base on flat surface </message> - <message name="IDS_SHIMLESS_RMA_DOWNLOADING_ALT_TEXT" desc="Alt text for illustration showing a downloading arrow."> + <message name="IDS_SHIMLESS_RMA_DOWNLOADING_ALT_TEXT" translateable="false" desc="Alt text for illustration showing a downloading arrow."> Downloading </message> - <message name="IDS_SHIMLESS_RMA_ERROR_ALT_TEXT" desc="Alt text for illustration showing an error screen."> + <message name="IDS_SHIMLESS_RMA_ERROR_ALT_TEXT" translateable="false" desc="Alt text for illustration showing an error screen."> Error </message> - <message name="IDS_SHIMLESS_RMA_INSERT_USB_ALT_TEXT" desc="Alt text for illustration showing how to insert a USB."> + <message name="IDS_SHIMLESS_RMA_INSERT_USB_ALT_TEXT" translateable="false" desc="Alt text for illustration showing how to insert a USB."> Insert USB </message> - <message name="IDS_SHIMLESS_RMA_LID_ON_FLAT_SURFACE_ALT_TEXT" desc="Alt text for illustration showing how to put the device lid flat on a surface."> + <message name="IDS_SHIMLESS_RMA_LID_ON_FLAT_SURFACE_ALT_TEXT" translateable="false" desc="Alt text for illustration showing how to put the device lid flat on a surface."> Put lid on flat surface </message> - <message name="IDS_SHIMLESS_RMA_REPAIR_START_ALT_TEXT" desc="Alt text for illustration showing a person repairing."> + <message name="IDS_SHIMLESS_RMA_REPAIR_START_ALT_TEXT" translateable="false" desc="Alt text for illustration showing a person repairing."> Repair start </message> - <message name="IDS_SHIMLESS_RMA_SUCCESS_ALT_TEXT" desc="Alt text for illustration showing a success checkmark."> + <message name="IDS_SHIMLESS_RMA_SUCCESS_ALT_TEXT" translateable="false" desc="Alt text for illustration showing a success checkmark."> Success </message> - <message name="IDS_SHIMLESS_RMA_UPDATE_OS_ALT_TEXT" desc="Alt text for illustration showing an hourglass representing updating the OS."> + <message name="IDS_SHIMLESS_RMA_UPDATE_OS_ALT_TEXT" translateable="false" desc="Alt text for illustration showing an hourglass representing updating the OS."> Update OS </message> + <!-- Peripheral Firmware Update --> <message name="IDS_FIRMWARE_TITLE_TEXT" desc="The title of the Firmware update app."> Firmware updates for external devices
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BACK_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BACK_BUTTON.png.sha1 deleted file mode 100644 index b4cb0385..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BACK_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -74fde7f3338570b6e3964813435bc36de9db43d0 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BASE_CALIBRATION_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BASE_CALIBRATION_INSTRUCTIONS.png.sha1 deleted file mode 100644 index fbc8350..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BASE_CALIBRATION_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -61745815ed8b78514ea3df9b4fa1d896198829ec \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BASE_ON_FLAT_SURFACE_ALT_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BASE_ON_FLAT_SURFACE_ALT_TEXT.png.sha1 deleted file mode 100644 index 111770b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_BASE_ON_FLAT_SURFACE_ALT_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9ac05cb6e79faf5ca6b8a975d882870dbae69764 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TEXT.png.sha1 deleted file mode 100644 index 40ae078..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e03f10daf98c32c644037e056536c46af57392f7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TITLE.png.sha1 deleted file mode 100644 index 40ae078..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_DIALOG_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e03f10daf98c32c644037e056536c46af57392f7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_INSTRUCTIONS.png.sha1 deleted file mode 100644 index 95a8c05..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -29fd116c7103ad351ebd629dfdd9b032969c774d \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_PAGE_TITLE.png.sha1 deleted file mode 100644 index 95a8c05..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -29fd116c7103ad351ebd629dfdd9b032969c774d \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_SKIP_CALIBRATION_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_SKIP_CALIBRATION_LABEL.png.sha1 deleted file mode 100644 index 40ae078..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CALIBRATION_FAILED_SKIP_CALIBRATION_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e03f10daf98c32c644037e056536c46af57392f7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CANCEL_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CANCEL_BUTTON.png.sha1 deleted file mode 100644 index 7c4cd41..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CANCEL_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4cb6875785580c579cba71ffd076e39d1a18829e \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CHOOSE_DESTINATION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CHOOSE_DESTINATION.png.sha1 deleted file mode 100644 index 2b601e9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CHOOSE_DESTINATION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -006b1a91801c428582db21033d57f72f71ff58f7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CHOOSE_WP_DISABLE_METHOD_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CHOOSE_WP_DISABLE_METHOD_PAGE_TITLE.png.sha1 deleted file mode 100644 index 30afd6b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CHOOSE_WP_DISABLE_METHOD_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -62d0ef9471e4d7c3a092bd38d350d2f1c6f683cc \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_AUDIO.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_AUDIO.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_AUDIO.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BASE_ACCELEROMETER.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BASE_ACCELEROMETER.png.sha1 deleted file mode 100644 index 5466627..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BASE_ACCELEROMETER.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -64837a91dcbbb0ddbab9b08e8c1e06788ca5fc7c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BASE_GYROSCOPE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BASE_GYROSCOPE.png.sha1 deleted file mode 100644 index 5466627..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BASE_GYROSCOPE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -64837a91dcbbb0ddbab9b08e8c1e06788ca5fc7c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BATTERY.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BATTERY.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_BATTERY.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_CAMERA.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_CAMERA.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_CAMERA.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_CELLULAR.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_CELLULAR.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_CELLULAR.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_DISPLAY_PANEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_DISPLAY_PANEL.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_DISPLAY_PANEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_ETHERNET.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_ETHERNET.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_ETHERNET.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_KEYBOARD.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_KEYBOARD.png.sha1 deleted file mode 100644 index 5466627..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_KEYBOARD.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -64837a91dcbbb0ddbab9b08e8c1e06788ca5fc7c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_LID_ACCELEROMETER.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_LID_ACCELEROMETER.png.sha1 deleted file mode 100644 index 5466627..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_LID_ACCELEROMETER.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -64837a91dcbbb0ddbab9b08e8c1e06788ca5fc7c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_LID_GYROSCOPE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_LID_GYROSCOPE.png.sha1 deleted file mode 100644 index 5466627..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_LID_GYROSCOPE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -64837a91dcbbb0ddbab9b08e8c1e06788ca5fc7c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_MEMORY.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_MEMORY.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_MEMORY.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_NETWORK.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_NETWORK.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_NETWORK.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_POWER_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_POWER_BUTTON.png.sha1 deleted file mode 100644 index 5466627..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_POWER_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -64837a91dcbbb0ddbab9b08e8c1e06788ca5fc7c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_SCREEN.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_SCREEN.png.sha1 deleted file mode 100644 index 5466627..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_SCREEN.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -64837a91dcbbb0ddbab9b08e8c1e06788ca5fc7c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_STYLUS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_STYLUS.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_STYLUS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_TOUCHPAD.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_TOUCHPAD.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_TOUCHPAD.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_TOUCHSCREEN.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_TOUCHSCREEN.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_TOUCHSCREEN.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_VPD_CACHE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_VPD_CACHE.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_VPD_CACHE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_WIRELESS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_WIRELESS.png.sha1 deleted file mode 100644 index b0f7d14..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_COMPONENT_WIRELESS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f14178c8d529913e841afb5dfab55927f80d2ede \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DRAM_PART_NUMBER_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DRAM_PART_NUMBER_LABEL.png.sha1 deleted file mode 100644 index cfd6be603..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_DRAM_PART_NUMBER_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -15ee5ce32817c48119fb40c00836fbbe472ae4b8 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_EMPTY_WHITE_LABEL_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_EMPTY_WHITE_LABEL_LABEL.png.sha1 deleted file mode 100644 index 503a65b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_EMPTY_WHITE_LABEL_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d40ba385baf7956435f90e0c806d9a396c9efb34 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_INSTRUCTIONS.png.sha1 deleted file mode 100644 index 513f5ff..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -dcc547d7dd4bf72c6a3881557047ccf9bb1b817d \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REGION_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REGION_LABEL.png.sha1 deleted file mode 100644 index e3f9e7a5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REGION_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -45472eb934d28d8f1e31341e03b9aed3965683dc \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REVERT_BUTTON_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REVERT_BUTTON_LABEL.png.sha1 deleted file mode 100644 index 20ed676..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_REVERT_BUTTON_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d86325090e9519bb4ba5d2397466a7b00b801b58 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SERIAL_NUMBER_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SERIAL_NUMBER_LABEL.png.sha1 deleted file mode 100644 index c85cc52e..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SERIAL_NUMBER_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f5afacc7bc844c2e5c20fb680e87deac59db3da7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_LABEL.png.sha1 deleted file mode 100644 index 328d855..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9c43ebbae20f53cb8593cfb0b5edd44fd44da9c2 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_WARNING.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_WARNING.png.sha1 deleted file mode 100644 index 12e160c..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_SKU_WARNING.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5ef862f4ca3a8ae9a7074e8a7ab51fd2975a85f4 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_TITLE.png.sha1 deleted file mode 100644 index e8ef8c2..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d7d6f0e111b4f76064b2c0dd458781bc9fe6fb23 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_WHITE_LABEL_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_WHITE_LABEL_LABEL.png.sha1 deleted file mode 100644 index 5d91619..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONFIRM_DEVICE_INFO_WHITE_LABEL_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6ff10e13f25f61d409bcff0e68b59d6caeb8b4f4 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CANCEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CANCEL.png.sha1 deleted file mode 100644 index 9365ab3..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CANCEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d346e68287c3c1758019e2b180bd900790fbd82f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONFIG_NAME.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONFIG_NAME.png.sha1 deleted file mode 100644 index 0d3b235..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONFIG_NAME.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e2a1c4d3bc41ccc90e4ef6c3ef3991888337dd86 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONNECT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONNECT.png.sha1 deleted file mode 100644 index 9365ab3..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_CONNECT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d346e68287c3c1758019e2b180bd900790fbd82f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_DISCONNECT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_DISCONNECT.png.sha1 deleted file mode 100644 index a18d416..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_DISCONNECT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b7092725cd22aa087631c9b0aac400c96f791902 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_JOIN_TYPE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_JOIN_TYPE.png.sha1 deleted file mode 100644 index 9365ab3..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_DIALOG_JOIN_TYPE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d346e68287c3c1758019e2b180bd900790fbd82f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_PAGE_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_PAGE_DESCRIPTION.png.sha1 deleted file mode 100644 index 1103f89..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_PAGE_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f5831dd696e9eddfb03ca29dff58c0d9cb8bc8da \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_PAGE_TITLE.png.sha1 deleted file mode 100644 index 774bae6..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CONNECT_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a3061e9dc019468651b995e49f60aca97580c75d \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_ERROR_MESSAGE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_ERROR_MESSAGE.png.sha1 deleted file mode 100644 index ea2015f..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_ERROR_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bd37a0d71523b5a912e7c314ea96e3cf7adefd30 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_ERROR_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_ERROR_TITLE.png.sha1 deleted file mode 100644 index ea2015f..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_ERROR_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bd37a0d71523b5a912e7c314ea96e3cf7adefd30 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_EXIT_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_EXIT_BUTTON.png.sha1 deleted file mode 100644 index ea2015f..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_EXIT_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bd37a0d71523b5a912e7c314ea96e3cf7adefd30 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_REBOOT_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_REBOOT_BUTTON.png.sha1 deleted file mode 100644 index ea2015f..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CRITICAL_REBOOT_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bd37a0d71523b5a912e7c314ea96e3cf7adefd30 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CURRENT_VERSION_OUT_OF_DATE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CURRENT_VERSION_OUT_OF_DATE.png.sha1 deleted file mode 100644 index bcff6a6..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_CURRENT_VERSION_OUT_OF_DATE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7fda36db85906440ce14289d82c70c04ca36ed35 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_DONE_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_DONE_BUTTON.png.sha1 deleted file mode 100644 index c2367c5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_DONE_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c25d4a76d821e5a51dde9a48d87cdba3401aa38a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_DOWNLOADING_ALT_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_DOWNLOADING_ALT_TEXT.png.sha1 deleted file mode 100644 index 9d6013e9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_DOWNLOADING_ALT_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5c7cc9a92390f6f00c410317ca781762def22dbb \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_ERROR_ALT_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_ERROR_ALT_TEXT.png.sha1 deleted file mode 100644 index d9e052b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_ERROR_ALT_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -98be9d63ba51f68178722da60274188507154e3e \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_EXIT_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_EXIT_BUTTON.png.sha1 deleted file mode 100644 index 508dfd4..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_EXIT_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b02d76fefb9806d682ffdeb620ef46eb8437c5f9 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_FILE_NOT_FOUND.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_FILE_NOT_FOUND.png.sha1 deleted file mode 100644 index 51c0b544..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_FILE_NOT_FOUND.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -96e0bd61aa547d89fc89537fc4fffff8042205a2 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_REBOOT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_REBOOT.png.sha1 deleted file mode 100644 index d5ee931c..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_REBOOT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7cb2ecfcedf78f17b2eed4d514696ab4cf8dbcc8 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_COMPLETE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_COMPLETE.png.sha1 deleted file mode 100644 index f58f76e..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_COMPLETE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d252ae7b76c89138f4afa159557c2942b9b85d1a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_COMPLETE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_COMPLETE_TITLE.png.sha1 deleted file mode 100644 index f46366b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_COMPLETE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ae9c6e3faa11effc28a8d7473706f0ee1677c550 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_IMAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_IMAGE_TITLE.png.sha1 deleted file mode 100644 index d5d2dd697..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATE_INSTALL_IMAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4e4c20ad5008a55e24d7039536bf4f8376eff0a9 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATING.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATING.png.sha1 deleted file mode 100644 index 7db156e..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_UPDATING.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -16e5a0e914aa97d8edf0bbf0b87d144244ec89be \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_WAIT_FOR_USB.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_WAIT_FOR_USB.png.sha1 deleted file mode 100644 index 030ed992..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_FIRMWARE_WAIT_FOR_USB.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7b480e0ce5a6ada4df55eca10915bbe92c652d70 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_ERROR_MESSAGE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_ERROR_MESSAGE.png.sha1 deleted file mode 100644 index 4f538c9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_ERROR_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -700b679b74d0fa77a285bccc3861c16541a245c5 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_ERROR_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_ERROR_TITLE.png.sha1 deleted file mode 100644 index 4f538c9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_ERROR_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -700b679b74d0fa77a285bccc3861c16541a245c5 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_SHUTDOWN_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_SHUTDOWN_BUTTON.png.sha1 deleted file mode 100644 index 4f538c9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_HARDWARE_SHUTDOWN_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -700b679b74d0fa77a285bccc3861c16541a245c5 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_INSERT_USB_ALT_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_INSERT_USB_ALT_TEXT.png.sha1 deleted file mode 100644 index 55ca1e7e..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_INSERT_USB_ALT_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -87123856ebdc483cfa72d2f39a2218e7ba4a24d3 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LID_CALIBRATION_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LID_CALIBRATION_INSTRUCTIONS.png.sha1 deleted file mode 100644 index e2d14ba..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LID_CALIBRATION_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -93acde543d3c5f20d4e59fbca8f0178e7e0e14a4 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LID_ON_FLAT_SURFACE_ALT_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LID_ON_FLAT_SURFACE_ALT_TEXT.png.sha1 deleted file mode 100644 index fbd4c691..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LID_ON_FLAT_SURFACE_ALT_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -86dca99e5113881ae313e51d88628b36c2b98c30 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_CANCEL_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_CANCEL_BUTTON.png.sha1 deleted file mode 100644 index 184284c1..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_CANCEL_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9208101f7865e95f3bd00f411636c34e8098f2dd \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_BUTTON.png.sha1 deleted file mode 100644 index 184284c1..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9208101f7865e95f3bd00f411636c34e8098f2dd \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_FAIL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_FAIL.png.sha1 deleted file mode 100644 index e63d1c2..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_FAIL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ca11665bf89584caab63ebc05c605a081365f1f8 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_SUCCESS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_SUCCESS.png.sha1 deleted file mode 100644 index ab25977..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_SAVE_SUCCESS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9dca3f6c42947272684d3ee296bfb193247f28de \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_TITLE.png.sha1 deleted file mode 100644 index 184284c1..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_LOGS_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9208101f7865e95f3bd00f411636c34e8098f2dd \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS.png.sha1 deleted file mode 100644 index 41e2987..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -84d339347746d3b0e8d2514f4905d1e2c8aceaea \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS_REBOOT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS_REBOOT.png.sha1 deleted file mode 100644 index 9b96af4..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_INSTRUCTIONS_REBOOT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -95ef95b111f9eef0be45a2522c4d6b8792fc931d \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE.png.sha1 deleted file mode 100644 index 41e2987..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -84d339347746d3b0e8d2514f4905d1e2c8aceaea \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE_REBOOT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE_REBOOT.png.sha1 deleted file mode 100644 index 9b96af4..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_DISABLE_WP_TITLE_REBOOT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -95ef95b111f9eef0be45a2522c4d6b8792fc931d \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_INSTRUCTIONS.png.sha1 deleted file mode 100644 index be19a73..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bd2f7a0d76224ca8393b79a4c999dba426729e9c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_TITLE.png.sha1 deleted file mode 100644 index be19a73..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUALLY_ENABLE_WP_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -bd2f7a0d76224ca8393b79a4c999dba426729e9c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_DESCRIPTION.png.sha1 deleted file mode 100644 index 30afd6b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -62d0ef9471e4d7c3a092bd38d350d2f1c6f683cc \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_OPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_OPTION.png.sha1 deleted file mode 100644 index 30afd6b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_MANUAL_WP_DISABLE_METHOD_OPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -62d0ef9471e4d7c3a092bd38d350d2f1c6f683cc \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEW_OWNER.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEW_OWNER.png.sha1 deleted file mode 100644 index 2b601e9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEW_OWNER.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -006b1a91801c428582db21033d57f72f71ff58f7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEW_OWNER_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEW_OWNER_DESCRIPTION.png.sha1 deleted file mode 100644 index 2b601e9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEW_OWNER_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -006b1a91801c428582db21033d57f72f71ff58f7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEXT_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEXT_BUTTON.png.sha1 deleted file mode 100644 index b4cb0385..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NEXT_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -74fde7f3338570b6e3964813435bc36de9db43d0 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NOT_SURE_OWNER.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NOT_SURE_OWNER.png.sha1 deleted file mode 100644 index 2b601e9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_NOT_SURE_OWNER.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -006b1a91801c428582db21033d57f72f71ff58f7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_OK_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_OK_BUTTON.png.sha1 deleted file mode 100644 index ed3719e..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_OK_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -424ffd5bc00347c9cb0c784fa81ab375790c0876 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_POWERWASH_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_POWERWASH_BUTTON.png.sha1 deleted file mode 100644 index 1c7a69a..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_POWERWASH_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -21c8228db11a55feb73d592a4b85e42f9816caa9 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_REBOOT_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_REBOOT_DESCRIPTION.png.sha1 deleted file mode 100644 index fcdbd1c8..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_REBOOT_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -994e0b27c2cc2a63ac757e52229e5cc3cc66a2c8 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_SHUTDOWN_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_SHUTDOWN_DESCRIPTION.png.sha1 deleted file mode 100644 index 1c7a69a..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_SHUTDOWN_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -21c8228db11a55feb73d592a4b85e42f9816caa9 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_TITLE.png.sha1 deleted file mode 100644 index 1c7a69a..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_POWERWASH_DIALOG_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -21c8228db11a55feb73d592a4b85e42f9816caa9 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_TITLE.png.sha1 deleted file mode 100644 index 6adf0e3..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fc64cb72b0c455c7131677c98b2ac3617c39f952 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_BODY.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_BODY.png.sha1 deleted file mode 100644 index 1c9db390..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_BODY.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7293dc7c51c42bfed08d4c94518274693b981eb4 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_TITLE.png.sha1 deleted file mode 100644 index 11f6b52..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_PROVISIONING_WP_ENABLED_DIALOG_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2035c535f61a10cf5537f5ce8bea3546e9634d84 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_MESSAGE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_MESSAGE.png.sha1 deleted file mode 100644 index 4294bcf..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -159444b4c3dd70f51371978e42a5cee89ace2a1c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_MESSAGE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_MESSAGE.png.sha1 deleted file mode 100644 index 4476390..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cef967ea09cc8ca6146cffbaa2f6d241670a22aa \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_TITLE.png.sha1 deleted file mode 100644 index 4476390..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_SHUTDOWN_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -cef967ea09cc8ca6146cffbaa2f6d241670a22aa \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_TITLE.png.sha1 deleted file mode 100644 index ef13d231..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REBOOT_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -3275d5e178ca28fe6c51a7f2ae142cc29b671797 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_BUTTON.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_DESCRIPTION.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_INSTRUCTIONS.png.sha1 deleted file mode 100644 index dcc6684..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c9af7dde438154cd795adde1d2147231ff7029ee \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_SHUTDOWN_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_SHUTDOWN_BUTTON.png.sha1 deleted file mode 100644 index 72b0c78..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_BATTERY_CUTOFF_SHUTDOWN_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1b154aa002aeab23bfa9c5446195675b5a588d06 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_CUTOFF_COUNTDOWN_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_CUTOFF_COUNTDOWN_DESCRIPTION.png.sha1 deleted file mode 100644 index 72b0c78..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_CUTOFF_COUNTDOWN_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1b154aa002aeab23bfa9c5446195675b5a588d06 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DESCRIPTION.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_BUTTON.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_DESCRIPTION.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_DIAGNOSTICS_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_BUTTON.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_DESCRIPTION.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_LOGS_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_BUTTON.png.sha1 deleted file mode 100644 index 33d3fd7..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -17c7dafccd71623f6a1f2826b8c5487b342e8327 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_REBOOT_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_REBOOT_DESCRIPTION.png.sha1 deleted file mode 100644 index 2ae4f54..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_REBOOT_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -db2818746d58d4c09b30a10805122e028003a96f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_SHUTDOWN_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_SHUTDOWN_DESCRIPTION.png.sha1 deleted file mode 100644 index 33d3fd7..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_SHUTDOWN_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -17c7dafccd71623f6a1f2826b8c5487b342e8327 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_TITLE.png.sha1 deleted file mode 100644 index 2ae4f54..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_POWERWASH_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -db2818746d58d4c09b30a10805122e028003a96f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_REBOOT_BUTTON_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_REBOOT_BUTTON_LABEL.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_REBOOT_BUTTON_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_SHUT_DOWN_BUTTON_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_SHUT_DOWN_BUTTON_LABEL.png.sha1 deleted file mode 100644 index d41c6e5..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_COMPLETED_SHUT_DOWN_BUTTON_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c7e3ab230513940fe3052f7818a34abf161fd24a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_START_ALT_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_START_ALT_TEXT.png.sha1 deleted file mode 100644 index 3a195d6..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REPAIR_START_ALT_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -dead20e084942de090a6c10387c0d3dd001f4b04 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_CONTINUE_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_CONTINUE_BUTTON.png.sha1 deleted file mode 100644 index d2c861a..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_CONTINUE_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fa70da8877a23fc25894c1bac8ff8ac84067a96b \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_INSTRUCTIONS.png.sha1 deleted file mode 100644 index d2c861a..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fa70da8877a23fc25894c1bac8ff8ac84067a96b \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_PAGE_TITLE.png.sha1 deleted file mode 100644 index d2c861a..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fa70da8877a23fc25894c1bac8ff8ac84067a96b \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_SHUTDOWN_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_SHUTDOWN_BUTTON.png.sha1 deleted file mode 100644 index a59cc3fa..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RESTOCK_SHUTDOWN_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -920f7c170a437d4faeb7c0cbe34a00c74ac4511c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RETRY_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RETRY_BUTTON.png.sha1 deleted file mode 100644 index fb103f05..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RETRY_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5f9b8e15c15124b575fafc7f7a6e13c04c6d3670 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REWORK_FLOW_LINK.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REWORK_FLOW_LINK.png.sha1 deleted file mode 100644 index d477a23..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_REWORK_FLOW_LINK.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e9dd0265bd55efd8c976431864c77f14f8a517d4 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_DONE_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_DONE_BUTTON.png.sha1 deleted file mode 100644 index fa23970a..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_DONE_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fb607e3dc023de3bee8d2253365f1a4b68bed27c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_TITLE.png.sha1 deleted file mode 100644 index fa23970a..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CHALLENGE_DIALOG_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fb607e3dc023de3bee8d2253365f1a4b68bed27c \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_ERROR_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_ERROR_LABEL.png.sha1 deleted file mode 100644 index d0b18009..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_ERROR_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -44b6e0872dfaf25816bd981f13cdcd4917b1716d \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_INSTRUCTIONS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_INSTRUCTIONS.png.sha1 deleted file mode 100644 index 4f7fc23..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_INSTRUCTIONS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e95842cc5b229f484b02953fbd05e05665fc98c1 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_LABEL.png.sha1 deleted file mode 100644 index 4f7fc23..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e95842cc5b229f484b02953fbd05e05665fc98c1 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_PAGE_TITLE.png.sha1 deleted file mode 100644 index 4f7fc23..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_CODE_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e95842cc5b229f484b02953fbd05e05665fc98c1 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_DESCRIPTION.png.sha1 deleted file mode 100644 index 30afd6b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -62d0ef9471e4d7c3a092bd38d350d2f1c6f683cc \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_OPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_OPTION.png.sha1 deleted file mode 100644 index 30afd6b..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RSU_WP_DISABLE_METHOD_OPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -62d0ef9471e4d7c3a092bd38d350d2f1c6f683cc \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RUN_CALIBRATION_COMPLETE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RUN_CALIBRATION_COMPLETE_TITLE.png.sha1 deleted file mode 100644 index 8cbf8a3..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RUN_CALIBRATION_COMPLETE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8c3b002e7118d62f97165eb4113c1260e5811b58 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RUN_CALIBRATION_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RUN_CALIBRATION_PAGE_TITLE.png.sha1 deleted file mode 100644 index 82114c0..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_RUN_CALIBRATION_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b32d3b07caa3fba62f59b27ae672aca4d7b9c1ee \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SAME_OWNER.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SAME_OWNER.png.sha1 deleted file mode 100644 index 2b601e9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SAME_OWNER.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -006b1a91801c428582db21033d57f72f71ff58f7 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SELECT_COMPONENTS_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SELECT_COMPONENTS_PAGE_TITLE.png.sha1 deleted file mode 100644 index ac71d803..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SELECT_COMPONENTS_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a97bbd6cc9f96c1e1e29bfbfabe0117b50cd6c47 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SETUP_CALIBRATION_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SETUP_CALIBRATION_PAGE_TITLE.png.sha1 deleted file mode 100644 index fbc8350..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SETUP_CALIBRATION_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -61745815ed8b78514ea3df9b4fa1d896198829ec \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SKIP_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SKIP_BUTTON.png.sha1 deleted file mode 100644 index 7e8e728..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SKIP_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4c21805ff4d50a9994fbffaa2495601c3b9b8ef2 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SPLASH_REMEMBERING.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SPLASH_REMEMBERING.png.sha1 deleted file mode 100644 index 72d55594..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SPLASH_REMEMBERING.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c9df396c575fe5e5c484d4ee3830aa5b61289423 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SPLASH_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SPLASH_TITLE.png.sha1 deleted file mode 100644 index 23d76a3e..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SPLASH_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -153eb2d5620c1ef3a03667336aefe8687b5d31c3 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SUCCESS_ALT_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SUCCESS_ALT_TEXT.png.sha1 deleted file mode 100644 index dd3fb92..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_SUCCESS_ALT_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fb7e8a1778ba8d2160ee89b10212e930e4631c95 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_TRY_AGAIN_BUTTON.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_TRY_AGAIN_BUTTON.png.sha1 deleted file mode 100644 index d0b546d..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_TRY_AGAIN_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -28e2e1e2f9f733fb7499082a9e06cd04d6a19676 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UNDETECTED_COMPONENT_LABEL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UNDETECTED_COMPONENT_LABEL.png.sha1 deleted file mode 100644 index 85dbcf7..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UNDETECTED_COMPONENT_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2b7cd2f754510be1d1259a68bdbed8063c2d5181 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UNQUALIFIED_COMPONENTS_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UNQUALIFIED_COMPONENTS_TITLE.png.sha1 deleted file mode 100644 index 0f8d4d126..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UNQUALIFIED_COMPONENTS_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -167cf405a6b3eaca34e9f172048def3f09a43c29 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_ALT_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_ALT_TEXT.png.sha1 deleted file mode 100644 index 1e38ed9..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_ALT_TEXT.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -405d6427f4ab09ec5c2c8f0d52d19e4eb1bb8446 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_ERROR_MESSAGE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_ERROR_MESSAGE.png.sha1 deleted file mode 100644 index 4b693b1..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_ERROR_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a957785a93e14a57d29f96f190239affb1486356 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_OUT_OF_DATE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_OUT_OF_DATE.png.sha1 deleted file mode 100644 index b1184ff..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_OUT_OF_DATE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -15909968779fc03e5f88cf0dafc1c67074a36e1f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_PAGE_TITLE.png.sha1 deleted file mode 100644 index 83a94fbc..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e1838ed243e69c2fdb82e5f2ee866a9bf042d9ff \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_BOTTOM.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_BOTTOM.png.sha1 deleted file mode 100644 index 61730df..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_BOTTOM.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -589c4f82d209e483bf7bdcf3be2f5ef0e6934a05 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_TOP.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_TOP.png.sha1 deleted file mode 100644 index 5e98ce3..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_OS_UNQUALIFIED_COMPONENTS_TOP.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fcd8a073a4dbf8c81e61dc477b0bf170906298fc \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_VERSION_AND_RESTART.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_VERSION_AND_RESTART.png.sha1 deleted file mode 100644 index c5aabdb6..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATE_VERSION_AND_RESTART.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b0b3f3f12ee21ab0e65b58074cc59335f1352406 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATING_OS_VERSION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATING_OS_VERSION.png.sha1 deleted file mode 100644 index 653af01c2..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_UPDATING_OS_VERSION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d403ea21d9869fe70e06fdb4ec2e361b46de9082 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_FAIL.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_FAIL.png.sha1 deleted file mode 100644 index 2c461127..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_VALIDATED_COMPONENTS_FAIL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -849684b367dfec67353f042ef9cafc0aae4e744a \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_PRESERVE_DATA_OPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_PRESERVE_DATA_OPTION.png.sha1 deleted file mode 100644 index e218d21c..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_PRESERVE_DATA_OPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7684a01515791cdd92645638eb6157e41b75abe8 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION.png.sha1 deleted file mode 100644 index e218d21c..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7684a01515791cdd92645638eb6157e41b75abe8 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION_DESCRIPTION.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION_DESCRIPTION.png.sha1 deleted file mode 100644 index e218d21c..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_REMOVE_DATA_OPTION_DESCRIPTION.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7684a01515791cdd92645638eb6157e41b75abe8 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_TITLE.png.sha1 deleted file mode 100644 index e218d21c..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WIPE_DEVICE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7684a01515791cdd92645638eb6157e41b75abe8 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_COMPLETE_PAGE_TITLE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_COMPLETE_PAGE_TITLE.png.sha1 deleted file mode 100644 index acfdddb..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_COMPLETE_PAGE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d7e1e62e8e9e77fcfde07f742366f1790a2979b9 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_LEAVE_DISASSEMBLED_MESSAGE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_LEAVE_DISASSEMBLED_MESSAGE.png.sha1 deleted file mode 100644 index 03ddcc806..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_LEAVE_DISASSEMBLED_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -9a77c9d7dbe86c8af61fb341c11cda26bcd283a3 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_REASSEMBLE_NOW_MESSAGE.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_REASSEMBLE_NOW_MESSAGE.png.sha1 deleted file mode 100644 index acfdddb..0000000 --- a/chromeos/chromeos_strings_grd/IDS_SHIMLESS_RMA_WP_DISABLE_REASSEMBLE_NOW_MESSAGE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d7e1e62e8e9e77fcfde07f742366f1790a2979b9 \ No newline at end of file
diff --git a/chromeos/lacros/lacros_service.cc b/chromeos/lacros/lacros_service.cc index 6da1d10b..0db45c76 100644 --- a/chromeos/lacros/lacros_service.cc +++ b/chromeos/lacros/lacros_service.cc
@@ -176,9 +176,7 @@ } LacrosService::LacrosService() - : // If crosapi is disabled, use the empty params. - // Otherwise, read the startup data from the inherited FD. - never_blocking_sequence_(base::ThreadPool::CreateSequencedTaskRunner( + : never_blocking_sequence_(base::ThreadPool::CreateSequencedTaskRunner( {base::TaskPriority::USER_BLOCKING, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN})), sequenced_state_(new LacrosServiceNeverBlockingState(),
diff --git a/chromeos/services/hotspot_config/OWNERS b/chromeos/services/hotspot_config/OWNERS new file mode 100644 index 0000000..42ca3a9 --- /dev/null +++ b/chromeos/services/hotspot_config/OWNERS
@@ -0,0 +1,3 @@ +azeemarshad@google.com +jiajunz@google.com +khorimoto@google.com \ No newline at end of file
diff --git a/chromeos/services/hotspot_config/public/mojom/BUILD.gn b/chromeos/services/hotspot_config/public/mojom/BUILD.gn new file mode 100644 index 0000000..1c78fde --- /dev/null +++ b/chromeos/services/hotspot_config/public/mojom/BUILD.gn
@@ -0,0 +1,12 @@ +# Copyright 2022 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("//mojo/public/tools/bindings/mojom.gni") + +mojom("mojom") { + sources = [ "cros_hotspot_config.mojom" ] + public_deps = [ "//mojo/public/mojom/base" ] + webui_module_path = + "chrome://resources/mojo/chromeos/services/hotspot_config/public/mojom" +}
diff --git a/chromeos/services/hotspot_config/public/mojom/OWNERS b/chromeos/services/hotspot_config/public/mojom/OWNERS new file mode 100644 index 0000000..61b5e28 --- /dev/null +++ b/chromeos/services/hotspot_config/public/mojom/OWNERS
@@ -0,0 +1,2 @@ +per-file *.mojom=set noparent +per-file *.mojom=file://ipc/SECURITY_OWNERS \ No newline at end of file
diff --git a/chromeos/services/hotspot_config/public/mojom/cros_hotspot_config.mojom b/chromeos/services/hotspot_config/public/mojom/cros_hotspot_config.mojom new file mode 100644 index 0000000..bde091f --- /dev/null +++ b/chromeos/services/hotspot_config/public/mojom/cros_hotspot_config.mojom
@@ -0,0 +1,12 @@ +// Copyright 2022 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 chromeos.hotspot_config.mojom; + +enum HotspotState { + kDisabled, + kEnabled, + kEnabling, + kDisabling, +}; \ No newline at end of file
diff --git a/chromeos/services/libassistant/settings_controller.cc b/chromeos/services/libassistant/settings_controller.cc index 08987dd..0bc8db33 100644 --- a/chromeos/services/libassistant/settings_controller.cc +++ b/chromeos/services/libassistant/settings_controller.cc
@@ -23,8 +23,16 @@ #include "third_party/icu/source/common/unicode/locid.h" namespace chromeos { -namespace libassistant { +// TODO(https://crbug.com/1164001): remove after migrating to ash. +namespace assistant { +using ::ash::assistant::AssistantDevice; +using ::ash::assistant::AssistantDeviceSettings; +using ::ash::assistant::AssistantDeviceSettingsUpdate; +using ::ash::assistant::SettingsUiUpdate; +} // namespace assistant + +namespace libassistant { namespace { // Each authentication token exists of a [gaia_id, access_token] tuple.
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb index 5b858a8..e939824 100644 --- a/chromeos/strings/chromeos_strings_fa.xtb +++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">توضیح</translation> <translation id="387301095347517405">تعداد دفعاتی که باتریتان یک دوره شارژ کامل را گذرانده است</translation> <translation id="3885327323343477505">تغییر محافظ صفحهنمایش</translation> +<translation id="3913541166352922049">سیستم تا <ph name="DELAY_DURATION" /> ثانیه دیگر خاموش خواهد شد.</translation> <translation id="3923184630988645767">مصرف داده</translation> <translation id="3924044641767672375">برای آسانتر شدن فرایند تعمیر، توصیه میشود به Wi-Fi متصل شوید. شبکهتان ذخیره خواهد شد.</translation> <translation id="3932043219784172185">دستگاهی متصل نیست</translation> @@ -520,6 +521,7 @@ <translation id="5346687412805619883">شبکه محلی</translation> <translation id="5358174242040570474">مشکلی پیش آمد. دوباره کاغذدیواری را انتخاب کنید یا برنامه را مجدداً باز کنید.</translation> <translation id="5372659122375744710">شبکه Wi-Fi ایمن نیست</translation> +<translation id="5376136733560434719">درحال آمادهسازی برای خاموش شدن…</translation> <translation id="5376354385557966694">حالت روشن خودکار</translation> <translation id="537872351913703572">دستگاه به کاربر یا سازمان دیگری منتقل خواهد شد</translation> <translation id="5389159777326897627">کاغذدیواری و سبک</translation> @@ -749,6 +751,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{اسکن کامل شد. ۱ صفحه اسکن شد}one{اسکن کامل شد. {NUMBER_OF_PAGES} صفحه اسکن شد}other{اسکن کامل شد. {NUMBER_OF_PAGES} صفحه اسکن شد}}</translation> <translation id="7469648432129124067">درگاهی شناسایی شد</translation> +<translation id="7478405245077383528">سیستم تا <ph name="DELAY_DURATION" /> ثانیه دیگر بازراهاندازی خواهد شد.</translation> <translation id="7481312909269577407">ارسال کردن</translation> <translation id="7487067081878637334">فناوری</translation> <translation id="7490813197707563893">نشانی واد</translation>
diff --git a/chromeos/strings/chromeos_strings_ka.xtb b/chromeos/strings/chromeos_strings_ka.xtb index c273360..d8db3611 100644 --- a/chromeos/strings/chromeos_strings_ka.xtb +++ b/chromeos/strings/chromeos_strings_ka.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">აღწერა</translation> <translation id="387301095347517405">ბატარეის დატენის სრული ციკლების რაოდენობა</translation> <translation id="3885327323343477505">ეკრანმზოგის შეცვლა</translation> +<translation id="3913541166352922049">სისტემა გამოირთვება <ph name="DELAY_DURATION" /> წამში.</translation> <translation id="3923184630988645767">მონაცემთა მოხმარება</translation> <translation id="3924044641767672375">აღდგენის პროცესის გასამარტივებლად რეკომენდებულია Wi-Fi ქსელთან დაკავშირება. თქვენი ქსელი შეინახება.</translation> <translation id="3932043219784172185">დაკავშირებული მოწყობილობები არ არის</translation> @@ -520,6 +521,7 @@ <translation id="5346687412805619883">ადგილობრივი ქსელი</translation> <translation id="5358174242040570474">რაღაც შეცდომა მოხდა. ხელახლა ცადეთ ფონის არჩევა ან აპის გახსნა.</translation> <translation id="5372659122375744710">Wi-Fi ქსელი არ არის დაცული</translation> +<translation id="5376136733560434719">მიმდინარეობს გამორთვისთვის მომზადება...</translation> <translation id="5376354385557966694">ავტომატური ღია რეჟიმი</translation> <translation id="537872351913703572">მოწყობილობას სხვა მომხმარებელი ან ორგანიზაცია მიიღებს</translation> <translation id="5389159777326897627">ფონი და სტილი</translation> @@ -749,6 +751,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{სკანირება დასრულდა. დასკანირდა 1 გვერდი.}other{სკანირება დასრულდა. დასკანირდა {NUMBER_OF_PAGES} გვერდი.}}</translation> <translation id="7469648432129124067">აღმოჩენილია პორტალი</translation> +<translation id="7478405245077383528">სისტემა გადაიტვირთება <ph name="DELAY_DURATION" /> წამში.</translation> <translation id="7481312909269577407">გადამისამართება</translation> <translation id="7487067081878637334">ტექნოლოგია</translation> <translation id="7490813197707563893">MAC მისამართი</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb index cf8cb45..b94e9ff 100644 --- a/chromeos/strings/chromeos_strings_lv.xtb +++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">Apraksts</translation> <translation id="387301095347517405">Cik pilnu uzlādes ciklu ir bijis jūsu akumulatoram</translation> <translation id="3885327323343477505">Mainīt ekrānsaudzētāju</translation> +<translation id="3913541166352922049">Sistēma tiks izslēgta pēc <ph name="DELAY_DURATION" /> s.</translation> <translation id="3923184630988645767">Datu lietojums</translation> <translation id="3924044641767672375">Ieteicams izveidot savienojumu ar Wi-Fi tīklu, lai atvieglotu labošanu. Jūsu tīkls tiks saglabāts.</translation> <translation id="3932043219784172185">Nav pievienota neviena ierīce</translation> @@ -520,6 +521,7 @@ <translation id="5346687412805619883">Lokālais tīkls</translation> <translation id="5358174242040570474">Radās kļūda. Mēģiniet vēlreiz izvēlēties fona tapeti vai atkārtoti atveriet lietotni.</translation> <translation id="5372659122375744710">Wi-Fi tīkls nav drošs</translation> +<translation id="5376136733560434719">Notiek gatavošanās izslēgšanai…</translation> <translation id="5376354385557966694">Automātisks gaišais režīms</translation> <translation id="537872351913703572">Ierīci izmantos cits lietotājs vai organizācija</translation> <translation id="5389159777326897627">Fona tapete un stils</translation> @@ -749,6 +751,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{Pārbaude pabeigta. Pārbaudīta 1 lapa.}zero{Pārbaude pabeigta. Pārbaudītas {NUMBER_OF_PAGES} lapas.}one{Pārbaude pabeigta. Pārbaudīta {NUMBER_OF_PAGES} lapa.}other{Pārbaude pabeigta. Pārbaudītas {NUMBER_OF_PAGES} lapas.}}</translation> <translation id="7469648432129124067">Konstatēts portāls</translation> +<translation id="7478405245077383528">Sistēma tiks restartēta pēc <ph name="DELAY_DURATION" /> s.</translation> <translation id="7481312909269577407">Pārsūtīt</translation> <translation id="7487067081878637334">Tehnoloģijas</translation> <translation id="7490813197707563893">MAC adrese</translation>
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb index cacb82a0..474ef32 100644 --- a/chromeos/strings/chromeos_strings_mk.xtb +++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">Опис</translation> <translation id="387301095347517405">Колку пати батеријата поминала низ целосен циклус на полнење</translation> <translation id="3885327323343477505">Променете го заштитникот на екранот</translation> +<translation id="3913541166352922049">Системот ќе се исклучи за <ph name="DELAY_DURATION" /> секунди.</translation> <translation id="3923184630988645767">Интернет</translation> <translation id="3924044641767672375">Се препорачува да се поврзете на Wi-Fi за да го олесните процесот на поправка. Вашата мрежа ќе биде зачувана.</translation> <translation id="3932043219784172185">Нема поврзан уред</translation> @@ -520,6 +521,7 @@ <translation id="5346687412805619883">Локална мрежа</translation> <translation id="5358174242040570474">Нешто тргна наопаку. Обидете се повторно да изберете тапет или повторно отворете ја апликацијата.</translation> <translation id="5372659122375744710">WiFi мрежата не е безбедна</translation> +<translation id="5376136733560434719">Се подготвува за исклучување…</translation> <translation id="5376354385557966694">Автоматски светол режим</translation> <translation id="537872351913703572">Уредот ќе се префрли на друг корисник или организација</translation> <translation id="5389159777326897627">Тапети и стил</translation> @@ -749,6 +751,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{Скенирањето е завршено. Скенирана е 1 страница}one{Скенирањето е завршено. Скенирана е {NUMBER_OF_PAGES} страница}other{Скенирањето е завршено. Скенирани се {NUMBER_OF_PAGES} страници}}</translation> <translation id="7469648432129124067">Откриен е портал</translation> +<translation id="7478405245077383528">Системот ќе се рестартира за <ph name="DELAY_DURATION" /> секунди.</translation> <translation id="7481312909269577407">Напред</translation> <translation id="7487067081878637334">Технологија</translation> <translation id="7490813197707563893">MAC-адреса</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb index 6cde75a..b98dea4 100644 --- a/chromeos/strings/chromeos_strings_mn.xtb +++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">Тодорхойлолт</translation> <translation id="387301095347517405">Таны батарейн бүтэн цэнэглэлийн мөчлөгт орсон тоо</translation> <translation id="3885327323343477505">Дэлгэц амраагчийг өөрчлөх</translation> +<translation id="3913541166352922049">Систем <ph name="DELAY_DURATION" /> секундийн дараа унтарна.</translation> <translation id="3923184630988645767">Дата ашиглалт</translation> <translation id="3924044641767672375">Засварын явцыг илүү хялбар болгохын тулд Wi-Fi-д холбогдохыг зөвлөж байна. Таны сүлжээг хадгална.</translation> <translation id="3932043219784172185">Холбогдсон төхөөрөмж алга</translation> @@ -520,6 +521,7 @@ <translation id="5346687412805619883">Дотоод сүлжээ</translation> <translation id="5358174242040570474">Алдаа гарлаа. Дэлгэцийн зураг дахин сонгох эсвэл аппыг дахин нээж үзнэ үү.</translation> <translation id="5372659122375744710">Wi-Fi сүлжээ аюулгүй биш байна</translation> +<translation id="5376136733560434719">Унтраахаар бэлтгэж байна...</translation> <translation id="5376354385557966694">Автомат гэрэлтэй горим</translation> <translation id="537872351913703572">Төхөөрөмж өөр хэрэглэгч эсвэл байгууллага руу очих болно</translation> <translation id="5389159777326897627">Дэлгэцийн зураг & стиль</translation> @@ -749,6 +751,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{Скан хийж дууссан. 1 хуудсыг скан хийсэн}other{Скан хийж дууссан. {NUMBER_OF_PAGES} хуудсыг скан хийсэн}}</translation> <translation id="7469648432129124067">Портал илэрсэн</translation> +<translation id="7478405245077383528">Систем <ph name="DELAY_DURATION" /> секундийн дараа дахин эхэлнэ.</translation> <translation id="7481312909269577407">Forward</translation> <translation id="7487067081878637334">Технологи</translation> <translation id="7490813197707563893">MAC хаяг</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb index 3ffa2c80..81a4d06 100644 --- a/chromeos/strings/chromeos_strings_pa.xtb +++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">ਵਰਣਨ</translation> <translation id="387301095347517405">ਤੁਹਾਡੀ ਬੈਟਰੀ ਵੱਲੋਂ ਚਾਰਜ ਹੋਣ ਦੇ ਚੱਕਰ ਨੂੰ ਪੂਰਾ ਕੀਤੇ ਜਾਣ ਦੀ ਗਿਣਤੀ</translation> <translation id="3885327323343477505">ਸਕ੍ਰੀਨ ਸੇਵਰ ਬਦਲੋ</translation> +<translation id="3913541166352922049">ਸਿਸਟਮ <ph name="DELAY_DURATION" /> ਸਕਿੰਟਾਂ ਵਿੱਚ ਬੰਦ ਹੋ ਜਾਵੇਗਾ।</translation> <translation id="3923184630988645767">ਡਾਟਾ ਵਰਤੋਂ</translation> <translation id="3924044641767672375">ਮੁਰੰਮਤ ਦੀ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਜ਼ਿਆਦਾ ਆਸਾਨ ਬਣਾਉਣ ਲਈ ਵਾਈ-ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਤੁਹਾਡੇ ਨੈੱਟਵਰਕ ਨੂੰ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾਵੇਗਾ।</translation> <translation id="3932043219784172185">ਕੋਈ ਡੀਵਾਈਸ ਕਨੈਕਟ ਨਹੀਂ ਹੈ</translation> @@ -519,6 +520,7 @@ <translation id="5346687412805619883">ਸਥਾਨਕ ਨੈੱਟਵਰਕ</translation> <translation id="5358174242040570474">ਕੋਈ ਗੜਬੜ ਹੋ ਗਈ। ਵਾਲਪੇਪਰ ਨੂੰ ਦੁਬਾਰਾ ਚੁਣ ਕੇ ਦੇਖੋ ਜਾਂ ਐਪ ਨੂੰ ਮੁੜ-ਖੋਲ੍ਹੋ।</translation> <translation id="5372659122375744710">ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹੈ</translation> +<translation id="5376136733560434719">ਬੰਦ ਕਰਨ ਲਈ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation> <translation id="5376354385557966694">ਸਵੈਚਲਿਤ ਹਲਕਾ ਮੋਡ</translation> <translation id="537872351913703572">ਡੀਵਾਈਸ ਕਿਸੇ ਵੱਖਰੇ ਵਰਤੋਂਕਾਰ ਜਾਂ ਸੰਸਥਾ ਕੋਲ ਜਾਵੇਗਾ</translation> <translation id="5389159777326897627">ਵਾਲਪੇਪਰ ਅਤੇ ਸਟਾਈਲ</translation> @@ -748,6 +750,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{ਸਕੈਨਿੰਗ ਪੂਰੀ ਹੋਈ। 1 ਪੰਨਾ ਸਕੈਨ ਕੀਤਾ ਗਿਆ}one{ਸਕੈਨਿੰਗ ਪੂਰੀ ਹੋਈ। {NUMBER_OF_PAGES} ਪੰਨਾ ਸਕੈਨ ਕੀਤਾ ਗਿਆ}other{ਸਕੈਨਿੰਗ ਪੂਰੀ ਹੋਈ। {NUMBER_OF_PAGES} ਪੰਨੇ ਸਕੈਨ ਕੀਤੇ ਗਏ}}</translation> <translation id="7469648432129124067">ਪੋਰਟਲ ਦਾ ਪਤਾ ਲੱਗਾ</translation> +<translation id="7478405245077383528">ਸਿਸਟਮ <ph name="DELAY_DURATION" /> ਸਕਿੰਟਾਂ ਵਿੱਚ ਮੁੜ-ਸ਼ੁਰੂ ਹੋ ਜਾਵੇਗਾ।</translation> <translation id="7481312909269577407">ਅੱਗੇ ਭੇਜੋ</translation> <translation id="7487067081878637334">ਤਕਨਾਲੋਜੀ</translation> <translation id="7490813197707563893">MAC ਪਤਾ</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb index 6b5c0b9c..2a7cff5f 100644 --- a/chromeos/strings/chromeos_strings_th.xtb +++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">คำอธิบาย</translation> <translation id="387301095347517405">จำนวนครั้งที่ชาร์จแบตเตอรี่จนเต็ม</translation> <translation id="3885327323343477505">เปลี่ยนโปรแกรมรักษาหน้าจอ</translation> +<translation id="3913541166352922049">ระบบจะปิดใน <ph name="DELAY_DURATION" /> วินาที</translation> <translation id="3923184630988645767">การใช้อินเทอร์เน็ต</translation> <translation id="3924044641767672375">ขอแนะนำให้เชื่อมต่อ Wi-Fi เพื่อให้ขั้นตอนการซ่อมง่ายขึ้น ระบบจะบันทึกเครือข่ายของคุณ</translation> <translation id="3932043219784172185">ไม่มีอุปกรณ์ที่เชื่อมต่ออยู่</translation> @@ -520,6 +521,7 @@ <translation id="5346687412805619883">เครือข่ายภายใน</translation> <translation id="5358174242040570474">เกิดข้อผิดพลาด ลองเลือกวอลเปเปอร์อีกครั้งหรือเปิดแอปใหม่</translation> <translation id="5372659122375744710">เครือข่าย WiFi ไม่ปลอดภัย</translation> +<translation id="5376136733560434719">กำลังเตรียมการปิด...</translation> <translation id="5376354385557966694">โหมดสว่างอัตโนมัติ</translation> <translation id="537872351913703572">อุปกรณ์จะไปอยู่กับผู้ใช้หรือองค์กรใหม่</translation> <translation id="5389159777326897627">วอลเปเปอร์และสไตล์</translation> @@ -749,6 +751,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{การสแกนเสร็จสมบูรณ์ สแกนแล้ว 1 หน้า}other{การสแกนเสร็จสมบูรณ์ สแกนแล้ว {NUMBER_OF_PAGES} หน้า}}</translation> <translation id="7469648432129124067">ตรวจพบพอร์ทัล</translation> +<translation id="7478405245077383528">ระบบจะรีสตาร์ทใน <ph name="DELAY_DURATION" /> วินาที</translation> <translation id="7481312909269577407">ส่งต่อ</translation> <translation id="7487067081878637334">เทคโนโลยี</translation> <translation id="7490813197707563893">ที่อยู่ MAC</translation>
diff --git a/chromeos/strings/chromeos_strings_uz.xtb b/chromeos/strings/chromeos_strings_uz.xtb index 434c0414..7c9b4f06 100644 --- a/chromeos/strings/chromeos_strings_uz.xtb +++ b/chromeos/strings/chromeos_strings_uz.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">Tavsif</translation> <translation id="387301095347517405">Batareya toʻliq quvvat olgan davrlar soni</translation> <translation id="3885327323343477505">Ekran lavhasini oʻzgartirish</translation> +<translation id="3913541166352922049">Tizim <ph name="DELAY_DURATION" /> soniyadan keyin yakunlanadi.</translation> <translation id="3923184630988645767">Trafik sarfi</translation> <translation id="3924044641767672375">Taʼmirlash jarayoni oson boʻlishi uchun Wi-Fi orqali ulanish tavsiya etiladi. Tarmoq saqlanib qoladi.</translation> <translation id="3932043219784172185">Hech qaysi qurilma ulanmagan!</translation> @@ -520,6 +521,7 @@ <translation id="5346687412805619883">Mahalliy tarmoq</translation> <translation id="5358174242040570474">Xatolik yuz berdi. Fon rasmini qayta tanlang yoki ilovani qaytadan oching.</translation> <translation id="5372659122375744710">WiFi tarmoq xavfsiz emas</translation> +<translation id="5376136733560434719">Tizim yakunlanish arafasida...</translation> <translation id="5376354385557966694">Avtomatik kunduzgi rejim</translation> <translation id="537872351913703572">Qurilma foydalanuvchisi yoki tashkiloti oʻzgaradi</translation> <translation id="5389159777326897627">Fon rasmi va uslubi</translation> @@ -749,6 +751,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{Skanerlandi. 1 ta sahifa skanerlandi}other{Skanerlandi. {NUMBER_OF_PAGES} ta sahifa skanerlandi}}</translation> <translation id="7469648432129124067">Portal aniqlandi</translation> +<translation id="7478405245077383528">Tizim <ph name="DELAY_DURATION" /> soniyadan keyin qayta ishga tushadi.</translation> <translation id="7481312909269577407">Oldinga</translation> <translation id="7487067081878637334">Texnologiya</translation> <translation id="7490813197707563893">MAC manzil</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb index 8dede808..c46feeba 100644 --- a/chromeos/strings/chromeos_strings_vi.xtb +++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -335,6 +335,7 @@ <translation id="3866249974567520381">Mô tả</translation> <translation id="387301095347517405">Số lần pin của bạn được sạc đầy</translation> <translation id="3885327323343477505">Thay đổi trình bảo vệ màn hình</translation> +<translation id="3913541166352922049">Hệ thống sẽ tắt sau <ph name="DELAY_DURATION" /> giây.</translation> <translation id="3923184630988645767">Chế độ sử dụng dữ liệu</translation> <translation id="3924044641767672375">Bạn nên kết nối với Wi-Fi để giúp quy trình sửa chữa dễ dàng hơn. Mạng của bạn sẽ được lưu.</translation> <translation id="3932043219784172185">Không có thiết bị nào được kết nối</translation> @@ -520,6 +521,7 @@ <translation id="5346687412805619883">Mạng cục bộ</translation> <translation id="5358174242040570474">Đã xảy ra lỗi. Hãy thử chọn lại hình nền hoặc mở lại ứng dụng.</translation> <translation id="5372659122375744710">Mạng Wi-Fi không bảo mật</translation> +<translation id="5376136733560434719">Đang chuẩn bị tắt...</translation> <translation id="5376354385557966694">Chế độ sáng tự động</translation> <translation id="537872351913703572">Thiết bị sẽ thuộc về người dùng hoặc tổ chức khác</translation> <translation id="5389159777326897627">Hình nền và phong cách</translation> @@ -749,6 +751,7 @@ <translation id="7427315641433634153">MSCHAP</translation> <translation id="7435977162516949853">{NUMBER_OF_PAGES,plural, =1{Đã quét xong. Đã quét 1 trang}other{Đã quét xong. Đã quét {NUMBER_OF_PAGES} trang}}</translation> <translation id="7469648432129124067">Đã phát hiện thấy cổng</translation> +<translation id="7478405245077383528">Hệ thống sẽ khởi động lại sau <ph name="DELAY_DURATION" /> giây.</translation> <translation id="7481312909269577407">Chuyển tiếp</translation> <translation id="7487067081878637334">Công nghệ</translation> <translation id="7490813197707563893">Địa chỉ MAC</translation>
diff --git a/components/autofill/content/renderer/form_cache.cc b/components/autofill/content/renderer/form_cache.cc index 513cbce..3f5bbf2 100644 --- a/components/autofill/content/renderer/form_cache.cc +++ b/components/autofill/content/renderer/form_cache.cc
@@ -383,6 +383,8 @@ // If the flag is enabled, attach the prediction to the field. if (attach_predictions_to_dom) { constexpr size_t kMaxLabelSize = 100; + // TODO(crbug/1165780): Use `parseable_label()` once the feature is + // launched. const std::u16string truncated_label = field_data.label.substr(0, kMaxLabelSize);
diff --git a/components/autofill/core/browser/autofill_client.cc b/components/autofill/core/browser/autofill_client.cc index 48cedb25..dfe158d 100644 --- a/components/autofill/core/browser/autofill_client.cc +++ b/components/autofill/core/browser/autofill_client.cc
@@ -51,6 +51,14 @@ GetAutocompleteHistoryManager(), GetMerchantPromoCodeManager()); } +CreditCardCVCAuthenticator* AutofillClient::GetCVCAuthenticator() { + return nullptr; +} + +CreditCardOtpAuthenticator* AutofillClient::GetOtpAuthenticator() { + return nullptr; +} + AutofillOfferManager* AutofillClient::GetAutofillOfferManager() { return nullptr; }
diff --git a/components/autofill/core/browser/autofill_client.h b/components/autofill/core/browser/autofill_client.h index 0a13a92..5edf5cc 100644 --- a/components/autofill/core/browser/autofill_client.h +++ b/components/autofill/core/browser/autofill_client.h
@@ -70,7 +70,9 @@ struct CardUnmaskChallengeOption; class CardUnmaskDelegate; class CreditCard; +class CreditCardCVCAuthenticator; enum class CreditCardFetchResult; +class CreditCardOtpAuthenticator; class FormDataImporter; class FormStructure; class LogManager; @@ -327,6 +329,10 @@ // client (can be null for unsupported platforms). virtual MerchantPromoCodeManager* GetMerchantPromoCodeManager(); + // Can be null on unsupported platforms. + virtual CreditCardCVCAuthenticator* GetCVCAuthenticator(); + virtual CreditCardOtpAuthenticator* GetOtpAuthenticator(); + // Creates and returns a SingleFieldFormFillRouter using the // AutocompleteHistoryManager instance associated with the client. std::unique_ptr<SingleFieldFormFillRouter> GetSingleFieldFormFillRouter();
diff --git a/components/autofill/core/browser/autofill_field.cc b/components/autofill/core/browser/autofill_field.cc index abc1795..67f1f694 100644 --- a/components/autofill/core/browser/autofill_field.cc +++ b/components/autofill/core/browser/autofill_field.cc
@@ -250,9 +250,6 @@ } bool AutofillField::IsFieldFillable() const { - if (!base::FeatureList::IsEnabled(features::kAutofillFixFillableFieldTypes)) - return !Type().IsUnknown(); - ServerFieldType field_type = Type().GetStorableType(); return IsFillableFieldType(field_type); }
diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc index 28d31ad..59b3766d6 100644 --- a/components/autofill/core/browser/browser_autofill_manager.cc +++ b/components/autofill/core/browser/browser_autofill_manager.cc
@@ -2727,6 +2727,8 @@ // warning message and don't offer autofill. The warning is shown even if // there are no autofill suggestions available. if (IsFormMixedContent(client(), form) && + client()->GetPrefs()->FindPreference( + ::prefs::kMixedFormsWarningsEnabled) && client()->GetPrefs()->GetBoolean(::prefs::kMixedFormsWarningsEnabled)) { suggestions->clear(); // If the user begins typing, we interpret that as dismissing the warning.
diff --git a/components/autofill/core/browser/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/browser_autofill_manager_unittest.cc index 4ee7a52..733751f 100644 --- a/components/autofill/core/browser/browser_autofill_manager_unittest.cc +++ b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
@@ -676,8 +676,9 @@ const std::string& real_pan, bool is_virtual_card = false) { payments::FullCardRequest* full_card_request = - browser_autofill_manager_->credit_card_access_manager_ - ->cvc_authenticator_->full_card_request_.get(); + browser_autofill_manager_->client() + ->GetCVCAuthenticator() + ->full_card_request_.get(); DCHECK(full_card_request); // Mock user response. @@ -697,8 +698,8 @@ // Convenience method to cast the FullCardRequest into a CardUnmaskDelegate. CardUnmaskDelegate* full_card_unmask_delegate() { payments::FullCardRequest* full_card_request = - browser_autofill_manager_->credit_card_access_manager_ - ->GetOrCreateCVCAuthenticator() + browser_autofill_manager_->client() + ->GetCVCAuthenticator() ->full_card_request_.get(); DCHECK(full_card_request); return static_cast<CardUnmaskDelegate*>(full_card_request);
diff --git a/components/autofill/core/browser/form_data_importer_utils.cc b/components/autofill/core/browser/form_data_importer_utils.cc index 23ef0c4..978b2d8 100644 --- a/components/autofill/core/browser/form_data_importer_utils.cc +++ b/components/autofill/core/browser/form_data_importer_utils.cc
@@ -203,15 +203,14 @@ const url::Origin& origin) { // Greedily merge with a prefix of |multistep_candidates|. AutofillProfileComparator comparator(app_locale_); - auto candidate_it = multistep_candidates_.items.cbegin(); + auto candidate = multistep_candidates_.begin(); AutofillProfile completed_profile = profile; ProfileImportMetadata completed_metadata = import_metadata; // Country completion has not happened yet, so this field can be ignored. DCHECK(!completed_metadata.did_complement_country); - while (candidate_it != multistep_candidates_.items.end()) { - const MultiStepFormProfileCandidate& candidate = candidate_it->data; - if (!comparator.AreMergeable(completed_profile, candidate.profile) || - completed_profile.MergeDataFrom(candidate.profile, app_locale_)) { + while (candidate != multistep_candidates_.end()) { + if (!comparator.AreMergeable(completed_profile, candidate->profile) || + completed_profile.MergeDataFrom(candidate->profile, app_locale_)) { break; } // ProfileImportMetadata is only relevant for metrics. If the phone number @@ -219,8 +218,8 @@ // in the metrics, because it would have hindered that partial profile from // import and merging. completed_metadata.did_remove_invalid_phone_number |= - candidate.import_metadata.did_remove_invalid_phone_number; - candidate_it++; + candidate->import_metadata.did_remove_invalid_phone_number; + candidate++; } // The minimum address requirements depend on the country, which has possibly @@ -237,8 +236,7 @@ return true; } else { // Remove all profiles that couldn't be merged. - multistep_candidates_.items.erase(candidate_it, - multistep_candidates_.items.end()); + multistep_candidates_.erase(candidate, multistep_candidates_.end()); return false; } }
diff --git a/components/autofill/core/browser/form_data_importer_utils.h b/components/autofill/core/browser/form_data_importer_utils.h index 9c80023..1d31bf2e 100644 --- a/components/autofill/core/browser/form_data_importer_utils.h +++ b/components/autofill/core/browser/form_data_importer_utils.h
@@ -5,8 +5,10 @@ #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_DATA_IMPORTER_UTILS_H_ #define COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_DATA_IMPORTER_UTILS_H_ -#include <deque> +#include <iterator> +#include <list> #include <string> +#include <utility> #include "base/time/time.h" #include "components/autofill/core/browser/autofill_profile_import_process.h" @@ -25,39 +27,66 @@ // relationships between submitted forms on the same origin, within a small // period of time. template <class T> -struct TimestampedSameOriginQueue { - struct QueueEntry { - T data; - base::Time timestamp; +class TimestampedSameOriginQueue { + public: + // The queue stores Ts augmented with a timestamp. + struct value_type : public T { + value_type(T t, base::Time timestamp) + : T(std::move(t)), timestamp(std::move(timestamp)) {} + + const base::Time timestamp; }; - std::deque<QueueEntry> items; - absl::optional<url::Origin> origin; // Shared by all `items_`. + using const_iterator = typename std::list<value_type>::const_iterator; // Pushes `item` at the current timestamp. - void Push(const T& item, const url::Origin& item_origin) { - DCHECK(!origin || *origin == item_origin); - items.push_front({item, AutofillClock::Now()}); - origin = item_origin; + void Push(T item, const url::Origin& item_origin) { + DCHECK(!origin_ || *origin_ == item_origin); + items_.emplace_front(std::move(item), AutofillClock::Now()); + origin_ = item_origin; } + // Removes the oldest element from the queue. + void Pop() { erase(std::prev(end()), end()); } + // Removes all `items` from a different `origin` or older than `ttl`. + // This is not done as part of `Push()`, as outdated items (for example in the + // multi-step import use-case) should be deleted as soon as possible for + // privacy reasons, even when no `Push()` happens. void RemoveOutdatedItems(const base::TimeDelta& ttl, const url::Origin& new_origin) { - if (origin && *origin != new_origin) { - items.clear(); + if (origin_ && *origin_ != new_origin) { + Clear(); } else { const base::Time now = AutofillClock::Now(); - while (!items.empty() && now - items.back().timestamp > ttl) - items.pop_back(); + while (!empty() && now - items_.back().timestamp > ttl) + Pop(); } - if (items.empty()) - origin.reset(); } - void Clear() { - items.clear(); - origin.reset(); + // Returns the origin shared by the elements in the queue. Or nullopt, if + // the queue is currently `Empty()`. + const absl::optional<url::Origin>& Origin() const { return origin_; } + + size_t size() const { return items_.size(); } + bool empty() const { return items_.empty(); } + + // Removes the items [first, last[. + void erase(const_iterator first, const_iterator last) { + items_.erase(first, last); + if (empty()) + origin_.reset(); } + + void Clear() { erase(begin(), end()); } + + // The elements are ordered from newest to latest. + const_iterator begin() const { return items_.begin(); } + const_iterator end() const { return items_.end(); } + + private: + std::list<value_type> items_; + // If the queue is not `empty()`, this represents the origin of all `items_`. + absl::optional<url::Origin> origin_; }; }; // namespace internal @@ -104,7 +133,7 @@ const url::Origin& origin); const absl::optional<url::Origin>& Origin() const { - return multistep_candidates_.origin; + return multistep_candidates_.Origin(); } void Clear() { multistep_candidates_.Clear(); }
diff --git a/components/autofill/core/browser/form_parsing/form_field.cc b/components/autofill/core/browser/form_parsing/form_field.cc index f8e09570..2eecf3ac 100644 --- a/components/autofill/core/browser/form_parsing/form_field.cc +++ b/components/autofill/core/browser/form_parsing/form_field.cc
@@ -129,13 +129,9 @@ } size_t fillable_fields = 0; - if (base::FeatureList::IsEnabled(features::kAutofillFixFillableFieldTypes)) { - for (const auto& [field_id, candidates] : field_candidates) { - if (IsFillableFieldType(candidates.BestHeuristicType())) - ++fillable_fields; - } - } else { - fillable_fields = field_candidates.size(); + for (const auto& [field_id, candidates] : field_candidates) { + if (IsFillableFieldType(candidates.BestHeuristicType())) + ++fillable_fields; } // Do not autofill a form if there aren't enough fields. Otherwise, it is
diff --git a/components/autofill/core/browser/form_parsing/form_field_unittest.cc b/components/autofill/core/browser/form_parsing/form_field_unittest.cc index f6d7f86..0199d10 100644 --- a/components/autofill/core/browser/form_parsing/form_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/form_field_unittest.cc
@@ -19,8 +19,6 @@ #include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gtest/include/gtest/gtest.h" -using autofill::features::kAutofillFixFillableFieldTypes; - namespace autofill { class FormFieldTest @@ -135,26 +133,10 @@ TEST_P(FormFieldTest, ParseFormFieldsEnforceMinFillableFields) { AddTextFormFieldData("", "Address line 1", ADDRESS_HOME_LINE1); AddTextFormFieldData("", "Address line 2", ADDRESS_HOME_LINE2); - // Don't parse forms with 2 fields. - EXPECT_EQ(0, ParseFormFields()); - AddTextFormFieldData("", "Search", SEARCH_TERM); - // Before the fix in kAutofillFixFillableFieldTypes, we would parse the form - // now, although a search field is not fillable. - { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndDisableFeature(kAutofillFixFillableFieldTypes); - EXPECT_EQ(3, ParseFormFields()); - TestClassificationExpectations(); - } - - // With the fix, we don't parse the form because search fields are not - // fillable (therefore, the form has only 2 fillable fields). - { - base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(kAutofillFixFillableFieldTypes); - EXPECT_EQ(0, ParseFormFields()); - } + // We don't parse the form because search fields are not fillable (therefore, + // the form has only 2 fillable fields). + EXPECT_EQ(0, ParseFormFields()); } // Tests that the `parseable_name()` is parsed as an autocomplete type.
diff --git a/components/autofill/core/browser/form_processing/label_processing_util.cc b/components/autofill/core/browser/form_processing/label_processing_util.cc index 4a4f1c45..66bd818 100644 --- a/components/autofill/core/browser/form_processing/label_processing_util.cc +++ b/components/autofill/core/browser/form_processing/label_processing_util.cc
@@ -29,7 +29,7 @@ // the subsequent fields. size_t label_index = 0; while (label_index < labels.size()) { - const auto& label = labels.at(label_index); + const base::StringPiece16& label = labels[label_index]; // If the label is empty or has a size that exceeds // |kMaxLengthOfShareableLabel| it can not be shared with subsequent fields. if (label.empty() || label.size() > kMaxLengthOfShareableLabel) { @@ -37,16 +37,16 @@ continue; } - // Otherwise search if the subsequent fields are empty. + // Otherwise search if the subsequent fields are empty or share the same + // label. Checking for the same label is needed, because label inference + // often derives the same label for consecutive fields. size_t scan_index = label_index + 1; - while (scan_index < labels.size()) { - if (!labels.at(scan_index).empty()) { - break; - } + while (scan_index < labels.size() && + (labels[scan_index].empty() || labels[scan_index] == label)) { ++scan_index; } - // After the loop, the |scan_index| points to the first subsequent field - // that does not have an empty label or is the first out-of-bound index. + // After the loop, the `scan_index` points to the first subsequent field + // which the label cannot be shared with or to the first out-of-bound index. // Calculate the number of fields that may share a label. size_t fields_to_share_label = scan_index - label_index; @@ -87,7 +87,7 @@ shared_labels_found = true; // Otherwise assign the label components to the fields. for (size_t i = 0; i < label_components.size(); ++i) { - shared_labels[shared_label_starting_index + i] = label_components.at(i); + shared_labels[shared_label_starting_index + i] = label_components[i]; } }
diff --git a/components/autofill/core/browser/form_processing/label_processing_util_unittest.cc b/components/autofill/core/browser/form_processing/label_processing_util_unittest.cc index 584ac35..0b9f2a4 100644 --- a/components/autofill/core/browser/form_processing/label_processing_util_unittest.cc +++ b/components/autofill/core/browser/form_processing/label_processing_util_unittest.cc
@@ -10,108 +10,53 @@ #include "components/autofill/core/common/autofill_features.h" #include "testing/gtest/include/gtest/gtest.h" -using base::ASCIIToUTF16; - -namespace { - -std::vector<base::StringPiece16> StringsToStringPieces( - const std::vector<std::u16string>& strings) { - std::vector<base::StringPiece16> string_pieces; - for (const auto& s : strings) { - string_pieces.emplace_back(base::StringPiece16(s)); - } - return string_pieces; -} - -} // namespace - namespace autofill { TEST(LabelProcessingUtil, GetParseableNameStringPieces) { - std::vector<std::u16string> labels; - labels.push_back(u"City"); - labels.push_back(u"Street & House Number"); - labels.push_back(u""); - labels.push_back(u"Zip"); + std::vector<base::StringPiece16> labels{u"City", u"Street & House Number", + u"", u"Zip"}; + auto expectation = absl::make_optional( + std::vector<std::u16string>{u"City", u"Street", u"House Number", u"Zip"}); + EXPECT_EQ(GetParseableLabels(labels), expectation); - auto expectation = absl::make_optional(std::vector<std::u16string>()); - expectation->push_back(u"City"); - expectation->push_back(u"Street"); - expectation->push_back(u"House Number"); - expectation->push_back(u"Zip"); - - EXPECT_EQ(GetParseableLabels(StringsToStringPieces(labels)), expectation); + // The label is also split when consecutive fields share the same label. + labels[2] = labels[1]; + EXPECT_EQ(GetParseableLabels(labels), expectation); } TEST(LabelProcessingUtil, GetParseableNameStringPieces_ThreeComponents) { - std::vector<std::u16string> labels; - labels.push_back(u"City"); - labels.push_back(u"Street & House Number & Floor"); - labels.push_back(u""); - labels.push_back(u""); - labels.push_back(u"Zip"); - - auto expectation = absl::make_optional(std::vector<std::u16string>()); - expectation->push_back(u"City"); - expectation->push_back(u"Street"); - expectation->push_back(u"House Number"); - expectation->push_back(u"Floor"); - expectation->push_back(u"Zip"); - - EXPECT_EQ(GetParseableLabels(StringsToStringPieces(labels)), expectation); + EXPECT_EQ(GetParseableLabels( + {u"City", u"Street & House Number & Floor", u"", u"", u"Zip"}), + absl::make_optional(std::vector<std::u16string>{ + u"City", u"Street", u"House Number", u"Floor", u"Zip"})); } TEST(LabelProcessingUtil, GetParseableNameStringPieces_TooManyComponents) { - std::vector<std::u16string> labels; - labels.push_back(u"City"); - labels.push_back(u"Street & House Number & Floor & Stairs"); - labels.push_back(u""); - labels.push_back(u""); - labels.push_back(u""); - labels.push_back(u"Zip"); - - absl::optional<std::vector<std::u16string>> expectation = absl::nullopt; - ; - - EXPECT_EQ(GetParseableLabels(StringsToStringPieces(labels)), expectation); + EXPECT_EQ( + GetParseableLabels({u"City", u"Street & House Number & Floor & Stairs", + u"", u"", u"", u"Zip"}), + absl::nullopt); } TEST(LabelProcessingUtil, GetParseableNameStringPieces_UnmachtingComponents) { - std::vector<std::u16string> labels; - labels.push_back(u"City"); - labels.push_back(u"Street & House Number & Floor"); - labels.push_back(u""); - labels.push_back(u"Zip"); - - absl::optional<std::vector<std::u16string>> expectation = absl::nullopt; - - EXPECT_EQ(GetParseableLabels(StringsToStringPieces(labels)), expectation); + EXPECT_EQ(GetParseableLabels( + {u"City", u"Street & House Number & Floor", u"", u"Zip"}), + absl::nullopt); } TEST(LabelProcessingUtil, GetParseableNameStringPieces_SplitableLabelAtEnd) { - std::vector<std::u16string> labels; - labels.push_back(u"City"); - labels.push_back(u""); - labels.push_back(u"Zip"); - labels.push_back(u"Street & House Number & Floor"); - - absl::optional<std::vector<std::u16string>> expectation = absl::nullopt; - - EXPECT_EQ(GetParseableLabels(StringsToStringPieces(labels)), expectation); + EXPECT_EQ(GetParseableLabels( + {u"City", u"", u"Zip", u"Street & House Number & Floor"}), + absl::nullopt); } TEST(LabelProcessingUtil, GetParseableNameStringPieces_TooLongLabel) { - std::vector<std::u16string> labels; - labels.push_back(u"City"); - labels.push_back( - u"Street & House Number with a lot of additional text that exceeds 40 " - u"characters by far"); - labels.push_back(u""); - labels.push_back(u"Zip"); - - absl::optional<std::vector<std::u16string>> expectation = absl::nullopt; - - EXPECT_EQ(GetParseableLabels(StringsToStringPieces(labels)), expectation); + EXPECT_EQ(GetParseableLabels({u"City", + u"Street & House Number with a lot of " + u"additional text that exceeds 40 " + u"characters by far", + u"", u"Zip"}), + absl::nullopt); } } // namespace autofill
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc index eb76e14..255988a 100644 --- a/components/autofill/core/browser/form_structure.cc +++ b/components/autofill/core/browser/form_structure.cc
@@ -2558,8 +2558,14 @@ buffer << Tr{} << "Section:" << field->section; constexpr size_t kMaxLabelSize = 100; + // TODO(crbug/1165780): Remove once shared labels are launched. + const std::u16string& label = + base::FeatureList::IsEnabled( + features::kAutofillEnableSupportForParsingWithSharedLabels) + ? field->parseable_label() + : field->label; const std::u16string truncated_label = - field->label.substr(0, std::min(field->label.length(), kMaxLabelSize)); + label.substr(0, std::min(label.length(), kMaxLabelSize)); buffer << Tr{} << "Label:" << truncated_label; buffer << Tr{} << "Is empty:" << (field->IsEmpty() ? "Yes" : "No");
diff --git a/components/autofill/core/browser/geo/autofill_country.cc b/components/autofill/core/browser/geo/autofill_country.cc index 5f0cdae2..ad65c3c 100644 --- a/components/autofill/core/browser/geo/autofill_country.cc +++ b/components/autofill/core/browser/geo/autofill_country.cc
@@ -32,7 +32,7 @@ } // namespace AutofillCountry::AutofillCountry(const std::string& country_code, - const std::string& locale) { + const absl::optional<std::string>& locale) { CountryDataMap* country_data_map = CountryDataMap::GetInstance(); // If the country code is an alias (e.g. "GB" for "UK") expand the country @@ -46,7 +46,8 @@ country_data_map->GetRequiredFieldsForAddressImport(country_code_); // Translate the country name by the supplied local. - name_ = l10n_util::GetDisplayNameForCountry(country_code_, locale); + if (locale) + name_ = l10n_util::GetDisplayNameForCountry(country_code_, *locale); } AutofillCountry::~AutofillCountry() {}
diff --git a/components/autofill/core/browser/geo/autofill_country.h b/components/autofill/core/browser/geo/autofill_country.h index 3a46edff..5983099 100644 --- a/components/autofill/core/browser/geo/autofill_country.h +++ b/components/autofill/core/browser/geo/autofill_country.h
@@ -10,6 +10,7 @@ #include "base/containers/span.h" #include "base/strings/string_piece.h" #include "components/autofill/core/browser/geo/country_data.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_field.h" namespace autofill { @@ -24,8 +25,9 @@ // `country_code`. // `locale` is used translate the `name()` appropriately and can be ignored // if the name is not queried. - explicit AutofillCountry(const std::string& country_code, - const std::string& locale = "en"); + explicit AutofillCountry( + const std::string& country_code, + const absl::optional<std::string>& locale = absl::nullopt); AutofillCountry(const AutofillCountry&) = delete; AutofillCountry& operator=(const AutofillCountry&) = delete; @@ -63,7 +65,12 @@ // mapping from the locale is available. static const std::string CountryCodeForLocale(const std::string& locale); + // The `country_code` provided to the constructor, with aliases like "GB" + // replaced by their canonical version ("UK", in this case). const std::string& country_code() const { return country_code_; } + + // Returns the name of the country translated into the `locale` provided to + // the constructor. If no `locale` was provided, an empty string is returned. const std::u16string& name() const { return name_; } // City is expected in a complete address for this country.
diff --git a/components/autofill/core/browser/geo/autofill_country_unittest.cc b/components/autofill/core/browser/geo/autofill_country_unittest.cc index b9ce700..8583dc8 100644 --- a/components/autofill/core/browser/geo/autofill_country_unittest.cc +++ b/components/autofill/core/browser/geo/autofill_country_unittest.cc
@@ -48,6 +48,11 @@ // Unrecognizable country codes remain that way. AutofillCountry unknown("Unknown", "en_US"); EXPECT_EQ("Unknown", unknown.country_code()); + + // If no locale is provided, no `name()` is returned. + AutofillCountry empty_locale("AT"); + EXPECT_EQ("AT", empty_locale.country_code()); + EXPECT_TRUE(empty_locale.name().empty()); } // Test locale to country code mapping.
diff --git a/components/autofill/core/browser/metrics/autofill_metrics_test_base.cc b/components/autofill/core/browser/metrics/autofill_metrics_test_base.cc index 158a195..1bf6bad 100644 --- a/components/autofill/core/browser/metrics/autofill_metrics_test_base.cc +++ b/components/autofill/core/browser/metrics/autofill_metrics_test_base.cc
@@ -145,10 +145,10 @@ AutofillClient::PaymentsRpcResult result, const std::string& real_pan, bool is_virtual_card) { - payments::FullCardRequest* full_card_request = - autofill_manager() - .credit_card_access_manager_->GetOrCreateCVCAuthenticator() - ->full_card_request_.get(); + payments::FullCardRequest* full_card_request = autofill_manager() + .client() + ->GetCVCAuthenticator() + ->full_card_request_.get(); DCHECK(full_card_request); // Fake user response. @@ -164,10 +164,10 @@ } void AutofillMetricsBaseTest::OnDidGetRealPanWithNonHttpOkResponse() { - payments::FullCardRequest* full_card_request = - autofill_manager() - .credit_card_access_manager_->GetOrCreateCVCAuthenticator() - ->full_card_request_.get(); + payments::FullCardRequest* full_card_request = autofill_manager() + .client() + ->GetCVCAuthenticator() + ->full_card_request_.get(); DCHECK(full_card_request); // Fake user response.
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager.cc b/components/autofill/core/browser/payments/credit_card_access_manager.cc index 25bb859..ae16420f 100644 --- a/components/autofill/core/browser/payments/credit_card_access_manager.cc +++ b/components/autofill/core/browser/payments/credit_card_access_manager.cc
@@ -493,7 +493,7 @@ // authentication flow since the card unmask prompt will pop up. client_->CloseWebauthnDialog(); #endif - GetOrCreateCVCAuthenticator()->Authenticate( + client_->GetCVCAuthenticator()->Authenticate( card_.get(), weak_ptr_factory_.GetWeakPtr(), personal_data_manager_); break; } @@ -522,7 +522,7 @@ // Delegate the task to CreditCardOtpAuthenticator. CardUnmaskChallengeOption selected_challenge_option = *card_unmask_challenge_options_it; - GetOrCreateOtpAuthenticator()->OnChallengeOptionSelected( + client_->GetOtpAuthenticator()->OnChallengeOptionSelected( card_.get(), selected_challenge_option, weak_ptr_factory_.GetWeakPtr(), virtual_card_unmask_response_details_.context_token, @@ -537,13 +537,6 @@ } } -CreditCardCVCAuthenticator* -CreditCardAccessManager::GetOrCreateCVCAuthenticator() { - if (!cvc_authenticator_) - cvc_authenticator_ = std::make_unique<CreditCardCVCAuthenticator>(client_); - return cvc_authenticator_.get(); -} - #if !BUILDFLAG(IS_IOS) CreditCardFIDOAuthenticator* CreditCardAccessManager::GetOrCreateFIDOAuthenticator() { @@ -554,13 +547,6 @@ } #endif -CreditCardOtpAuthenticator* -CreditCardAccessManager::GetOrCreateOtpAuthenticator() { - if (!otp_authenticator_) - otp_authenticator_ = std::make_unique<CreditCardOtpAuthenticator>(client_); - return otp_authenticator_.get(); -} - void CreditCardAccessManager::OnCVCAuthenticationComplete( const CreditCardCVCAuthenticator::CVCAuthenticationResponse& response) { is_authentication_in_progress_ = false; @@ -1127,7 +1113,7 @@ // Virtual Card Unmask request, so we need to reset the state of the // CreditCardOtpAuthenticator as well to ensure the flow does not continue, // as continuing the flow can cause a crash. - GetOrCreateOtpAuthenticator()->Reset(); + client_->GetOtpAuthenticator()->Reset(); } AutofillMetrics::VirtualCardUnmaskFlowType flow_type;
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager.h b/components/autofill/core/browser/payments/credit_card_access_manager.h index 8b693f8..268df7b 100644 --- a/components/autofill/core/browser/payments/credit_card_access_manager.h +++ b/components/autofill/core/browser/payments/credit_card_access_manager.h
@@ -159,14 +159,9 @@ // Returns true if a |unmasked_cards_cache| contains an entry for the card. bool IsCardPresentInUnmaskedCache(const CreditCard& card) const; - // Accessors to different authenticators. They will first create the - // authenticators if they do not exist. Otherwise the accessors will simply - // return references to the authenticators. - CreditCardCVCAuthenticator* GetOrCreateCVCAuthenticator(); #if !BUILDFLAG(IS_IOS) CreditCardFIDOAuthenticator* GetOrCreateFIDOAuthenticator(); #endif - CreditCardOtpAuthenticator* GetOrCreateOtpAuthenticator(); private: // TODO(crbug.com/1249665): Remove FRIEND and change everything to _ForTesting @@ -208,9 +203,6 @@ RiskBasedVirtualCardUnmasking_Failure_VirtualCardRetrievalError); FRIEND_TEST_ALL_PREFIXES(CreditCardAccessManagerTest, RiskBasedVirtualCardUnmasking_FlowCancelled); - friend class AutofillAssistantTest; - friend class BrowserAutofillManagerTest; - friend class AutofillMetricsTest; friend class metrics::AutofillMetricsBaseTest; friend class CreditCardAccessManagerTest; @@ -220,10 +212,6 @@ fido_authenticator_ = std::move(fido_authenticator); } #endif - void set_otp_authenticator_for_testing( - std::unique_ptr<CreditCardOtpAuthenticator> otp_authenticator) { - otp_authenticator_ = std::move(otp_authenticator); - } #if defined(UNIT_TEST) // Mocks that a virtual card was selected, so unit tests that don't run the @@ -417,9 +405,6 @@ // Timestamp for when fido_authenticator_->IsUserVerifiable() is called. absl::optional<base::TimeTicks> is_user_verifiable_called_timestamp_; - // Authenticators for card unmasking. - std::unique_ptr<CreditCardCVCAuthenticator> cvc_authenticator_; - std::unique_ptr<CreditCardOtpAuthenticator> otp_authenticator_; #if !BUILDFLAG(IS_IOS) std::unique_ptr<CreditCardFIDOAuthenticator> fido_authenticator_;
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc index b5b3c9d..ed98c61f 100644 --- a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc +++ b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
@@ -212,8 +212,7 @@ auto otp_authenticator = std::make_unique<TestCreditCardOtpAuthenticator>(&autofill_client_); otp_authenticator_ = otp_authenticator.get(); - credit_card_access_manager_->set_otp_authenticator_for_testing( - std::move(otp_authenticator)); + autofill_client_.set_otp_authenticator(std::move(otp_authenticator)); } void TearDown() override { @@ -265,7 +264,7 @@ } CreditCardCVCAuthenticator* GetCVCAuthenticator() { - return credit_card_access_manager_->GetOrCreateCVCAuthenticator(); + return autofill_client_.GetCVCAuthenticator(); } void MockUserResponseForCvcAuth(std::u16string cvc, bool enable_fido) {
diff --git a/components/autofill/core/browser/test_autofill_client.cc b/components/autofill/core/browser/test_autofill_client.cc index 344d482..3202c80 100644 --- a/components/autofill/core/browser/test_autofill_client.cc +++ b/components/autofill/core/browser/test_autofill_client.cc
@@ -44,6 +44,18 @@ return &mock_merchant_promo_code_manager_; } +CreditCardCVCAuthenticator* TestAutofillClient::GetCVCAuthenticator() { + if (!cvc_authenticator_) + cvc_authenticator_ = std::make_unique<CreditCardCVCAuthenticator>(this); + return cvc_authenticator_.get(); +} + +CreditCardOtpAuthenticator* TestAutofillClient::GetOtpAuthenticator() { + if (!otp_authenticator_) + otp_authenticator_ = std::make_unique<CreditCardOtpAuthenticator>(this); + return otp_authenticator_.get(); +} + PrefService* TestAutofillClient::GetPrefs() { return const_cast<PrefService*>(base::as_const(*this).GetPrefs()); }
diff --git a/components/autofill/core/browser/test_autofill_client.h b/components/autofill/core/browser/test_autofill_client.h index 72acfd3..010c366 100644 --- a/components/autofill/core/browser/test_autofill_client.h +++ b/components/autofill/core/browser/test_autofill_client.h
@@ -17,6 +17,8 @@ #include "components/autofill/core/browser/mock_autocomplete_history_manager.h" #include "components/autofill/core/browser/mock_merchant_promo_code_manager.h" #include "components/autofill/core/browser/payments/autofill_offer_manager.h" +#include "components/autofill/core/browser/payments/credit_card_cvc_authenticator.h" +#include "components/autofill/core/browser/payments/credit_card_otp_authenticator.h" #include "components/autofill/core/browser/payments/legal_message_line.h" #include "components/autofill/core/browser/payments/test_payments_client.h" #include "components/autofill/core/browser/payments/test_strike_database.h" @@ -53,6 +55,8 @@ TestPersonalDataManager* GetPersonalDataManager() override; AutocompleteHistoryManager* GetAutocompleteHistoryManager() override; MerchantPromoCodeManager* GetMerchantPromoCodeManager() override; + CreditCardCVCAuthenticator* GetCVCAuthenticator() override; + CreditCardOtpAuthenticator* GetOtpAuthenticator() override; PrefService* GetPrefs() override; const PrefService* GetPrefs() const override; syncer::SyncService* GetSyncService() override; @@ -71,7 +75,8 @@ std::string GetVariationConfigCountryCode() const override; #if !BUILDFLAG(IS_IOS) std::unique_ptr<webauthn::InternalAuthenticator> - CreateCreditCardInternalAuthenticator(content::RenderFrameHost* rfh) override; + CreateCreditCardInternalAuthenticator( + content::RenderFrameHost* driver) override; #endif void ShowAutofillSettings(bool show_credit_card_settings) override; @@ -194,6 +199,16 @@ test_personal_data_manager_ = std::move(pdm); } + void set_cvc_authenticator( + std::unique_ptr<CreditCardCVCAuthenticator> authenticator) { + cvc_authenticator_ = std::move(authenticator); + } + + void set_otp_authenticator( + std::unique_ptr<CreditCardOtpAuthenticator> authenticator) { + otp_authenticator_ = std::move(authenticator); + } + void set_test_strike_database( std::unique_ptr<TestStrikeDatabase> test_strike_database) { test_strike_database_ = std::move(test_strike_database); @@ -309,6 +324,8 @@ std::unique_ptr<PrefService> prefs_; std::unique_ptr<TestStrikeDatabase> test_strike_database_; std::unique_ptr<payments::PaymentsClient> payments_client_; + std::unique_ptr<CreditCardCVCAuthenticator> cvc_authenticator_; + std::unique_ptr<CreditCardOtpAuthenticator> otp_authenticator_; // AutofillOfferManager and TestFormDataImporter must be destroyed before // TestPersonalDataManager, because the former's destructors refer to the
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc index d3d18bde..9fd9d35 100644 --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc
@@ -321,14 +321,6 @@ const base::Feature kAutofillTypeSpecificPopupWidth{ "AutofillTypeSpecificPopupWidth", base::FEATURE_DISABLED_BY_DEFAULT}; -// Autofill uses the local heuristic such that address forms are only filled if -// at least 3 fields are fillable according to local heuristics. Unfortunately, -// the criterion for fillability is only that the field type is unknown. So many -// field types that we don't fill (search term, price, ...) count towards that -// counter, effectively reducing the threshold for some forms. -const base::Feature kAutofillFixFillableFieldTypes{ - "AutofillFixFillableFieldTypes", base::FEATURE_ENABLED_BY_DEFAULT}; - // When enabled, the Autofill popup ignores second clicks for a certain period // (kAutofillIgnoreEarlyClicksOnPopupDuration) after the Autofill popup was // shown. This is to prevent double clicks accidentally accepting suggestions.
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h index a577fef..56cff1a 100644 --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h
@@ -124,8 +124,6 @@ COMPONENT_EXPORT(AUTOFILL) extern const base::Feature kAutofillTypeSpecificPopupWidth; COMPONENT_EXPORT(AUTOFILL) -extern const base::Feature kAutofillFixFillableFieldTypes; -COMPONENT_EXPORT(AUTOFILL) extern const base::Feature kAutofillIgnoreEarlyClicksOnPopup; COMPONENT_EXPORT(AUTOFILL) extern const base::FeatureParam<base::TimeDelta>
diff --git a/components/autofill/ios/form_util/form_activity_params.h b/components/autofill/ios/form_util/form_activity_params.h index 09fef8a..7cbf84b0 100644 --- a/components/autofill/ios/form_util/form_activity_params.h +++ b/components/autofill/ios/form_util/form_activity_params.h
@@ -62,7 +62,6 @@ std::string field_type; std::string value; std::string type; - int max_length; // |has_user_gesture| is true when the activity was registered as a result of // a user action, and not by an event created and dispatched by JavaScript. bool has_user_gesture = false;
diff --git a/components/autofill/ios/form_util/form_activity_tab_helper.mm b/components/autofill/ios/form_util/form_activity_tab_helper.mm index e9e87bb..ee0acbc 100644 --- a/components/autofill/ios/form_util/form_activity_tab_helper.mm +++ b/components/autofill/ios/form_util/form_activity_tab_helper.mm
@@ -92,7 +92,6 @@ const std::string* field_type = message_body->FindStringKey("fieldType"); const std::string* type = message_body->FindStringKey("type"); const std::string* value = message_body->FindStringKey("value"); - absl::optional<double> max_length = message_body->FindDoubleKey("maxlength"); absl::optional<bool> has_user_gesture = message_body->FindBoolKey("hasUserGesture"); if (!field_identifier || !unique_field_id || !field_type || !type || !value || @@ -112,8 +111,6 @@ params.value = *value; if (has_user_gesture) params.has_user_gesture = *has_user_gesture; - if (max_length.has_value()) - params.max_length = static_cast<int>(max_length.value()); for (auto& observer : observers_) observer.FormActivityRegistered(web_state, sender_frame, params);
diff --git a/components/autofill/ios/form_util/form_unittest.mm b/components/autofill/ios/form_util/form_unittest.mm index 3bdfcef3..117e8ea 100644 --- a/components/autofill/ios/form_util/form_unittest.mm +++ b/components/autofill/ios/form_util/form_unittest.mm
@@ -336,20 +336,3 @@ return info != nil; })); } - -// Tests getting max length from element. -TEST_F(FormJsTest, GetMaxLength) { - LoadHtml(@"<form>" - "<input type='password' name='password' id='id1' maxlength='12'>" - "<input type='password2' name='password2' id='id2'>" - "</form>"); - id result = ExecuteJavaScript( - @"__gCrWeb.form.getMaxLength(document.getElementById('id1'));"); - NSInteger result_int = [result integerValue]; - EXPECT_EQ(result_int, 12); - - id result2 = ExecuteJavaScript( - @"__gCrWeb.form.getMaxLength(document.getElementById('id2'));"); - result_int = [result2 integerValue]; - EXPECT_EQ(result_int, 0); -}
diff --git a/components/autofill/ios/form_util/resources/form.js b/components/autofill/ios/form_util/resources/form.js index 3d8a624..53ec802 100644 --- a/components/autofill/ios/form_util/resources/form.js +++ b/components/autofill/ios/form_util/resources/form.js
@@ -301,17 +301,3 @@ } return __gCrWeb.form.wasEditedByUser.get(element); }; - -/** - * Returns the form's |maxLength| attribute if non-empty; otherwise returns 0. - * - * @param {Element} field An element for which the max length is returned. - * @return {number} an integer that represents the element's max length. - */ -__gCrWeb.form.getMaxLength = function(element) { - if (!element) { - return 0; - } - const maxLength = element.maxLength; - return (!maxLength || maxLength < 0) ? 0 : maxLength; -};
diff --git a/components/autofill/ios/form_util/resources/form_handlers.js b/components/autofill/ios/form_util/resources/form_handlers.js index bed30510..ce37ce4f0 100644 --- a/components/autofill/ios/form_util/resources/form_handlers.js +++ b/components/autofill/ios/form_util/resources/form_handlers.js
@@ -131,7 +131,6 @@ 'type': 'password_form_cleared', 'value': __gCrWeb.stringify(formData), 'hasUserGesture': false, - 'maxlength': 0, }; sendMessageOnNextLoop_(msg); } @@ -228,7 +227,6 @@ 'type': type, 'value': value, 'hasUserGesture': evt.isTrusted, - 'maxlength': __gCrWeb.form.getMaxLength(field), }; sendMessageOnNextLoop_(msg); } @@ -426,7 +424,6 @@ 'type': 'form_changed', 'value': '', 'hasUserGesture': false, - 'maxlength': 0, }; return sendFormMutationMessageAfterDelay_(msg, delay); }
diff --git a/components/autofill_assistant/browser/BUILD.gn b/components/autofill_assistant/browser/BUILD.gn index 48b01b5..61f96f6 100644 --- a/components/autofill_assistant/browser/BUILD.gn +++ b/components/autofill_assistant/browser/BUILD.gn
@@ -88,6 +88,8 @@ "actions/register_password_reset_request_action.h", "actions/release_elements_action.cc", "actions/release_elements_action.h", + "actions/report_progress_action.cc", + "actions/report_progress_action.h", "actions/reset_pending_credentials_action.cc", "actions/reset_pending_credentials_action.h", "actions/save_generated_password_action.cc", @@ -489,6 +491,7 @@ "actions/prompt_qr_code_scan_action_unittest.cc", "actions/register_password_reset_request_action_unittest.cc", "actions/release_elements_action_unittest.cc", + "actions/report_progress_action_unittest.cc", "actions/reset_pending_credentials_action_unittest.cc", "actions/save_generated_password_action_unittest.cc", "actions/save_submitted_password_action_unittest.cc",
diff --git a/components/autofill_assistant/browser/actions/action.cc b/components/autofill_assistant/browser/actions/action.cc index 732cf6ab..90cb9691 100644 --- a/components/autofill_assistant/browser/actions/action.cc +++ b/components/autofill_assistant/browser/actions/action.cc
@@ -288,6 +288,9 @@ case ActionProto::ActionInfoCase::kPromptQrCodeScan: out << "PromptQrCodeScan"; break; + case ActionProto::ActionInfoCase::kReportProgress: + out << "ReportProgress"; + break; case ActionProto::ActionInfoCase::ACTION_INFO_NOT_SET: out << "ACTION_INFO_NOT_SET"; break;
diff --git a/components/autofill_assistant/browser/actions/action_delegate.h b/components/autofill_assistant/browser/actions/action_delegate.h index 1f14cbc..755ab0c 100644 --- a/components/autofill_assistant/browser/actions/action_delegate.h +++ b/components/autofill_assistant/browser/actions/action_delegate.h
@@ -521,6 +521,10 @@ virtual base::WeakPtr<ActionDelegate> GetWeakPtr() const = 0; + // Make a fire-and-forget call to report progress. + virtual void ReportProgress(const std::string& payload, + base::OnceCallback<void(bool)> callback) = 0; + protected: ActionDelegate() = default; };
diff --git a/components/autofill_assistant/browser/actions/mock_action_delegate.h b/components/autofill_assistant/browser/actions/mock_action_delegate.h index 35ee85d..cbc0b46f 100644 --- a/components/autofill_assistant/browser/actions/mock_action_delegate.h +++ b/components/autofill_assistant/browser/actions/mock_action_delegate.h
@@ -240,6 +240,9 @@ void(const ProcessedActionProto& processed_action)); MOCK_CONST_METHOD0(GetIntent, absl::optional<std::string>()); MOCK_CONST_METHOD0(GetLocale, const std::string()); + MOCK_METHOD2(ReportProgress, + void(const std::string& payload, + base::OnceCallback<void(bool)> callback)); base::WeakPtr<ActionDelegate> GetWeakPtr() const override { return weak_ptr_factory_.GetWeakPtr();
diff --git a/components/autofill_assistant/browser/actions/report_progress_action.cc b/components/autofill_assistant/browser/actions/report_progress_action.cc new file mode 100644 index 0000000..3d54e8a --- /dev/null +++ b/components/autofill_assistant/browser/actions/report_progress_action.cc
@@ -0,0 +1,50 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/autofill_assistant/browser/actions/report_progress_action.h" + +#include "base/callback.h" +#include "base/metrics/field_trial.h" +#include "components/autofill_assistant/browser/actions/action_delegate.h" + +namespace autofill_assistant { + +namespace { + +// When starting a report progress action, a synthetic field trial is recorded. +// This is used to allow tracking stability metrics as we start using this new +// action. Note there is no control group - this is purely for stability +// tracking. +const char kReportProgressSyntheticFieldTrialName[] = + "AutofillAssistantReportProgressAction"; +const char kReportProgressEnabledGroup[] = "Enabled"; + +} // namespace + +ReportProgressAction::ReportProgressAction(ActionDelegate* delegate, + const ActionProto& proto) + : Action(delegate, proto) {} + +ReportProgressAction::~ReportProgressAction() = default; + +void ReportProgressAction::InternalProcessAction( + ProcessActionCallback callback) { + base::FieldTrialList::CreateFieldTrial(kReportProgressSyntheticFieldTrialName, + kReportProgressEnabledGroup); + delegate_->ReportProgress( + proto_.report_progress().payload(), + base::BindOnce(&ReportProgressAction::OnReportProgress, + weak_ptr_factory_.GetWeakPtr())); + // The action is done after the call is made; we don't wait for the callback + // to update it, because we don't care what the response is. + UpdateProcessedAction(ACTION_APPLIED); + std::move(callback).Run(std::move(processed_action_proto_)); +} + +// The script continues whether the status is successful or not +// (fire-and-forget). We could later gather metrics based on the response code +// using this callback. +void ReportProgressAction::OnReportProgress(bool success) {} + +} // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/actions/report_progress_action.h b/components/autofill_assistant/browser/actions/report_progress_action.h new file mode 100644 index 0000000..73ce43e --- /dev/null +++ b/components/autofill_assistant/browser/actions/report_progress_action.h
@@ -0,0 +1,31 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_REPORT_PROGRESS_ACTION_H_ +#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_REPORT_PROGRESS_ACTION_H_ + +#include "components/autofill_assistant/browser/actions/action.h" + +namespace autofill_assistant { + +// An action to report script progress through a flow. +class ReportProgressAction : public Action { + public: + explicit ReportProgressAction(ActionDelegate* delegate, + const ActionProto& proto); + + ReportProgressAction(const ReportProgressAction&) = delete; + ReportProgressAction& operator=(const ReportProgressAction&) = delete; + + ~ReportProgressAction() override; + + private: + void InternalProcessAction(ProcessActionCallback callback) override; + void OnReportProgress(bool success); + + base::WeakPtrFactory<ReportProgressAction> weak_ptr_factory_{this}; +}; + +} // namespace autofill_assistant +#endif // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_ACTIONS_REPORT_PROGRESS_ACTION_H_
diff --git a/components/autofill_assistant/browser/actions/report_progress_action_unittest.cc b/components/autofill_assistant/browser/actions/report_progress_action_unittest.cc new file mode 100644 index 0000000..d9327a1a --- /dev/null +++ b/components/autofill_assistant/browser/actions/report_progress_action_unittest.cc
@@ -0,0 +1,51 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/autofill_assistant/browser/actions/report_progress_action.h" + +#include "base/test/gmock_callback_support.h" +#include "base/test/mock_callback.h" +#include "components/autofill_assistant/browser/actions/mock_action_delegate.h" +#include "components/autofill_assistant/browser/service.pb.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace autofill_assistant { +namespace { + +using ::testing::_; +using ::testing::Property; +using ::testing::Return; +using ::testing::StrEq; + +class ReportProgressActionTest : public testing::Test { + public: + ReportProgressActionTest() = default; + + void SetUp() override { + ON_CALL(mock_action_delegate_, ReportProgress(_, _)) + .WillByDefault(Return()); + } + + protected: + MockActionDelegate mock_action_delegate_; + base::MockCallback<Action::ProcessActionCallback> callback_; + ReportProgressProto proto_; +}; + +TEST_F(ReportProgressActionTest, ReportProgress) { + std::string payload = "payload"; + ActionProto action_proto; + action_proto.mutable_report_progress()->set_payload("payload"); + ReportProgressAction action(&mock_action_delegate_, action_proto); + + EXPECT_CALL(mock_action_delegate_, ReportProgress(payload, _)).Times(1); + EXPECT_CALL( + callback_, + Run(Pointee(Property(&ProcessedActionProto::status, ACTION_APPLIED)))); + + action.ProcessAction(callback_.Get()); +} + +} // namespace +} // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/android/client_android.cc b/components/autofill_assistant/browser/android/client_android.cc index c3cbdc9..996a782 100644 --- a/components/autofill_assistant/browser/android/client_android.cc +++ b/components/autofill_assistant/browser/android/client_android.cc
@@ -52,8 +52,15 @@ namespace autofill_assistant { namespace { +// Experiment for "Data Input via QR Code Scanning". This is an Experiment id +// which is passed as part of the script parameters and is used to indicate +// whether QR Code Scan can be used for data input. +const char kDataInputViaQrCodeScanningExperiment[] = "4835818"; + // Strings for Synthetic Field Trials. const char kAutofillAssistantTtsTrialName[] = "AutofillAssistantEnableTtsParam"; +const char kAutofillAssistantQrCodeScanningTrialName[] = + "AutofillAssistantQrCodeScanning"; const char kEnabledGroupName[] = "Enabled"; const char kDisabledGroupName[] = "Disabled"; @@ -168,6 +175,16 @@ kAutofillAssistantTtsTrialName, enable_tts ? kEnabledGroupName : kDisabledGroupName); + // Register QR Code Scanning Synthetic Field Trial. + const bool can_use_qr_code_scanning = + trigger_context->GetScriptParameters().HasExperimentId( + kDataInputViaQrCodeScanningExperiment); + dependencies_->GetCommonDependencies() + ->CreateFieldTrialUtil() + ->RegisterSyntheticFieldTrial( + kAutofillAssistantQrCodeScanningTrialName, + can_use_qr_code_scanning ? kEnabledGroupName : kDisabledGroupName); + DCHECK(!trigger_context->GetDirectAction()); if (VLOG_IS_ON(2)) { DVLOG(2) << "Starting autofill assistant with parameters:";
diff --git a/components/autofill_assistant/browser/full_card_requester.cc b/components/autofill_assistant/browser/full_card_requester.cc index f5359ca..2ac00a1 100644 --- a/components/autofill_assistant/browser/full_card_requester.cc +++ b/components/autofill_assistant/browser/full_card_requester.cc
@@ -19,9 +19,25 @@ namespace autofill_assistant { +namespace { + +autofill::CreditCardCVCAuthenticator* GetCVCAuthenticator( + content::WebContents* web_contents) { + auto* factory = + autofill::ContentAutofillDriverFactory::FromWebContents(web_contents); + if (!factory) + return nullptr; + autofill::AutofillClient* client = factory->client(); + if (!client) + return nullptr; + return client->GetCVCAuthenticator(); +} + +} // namespace + using autofill::payments::FullCardRequest; -FullCardRequester::FullCardRequester() {} +FullCardRequester::FullCardRequester() = default; void FullCardRequester::GetFullCard( content::WebContents* web_contents, @@ -30,24 +46,12 @@ DCHECK(card); callback_ = std::move(callback); - autofill::ContentAutofillDriverFactory* factory = - autofill::ContentAutofillDriverFactory::FromWebContents(web_contents); - if (!factory) { - OnFullCardRequestFailed(FullCardRequest::FailureType::GENERIC_FAILURE); - return; - } - - autofill::ContentAutofillDriver* driver = - factory->DriverForFrame(web_contents->GetPrimaryMainFrame()); - if (!driver) { - OnFullCardRequestFailed(FullCardRequest::FailureType::GENERIC_FAILURE); - return; - } - autofill::CreditCardCVCAuthenticator* cvc_authenticator = - driver->autofill_manager() - ->GetCreditCardAccessManager() - ->GetOrCreateCVCAuthenticator(); + GetCVCAuthenticator(web_contents); + if (!cvc_authenticator) { + OnFullCardRequestFailed(FullCardRequest::FailureType::GENERIC_FAILURE); + return; + } cvc_authenticator->GetFullCardRequest()->GetFullCard( *card, autofill::AutofillClient::UnmaskCardReason::kAutofill, weak_ptr_factory_.GetWeakPtr(),
diff --git a/components/autofill_assistant/browser/metrics.h b/components/autofill_assistant/browser/metrics.h index 8c11c65..60a51ca 100644 --- a/components/autofill_assistant/browser/metrics.h +++ b/components/autofill_assistant/browser/metrics.h
@@ -616,10 +616,26 @@ // tools/metrics/ukm/ukm.xml as necessary. enum class UserDataSource { UNKNOWN, + + // Only used backend data. BACKEND, + + // Only used Chrome Autofill data. CHROME_AUTOFILL, - kMaxValue = CHROME_AUTOFILL + // Attempted to use backend data but request failed, had to fallback to + // Chrome Autofill. + FALLBACK_CHROME_AUTOFILL_ON_FAILED_REQUEST, + + // Use backend data when possible, fallback to Chrome Autofill if + // not. Fallback was not necessary. + FALLBACK_BACKEND, + + // Use backend data when possible, fallback to Chrome Autofill if + // not. Fallback was necessary (backend data was missing). + FALLBACK_CHROME_AUTOFILL_ON_MISSING_DATA, + + kMaxValue = FALLBACK_CHROME_AUTOFILL_ON_MISSING_DATA }; // Outcome of the CUP verification process for GetAction RPC calls. CUP
diff --git a/components/autofill_assistant/browser/protocol_utils.cc b/components/autofill_assistant/browser/protocol_utils.cc index e1a92a4..17856f6 100644 --- a/components/autofill_assistant/browser/protocol_utils.cc +++ b/components/autofill_assistant/browser/protocol_utils.cc
@@ -34,6 +34,7 @@ #include "components/autofill_assistant/browser/actions/prompt_qr_code_scan_action.h" #include "components/autofill_assistant/browser/actions/register_password_reset_request_action.h" #include "components/autofill_assistant/browser/actions/release_elements_action.h" +#include "components/autofill_assistant/browser/actions/report_progress_action.h" #include "components/autofill_assistant/browser/actions/reset_pending_credentials_action.h" #include "components/autofill_assistant/browser/actions/save_generated_password_action.h" #include "components/autofill_assistant/browser/actions/save_submitted_password_action.h" @@ -481,6 +482,8 @@ action.set_native_checked().checked())); case ActionProto::ActionInfoCase::kPromptQrCodeScan: return std::make_unique<PromptQrCodeScanAction>(delegate, action); + case ActionProto::ActionInfoCase::kReportProgress: + return std::make_unique<ReportProgressAction>(delegate, action); case ActionProto::ActionInfoCase::ACTION_INFO_NOT_SET: { VLOG(1) << "Encountered action with ACTION_INFO_NOT_SET"; return std::make_unique<UnsupportedAction>(delegate, action); @@ -766,6 +769,10 @@ success = ParseActionFromString(action_id, bytes, error_message, proto.mutable_prompt_qr_code_scan()); break; + case ActionProto::ActionInfoCase::kReportProgress: + success = ParseActionFromString(action_id, bytes, error_message, + proto.mutable_report_progress()); + break; case ActionProto::ActionInfoCase::ACTION_INFO_NOT_SET: // This is an "unknown action", handled as such in CreateAction. return proto;
diff --git a/components/autofill_assistant/browser/script_executor.cc b/components/autofill_assistant/browser/script_executor.cc index fc16fa9..52d5c10b 100644 --- a/components/autofill_assistant/browser/script_executor.cc +++ b/components/autofill_assistant/browser/script_executor.cc
@@ -1207,4 +1207,22 @@ return delegate_->GetLocale(); } +void ScriptExecutor::ReportProgress(const std::string& payload, + base::OnceCallback<void(bool)> callback) { + auto* service = delegate_->GetService(); + DCHECK(service); + service->ReportProgress( + report_token_, payload, + base::BindOnce(&ScriptExecutor::OnReportProgress, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); +} + +void ScriptExecutor::OnReportProgress( + base::OnceCallback<void(bool)> callback, + int http_status, + const std::string& response, + const ServiceRequestSender::ResponseInfo& response_info) { + std::move(callback).Run(http_status == net::HTTP_OK); +} + } // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/script_executor.h b/components/autofill_assistant/browser/script_executor.h index 3c856bdd..54c6a9b 100644 --- a/components/autofill_assistant/browser/script_executor.h +++ b/components/autofill_assistant/browser/script_executor.h
@@ -287,6 +287,8 @@ const ProcessedActionProto& processed_action) override; absl::optional<std::string> GetIntent() const override; const std::string GetLocale() const override; + void ReportProgress(const std::string& payload, + base::OnceCallback<void(bool)> callback) override; private: // TODO(b/220079189): remove this friend declaration. @@ -363,6 +365,12 @@ const bool prompt, base::OnceCallback<void(const external::Result& result)> callback, const external::Result& result); + void OnResume(); + void OnReportProgress( + base::OnceCallback<void(bool)> callback, + int http_status, + const std::string& response, + const ServiceRequestSender::ResponseInfo& response_info); // Maybe shows the message specified in a callout, depending on the current // state and client settings.
diff --git a/components/autofill_assistant/browser/script_executor_browsertest.cc b/components/autofill_assistant/browser/script_executor_browsertest.cc index bb44f2f0..666c3fd 100644 --- a/components/autofill_assistant/browser/script_executor_browsertest.cc +++ b/components/autofill_assistant/browser/script_executor_browsertest.cc
@@ -519,5 +519,23 @@ CreateRunNativeActionCallReturn(&wait_for_dom, ActionProto::kWaitForDom), ELEMENT_RESOLUTION_FAILED); } + +IN_PROC_BROWSER_TEST_F(ScriptExecutorBrowserTest, ReportProgress) { + ActionsResponseProto actions_response; + *actions_response.add_actions() + ->mutable_report_progress() + ->mutable_payload() = "payload"; + + EXPECT_CALL(mock_service_, ReportProgress(_, "payload", _)) + .WillOnce(RunOnceCallback<2>(net::HTTP_OK, std::string(), + ServiceRequestSender::ResponseInfo{})); + EXPECT_CALL(mock_service_, GetNextActions) + .WillRepeatedly(RunOnceCallback<6>(net::HTTP_OK, /* response= */ "", + ServiceRequestSender::ResponseInfo{})); + EXPECT_CALL(executor_callback_, + Run(Field(&ScriptExecutor::Result::success, true))); + + Run(actions_response); +} } // namespace } // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/script_executor_unittest.cc b/components/autofill_assistant/browser/script_executor_unittest.cc index a750d95..00fe594 100644 --- a/components/autofill_assistant/browser/script_executor_unittest.cc +++ b/components/autofill_assistant/browser/script_executor_unittest.cc
@@ -15,6 +15,7 @@ #include "components/autofill_assistant/browser/actions/action_test_utils.h" #include "components/autofill_assistant/browser/fake_script_executor_delegate.h" #include "components/autofill_assistant/browser/fake_script_executor_ui_delegate.h" +#include "components/autofill_assistant/browser/service.pb.h" #include "components/autofill_assistant/browser/service/mock_service.h" #include "components/autofill_assistant/browser/service/service.h" #include "components/autofill_assistant/browser/test_util.h" @@ -2452,5 +2453,37 @@ AutofillAssistantState::RUNNING)); } +TEST_F(ScriptExecutorTest, ReportProgress) { + EXPECT_CALL(mock_service_, ReportProgress) + .WillOnce(RunOnceCallback<2>(net::HTTP_OK, std::string(), + ServiceRequestSender::ResponseInfo{})); + + base::MockCallback<base::OnceCallback<void(bool)>> mock_callback; + EXPECT_CALL(mock_callback, Run(true)); + + std::string payload = "payload"; + executor_->ReportProgress(payload, mock_callback.Get()); +} + +TEST_F(ScriptExecutorTest, ReportProgressApplied) { + ActionsResponseProto actions_response; + *actions_response.add_actions() + ->mutable_report_progress() + ->mutable_payload() = "payload"; + + EXPECT_CALL(mock_service_, GetActions) + .WillOnce(RunOnceCallback<5>(net::HTTP_OK, Serialize(actions_response), + ServiceRequestSender::ResponseInfo{})); + EXPECT_CALL(mock_service_, ReportProgress) + .WillOnce(RunOnceCallback<2>(net::HTTP_OK, std::string(), + ServiceRequestSender::ResponseInfo{})); + EXPECT_CALL(mock_service_, GetNextActions) + .WillRepeatedly(RunOnceCallback<6>(net::HTTP_OK, /* response= */ "", + ServiceRequestSender::ResponseInfo{})); + EXPECT_CALL(executor_callback_, + Run(Field(&ScriptExecutor::Result::success, true))); + executor_->Run(&user_data_, executor_callback_.Get()); +} + } // namespace } // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto index d6d47d3..77bcf5f 100644 --- a/components/autofill_assistant/browser/service.proto +++ b/components/autofill_assistant/browser/service.proto
@@ -1098,6 +1098,7 @@ SetNativeValueProto set_native_value = 96; SetNativeCheckedProto set_native_checked = 97; PromptQrCodeScanProto prompt_qr_code_scan = 98; + ReportProgressProto report_progress = 99; } // Set to true to make the client remove any contextual information if the
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb index 6ee4a47..48b6c42 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Aflaai is onderbreek</translation> <translation id="1409426117486808224">Vereenvoudigde aansig vir oop oortjies</translation> <translation id="1415402041810619267">URL is afgekap</translation> +<translation id="1426410128494586442">Ja</translation> <translation id="1446450296470737166">Laat vol MIDI-toestelbeheer toe</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Geskiedenis</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Deur jou ouer bestuur</translation> <translation id="4670064810192446073">Virtuele realiteit</translation> <translation id="4751476147751820511">Beweging- of ligsensors</translation> +<translation id="4811450222531576619">Kom meer te wete oor bron en onderwerp</translation> <translation id="4836046166855586901">Vra as 'n werf wil weet wanneer jy hierdie toestel aktief gebruik</translation> <translation id="4883854917563148705">Bestuurde instellings kan nie teruggestel word nie</translation> <translation id="4887024562049524730">Vra voordat werwe toegelaat word om jou virtuelerealiteittoestel en -data te gebruik (aanbeveel)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb index 0310089..90ebba3 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">የሚወርደው ላፍታ ቆሟል</translation> <translation id="1409426117486808224">ለክፍት ትሮች የተቃለለ እይታ</translation> <translation id="1415402041810619267">ዩአርኤል እንዲያጥር ተደርጓል</translation> +<translation id="1426410128494586442">አዎ</translation> <translation id="1446450296470737166">ሙሉ የMIDI መሣሪያዎች መቆጣጠርን ያስችላል</translation> <translation id="1620510694547887537">ካሜራ</translation> <translation id="1644574205037202324">ታሪክ</translation> @@ -55,7 +56,7 @@ <translation id="2253414712144136228"><ph name="NAME_OF_LIST_ITEM" />ን አስወግድ</translation> <translation id="2289270750774289114">አንድ ጣቢያ በአቅራቢያ ያሉ ብሉቱዝ መሣሪያዎችን ፈልጎ ለማግኘት ሲፈልግ ጠይቅ (የሚመከር)</translation> <translation id="2315043854645842844">የደንበኛ ወገን ዕውቅና ማረጋገጫ ምርጫ በስርዓተ-ክወናው አይደገፍም።</translation> -<translation id="2321958826496381788">ይህን በሚመች ሁኔታ ማንበብ እስኪችሉ ድረስ ተንሸራታቹን ይጎትቱት። በአንድ አንቀጽ ላይ ሁለቴ መታ ካደረጉ በኋላ ጽሑፍ ቢያንስ የዚህ ያህል ትልቀት ሊኖረው ይገባል።</translation> +<translation id="2321958826496381788">ይህን በሚመች ሁኔታ ማንበብ እስኪችሉ ድረስ ተንሸራታቹን ይጎትቱት። በአንድ አንቀጽ ላይ ሁለቴ መታ ካደረጉ በኋላ ጽሁፍ ቢያንስ የዚህ ያህል ትልቀት ሊኖረው ይገባል።</translation> <translation id="2329473609445770916">ይህ ጣቢያ የሚገልጸው ማስታወቂያዎችን ለእርስዎ ለማሳየት ሌሎች ጣቢያዎች ሊጠቀሙባቸው የሚችሏቸውን ዝንባሌዎች ነው</translation> <translation id="2359808026110333948">ቀጥል</translation> <translation id="2379925928934107488">በሚቻልበት ጊዜ Chrome ጠቆር ያለ ገጽታ ሲጠቀም ጠቆር ያለ ገጽታን ጣቢያዎች ላይ ተግብር</translation> @@ -200,7 +201,7 @@ <translation id="5502860503640766021"><ph name="PERMISSION_1" /> ተፈቅዶላቸዋል፣ <ph name="PERMISSION_2" /> ታግደዋል</translation> <translation id="5505264765875738116">ጣቢያዎች ማሳወቂያዎችን ለመላክ መጠየቅ አይችሉም</translation> <translation id="5516455585884385570">የማሳወቂያ ቅንብሮችን ክፈት</translation> -<translation id="5527111080432883924">ጣቢያዎች ከቅንጥብ ሰሌዳ ጽሑፍ እና ምስሎችን እንዲያነብቡ ከመፍቀድ በፊት ጠይቅ (የሚመከር)</translation> +<translation id="5527111080432883924">ጣቢያዎች ከቅንጥብ ሰሌዳ ጽሁፍ እና ምስሎችን እንዲያነብቡ ከመፍቀድ በፊት ጠይቅ (የሚመከር)</translation> <translation id="5553374991681107062">የቅርብ ጊዜው</translation> <translation id="5556459405103347317">ዳግም ጫን</translation> <translation id="5596627076506792578">ተጨማሪ አማራጮች</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb index c1927693..4597992 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">تم إيقاف التنزيل مؤقتًا</translation> <translation id="1409426117486808224">عرض مبسَّط لعلامات التبويب المفتوحة</translation> <translation id="1415402041810619267">تم اقتطاع عنوان URL</translation> +<translation id="1426410128494586442">نعم</translation> <translation id="1446450296470737166">السماح بالتحكم الكامل لأجهزة MIDI</translation> <translation id="1620510694547887537">الكاميرا</translation> <translation id="1644574205037202324">السجل</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb index 5e49f5fd..f2ee63a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ডাইনল’ড পজ কৰা হৈছে</translation> <translation id="1409426117486808224">খোলা টেবৰ বাবে সৰলীকৃত ভিউ</translation> <translation id="1415402041810619267">URL চুটি কৰা হ’ল</translation> +<translation id="1426410128494586442">হয়</translation> <translation id="1446450296470737166">MIDI ডিভাইচৰ সম্পূর্ণ নিয়ন্ত্ৰণৰ অনুমতি দিয়া</translation> <translation id="1620510694547887537">কেমেৰা</translation> <translation id="1644574205037202324">ইতিহাস</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb index ad57010..85a1bdef 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Endirmə durduruldu</translation> <translation id="1409426117486808224">Açıq tablar üçün sadələşdirilmiş görünüş</translation> <translation id="1415402041810619267">URL tam deyil</translation> +<translation id="1426410128494586442">Bəli</translation> <translation id="1446450296470737166">MIDI cihazlar üzərində tam nəzarətə icazə verin</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Tarixçə</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Valideyniniz tərəfindən idarə olunur</translation> <translation id="4670064810192446073">Virtual reallıq</translation> <translation id="4751476147751820511">Hərəkət və ışıq sensorları</translation> +<translation id="4811450222531576619">Onun mənbəyi və mövzusu haqqında məlumat əldə edin</translation> <translation id="4836046166855586901">Sayt bu cihazdan nə zaman aktiv şəkildə istifadə etdiyinizi bilmək istədikdə icazə istəsin</translation> <translation id="4883854917563148705">İdarə edilən ayarlar sıfırlana bilməz</translation> <translation id="4887024562049524730">Saytlar virtual reallıq cihazınız və datanızı istifadə etməzdən əvvəl icazə istəsin (tövsiyə edilir)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb index 5fa35d4..ac9e7550 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Спампоўка прыпынена</translation> <translation id="1409426117486808224">Спрошчаны выгляд адкрытых укладак</translation> <translation id="1415402041810619267">URL-адрас абрэзаны</translation> +<translation id="1426410128494586442">Так</translation> <translation id="1446450296470737166">Дазв. поўны кантроль MIDI-прылад</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1644574205037202324">Гісторыя</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb index f5acc05..df99cf5 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Изтеглянето е на пауза</translation> <translation id="1409426117486808224">Опростен изглед на отворените раздели</translation> <translation id="1415402041810619267">URL адресът е съкратен</translation> +<translation id="1426410128494586442">Да</translation> <translation id="1446450296470737166">Разр. на пълния контрол над MIDI</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1644574205037202324">История</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb index 2cb5a319..760794b822 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ডাউনলোড পজ করা আছে</translation> <translation id="1409426117486808224">খোলা ট্যাবের জন্য সরলীকৃত ভিউ</translation> <translation id="1415402041810619267">ইউআরএল ছোট করা হয়েছে</translation> +<translation id="1426410128494586442">হ্যাঁ</translation> <translation id="1446450296470737166">MIDI ডিভাইসগুলির পূর্ণ নিয়ন্ত্রণের অনুমতি দিন</translation> <translation id="1620510694547887537">ক্যামেরা</translation> <translation id="1644574205037202324">ইতিহাস</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">আপনার পিতামাতার দ্বারা পরিচালিত</translation> <translation id="4670064810192446073">ভার্চুয়াল রিয়ালিটি</translation> <translation id="4751476147751820511">মোশন বা হালকা সেন্সর</translation> +<translation id="4811450222531576619">এর সোর্স এবং বিষয় সম্পর্কে জানুন</translation> <translation id="4836046166855586901">সাইটকে এটি জানতে দিন যে এই ডিভাইসের ব্যবহার আপনি সক্রিয়ভাবে কখন করেন</translation> <translation id="4883854917563148705">ম্যানেজ করা সেটিংস রিসেট করা যায় না</translation> <translation id="4887024562049524730">সাইটগুলিকে আপনার ভার্চুয়াল রিয়েলিটি ডিভাইস ও ডেটা ব্যবহার করতে দেওয়ার আগে অনুমতি নিতে বলুন (সাজেস্ট করা হয়েছে)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb index b063c6b..a9f228fa 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Preuzimanje je pauzirano</translation> <translation id="1409426117486808224">Pojednostavljeni prikaz za otvaranje kartica</translation> <translation id="1415402041810619267">URL je odsječen</translation> +<translation id="1426410128494586442">Da</translation> <translation id="1446450296470737166">Puna kontrola MIDI uređaja</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historija</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb index cf3f622..16b8cb86 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">La baixada s'ha posat en pausa</translation> <translation id="1409426117486808224">Visualització simplificada de les pestanyes obertes</translation> <translation id="1415402041810619267">L'URL s'ha truncat</translation> +<translation id="1426410128494586442">Sí</translation> <translation id="1446450296470737166">Permet control total disp. MIDI</translation> <translation id="1620510694547887537">Càmera</translation> <translation id="1644574205037202324">Historial</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb index c042201..2d3e3cb 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Stahování pozastaveno</translation> <translation id="1409426117486808224">Zjednodušené zobrazení otevřených karet</translation> <translation id="1415402041810619267">Zkrácená adresa URL</translation> +<translation id="1426410128494586442">Ano</translation> <translation id="1446450296470737166">Povolit úplné ovládání zařízení MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historie</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Spravováno vaším rodičem</translation> <translation id="4670064810192446073">Virtuální realita</translation> <translation id="4751476147751820511">Senzory pohybu nebo světla</translation> +<translation id="4811450222531576619">Informace o zdroji a tématu</translation> <translation id="4836046166855586901">Zeptat se, když chce web zjistit, kdy aktivně používáte toto zařízení</translation> <translation id="4883854917563148705">Spravovaná nastavení nelze resetovat</translation> <translation id="4887024562049524730">Předtím, než webům bude povoleno použít zařízení a data pro virtuální realitu, se zeptat (doporučeno)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb index dc13a8e8..9cb49d6a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Wedi seibio lawrlwytho</translation> <translation id="1409426117486808224">Gwedd symlach ar gyfer tabiau sydd ar agor</translation> <translation id="1415402041810619267">Mae'r URL wedi'i gwtogi</translation> +<translation id="1426410128494586442">Iawn</translation> <translation id="1446450296470737166">Caniatáu rheolaeth lawn dros ddyfeisiau MIDI</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1644574205037202324">Hanes</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb index 39303b7..6976ab5 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Download er sat på pause</translation> <translation id="1409426117486808224">Enkel visning af åbne faner</translation> <translation id="1415402041810619267">Webadressen er forkortet</translation> +<translation id="1426410128494586442">Ja</translation> <translation id="1446450296470737166">Tillad fuld kontrol over MIDI-enheder</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historik</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb index 939a3204..e5fe7b1 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Download angehalten</translation> <translation id="1409426117486808224">Vereinfachte Ansicht für geöffnete Tabs</translation> <translation id="1415402041810619267">URL abgeschnitten</translation> +<translation id="1426410128494586442">Ja</translation> <translation id="1446450296470737166">Volle Kontr. über MIDI-Ger. erl.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Verlauf</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb index bfb9a1950..758011d 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Η λήψη διακόπηκε προσωρινά.</translation> <translation id="1409426117486808224">Απλοποιημένη προβολή για ανοικτές καρτέλες</translation> <translation id="1415402041810619267">Περικομμένο URL</translation> +<translation id="1426410128494586442">Ναι</translation> <translation id="1446450296470737166">Να επιτρέπεται πλήρης έλεγχος σε MIDI</translation> <translation id="1620510694547887537">Κάμερα</translation> <translation id="1644574205037202324">Ιστορικό</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb index a140d39..a2ded569 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Download paused</translation> <translation id="1409426117486808224">Simplified view for open tabs</translation> <translation id="1415402041810619267">URL truncated</translation> +<translation id="1426410128494586442">Yes</translation> <translation id="1446450296470737166">Allow full control of MIDI devices</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1644574205037202324">History</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb index a9aa211..70e600e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Descarga detenida</translation> <translation id="1409426117486808224">Vista simplificada para las pestañas abiertas</translation> <translation id="1415402041810619267">URL acortada</translation> +<translation id="1426410128494586442">Sí</translation> <translation id="1446450296470737166">Control de dispositivos MIDI</translation> <translation id="1620510694547887537">Cámara</translation> <translation id="1644574205037202324">Historial</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb index 381b5ffa..7a7bd4a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Descarga en pausa</translation> <translation id="1409426117486808224">Vista simplificada de las pestañas abiertas</translation> <translation id="1415402041810619267">URL truncada</translation> +<translation id="1426410128494586442">Sí</translation> <translation id="1446450296470737166">Control total dispositivos MIDI</translation> <translation id="1620510694547887537">Cámara</translation> <translation id="1644574205037202324">Historial</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb index 8c5437f..df28d2c 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Allalaadimine peatatud</translation> <translation id="1409426117486808224">Avatud vahelehtede lihtsustatud vaade</translation> <translation id="1415402041810619267">Lühendatud URL</translation> +<translation id="1426410128494586442">Jah</translation> <translation id="1446450296470737166">MIDI-seadm. täieliku juht. lub.</translation> <translation id="1620510694547887537">Kaamera</translation> <translation id="1644574205037202324">Ajalugu</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb index 864f6d9..88cc5b7 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Pausatu da deskarga</translation> <translation id="1409426117486808224">Irekitako fitxen ikuspegi sinplifikatua</translation> <translation id="1415402041810619267">URLa moztuta dago</translation> +<translation id="1426410128494586442">Bai</translation> <translation id="1446450296470737166">Onartu MIDI gailuen kontrol osoa</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historia</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb index 04dfa01..275ce74 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">بارگیری موقتاً متوقف شد</translation> <translation id="1409426117486808224">نمای سادهشده برای برگههای باز</translation> <translation id="1415402041810619267">نشانی وب کوتاهشده</translation> +<translation id="1426410128494586442">بله</translation> <translation id="1446450296470737166">اجازه کنترل کامل دستگاههای MIDI</translation> <translation id="1620510694547887537">دوربین</translation> <translation id="1644574205037202324">سابقه</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">مدیریت شده توسط والدین شما</translation> <translation id="4670064810192446073">واقعیت مجازی</translation> <translation id="4751476147751820511">حسگرهای نوری یا حرکتی</translation> +<translation id="4811450222531576619">با منبع و موضوعش آشنا شوید</translation> <translation id="4836046166855586901">وقتی سایتی میخواهد بداند چه زمانی بهصورت فعال از این دستگاه استفاده میکنید سؤال میشود</translation> <translation id="4883854917563148705">تنظیمات مدیریتشده بازنشانی نشدند</translation> <translation id="4887024562049524730">قبل از اینکه به سایتها اجازه داده شود به دستگاه و دادههای واقعیت مجازی دسترسی یابند سؤال شود (توصیه میشود)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb index 092ff41..3a8258e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Lataus keskeytettiin.</translation> <translation id="1409426117486808224">Yksinkertaisempi avoimien välilehtien näkymä</translation> <translation id="1415402041810619267">URL näkyy lyhennettynä</translation> +<translation id="1426410128494586442">Kyllä</translation> <translation id="1446450296470737166">Salli MIDI-laitteiden täysi käyttöoik.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historia</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb index 8f1a291f..195e058 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Na-pause ang pag-download</translation> <translation id="1409426117486808224">Pinasimpleng view para sa mga bukas na tab</translation> <translation id="1415402041810619267">Naputol ang URL</translation> +<translation id="1426410128494586442">Oo</translation> <translation id="1446450296470737166">Payagan ganap na kontrol sa MIDI device</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1644574205037202324">History</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb index f2dd318d..0488d89 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Téléchargement interrompu</translation> <translation id="1409426117486808224">Affichage simplifié pour les onglets ouverts</translation> <translation id="1415402041810619267">URL tronquée</translation> +<translation id="1426410128494586442">Oui</translation> <translation id="1446450296470737166">Autoriser le contrôle des appareils MIDI</translation> <translation id="1620510694547887537">Caméra</translation> <translation id="1644574205037202324">Historique</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb index 0950393..7484eb3 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Téléchargement suspendu</translation> <translation id="1409426117486808224">Vue simplifiée pour les onglets ouverts</translation> <translation id="1415402041810619267">URL tronquée</translation> +<translation id="1426410128494586442">Oui</translation> <translation id="1446450296470737166">Autoriser le contrôle complet des appareils MIDI</translation> <translation id="1620510694547887537">Caméra</translation> <translation id="1644574205037202324">Historique</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb index 91c3ca3..6ba5bfc2 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Pausouse a descarga</translation> <translation id="1409426117486808224">Vista simplificada de pestanas abertas</translation> <translation id="1415402041810619267">URL truncado</translation> +<translation id="1426410128494586442">Si</translation> <translation id="1446450296470737166">Permitir control disposit. MIDI</translation> <translation id="1620510694547887537">Cámara</translation> <translation id="1644574205037202324">Historial</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb index 3baad33..fe857a8 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ડાઉનલોડ થોભાવ્યું</translation> <translation id="1409426117486808224">ખુલ્લી ટૅબ માટે સરળ દૃશ્ય</translation> <translation id="1415402041810619267">URL ટૂંકી કરી છે</translation> +<translation id="1426410128494586442">હા</translation> <translation id="1446450296470737166">MIDI ઉપકરણોના પૂર્ણ નિયંત્રણની મંજૂરી આપો</translation> <translation id="1620510694547887537">કૅમેરા</translation> <translation id="1644574205037202324">ઇતિહાસ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb index ecf89af..735973ef 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">डाउनलोड रोका गया</translation> <translation id="1409426117486808224">खुले टैब के लिए सरल बनाया गया व्यू</translation> <translation id="1415402041810619267">यूआरएल छोटा हो गया</translation> +<translation id="1426410128494586442">हां</translation> <translation id="1446450296470737166">MIDI डिवाइस के पूरे नियंत्रण की अनुमति दें</translation> <translation id="1620510694547887537">कैमरा</translation> <translation id="1644574205037202324">इतिहास</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">आपके अभिभावक द्वारा प्रबंधित</translation> <translation id="4670064810192446073">वर्चुअल रिएलिटी</translation> <translation id="4751476147751820511">गति या लाइट सेंसर</translation> +<translation id="4811450222531576619">इस पेज के स्रोत और विषय के बारे में जानें</translation> <translation id="4836046166855586901">साइटों को यह पूछने दें कि आप इस डिवाइस का इस्तेमाल कब करते हैं</translation> <translation id="4883854917563148705">प्रबंधित सेटिंग रीसेट नहीं की जा सकती हैं</translation> <translation id="4887024562049524730">साइटों को अपने वर्चुअल रिएलिटी वाले डिवाइस और डेटा का इस्तेमाल करने की अनुमति देने से पहले पूछें (हम इसका सुझाव देते हैं)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb index ef1c87d..485dbc8c 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Preuzimanje je pauzirano</translation> <translation id="1409426117486808224">Pojednostavljeni prikaz za otvorene kartice</translation> <translation id="1415402041810619267">URL je skraćen</translation> +<translation id="1426410128494586442">Da</translation> <translation id="1446450296470737166">Omogući potpuni nadzor za MIDI</translation> <translation id="1620510694547887537">Fotoaparat</translation> <translation id="1644574205037202324">Povijest</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb index 9ac81b3..ac7ef78 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">A letöltés szünetel</translation> <translation id="1409426117486808224">A megnyitott lapok egyszerűsített nézete</translation> <translation id="1415402041810619267">URL csonkolva</translation> +<translation id="1426410128494586442">Igen</translation> <translation id="1446450296470737166">MIDI-eszközök teljes vezérlése</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Előzmények</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb index 902429f..1b71ac6 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Ներբեռնումը դադարեցվել է</translation> <translation id="1409426117486808224">Բաց ներդիրների պարզեցված դիտակերպ</translation> <translation id="1415402041810619267">URL-ը կրճատվել է</translation> +<translation id="1426410128494586442">Այո</translation> <translation id="1446450296470737166">Տրամադրել ամբողջական հսկողություն MIDI սարքերի նկատմամբ</translation> <translation id="1620510694547887537">Տեսախցիկ</translation> <translation id="1644574205037202324">Պատմություն</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Կառավարվում է ձեր ծնողի կողմից</translation> <translation id="4670064810192446073">Վիրտուալ իրականություն</translation> <translation id="4751476147751820511">Շարժման և լուսավորության տվիչներ</translation> +<translation id="4811450222531576619">Իմացեք ավելին աղբյուրի և թեմայի մասին</translation> <translation id="4836046166855586901">Հարցնել, երբ որևէ կայք ուզում է տեղեկանալ, երբ դուք ակտիվորեն օգտագործում եք այս սարքը</translation> <translation id="4883854917563148705">Կառավարվող կարգավորումները հնարավոր չէ վերակայել</translation> <translation id="4887024562049524730">Կայքերի համար թույլտվություն խնդրել՝ օգտագործելու վիրտուալ իրականության ձեր սարքերն ու տվյալները (խորհուրդ է տրվում)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb index c2ee4be2..8b9d743 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Download dijeda</translation> <translation id="1409426117486808224">Tampilan sederhana untuk tab yang terbuka</translation> <translation id="1415402041810619267">URL dipotong</translation> +<translation id="1426410128494586442">Ya</translation> <translation id="1446450296470737166">Izinkan kontrol penuh perangkat MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Histori</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb index cd0599f..7bc244f8 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Gert var hlé á niðurhali</translation> <translation id="1409426117486808224">Einfaldað yfirlit fyrir opna flipa</translation> <translation id="1415402041810619267">Stytt vefslóð</translation> +<translation id="1426410128494586442">Já</translation> <translation id="1446450296470737166">Leyfa ótakmarkaða stjórn á MIDI-tækjum</translation> <translation id="1620510694547887537">Myndavél</translation> <translation id="1644574205037202324">Ferill</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb index fe5b8e0..47ce27c 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Download sospeso</translation> <translation id="1409426117486808224">Visualizzazione semplificata delle schede aperte</translation> <translation id="1415402041810619267">URL troncato</translation> +<translation id="1426410128494586442">Sì</translation> <translation id="1446450296470737166">Controllo completo dispos. MIDI</translation> <translation id="1620510694547887537">Fotocamera</translation> <translation id="1644574205037202324">Cronologia</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb index c966291b..f0c56ee 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ההורדה הושהתה</translation> <translation id="1409426117486808224">תצוגה פשוטה של כרטיסיות פתוחות</translation> <translation id="1415402041810619267">כתובת ה-URL קוצרה</translation> +<translation id="1426410128494586442">כן</translation> <translation id="1446450296470737166">התרת שליטה מלאה על מכשירי MIDI</translation> <translation id="1620510694547887537">מצלמה</translation> <translation id="1644574205037202324">היסטוריה</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb index c3f89b219..1cba5c81 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ダウンロードを一時停止しました</translation> <translation id="1409426117486808224">開いているタブの簡易表示</translation> <translation id="1415402041810619267">URL の短縮バージョンです</translation> +<translation id="1426410128494586442">はい</translation> <translation id="1446450296470737166">MIDI機器のフルコントロールを許可</translation> <translation id="1620510694547887537">カメラ</translation> <translation id="1644574205037202324">履歴</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb index 93dd3d73..fbc81d0 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ჩამოტვირთვა დაპაუზებულია</translation> <translation id="1409426117486808224">გამარტივებული ხედი გახსნილი ჩანართებისთვის</translation> <translation id="1415402041810619267">URL შემოკლებულია</translation> +<translation id="1426410128494586442">დიახ</translation> <translation id="1446450296470737166">MIDI მოწყ. სრული კონტ. დაშვება</translation> <translation id="1620510694547887537">კამერა</translation> <translation id="1644574205037202324">ისტორია</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb index d277483..4d44943 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Жүктеу кідіртілді</translation> <translation id="1409426117486808224">Ашық қойындылардың қарапайым көрінісі</translation> <translation id="1415402041810619267">URL қысқартылды</translation> +<translation id="1426410128494586442">Иә</translation> <translation id="1446450296470737166">MIDI толық бақылауға рұқсат беру</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1644574205037202324">Тарих</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb index 23b03a7..409fcc1 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">បានផ្អាកការទាញយក</translation> <translation id="1409426117486808224">ទិដ្ឋភាពសាមញ្ញសម្រាប់ផ្ទាំងបើក</translation> <translation id="1415402041810619267">បានបង្រួម URL</translation> +<translation id="1426410128494586442">បាទ/ចាស</translation> <translation id="1446450296470737166">អនុញ្ញាតឲ្យមានការគ្រប់គ្រងពេញលេញលើឧបករណ៍ MIDI</translation> <translation id="1620510694547887537">កាមេរ៉ា</translation> <translation id="1644574205037202324">ប្រវត្តិ</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">គ្រប់គ្រងដោយឪពុកម្តាយរបស់អ្នក</translation> <translation id="4670064810192446073">VR</translation> <translation id="4751476147751820511">ឧបករណ៍ចាប់សញ្ញាពន្លឺ ឬចលនា</translation> +<translation id="4811450222531576619">ស្វែងយល់អំពីប្រភព និងប្រធានបទរបស់ទំព័រនេះ</translation> <translation id="4836046166855586901">សួរនៅពេលគេហទំព័រចង់ដឹងអំពីពេលវេលាដែលអ្នកកំពុងប្រើឧបករណ៍នេះយ៉ាងសកម្ម</translation> <translation id="4883854917563148705">មិនអាចកំណត់ការកំណត់ដែលស្ថិតក្រោមការគ្រប់គ្រងឡើងវិញបានទេ</translation> <translation id="4887024562049524730">សួរមុនពេលអនុញ្ញាតឱ្យគេហទំព័រប្រើទិន្នន័យ និងឧបករណ៍ VR របស់អ្នក (បានណែនាំ)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb index a70b141e..8b3279c 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ಡೌನ್ಲೋಡ್ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="1409426117486808224">ತೆರೆದ ಟ್ಯಾಬ್ಗಳಿಗಾಗಿ ಸರಳೀಕೃತ ವೀಕ್ಷಣೆ</translation> <translation id="1415402041810619267">URL ಕಿರಿದುಗೊಳಿಸಲಾಗಿದೆ</translation> +<translation id="1426410128494586442">ಹೌದು</translation> <translation id="1446450296470737166">MIDI ಸಾಧನಗಳ ಪೂರ್ಣ ನಿಯಂತ್ರಣ ಅನುಮತಿಸಿ</translation> <translation id="1620510694547887537">ಕ್ಯಾಮರಾ</translation> <translation id="1644574205037202324">ಇತಿಹಾಸ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb index c0b6ee0f..ed3201e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">다운로드 일시중지됨</translation> <translation id="1409426117486808224">열린 탭 간단히 보기</translation> <translation id="1415402041810619267">URL 잘림</translation> +<translation id="1426410128494586442">예</translation> <translation id="1446450296470737166">MIDI 기기의 전체 제어 허용</translation> <translation id="1620510694547887537">카메라</translation> <translation id="1644574205037202324">방문 기록</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb index e74c052d..38859fc 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Жүктөп алуу тындырылды</translation> <translation id="1409426117486808224">Ачык өтмөктөр үчүн жөнөкөйлөштүрүлгөн көрүнүш</translation> <translation id="1415402041810619267">URL кесилди</translation> +<translation id="1426410128494586442">Ооба</translation> <translation id="1446450296470737166">MIDI түзмктрд толук көзмлд уркст</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1644574205037202324">Таржымал</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb index 82e7903..7e54c76 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ຢຸດການດາວໂຫລດໄວ້ຊົ່ວຄາວແລ້ວ</translation> <translation id="1409426117486808224">ມຸມມອງງ່າຍດາຍສຳລັບແຖບທີ່ເປີດຢູ່</translation> <translation id="1415402041810619267">ຕັດ URL ໃຫ້ສັ້ນລົງແລ້ວ</translation> +<translation id="1426410128494586442">ແມ່ນແລ້ວ</translation> <translation id="1446450296470737166">ອະນຸຍາດການຄວບຄຸມອຸປະກອນ MIDI ເຕັມ</translation> <translation id="1620510694547887537">ກ້ອງຖ່າຍຮູບ</translation> <translation id="1644574205037202324">ປະຫວັດ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb index 4d740a2..996a0c21 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Atsisiuntimas pristabdytas</translation> <translation id="1409426117486808224">Supaprastinta atidarytų skirtukų peržiūra</translation> <translation id="1415402041810619267">URL sutrumpintas</translation> +<translation id="1426410128494586442">Taip</translation> <translation id="1446450296470737166">Leisti visiškai valdyti MIDI įr.</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Istorija</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb index 86cdba4..01d9ea6 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Lejupielāde pārtraukta</translation> <translation id="1409426117486808224">Vienkāršots atvērtu ciļņu skatījums</translation> <translation id="1415402041810619267">URL ir saīsināts</translation> +<translation id="1426410128494586442">Jā</translation> <translation id="1446450296470737166">Pilnīga MIDI ierīču pārvaldība</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Vēsture</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb index 882449b..9cd8e5f 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Преземањето е паузирано</translation> <translation id="1409426117486808224">Поедноставен приказ за отворени картички</translation> <translation id="1415402041810619267">URL-адресата е скратена</translation> +<translation id="1426410128494586442">Да</translation> <translation id="1446450296470737166">Дозволи контрола над MIDI-уреди</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1644574205037202324">Историја</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb index 42c07a3..973d3f9 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ഡൗൺലോഡ് താൽക്കാലികമായി നിർത്തി</translation> <translation id="1409426117486808224">തുറന്ന ടാബുകൾക്കായി ലളിതവൽക്കരിച്ച കാഴ്ച</translation> <translation id="1415402041810619267">URL ചുരുക്കി</translation> +<translation id="1426410128494586442">അതെ</translation> <translation id="1446450296470737166">MIDI ഉപകരണങ്ങളുടെ പൂർണ്ണ നിയന്ത്രണം അനുവദിക്കുക</translation> <translation id="1620510694547887537">ക്യാമറ</translation> <translation id="1644574205037202324">ചരിത്രം</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">നിങ്ങളുടെ രക്ഷിതാവ് നിയന്ത്രിക്കുന്നു</translation> <translation id="4670064810192446073">വെർച്വൽ റിയാലിറ്റി</translation> <translation id="4751476147751820511">ചലന അല്ലെങ്കിൽ വെളിച്ച സെൻസറുകൾ</translation> +<translation id="4811450222531576619">അതിന്റെ ഉറവിടത്തെയും വിഷയത്തെയും കുറിച്ച് അറിയുക</translation> <translation id="4836046166855586901">നിങ്ങൾ ഈ ഉപകരണം സജീവമായി ഉപയോഗിക്കുന്നത് ഒരു സൈറ്റിന് അറിയണമെന്നുള്ളപ്പോൾ ചോദിക്കുക</translation> <translation id="4883854917563148705">മാനേജ് ചെയ്യുന്ന ക്രമീകരണം പുനഃസജ്ജീകരിക്കാനാവില്ല</translation> <translation id="4887024562049524730">നിങ്ങളുടെ വെർച്വൽ റിയാലിറ്റി ഉപകരണവും ഡാറ്റയും ഉപയോഗിക്കാൻ സൈറ്റുകളെ അനുവദിക്കുന്നതിന് മുമ്പ് ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നത്)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb index b9301c34..acf51c5 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Таталтыг түр зогсоосон</translation> <translation id="1409426117486808224">Нээлттэй табын хялбаршуулсан харагдац</translation> <translation id="1415402041810619267">URL-г танасан</translation> +<translation id="1426410128494586442">Тийм</translation> <translation id="1446450296470737166">MIDI төхөөрөмжийг бүрэн хянахыг зөвшөөрөх</translation> <translation id="1620510694547887537">Камер</translation> <translation id="1644574205037202324">Түүх</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb index b29eb2b..ec6ad21c 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">डाउनलोडला विराम दिला</translation> <translation id="1409426117486808224">उघड्या टॅबसाठी सोपा केलेला व्ह्यू</translation> <translation id="1415402041810619267">URL कापली गेली</translation> +<translation id="1426410128494586442">होय</translation> <translation id="1446450296470737166">MIDI डिव्हाइसेसच्या पूर्ण नियंत्रणास अनुमती द्या</translation> <translation id="1620510694547887537">कॅमेरा</translation> <translation id="1644574205037202324">इतिहास</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb index 4045338..3b9b10f 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Muat turun dijeda</translation> <translation id="1409426117486808224">Paparan ringkas bagi tab terbuka</translation> <translation id="1415402041810619267">URL terpangkas</translation> +<translation id="1426410128494586442">Ya</translation> <translation id="1446450296470737166">Benarkan kawalan penuh peranti MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Sejarah</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb index 5c974307..4f5f68a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ဒေါင်းလုဒ်လုပ်မှု ဆိုင်းငံ့ထားသည်</translation> <translation id="1409426117486808224">တဘ်ဖွင့်ခြင်းများအတွက် ရိုးရှင်းသည့် မြင်ကွင်း</translation> <translation id="1415402041810619267">URL ကို ဖြတ်လိုက်သည်</translation> +<translation id="1426410128494586442">Yes</translation> <translation id="1446450296470737166">MIDI ကိရိယာများအား အပြည့်အဝ ထိန်းချုပ်ခွင့် ပြုရန်</translation> <translation id="1620510694547887537">ကင်မရာ</translation> <translation id="1644574205037202324">မှတ်တမ်း</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb index cdfeda3d..decdbdf5 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">डाउनलोड रोकिएको छ</translation> <translation id="1409426117486808224">खुला ट्याबहरूका लागि सरलीकृत दृश्य</translation> <translation id="1415402041810619267">URL छोटो बनाइयो</translation> +<translation id="1426410128494586442">हो</translation> <translation id="1446450296470737166">MIDI डिभाइसहरूको पूर्ण नियन्त्रणलाई अनुमति दिनुहोस्</translation> <translation id="1620510694547887537">क्यामेरा</translation> <translation id="1644574205037202324">इतिहास</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">तपाईँको अविभावक द्वारा प्रबन्ध गरिएको</translation> <translation id="4670064810192446073">भर्चुअल रियालिटी</translation> <translation id="4751476147751820511">गति वा प्रकाशसम्बन्धी सेन्सरहरू</translation> +<translation id="4811450222531576619">यो पेजको स्रोत र विषयका बारेमा जान्नुहोस्</translation> <translation id="4836046166855586901">कुनै साइटले मैले यो डिभाइस चलाइरहेको छु कि छुइनँ भन्ने कुराको जानकारी माग्दा मलाई सोधियोस्</translation> <translation id="4883854917563148705">व्यवस्थित सेटिङ रिसेट गर्न सकिँदैन</translation> <translation id="4887024562049524730">साइटहरूलाई भर्चुअल रियालिटी चल्ने तपाईंको यन्त्र र त्यसमा भएको डेटा प्रयोग गर्न अनुमति दिनुअघि सोध्नुहोस् (सिफारिस गरिएको)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb index 0111b6b3..360641a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Download onderbroken</translation> <translation id="1409426117486808224">Vereenvoudigde weergave voor geopende tabbladen</translation> <translation id="1415402041810619267">URL afgekapt</translation> +<translation id="1426410128494586442">Ja</translation> <translation id="1446450296470737166">Volledig beheer van MIDI-apparaten toestaan</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1644574205037202324">Geschiedenis</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Beheerd door je ouder</translation> <translation id="4670064810192446073">Virtual reality</translation> <translation id="4751476147751820511">Bewegings- of lichtsensoren</translation> +<translation id="4811450222531576619">Meer informatie over de bron en het onderwerp</translation> <translation id="4836046166855586901">Vragen als een site wil weten wanneer je dit apparaat actief gebruikt</translation> <translation id="4883854917563148705">Beheerde instellingen kunnen niet worden gereset</translation> <translation id="4887024562049524730">Vragen voordat sites je virtualreality-apparaat en -gegevens mogen gebruiken (aanbevolen)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb index f143db3..31750fda 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Nedlastingen er satt på pause</translation> <translation id="1409426117486808224">Forenklet visning for åpne faner</translation> <translation id="1415402041810619267">Nettadressen er avkortet</translation> +<translation id="1426410128494586442">Ja</translation> <translation id="1446450296470737166">Full kontroll over MIDI-enheter</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Logg</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Administreres av foreldrene dine</translation> <translation id="4670064810192446073">Virtuell virkelighet</translation> <translation id="4751476147751820511">Bevegelses- eller lyssensorer</translation> +<translation id="4811450222531576619">Finn ut mer om kilden og emnet</translation> <translation id="4836046166855586901">Spør når nettsteder vil vite når du bruker denne enheten aktivt</translation> <translation id="4883854917563148705">Administrerte innstillinger kan ikke tilbakestilles</translation> <translation id="4887024562049524730">Spør før nettsteder får bruke virtuell virkelighet-enheten din eller -dataene dine (anbefales)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb index e40c5440..352bbd3 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ଡାଉନ୍ଲୋଡ୍ ବିରତ ହୋଇଛି</translation> <translation id="1409426117486808224">ଖୋଲାଥିବା ଟାବ୍ଗୁଡ଼ିକ ପାଇଁ ସରଳୀକୃତ ଦୃଶ୍ୟ</translation> <translation id="1415402041810619267">URLକୁ ଛୋଟ କରାଯାଇଛି</translation> +<translation id="1426410128494586442">ହଁ</translation> <translation id="1446450296470737166">MIDI ଡିଭାଇସ୍ଗୁଡ଼ିକର ପୂର୍ଣ୍ଣ ନିୟନ୍ତ୍ରଣର ଅନୁମତି ଦିଅନ୍ତୁ</translation> <translation id="1620510694547887537">କ୍ୟାମେରା</translation> <translation id="1644574205037202324">ଇତିବୃତ୍ତି</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb index 512b7416f..f40513c 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ਡਾਊਨਲੋਡ ਰੋਕਿਆ ਗਿਆ</translation> <translation id="1409426117486808224">ਖੁੱਲ੍ਹੀਆਂ ਟੈਬਾਂ ਲਈ ਸਰਲੀਕਿਰਤ ਦ੍ਰਿਸ਼</translation> <translation id="1415402041810619267">URL ਛੋਟਾ ਕੀਤਾ ਗਿਆ</translation> +<translation id="1426410128494586442">ਹਾਂ</translation> <translation id="1446450296470737166">MIDI ਡਿਵਾਈਸਾਂ ਦੇ ਪੂਰੇ ਨਿਯੰਤਰਣ ਦੀ ਆਗਿਆ ਦਿਓ</translation> <translation id="1620510694547887537">ਕੈਮਰਾ</translation> <translation id="1644574205037202324">ਇਤਿਹਾਸ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb index 32bdfa69..161c903e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Pobieranie wstrzymane</translation> <translation id="1409426117486808224">Uproszczony widok otwartych kart</translation> <translation id="1415402041810619267">URL obcięty</translation> +<translation id="1426410128494586442">Tak</translation> <translation id="1446450296470737166">Pełne sterowanie urządzeniami MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historia</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb index d3d8338..2448c385 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Download pausado</translation> <translation id="1409426117486808224">Versão simplificada das guias abertas</translation> <translation id="1415402041810619267">URL truncado</translation> +<translation id="1426410128494586442">Sim</translation> <translation id="1446450296470737166">Permitir controle total de dispositivos MIDI</translation> <translation id="1620510694547887537">Câmera</translation> <translation id="1644574205037202324">Histórico</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Gerenciado pelos seus pais</translation> <translation id="4670064810192446073">Realidade virtual</translation> <translation id="4751476147751820511">Sensores de luz ou movimento</translation> +<translation id="4811450222531576619">Saiba mais sobre a fonte e o tema</translation> <translation id="4836046166855586901">Perguntar quando um site quiser saber os momentos em que você está usando este dispositivo</translation> <translation id="4883854917563148705">Não é possível redefinir as configurações gerenciadas</translation> <translation id="4887024562049524730">Perguntar antes de permitir que sites usem seus dispositivos e dados de realidade virtual (recomendado)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb index 44d04051..74068e1 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Transferência interrompida</translation> <translation id="1409426117486808224">Vista simplificada dos separadores abertos</translation> <translation id="1415402041810619267">URL truncado</translation> +<translation id="1426410128494586442">Sim</translation> <translation id="1446450296470737166">Perm. controlo total dispo. MIDI</translation> <translation id="1620510694547887537">Câmara</translation> <translation id="1644574205037202324">Histórico</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb index 0437596..2a8aa1c 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Descărcare întreruptă</translation> <translation id="1409426117486808224">Afișare simplificată pentru filele deschise</translation> <translation id="1415402041810619267">Adresă URL trunchiată</translation> +<translation id="1426410128494586442">Da</translation> <translation id="1446450296470737166">Control complet dispozitive MIDI</translation> <translation id="1620510694547887537">Cameră</translation> <translation id="1644574205037202324">Istoric</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb index 6161ec8..98b6dde 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Скачивание приостановлено.</translation> <translation id="1409426117486808224">Упрощенный просмотр открытых вкладок</translation> <translation id="1415402041810619267">URL укорочен</translation> +<translation id="1426410128494586442">Да</translation> <translation id="1446450296470737166">Полный доступ к управлению MIDI-устройствами</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1644574205037202324">История</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb index 5d20ab5..7e514246 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">බාගැනීම විරාමයි</translation> <translation id="1409426117486808224">විවෘත ටැබ් සඳහා සරල දසුනක්</translation> <translation id="1415402041810619267">URL කපන ලදි</translation> +<translation id="1426410128494586442">ඔව්</translation> <translation id="1446450296470737166">MIDI උපාංගවල සම්පූර්ණ පාලනයට ඉඩ දෙන්න</translation> <translation id="1620510694547887537">කැමරාව</translation> <translation id="1644574205037202324">ඉතිහාසය</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb index 2f6a5e7c..030ec4e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Sťahovanie bolo pozastavené</translation> <translation id="1409426117486808224">Jednoduché zobrazenie otvorených kariet</translation> <translation id="1415402041810619267">Skrátená webová adresa</translation> +<translation id="1426410128494586442">Áno</translation> <translation id="1446450296470737166">Povoliť úplné ovlád. zar. MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">História</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Spravované vaším rodičom</translation> <translation id="4670064810192446073">Virtuálna realita</translation> <translation id="4751476147751820511">Senzory pohybu alebo svetla</translation> +<translation id="4811450222531576619">Ďalšie informácie o príslušnom zdroji a téme</translation> <translation id="4836046166855586901">Opýtať sa, keď chce web zistiť, či aktívne používate toto zariadenie</translation> <translation id="4883854917563148705">Spravované nastavenia sa nedajú resetovať</translation> <translation id="4887024562049524730">Pýtať sa, či chcete povoliť webu používať zariadenie a dáta pre virtuálnu realitu (odporúčané)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb index 7ddbb38..fd839d7 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Prenos je zaustavljen</translation> <translation id="1409426117486808224">Poenostavljen pogled za odprte zavihke</translation> <translation id="1415402041810619267">URL je skrajšan</translation> +<translation id="1426410128494586442">Da</translation> <translation id="1446450296470737166">Dovolitev popolnega nadzora nad napravami MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Zgodovina</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb index 8939c83..c53323a6 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Shkarkimi u ndërpre</translation> <translation id="1409426117486808224">Pamje e thjeshtuar për skedat e hapura</translation> <translation id="1415402041810619267">URL e prerë</translation> +<translation id="1426410128494586442">Po</translation> <translation id="1446450296470737166">Lejo kontrollin e plotë të pajisjeve MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historiku</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb index a19d33db..2ffc291a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Preuzimanje je pauzirano</translation> <translation id="1409426117486808224">Pojednostavljen prikaz otvorenih kartica</translation> <translation id="1415402041810619267">URL je skraćen</translation> +<translation id="1426410128494586442">Da</translation> <translation id="1446450296470737166">Puna kontrola nad MIDI uređajima</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Istorija</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Ovim upravlja tvoj roditelj</translation> <translation id="4670064810192446073">Virtuelna realnost</translation> <translation id="4751476147751820511">Senzori za pokret ili svetlo</translation> +<translation id="4811450222531576619">Saznajte više o njenom izvoru i temi</translation> <translation id="4836046166855586901">Pitaj kada sajt želi da zna kada aktivno koristim ovaj uređaj</translation> <translation id="4883854917563148705">Podešavanja kojima se upravlja ne mogu da se resetuju</translation> <translation id="4887024562049524730">Pre nego što dozvolite sajtovima da koriste uređaj i podatke virtuelne realnosti prikazuje se upit (preporučeno)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb index ecc7f27f..1f68314 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Преузимање је паузирано</translation> <translation id="1409426117486808224">Поједностављен приказ отворених картица</translation> <translation id="1415402041810619267">URL је скраћен</translation> +<translation id="1426410128494586442">Да</translation> <translation id="1446450296470737166">Пуна контрола над MIDI уређајима</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1644574205037202324">Историја</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Овим управља твој родитељ</translation> <translation id="4670064810192446073">Виртуелна реалност</translation> <translation id="4751476147751820511">Сензори за покрет или светло</translation> +<translation id="4811450222531576619">Сазнајте више о њеном извору и теми</translation> <translation id="4836046166855586901">Питај када сајт жели да зна када активно користим овај уређај</translation> <translation id="4883854917563148705">Подешавања којима се управља не могу да се ресетују</translation> <translation id="4887024562049524730">Пре него што дозволите сајтовима да користе уређај и податке виртуелне реалности приказује се упит (препоручено)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb index 77702fc5..465d981 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Nedladdningen har pausats</translation> <translation id="1409426117486808224">Förenklad vy för öppna flikar</translation> <translation id="1415402041810619267">Webbadressen har trunkerats</translation> +<translation id="1426410128494586442">Ja</translation> <translation id="1446450296470737166">Tillåt fullst. kontroll av MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historik</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb index eb39293..b3c268f 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Upakuaji umesitishwa</translation> <translation id="1409426117486808224">Mwonekano uliorahisishwa kwa ajili ya vichupo vilivyofunguliwa</translation> <translation id="1415402041810619267">URL imepunguzwa</translation> +<translation id="1426410128494586442">Ndiyo</translation> <translation id="1446450296470737166">Ruhusu udhibiti kamili wa vifaa vya MIDI</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Historia</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb index 93f24fc5..d468535 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">பதிவிறக்கம் இடைநிறுத்தப்பட்டது</translation> <translation id="1409426117486808224">திறக்கப்பட்டுள்ள தாவல்களுக்கான எளிதாக்கப்பட்ட காட்சி</translation> <translation id="1415402041810619267">URL துண்டிக்கப்பட்டது</translation> +<translation id="1426410128494586442">ஆம்</translation> <translation id="1446450296470737166">MIDI சாதனங்களுக்கு முழுக் கட்டுப்பாட்டை அனுமதி</translation> <translation id="1620510694547887537">கேமரா</translation> <translation id="1644574205037202324">வரலாறு</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb index b54421e..7e0ce679 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">డౌన్లోడ్ పాజ్ చేయబడింది</translation> <translation id="1409426117486808224">తెరిచిన ట్యాబ్ల కోసం సరళమైన వీక్షణ</translation> <translation id="1415402041810619267">URL కుదించబడింది</translation> +<translation id="1426410128494586442">అవును</translation> <translation id="1446450296470737166">MIDI పరికరాల పూర్తి నియం. అనుమ.</translation> <translation id="1620510694547887537">కెమెరా</translation> <translation id="1644574205037202324">హిస్టరీ</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">మీ తల్లి/తండ్రి ద్వారా నిర్వహించబడుతోంది</translation> <translation id="4670064810192446073">వర్చువల్ రియాలిటీ</translation> <translation id="4751476147751820511">కదలిక లేదా కాంతి సెన్సార్లు</translation> +<translation id="4811450222531576619">సోర్స్, టాపిక్ గురించి తెలుసుకోండి</translation> <translation id="4836046166855586901">మీరు ఈ పరికరాన్ని యాక్టివ్గా ఉపయోగిస్తున్నప్పుడు ఆ విషయాన్ని సైట్ తెలుసుకోవాలంటే సైట్ మీ అనుమతిని అడగాలి</translation> <translation id="4883854917563148705">నిర్వహిత సెట్టింగ్లు రీసెట్ చేయబడవు</translation> <translation id="4887024562049524730">మీ వర్చువల్ రియాలిటీ పరికరాన్ని, డేటాను ఉపయోగించడానికి సైట్లను అనుమతించే ముందు అడుగుతుంది (సిఫార్సు చేయబడింది)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb index 57807df..a1dbfff 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">หยุดดาวน์โหลดไว้ชั่วคราว</translation> <translation id="1409426117486808224">มุมมองอย่างง่ายสำหรับแท็บที่เปิดไว้</translation> <translation id="1415402041810619267">ตัด URL ให้สั้นลงแล้ว</translation> +<translation id="1426410128494586442">ยอมรับ</translation> <translation id="1446450296470737166">ควบคุมอุปกรณ์ MIDI ได้สมบูรณ์</translation> <translation id="1620510694547887537">กล้องถ่ายรูป</translation> <translation id="1644574205037202324">ประวัติการเข้าชม</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb index a4efbfd4..9eeebd15 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">İndirme işlemi duraklatıldı</translation> <translation id="1409426117486808224">Açık sekmeler için basitleştirilmiş görünüm</translation> <translation id="1415402041810619267">URL kısaltıldı</translation> +<translation id="1426410128494586442">Evet</translation> <translation id="1446450296470737166">MIDI cihazlarının tam denetimine izin verme</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Geçmiş</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb index c98e5ba..88df4843 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Завантаження призупинено</translation> <translation id="1409426117486808224">Спрощений перегляд відкритих вкладок</translation> <translation id="1415402041810619267">URL-адресу скорочено</translation> +<translation id="1426410128494586442">Так</translation> <translation id="1446450296470737166">Повний контроль пристроїв MIDI</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1644574205037202324">Історія</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Керується одним із батьків</translation> <translation id="4670064810192446073">Віртуальна реальність</translation> <translation id="4751476147751820511">Датчики руху та світла</translation> +<translation id="4811450222531576619">Докладніше про джерело й тему</translation> <translation id="4836046166855586901">Запитувати, коли сайт хоче дізнатися, чи ви активно використовуєте цей пристрій</translation> <translation id="4883854917563148705">Налаштування, якими керує адміністратор, не можна скинути</translation> <translation id="4887024562049524730">Запитувати, перш ніж давати сайтам доступ до даних і пристрою віртуальної реальності (рекомендовано)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb index b5a8d6e..6a34a01 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">ڈاؤن لوڈ موقوف ہوگیا</translation> <translation id="1409426117486808224">کھلے ٹیبز کیلئے سادہ منظر</translation> <translation id="1415402041810619267">URL کو چھوٹا کیا گیا</translation> +<translation id="1426410128494586442">ہاں</translation> <translation id="1446450296470737166">MIDI آلات کے مکمل کنٹرول کی اجازت دیں</translation> <translation id="1620510694547887537">کیمرا</translation> <translation id="1644574205037202324">سرگزشت</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb index 0e4bd5c..23c71e1 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Yuklab olish pauza qilindi.</translation> <translation id="1409426117486808224">Ochiq varaqlarni ko‘rish uchun oddiy rejim</translation> <translation id="1415402041810619267">URL manzil qisqartirildi</translation> +<translation id="1426410128494586442">Ha</translation> <translation id="1446450296470737166">MIDI qurilmalarini boshqarishga to‘liq ruxsat berish</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1644574205037202324">Tarix</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb index 51b70c11..a4bdbf0a 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Đã tạm dừng quá trình tải xuống</translation> <translation id="1409426117486808224">Chế độ xem đơn giản cho thẻ đang mở</translation> <translation id="1415402041810619267">URL đã được cắt bớt</translation> +<translation id="1426410128494586442">Có</translation> <translation id="1446450296470737166">Cho phép kiểm soát hoàn toàn thiết bị MIDI</translation> <translation id="1620510694547887537">Máy ảnh</translation> <translation id="1644574205037202324">Nhật ký</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb index 1c889af..8afdacd8 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">已暂停下载</translation> <translation id="1409426117486808224">使用简化版视图查看打开的标签页</translation> <translation id="1415402041810619267">网址被截断了</translation> +<translation id="1426410128494586442">是</translation> <translation id="1446450296470737166">允许全面控制 MIDI 设备</translation> <translation id="1620510694547887537">摄像头</translation> <translation id="1644574205037202324">历史记录</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb index 9810800..27a98aa 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">已暫停下載</translation> <translation id="1409426117486808224">使用簡化檢視模式查看開啟的分頁</translation> <translation id="1415402041810619267">縮短咗網址</translation> +<translation id="1426410128494586442">是</translation> <translation id="1446450296470737166">允許全權控制 MIDI 裝置。</translation> <translation id="1620510694547887537">相機</translation> <translation id="1644574205037202324">記錄</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb index 4138477..c88ee07 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">已暫停下載</translation> <translation id="1409426117486808224">使用簡易檢視模式查看開啟的分頁</translation> <translation id="1415402041810619267">已截斷網址</translation> +<translation id="1426410128494586442">是</translation> <translation id="1446450296470737166">允許完整控制 MIDI 裝置</translation> <translation id="1620510694547887537">攝影機</translation> <translation id="1644574205037202324">歷史記錄</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">你的家長已停用這項功能</translation> <translation id="4670064810192446073">虛擬實境</translation> <translation id="4751476147751820511">動作或光源感應器</translation> +<translation id="4811450222531576619">瞭解來源和主題</translation> <translation id="4836046166855586901">允許網站詢問你使用這部裝置的時間</translation> <translation id="4883854917563148705">無法重設受管理的設定</translation> <translation id="4887024562049524730">系統必須先詢問你,才能允許網站使用你的虛擬實境裝置和資料 (建議設定)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb index 1838a3f7..ec2e59b 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb
@@ -18,6 +18,7 @@ <translation id="1384959399684842514">Ukulayisha kumiswe isikhashana</translation> <translation id="1409426117486808224">Ukubuka okwenziwe lula kumathebhu avuliwe</translation> <translation id="1415402041810619267">I-URL inciphisiwe</translation> +<translation id="1426410128494586442">Yebo</translation> <translation id="1446450296470737166">Vumela ulawulo olugcwele lwamadivayisi we-MIDI</translation> <translation id="1620510694547887537">Ikhamela</translation> <translation id="1644574205037202324">Umlando</translation> @@ -161,6 +162,7 @@ <translation id="4645575059429386691">Kuphethwe umzali wakho</translation> <translation id="4670064810192446073">Into engekho ngokoqobo</translation> <translation id="4751476147751820511">Izinzwa zokunyakaza noma zokukhanya</translation> +<translation id="4811450222531576619">Funda ngomthombo nesihloko sayo</translation> <translation id="4836046166855586901">Buza lapho isayithi lifuna ukwazi lapho usebenzisa le divayisi</translation> <translation id="4883854917563148705">Izilungiselelo eziphethwe azikwazi ukusethwa kabusha</translation> <translation id="4887024562049524730">Buza ngaphambi kokuvumela amasayithi ukuthi asebenzise idivayisi yakho yento engekho ngokoqobo nedatha (kunconyiwe)</translation>
diff --git a/components/browsing_data/content/local_shared_objects_container.cc b/components/browsing_data/content/local_shared_objects_container.cc index 4b7f55f..81ba0f0 100644 --- a/components/browsing_data/content/local_shared_objects_container.cc +++ b/components/browsing_data/content/local_shared_objects_container.cc
@@ -20,6 +20,7 @@ #include "components/browsing_data/content/local_storage_helper.h" #include "components/browsing_data/content/service_worker_helper.h" #include "components/browsing_data/content/shared_worker_helper.h" +#include "components/browsing_data/core/browsing_data_utils.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/url_constants.h" @@ -90,126 +91,77 @@ const GURL& origin) const { size_t count = 0; - // Count all cookies that have the same domain as the provided |origin|. This - // means count all cookies that have been set by a host that is not considered - // to be a third party regarding the domain of the provided |origin|. E.g. if - // the origin is "http://foo.com" then all cookies with domain foo.com, - // a.foo.com, b.a.foo.com or *.foo.com will be counted. - for (const auto& cookie : cookies()->origin_cookie_set()) { - // The |domain_url| is only created in order to use the - // SameDomainOrHost method below. It does not matter which scheme is - // used as the scheme is ignored by the SameDomainOrHost method. - GURL domain_url = net::cookie_util::CookieOriginToURL(cookie.Domain(), - false /* is_https */); + auto origins = GetObjectCountPerOriginMap(); - if (origin.SchemeIsHTTPOrHTTPS() && SameDomainOrHost(origin, domain_url)) - ++count; - } - - // Count local storages for the domain of the given `storage_key`. - for (const auto& storage_key : local_storages()->GetStorageKeys()) { - // TODO(https://crbug.com/1199077): Use the real StorageKey once migrated. - if (SameDomainOrHost(origin, storage_key.origin().GetURL())) - ++count; - } - - // Count session storages for the domain of the given `storage_key`. - for (const auto& storage_key : session_storages()->GetStorageKeys()) { - // TODO(https://crbug.com/1199077): Use the real StorageKey once migrated. - if (SameDomainOrHost(origin, storage_key.origin().GetURL())) - ++count; - } - - // Count indexed dbs for the domain of the given `storage_key`. - for (const auto& storage_key : indexed_dbs()->GetStorageKeys()) { - // TODO(https://crbug.com/1199077): Use the real StorageKey once migrated. - if (SameDomainOrHost(origin, storage_key.origin().GetURL())) - ++count; - } - - // Count service workers for the domain of the given |origin|. - for (const auto& storage_origin : service_workers()->GetOrigins()) { - if (SameDomainOrHost(origin, storage_origin.GetURL())) - ++count; - } - - // Count shared workers for the domain of the given |origin|. - typedef SharedWorkerHelper::SharedWorkerInfo SharedWorkerInfo; - const std::set<SharedWorkerInfo>& shared_worker_info = - shared_workers()->GetSharedWorkerInfo(); - for (const auto& it : shared_worker_info) { - if (SameDomainOrHost(origin, it.worker)) - ++count; - } - - // Count cache storages for the domain of the given |origin|. - for (const auto& storage_origin : cache_storages()->GetOrigins()) { - if (SameDomainOrHost(origin, storage_origin.GetURL())) - ++count; - } - - // Count filesystems for the domain of the given |origin|. - for (const auto& storage_origin : file_systems()->GetOrigins()) { - if (SameDomainOrHost(origin, storage_origin.GetURL())) - ++count; - } - - // Count databases for the domain of the given |origin|. - for (const auto& storage_origin : databases()->GetOrigins()) { - if (SameDomainOrHost(origin, storage_origin.GetURL())) - ++count; + for (const auto& it_origin : origins) { + if (SameDomainOrHost(origin, it_origin.first.GetURL())) + count += it_origin.second; } return count; } -size_t LocalSharedObjectsContainer::GetDomainCount() const { - std::set<base::StringPiece> hosts; +size_t LocalSharedObjectsContainer::GetHostCountForDomain( + const GURL& registrable_domain) const { + auto origins = GetObjectCountPerOriginMap(); + std::set<std::string> hosts; + for (const auto& it_origin : origins) { + if (SameDomainOrHost(registrable_domain, it_origin.first.GetURL())) + hosts.insert(it_origin.first.host()); + } + return hosts.size(); +} + +size_t LocalSharedObjectsContainer::GetHostCount() const { + auto origins = GetObjectCountPerOriginMap(); + std::set<std::string> hosts; + + for (const auto& it_origin : origins) + hosts.insert(it_origin.first.host()); + return hosts.size(); +} + +std::map<url::Origin, int> +LocalSharedObjectsContainer::GetObjectCountPerOriginMap() const { + std::map<url::Origin, int> origins; for (const auto& cookie : cookies()->origin_cookie_set()) { - hosts.insert(cookie.Domain()); + GURL domain_url = net::cookie_util::CookieOriginToURL( + cookie.Domain(), IsHttpsCookieSourceScheme(cookie.SourceScheme())); + origins[url::Origin::Create(domain_url)]++; } for (const auto& storage_key : local_storages()->GetStorageKeys()) { // TODO(https://crbug.com/1199077): Use the real StorageKey once migrated. - hosts.insert(storage_key.origin().host()); + origins[storage_key.origin()]++; } for (const auto& storage_key : session_storages()->GetStorageKeys()) { // TODO(https://crbug.com/1199077): Use the real StorageKey once migrated. - hosts.insert(storage_key.origin().host()); + origins[storage_key.origin()]++; } for (const auto& storage_key : indexed_dbs()->GetStorageKeys()) { // TODO(https://crbug.com/1199077): Use the real StorageKey once migrated. - hosts.insert(storage_key.origin().host()); + origins[storage_key.origin()]++; } for (const auto& origin : service_workers()->GetOrigins()) - hosts.insert(origin.host()); + origins[origin]++; for (const auto& info : shared_workers()->GetSharedWorkerInfo()) - hosts.insert(info.storage_key.origin().host()); + origins[info.storage_key.origin()]++; for (const auto& origin : cache_storages()->GetOrigins()) - hosts.insert(origin.host()); + origins[origin]++; for (const auto& origin : file_systems()->GetOrigins()) - hosts.insert(origin.host()); + origins[origin]++; for (const auto& origin : databases()->GetOrigins()) - hosts.insert(origin.host()); + origins[origin]++; - std::set<std::string> domains; - for (const base::StringPiece& host : hosts) { - std::string domain = net::registry_controlled_domains::GetDomainAndRegistry( - host, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); - if (!domain.empty()) - domains.insert(std::move(domain)); - else - domains.insert(std::string(host)); - } - return domains.size(); + return origins; } void LocalSharedObjectsContainer::UpdateIgnoredEmptyStorageKeys(
diff --git a/components/browsing_data/content/local_shared_objects_container.h b/components/browsing_data/content/local_shared_objects_container.h index 42da500..326cc4d 100644 --- a/components/browsing_data/content/local_shared_objects_container.h +++ b/components/browsing_data/content/local_shared_objects_container.h
@@ -7,6 +7,7 @@ #include <stddef.h> +#include <map> #include <memory> #include "base/memory/ref_counted.h" @@ -49,9 +50,6 @@ // Returns the number of objects for the given |origin|. size_t GetObjectCountForDomain(const GURL& origin) const; - // Get number of unique registrable domains in the container. - size_t GetDomainCount() const; - // Updates the ignored empty storage keys, which won't be included in the // object and domain counts. // Note: If `ignore_empty_localstorage` is true, the ignored empty storage @@ -59,6 +57,12 @@ // `StartFetching` method is called. void UpdateIgnoredEmptyStorageKeys(base::OnceClosure done) const; + // Returns the number of unique sites in the container. + size_t GetHostCount() const; + + // Returns the number of unique sites for the given |registrable_domain|. + size_t GetHostCountForDomain(const GURL& registrable_domain) const; + // Empties the container. void Reset(); @@ -83,6 +87,8 @@ } private: + std::map<url::Origin, int> GetObjectCountPerOriginMap() const; + scoped_refptr<CannedCookieHelper> cookies_; scoped_refptr<CannedDatabaseHelper> databases_; scoped_refptr<CannedFileSystemHelper> file_systems_;
diff --git a/components/browsing_data/core/browsing_data_utils.cc b/components/browsing_data/core/browsing_data_utils.cc index c6fdb55..37ca3c9 100644 --- a/components/browsing_data/core/browsing_data_utils.cc +++ b/components/browsing_data/core/browsing_data_utils.cc
@@ -385,4 +385,17 @@ return iter->second; } +bool IsHttpsCookieSourceScheme(net::CookieSourceScheme cookie_source_scheme) { + switch (cookie_source_scheme) { + case net::CookieSourceScheme::kSecure: + return true; + case net::CookieSourceScheme::kNonSecure: + return false; + case net::CookieSourceScheme::kUnset: + // Older cookies don't have a source scheme. Associate them with https + // since the majority of pageloads are https. + return true; + } +} + } // namespace browsing_data
diff --git a/components/browsing_data/core/browsing_data_utils.h b/components/browsing_data/core/browsing_data_utils.h index 209d960..516e53eb 100644 --- a/components/browsing_data/core/browsing_data_utils.h +++ b/components/browsing_data/core/browsing_data_utils.h
@@ -11,6 +11,7 @@ #include "build/build_config.h" #include "components/browsing_data/core/clear_browsing_data_tab.h" #include "components/browsing_data/core/counters/browsing_data_counter.h" +#include "net/cookies/cookie_constants.h" namespace browsing_data { @@ -79,6 +80,8 @@ BrowsingDataType GetDataTypeFromDeletionPreference( const std::string& pref_name); +bool IsHttpsCookieSourceScheme(net::CookieSourceScheme cookie_source_scheme); + } // namespace browsing_data #endif // COMPONENTS_BROWSING_DATA_CORE_BROWSING_DATA_UTILS_H_
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index a456071..f5fca68d 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "10.73", - "log_list_timestamp": "2022-08-14T12:55:33Z", + "version": "10.75", + "log_list_timestamp": "2022-08-16T12:56:02Z", "operators": [ { "name": "Google",
diff --git a/components/content_settings/browser/page_specific_content_settings_unittest.cc b/components/content_settings/browser/page_specific_content_settings_unittest.cc index a1f3f62..35bd29e 100644 --- a/components/content_settings/browser/page_specific_content_settings_unittest.cc +++ b/components/content_settings/browser/page_specific_content_settings_unittest.cc
@@ -412,9 +412,6 @@ EXPECT_EQ(1u, objects.GetObjectCountForDomain(GURL("http://localhost"))); EXPECT_EQ(1u, objects.GetObjectCountForDomain(GURL("http://example.com"))); EXPECT_EQ(1u, objects.GetObjectCountForDomain(GURL("http://192.168.0.1"))); - // google.com, youtube.com, localhost, example.com and 192.168.0.1 should be - // counted as domains. - EXPECT_EQ(5u, objects.GetDomainCount()); // The localStorage storage keys (http://maps.google.com:8080 and // http://example.com) should be ignored since they are empty. @@ -424,7 +421,6 @@ EXPECT_EQ(5u, objects.GetObjectCount()); EXPECT_EQ(2u, objects.GetObjectCountForDomain(GURL("http://google.com"))); EXPECT_EQ(0u, objects.GetObjectCountForDomain(GURL("http://example.com"))); - EXPECT_EQ(4u, objects.GetDomainCount()); } TEST_F(PageSpecificContentSettingsTest, LocalSharedObjectsContainerCookie) { @@ -470,7 +466,6 @@ const auto& objects = content_settings->allowed_local_shared_objects(); EXPECT_EQ(5u, objects.GetObjectCount()); EXPECT_EQ(5u, objects.GetObjectCountForDomain(GURL("http://google.com"))); - EXPECT_EQ(1u, objects.GetDomainCount()); } TEST_F(PageSpecificContentSettingsTest,
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java index d585d4e..47f6ef0d 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java
@@ -17,6 +17,7 @@ import static org.chromium.net.CronetTestRule.assertContains; import static org.chromium.net.CronetTestRule.getContext; +import android.os.Build; import android.os.ConditionVariable; import android.os.Process; import android.support.test.runner.AndroidJUnit4; @@ -33,6 +34,7 @@ import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.net.CronetTestRule.OnlyRunNativeCronet; +import org.chromium.net.CronetTestRule.RequiresMinAndroidApi; import org.chromium.net.CronetTestRule.RequiresMinApi; import org.chromium.net.MetricsTestUtil.TestRequestFinishedListener; import org.chromium.net.TestBidirectionalStreamCallback.FailureType; @@ -1626,6 +1628,7 @@ @Feature({"Cronet"}) @OnlyRunNativeCronet @RequiresMinApi(10) // Tagging support added in API level 10: crrev.com/c/chromium/src/+/937583 + @RequiresMinAndroidApi(Build.VERSION_CODES.M) // crbug/1301957 public void testTagging() throws Exception { if (!CronetTestUtil.nativeCanGetTaggedBytes()) { Log.i(TAG, "Skipping test - GetTaggedBytes unsupported.");
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestRule.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestRule.java index f2a40d9..5f2ba1b 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestRule.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestRule.java
@@ -119,7 +119,8 @@ int getMaximumAvailableApiLevel() { // Prior to M59 the ApiVersion.getMaximumAvailableApiLevel API didn't exist - if (ApiVersion.getCronetVersion().compareTo("59") < 0) { + int cronetMajorVersion = Integer.parseInt(ApiVersion.getCronetVersion().split("\\.")[0]); + if (cronetMajorVersion < 59) { return 3; } return ApiVersion.getMaximumAvailableApiLevel();
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java index dab3861f..da5202d 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java
@@ -42,6 +42,7 @@ import org.chromium.base.test.util.Feature; import org.chromium.net.CronetTestRule.CronetTestFramework; import org.chromium.net.CronetTestRule.OnlyRunNativeCronet; +import org.chromium.net.CronetTestRule.RequiresMinAndroidApi; import org.chromium.net.CronetTestRule.RequiresMinApi; import org.chromium.net.NetworkChangeNotifierAutoDetect.ConnectivityManagerDelegate; import org.chromium.net.TestUrlRequestCallback.ResponseStep; @@ -367,12 +368,9 @@ @SmallTest @Feature({"Cronet"}) @OnlyRunNativeCronet // Only chromium based Cronet supports the multi-network API + @RequiresMinAndroidApi(Build.VERSION_CODES.M) // Multi-network API is supported from Marshmallow public void testNetworkBoundContextLifetime() throws Exception { // Multi-network API is available starting from Android Lollipop. - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - return; - } - final CronetTestFramework testFramework = mTestRule.startCronetTestFramework(); ConnectivityManagerDelegate delegate = new ConnectivityManagerDelegate(InstrumentationRegistry.getTargetContext()); @@ -432,6 +430,7 @@ @SmallTest @Feature({"Cronet"}) @OnlyRunNativeCronet // Only chromium based Cronet supports the multi-network API + @RequiresMinAndroidApi(Build.VERSION_CODES.M) // Multi-network API is supported from Marshmallow public void testNetworkBoundRequestCancel() throws Exception { // Upon a network disconnection, NCN posts a tasks onto the network thread that calls // CronetContext::NetworkTasks::OnNetworkDisconnected. @@ -439,10 +438,6 @@ // network thread that calls CronetURLRequest::NetworkTasks::Destroy. // Depending on their implementation this can lead to UAF, this test is here to prevent that // from being introduced in the future. - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - return; - } - final CronetTestFramework testFramework = mTestRule.startCronetTestFramework(); TestUrlRequestCallback callback = new TestUrlRequestCallback(); callback.setAutoAdvance(false);
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java index 472f43fc..4f81678e 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
@@ -33,6 +33,7 @@ import org.chromium.base.test.util.Feature; import org.chromium.net.CronetTestRule.CronetTestFramework; import org.chromium.net.CronetTestRule.OnlyRunNativeCronet; +import org.chromium.net.CronetTestRule.RequiresMinAndroidApi; import org.chromium.net.CronetTestRule.RequiresMinApi; import org.chromium.net.TestUrlRequestCallback.FailureType; import org.chromium.net.TestUrlRequestCallback.ResponseStep; @@ -2332,21 +2333,20 @@ @SmallTest @Feature({"Cronet"}) @OnlyRunNativeCronet + @RequiresMinAndroidApi(Build.VERSION_CODES.N) + // Used for Android's NetworkSecurityPolicy added in Nougat public void testCleartextTrafficBlocked() throws Exception { - // This feature only works starting from N. - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - final int cleartextNotPermitted = -29; - // This hostname needs to match the one in network_security_config.xml and the one used - // by QuicTestServer. - // https requests to it are tested in QuicTest, so this checks that we're only blocking - // cleartext. - final String url = "http://example.com/simple.txt"; - TestUrlRequestCallback callback = startAndWaitForComplete(url); - assertNull(callback.mResponseInfo); - assertNotNull(callback.mError); - assertEquals(cleartextNotPermitted, - ((NetworkException) callback.mError).getCronetInternalErrorCode()); - } + final int cleartextNotPermitted = -29; + // This hostname needs to match the one in network_security_config.xml and the one used + // by QuicTestServer. + // https requests to it are tested in QuicTest, so this checks that we're only blocking + // cleartext. + final String url = "http://example.com/simple.txt"; + TestUrlRequestCallback callback = startAndWaitForComplete(url); + assertNull(callback.mResponseInfo); + assertNotNull(callback.mError); + assertEquals(cleartextNotPermitted, + ((NetworkException) callback.mError).getCronetInternalErrorCode()); } @Test @@ -2402,6 +2402,7 @@ @SmallTest @Feature({"Cronet"}) @RequiresMinApi(9) // Tagging support added in API level 9: crrev.com/c/chromium/src/+/930086 + @RequiresMinAndroidApi(Build.VERSION_CODES.M) // crbug/1301957 public void testTagging() throws Exception { if (!CronetTestUtil.nativeCanGetTaggedBytes()) { Log.i(TAG, "Skipping test - GetTaggedBytes unsupported.");
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java index ea6fabf..93b159b 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java
@@ -26,6 +26,7 @@ import org.chromium.base.test.util.Feature; import org.chromium.net.CronetTestRule.CronetTestFramework; import org.chromium.net.CronetTestRule.OnlyRunNativeCronet; +import org.chromium.net.CronetTestRule.RequiresMinAndroidApi; import org.chromium.net.impl.CronetLibraryLoader; import java.io.FileDescriptor; @@ -49,15 +50,12 @@ @SmallTest @Feature({"Cronet"}) @OnlyRunNativeCronet + @RequiresMinAndroidApi(Build.VERSION_CODES.LOLLIPOP) + // Os and OsConstants aren't exposed until Lollipop public void testNetworkChangeNotifier() throws Exception { CronetTestFramework testFramework = mTestRule.startCronetTestFramework(); assertNotNull(testFramework); - // Os and OsConstants aren't exposed until Lollipop so we cannot run this test. - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - return; - } - // Bind a listening socket to a local port. The socket won't be used to accept any // connections, but rather to get connection stuck waiting to connect. FileDescriptor s = Os.socket(AF_INET6, SOCK_STREAM, 0);
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetManifestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetManifestTest.java index a40e455d..3b4cfff 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetManifestTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetManifestTest.java
@@ -6,8 +6,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.mockito.Answers.RETURNS_DEFAULTS; -import static org.mockito.Mockito.doReturn; import static org.chromium.net.CronetTestRule.getContext; @@ -24,11 +22,9 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.PackageManagerWrapper; import org.chromium.net.CronetTestRule; import org.chromium.net.CronetTestRule.OnlyRunNativeCronet; import org.chromium.net.impl.CronetLogger.CronetSource; @@ -41,23 +37,15 @@ @Rule public final CronetTestRule mTestRule = new CronetTestRule(); - @Rule - public final MockitoRule mMockitoRule = MockitoJUnit.rule(); - private Context mMockContext; - @Mock(answer = RETURNS_DEFAULTS) - private PackageManager mMockPackageManager; private Bundle mMetadata; private ApplicationInfo mAppInfo; @Before public void setUp() throws Exception { + mAppInfo = new ApplicationInfo(); mMockContext = new MockContext(getContext()); mMetadata = new Bundle(); - mAppInfo = new ApplicationInfo(); - doReturn(mAppInfo) - .when(mMockPackageManager) - .getApplicationInfo(mMockContext.getPackageName(), PackageManager.GET_META_DATA); } @Test @@ -112,7 +100,13 @@ @Override public PackageManager getPackageManager() { - return mMockPackageManager; + return new PackageManagerWrapper(super.getPackageManager()) { + @Override + public ApplicationInfo getApplicationInfo(String packageName, int flags) + throws PackageManager.NameNotFoundException { + return mAppInfo; + } + }; } } }
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java index 7ca7a6f..dce77ec8 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java
@@ -32,6 +32,7 @@ import org.chromium.net.CronetTestRule; import org.chromium.net.CronetTestRule.CompareDefaultWithCronet; import org.chromium.net.CronetTestRule.OnlyRunCronetHttpURLConnection; +import org.chromium.net.CronetTestRule.RequiresMinAndroidApi; import org.chromium.net.CronetTestRule.RequiresMinApi; import org.chromium.net.CronetTestUtil; import org.chromium.net.MockUrlRequestJobFactory; @@ -1376,6 +1377,7 @@ @SmallTest @Feature({"Cronet"}) @RequiresMinApi(9) // Tagging support added in API level 9: crrev.com/c/chromium/src/+/930086 + @RequiresMinAndroidApi(Build.VERSION_CODES.M) // crbug/1301957 public void testTagging() throws Exception { if (!CronetTestUtil.nativeCanGetTaggedBytes()) { Log.i(TAG, "Skipping test - GetTaggedBytes unsupported.");
diff --git a/components/desks_storage/core/desk_model_wrapper_unittests.cc b/components/desks_storage/core/desk_model_wrapper_unittests.cc index 5e4298541..ee54cc54 100644 --- a/components/desks_storage/core/desk_model_wrapper_unittests.cc +++ b/components/desks_storage/core/desk_model_wrapper_unittests.cc
@@ -107,8 +107,9 @@ base::StringPrintf(kTemplateNameFormat, index); std::unique_ptr<ash::DeskTemplate> desk_template = std::make_unique<ash::DeskTemplate>( - template_uuid, ash::DeskTemplateSource::kUser, template_name, - base::Time::Now(), type); + base::GUID::ParseCaseInsensitive(template_uuid), + ash::DeskTemplateSource::kUser, template_name, base::Time::Now(), + type); desk_template->set_desk_restore_data( std::make_unique<app_restore::RestoreData>()); return desk_template; @@ -121,7 +122,8 @@ const std::string& name, const base::Time created_time) { auto entry = std::make_unique<ash::DeskTemplate>( - uuid, source, name, created_time, ash::DeskTemplateType::kTemplate); + base::GUID::ParseCaseInsensitive(uuid), source, name, created_time, + ash::DeskTemplateType::kTemplate); entry->set_desk_restore_data(std::make_unique<app_restore::RestoreData>()); return entry; } @@ -132,8 +134,8 @@ const std::string& name, const base::Time created_time) { auto entry = std::make_unique<ash::DeskTemplate>( - uuid, ash::DeskTemplateSource::kUser, name, created_time, - ash::DeskTemplateType::kSaveAndRecall); + base::GUID::ParseCaseInsensitive(uuid), ash::DeskTemplateSource::kUser, + name, created_time, ash::DeskTemplateType::kSaveAndRecall); entry->set_desk_restore_data(std::make_unique<app_restore::RestoreData>()); return entry; }
diff --git a/components/desks_storage/core/desk_sync_bridge.cc b/components/desks_storage/core/desk_sync_bridge.cc index 0390a0c..c5f7697 100644 --- a/components/desks_storage/core/desk_sync_bridge.cc +++ b/components/desks_storage/core/desk_sync_bridge.cc
@@ -903,8 +903,8 @@ std::unique_ptr<DeskTemplate> DeskSyncBridge::FromSyncProto( const sync_pb::WorkspaceDeskSpecifics& pb_entry) { - const std::string uuid(pb_entry.uuid()); - if (uuid.empty() || !base::GUID::ParseCaseInsensitive(uuid).is_valid()) + base::GUID uuid = base::GUID::ParseCaseInsensitive(pb_entry.uuid()); + if (!uuid.is_valid()) return nullptr; const base::Time created_time = desk_template_conversion::ProtoTimeToTime( @@ -920,9 +920,9 @@ } // Protobuf parsing enforces UTF-8 encoding for all strings. - auto desk_template = - std::make_unique<DeskTemplate>(uuid, ash::DeskTemplateSource::kUser, - pb_entry.name(), created_time, desk_type); + auto desk_template = std::make_unique<DeskTemplate>( + std::move(uuid), ash::DeskTemplateSource::kUser, pb_entry.name(), + created_time, desk_type); if (pb_entry.has_updated_time_windows_epoch_micros()) { desk_template->set_updated_time(desk_template_conversion::ProtoTimeToTime(
diff --git a/components/desks_storage/core/desk_sync_bridge_unittest.cc b/components/desks_storage/core/desk_sync_bridge_unittest.cc index 70f5558..036770b 100644 --- a/components/desks_storage/core/desk_sync_bridge_unittest.cc +++ b/components/desks_storage/core/desk_sync_bridge_unittest.cc
@@ -1242,9 +1242,9 @@ base::RunLoop loop; bridge()->AddOrUpdateEntry( - std::make_unique<DeskTemplate>( - kTestUuid1.AsLowercaseString(), DeskTemplateSource::kUser, - "template 1", AdvanceAndGetTime(), DeskTemplateType::kTemplate), + std::make_unique<DeskTemplate>(kTestUuid1, DeskTemplateSource::kUser, + "template 1", AdvanceAndGetTime(), + DeskTemplateType::kTemplate), base::BindLambdaForTesting([&](DeskModel::AddOrUpdateEntryStatus status) { EXPECT_EQ(status, DeskModel::AddOrUpdateEntryStatus::kOk); loop.Quit(); @@ -1264,9 +1264,9 @@ base::RunLoop loop; bridge()->AddOrUpdateEntry( - std::make_unique<DeskTemplate>( - kTestUuid1.AsLowercaseString(), DeskTemplateSource::kUser, - "template 1", AdvanceAndGetTime(), DeskTemplateType::kTemplate), + std::make_unique<DeskTemplate>(kTestUuid1, DeskTemplateSource::kUser, + "template 1", AdvanceAndGetTime(), + DeskTemplateType::kTemplate), base::BindLambdaForTesting([&](DeskModel::AddOrUpdateEntryStatus status) { EXPECT_EQ(status, DeskModel::AddOrUpdateEntryStatus::kFailure); loop.Quit(); @@ -1425,8 +1425,7 @@ base::RunLoop loop; bridge()->AddOrUpdateEntry( - std::make_unique<DeskTemplate>(kTestUuid1.AsLowercaseString(), - DeskTemplateSource::kUser, + std::make_unique<DeskTemplate>(kTestUuid1, DeskTemplateSource::kUser, "updated template 1", AdvanceAndGetTime(), DeskTemplateType::kTemplate), base::BindLambdaForTesting([&](DeskModel::AddOrUpdateEntryStatus status) {
diff --git a/components/desks_storage/core/desk_template_conversion.cc b/components/desks_storage/core/desk_template_conversion.cc index 62b0c9e6..b0c811f 100644 --- a/components/desks_storage/core/desk_template_conversion.cc +++ b/components/desks_storage/core/desk_template_conversion.cc
@@ -1038,7 +1038,7 @@ return nullptr; int version; - std::string uuid; + std::string uuid_str; std::string name; std::string created_time_usec_str; std::string updated_time_usec_str; @@ -1046,17 +1046,20 @@ int64_t updated_time_usec; const base::Value* desk = policy_json.FindDictKey(kDesk); if (!desk || !GetInt(policy_json, kVersion, &version) || - !GetString(policy_json, kUuid, &uuid) || + !GetString(policy_json, kUuid, &uuid_str) || !GetString(policy_json, kName, &name) || !GetString(policy_json, kCreatedTime, &created_time_usec_str) || !base::StringToInt64(created_time_usec_str, &created_time_usec) || !GetString(policy_json, kUpdatedTime, &updated_time_usec_str) || !base::StringToInt64(updated_time_usec_str, &updated_time_usec) || - uuid.empty() || !base::GUID::ParseCaseInsensitive(uuid).is_valid() || name.empty() || created_time_usec_str.empty() || updated_time_usec_str.empty()) return nullptr; + base::GUID uuid = base::GUID::ParseCaseInsensitive(uuid_str); + if (!uuid.is_valid()) + return nullptr; + // Set default value for the desk type to template. std::string desk_type_string; if (!GetString(policy_json, kDeskType, &desk_type_string)) { @@ -1070,7 +1073,7 @@ std::unique_ptr<ash::DeskTemplate> desk_template = std::make_unique<ash::DeskTemplate>( - uuid, source, name, created_time, + std::move(uuid), source, name, created_time, GetDeskTypeFromString(desk_type_string)); desk_template->set_updated_time(updated_time);
diff --git a/components/desks_storage/core/desk_template_util_unittests.cc b/components/desks_storage/core/desk_template_util_unittests.cc index 5de8387..f16a15a 100644 --- a/components/desks_storage/core/desk_template_util_unittests.cc +++ b/components/desks_storage/core/desk_template_util_unittests.cc
@@ -16,16 +16,16 @@ TEST_F(DeskTemplateUtilTest, FindDuplicateEntry) { std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries; - const base::GUID& uuid = base::GUID::GenerateRandomV4(); + const base::GUID uuid = base::GUID::GenerateRandomV4(); auto desk_template = std::make_unique<ash::DeskTemplate>( - uuid.AsLowercaseString(), ash::DeskTemplateSource::kUser, "Template 1", - base::Time::Now(), ash::DeskTemplateType::kTemplate); + uuid, ash::DeskTemplateSource::kUser, "Template 1", base::Time::Now(), + ash::DeskTemplateType::kTemplate); entries[uuid] = std::move(desk_template); - const base::GUID& new_uuid = base::GUID::GenerateRandomV4(); + const base::GUID new_uuid = base::GUID::GenerateRandomV4(); auto new_desk_template = std::make_unique<ash::DeskTemplate>( - new_uuid.AsLowercaseString(), ash::DeskTemplateSource::kUser, - "Template 1", base::Time::Now(), ash::DeskTemplateType::kTemplate); + new_uuid, ash::DeskTemplateSource::kUser, "Template 1", base::Time::Now(), + ash::DeskTemplateType::kTemplate); entries[new_uuid] = std::move(new_desk_template); EXPECT_TRUE( desk_template_util::FindOtherEntryWithName(u"Template 1", uuid, entries)); @@ -33,16 +33,16 @@ TEST_F(DeskTemplateUtilTest, FindNoDuplicateEntryInFilledMap) { std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries; - const base::GUID& uuid = base::GUID::GenerateRandomV4(); + const base::GUID uuid = base::GUID::GenerateRandomV4(); auto desk_template = std::make_unique<ash::DeskTemplate>( - uuid.AsLowercaseString(), ash::DeskTemplateSource::kUser, "Template 1", - base::Time::Now(), ash::DeskTemplateType::kTemplate); + uuid, ash::DeskTemplateSource::kUser, "Template 1", base::Time::Now(), + ash::DeskTemplateType::kTemplate); entries[uuid] = std::move(desk_template); - const base::GUID& new_uuid = base::GUID::GenerateRandomV4(); + const base::GUID new_uuid = base::GUID::GenerateRandomV4(); auto new_desk_template = std::make_unique<ash::DeskTemplate>( - new_uuid.AsLowercaseString(), ash::DeskTemplateSource::kUser, - "Template 2", base::Time::Now(), ash::DeskTemplateType::kTemplate); + new_uuid, ash::DeskTemplateSource::kUser, "Template 2", base::Time::Now(), + ash::DeskTemplateType::kTemplate); entries[new_uuid] = std::move(new_desk_template); EXPECT_FALSE( desk_template_util::FindOtherEntryWithName(u"Template 1", uuid, entries)); @@ -50,10 +50,10 @@ TEST_F(DeskTemplateUtilTest, FindNoDuplicateEntryInAOneElementMap) { std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries; - const base::GUID& uuid = base::GUID::GenerateRandomV4(); + const base::GUID uuid = base::GUID::GenerateRandomV4(); auto desk_template = std::make_unique<ash::DeskTemplate>( - uuid.AsLowercaseString(), ash::DeskTemplateSource::kUser, "Template 1", - base::Time::Now(), ash::DeskTemplateType::kTemplate); + uuid, ash::DeskTemplateSource::kUser, "Template 1", base::Time::Now(), + ash::DeskTemplateType::kTemplate); entries[uuid] = std::move(desk_template); EXPECT_FALSE(
diff --git a/components/desks_storage/core/local_desk_data_manager_unittests.cc b/components/desks_storage/core/local_desk_data_manager_unittests.cc index efeb0a852..03afc873 100644 --- a/components/desks_storage/core/local_desk_data_manager_unittests.cc +++ b/components/desks_storage/core/local_desk_data_manager_unittests.cc
@@ -127,8 +127,9 @@ base::StringPrintf(kTemplateNameFormat, index); std::unique_ptr<ash::DeskTemplate> desk_template = std::make_unique<ash::DeskTemplate>( - template_uuid, ash::DeskTemplateSource::kUser, template_name, - base::Time::Now(), type); + base::GUID::ParseCaseInsensitive(template_uuid), + ash::DeskTemplateSource::kUser, template_name, base::Time::Now(), + type); desk_template->set_desk_restore_data( std::make_unique<app_restore::RestoreData>()); return desk_template; @@ -141,7 +142,8 @@ const std::string& name, const base::Time created_time) { auto entry = std::make_unique<ash::DeskTemplate>( - uuid, source, name, created_time, ash::DeskTemplateType::kTemplate); + base::GUID::ParseCaseInsensitive(uuid), source, name, created_time, + ash::DeskTemplateType::kTemplate); entry->set_desk_restore_data(std::make_unique<app_restore::RestoreData>()); return entry; } @@ -152,8 +154,8 @@ const std::string& name, const base::Time created_time) { auto entry = std::make_unique<ash::DeskTemplate>( - uuid, ash::DeskTemplateSource::kUser, name, created_time, - ash::DeskTemplateType::kSaveAndRecall); + base::GUID::ParseCaseInsensitive(uuid), ash::DeskTemplateSource::kUser, + name, created_time, ash::DeskTemplateType::kSaveAndRecall); entry->set_desk_restore_data(std::make_unique<app_restore::RestoreData>()); return entry; }
diff --git a/components/desks_storage/core/saved_desk_builder.cc b/components/desks_storage/core/saved_desk_builder.cc index 947af91..e0231f5 100644 --- a/components/desks_storage/core/saved_desk_builder.cc +++ b/components/desks_storage/core/saved_desk_builder.cc
@@ -17,7 +17,7 @@ desk_source_(ash::DeskTemplateSource::kUser), desk_type_(ash::DeskTemplateType::kTemplate), restore_data_(std::make_unique<app_restore::RestoreData>()) { - desk_uuid_ = base::GUID::GenerateRandomV4().AsLowercaseString(); + desk_uuid_ = base::GUID::GenerateRandomV4(); created_time_ = base::Time::Now(); }; @@ -33,7 +33,7 @@ } SavedDeskBuilder& SavedDeskBuilder::SetUuid(const std::string& uuid) { - desk_uuid_ = uuid; + desk_uuid_ = base::GUID::ParseCaseInsensitive(uuid); return *this; }
diff --git a/components/desks_storage/core/saved_desk_builder.h b/components/desks_storage/core/saved_desk_builder.h index 7bef062..e959e3ad 100644 --- a/components/desks_storage/core/saved_desk_builder.h +++ b/components/desks_storage/core/saved_desk_builder.h
@@ -8,6 +8,7 @@ #include <string> #include <vector> +#include "base/guid.h" #include "base/time/time.h" #include "components/app_restore/restore_data.h" #include "url/gurl.h" @@ -71,7 +72,7 @@ const std::string app_id); private: - std::string desk_uuid_; + base::GUID desk_uuid_; std::string desk_name_; ash::DeskTemplateSource desk_source_; ash::DeskTemplateType desk_type_;
diff --git a/components/feed/BUILD.gn b/components/feed/BUILD.gn index 9a08ab0..3c21fff 100644 --- a/components/feed/BUILD.gn +++ b/components/feed/BUILD.gn
@@ -22,10 +22,21 @@ deps = [ ":buildflags", "//base", + "//components/signin/public/base", + "//components/sync/base", ] } source_set("unit_tests") { testonly = true - deps = [ "core/v2:core_unit_tests" ] + sources = [ "feed_feature_list_unittest.cc" ] + deps = [ + ":feature_list", + "core/v2:core_unit_tests", + "//base", + "//base/test:test_support", + "//components/signin/public/base", + "//components/sync/base", + "//testing/gtest", + ] }
diff --git a/components/feed/DEPS b/components/feed/DEPS index 73fd9bb3..48d59d2 100644 --- a/components/feed/DEPS +++ b/components/feed/DEPS
@@ -7,6 +7,7 @@ "+components/offline_pages", "+components/prefs", "+components/signin/public", + "+components/sync", "+components/variations", "+components/version_info", "+components/web_resource",
diff --git a/components/feed/core/v2/BUILD.gn b/components/feed/core/v2/BUILD.gn index 2364a15..b38672f5c 100644 --- a/components/feed/core/v2/BUILD.gn +++ b/components/feed/core/v2/BUILD.gn
@@ -255,6 +255,7 @@ "//components/reading_list/features:flags", "//components/signin/public/identity_manager", "//components/signin/public/identity_manager:test_support", + "//components/sync/base", "//components/variations:test_support", "//components/version_info:channel", "//net:test_support",
diff --git a/components/feed/core/v2/feed_network_impl.cc b/components/feed/core/v2/feed_network_impl.cc index 974f594..3593cf8 100644 --- a/components/feed/core/v2/feed_network_impl.cc +++ b/components/feed/core/v2/feed_network_impl.cc
@@ -27,12 +27,15 @@ #include "components/feed/core/proto/v2/wire/upload_actions_response.pb.h" #include "components/feed/core/v2/metrics_reporter.h" #include "components/feed/core/v2/proto_util.h" +#include "components/feed/feed_feature_list.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/base/consent_level.h" #include "components/signin/public/identity_manager/access_token_info.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/signin/public/identity_manager/scope_set.h" #include "components/variations/net/variations_http_headers.h" +#include "google_apis/gaia/gaia_constants.h" #include "net/base/isolation_info.h" #include "net/base/load_flags.h" #include "net/base/url_util.h" @@ -57,7 +60,7 @@ constexpr char kDiscoverHost[] = "https://discover-pa.googleapis.com/"; signin::ScopeSet GetAuthScopes() { - return {"https://www.googleapis.com/auth/googlenow"}; + return {GaiaConstants::kFeedOAuth2Scope}; } GURL GetFeedQueryURL(feedwire::FeedQuery::RequestReason reason) { @@ -214,11 +217,13 @@ private: void StartAccessTokenFetch() { + DVLOG(1) << "Feed access token fetch started."; token_fetcher_ = std::make_unique<signin::PrimaryAccountAccessTokenFetcher>( "feed", identity_manager_, GetAuthScopes(), base::BindOnce(&NetworkFetch::AccessTokenFetchFinished, GetWeakPtr(), base::TimeTicks::Now()), - signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable); + signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, + GetConsentLevelNeededForPersonalizedFeed()); base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( FROM_HERE, base::BindOnce(&NetworkFetch::AccessTokenTimeout, GetWeakPtr()), @@ -239,6 +244,7 @@ void AccessTokenTimeout() { if (access_token_fetch_complete_) return; + DVLOG(1) << "Feed access token fetch timed out."; access_token_fetch_complete_ = true; std::move(done_callback_) .Run(MakeFailureResponse(net::ERR_TIMED_OUT, @@ -251,6 +257,7 @@ DCHECK(!account_info_.IsEmpty()); if (access_token_fetch_complete_) return; + DVLOG(1) << "Feed access token fetch complete."; access_token_fetch_complete_ = true; UMA_HISTOGRAM_ENUMERATION( "ContentSuggestions.Feed.Network.TokenFetchStatus", error.state(), @@ -264,6 +271,7 @@ // Abort if the signed-in user doesn't match. if (delegate_->GetAccountInfo() != account_info_) { + DVLOG(1) << "Feed fetch failed due to account mismatch."; std::move(done_callback_) .Run( MakeFailureResponse(net::ERR_INVALID_ARGUMENT, @@ -275,6 +283,7 @@ } void StartLoader() { + DVLOG(1) << "Feed fetch started."; loader_only_start_ticks_ = base::TimeTicks::Now(); simple_loader_ = MakeLoader(); simple_loader_->DownloadToStringOfUnboundedSizeUntilCrashAndDie(
diff --git a/components/feed/core/v2/feed_network_impl_unittest.cc b/components/feed/core/v2/feed_network_impl_unittest.cc index 33905a69..a6ad108 100644 --- a/components/feed/core/v2/feed_network_impl_unittest.cc +++ b/components/feed/core/v2/feed_network_impl_unittest.cc
@@ -15,6 +15,7 @@ #include "base/strings/string_split.h" #include "base/test/bind.h" #include "base/test/metrics/histogram_tester.h" +#include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "build/chromeos_buildflags.h" #include "components/feed/core/common/pref_names.h" @@ -25,9 +26,12 @@ #include "components/feed/core/proto/v2/wire/upload_actions_request.pb.h" #include "components/feed/core/proto/v2/wire/upload_actions_response.pb.h" #include "components/feed/core/proto/v2/wire/web_feeds.pb.h" +#include "components/feed/core/v2/feed_network.h" #include "components/feed/core/v2/public/types.h" #include "components/feed/core/v2/test/callback_receiver.h" +#include "components/feed/feed_feature_list.h" #include "components/prefs/testing_pref_service.h" +#include "components/signin/public/base/consent_level.h" #include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/variations/scoped_variations_ids_provider.h" #include "net/http/http_response_headers.h" @@ -45,9 +49,15 @@ #include "third_party/zlib/google/compression_utils.h" #include "url/gurl.h" +#if BUILDFLAG(IS_ANDROID) +#include "components/sync/base/features.h" +#endif // BUILDFLAG(IS_ANDROID) + namespace feed { namespace { +constexpr char kEmail[] = "example@gmail.com"; + MATCHER_P(EqualsProto, message, "Match a proto Message equal to the matcher's argument.") { @@ -99,6 +109,26 @@ return response; } +void SetConsentLevelNeededForFeedPersonalization( + base::test::ScopedFeatureList& feature_list, + signin::ConsentLevel consent_level) { + std::vector<base::Feature> enable_features, disable_features; + switch (consent_level) { + case signin::ConsentLevel::kSignin: + enable_features.push_back(kPersonalizeFeedNonSyncUsers); +#if BUILDFLAG(IS_ANDROID) + enable_features.push_back(syncer::kSyncAndroidPromosWithTitle); + enable_features.push_back(syncer::kSyncAndroidPromosWithAlternativeTitle); +#endif // BUILDFLAG(IS_ANDROID) + break; + case signin::ConsentLevel::kSync: + disable_features.push_back(kPersonalizeFeedNonSyncUsers); + break; + } + feature_list.InitWithFeatures(std::move(enable_features), + std::move(disable_features)); +} + class TestDelegate : public FeedNetworkImpl::Delegate { public: explicit TestDelegate(signin::IdentityTestEnvironment* identity_test_env) @@ -108,7 +138,7 @@ AccountInfo GetAccountInfo() override { return AccountInfo{ identity_test_env_->identity_manager()->GetPrimaryAccountInfo( - signin::ConsentLevel::kSync)}; + GetConsentLevelNeededForPersonalizedFeed())}; } bool IsOffline() override { return is_offline_; } @@ -118,11 +148,7 @@ class FeedNetworkTest : public testing::Test { public: - FeedNetworkTest() { - identity_test_env_.MakePrimaryAccountAvailable("example@gmail.com", - signin::ConsentLevel::kSync); - identity_test_env_.SetAutomaticIssueOfAccessTokens(true); - } + FeedNetworkTest() = default; FeedNetworkTest(FeedNetworkTest&) = delete; FeedNetworkTest& operator=(const FeedNetworkTest&) = delete; ~FeedNetworkTest() override = default; @@ -136,6 +162,12 @@ feed_network_ = std::make_unique<FeedNetworkImpl>( &delegate_, identity_test_env_.identity_manager(), "dummy_api_key", shared_url_loader_factory_, &profile_prefs_); + SignIn(signin::ConsentLevel::kSync); + } + + void SignIn(signin::ConsentLevel consent_level) { + identity_test_env_.MakePrimaryAccountAvailable(kEmail, consent_level); + identity_test_env_.SetAutomaticIssueOfAccessTokens(true); } FeedNetwork* feed_network() { return feed_network_.get(); } @@ -305,6 +337,102 @@ "ContentSuggestions.Feed.Network.ResponseStatus.FeedQuery", 200, 1); } +// These tests need ClearPrimaryAccount() which isn't supported by ChromeOS. +// RevokeSyncConsent() sometimes clears the account rather than just changing +// the consent level so we may as well sign out and sign back in ourselves. +#if !BUILDFLAG(IS_CHROMEOS_ASH) +TEST_F(FeedNetworkTest, SendQueryRequestPersonalized_AccountSignin_NeedSignin) { + // Request should be signed in if account consent level is kSignin and consent + // level needed for personalization is kSignin. + identity_env()->ClearPrimaryAccount(); + SignIn(signin::ConsentLevel::kSignin); + base::test::ScopedFeatureList feature_list; + SetConsentLevelNeededForFeedPersonalization(feature_list, + signin::ConsentLevel::kSignin); + + CallbackReceiver<QueryRequestResult> receiver; + + feed_network()->SendQueryRequest(NetworkRequestType::kFeedQuery, + GetTestFeedRequest(), account_info(), + receiver.Bind()); + network::ResourceRequest resource_request = + RespondToQueryRequest(GetTestFeedResponse(), net::HTTP_OK); + + EXPECT_EQ( + "https://www.google.com/httpservice/retry/TrellisClankService/" + "FeedQuery?reqpld=CAHCPgQSAggB&fmt=bin&hl=en", + resource_request.url); + EXPECT_EQ("GET", resource_request.method); + EXPECT_FALSE(resource_request.headers.HasHeader("content-encoding")); + + // Verify that it's a signed-in request. + std::string authorization; + EXPECT_TRUE( + resource_request.headers.GetHeader("Authorization", &authorization)); + EXPECT_EQ(authorization, "Bearer access_token"); + + histogram().ExpectBucketCount( + "ContentSuggestions.Feed.Network.ResponseStatus.FeedQuery", 200, 1); +} + +TEST_F(FeedNetworkTest, SendQueryRequestPersonalized_AccountSignin_NeedSync) { + // Request should be "signed out" if account consent level is kSignin but + // consent level needed for personalization is kSync. + identity_env()->ClearPrimaryAccount(); + SignIn(signin::ConsentLevel::kSignin); + base::test::ScopedFeatureList feature_list; + SetConsentLevelNeededForFeedPersonalization(feature_list, + signin::ConsentLevel::kSync); + + CallbackReceiver<QueryRequestResult> receiver; + feed_network()->SendQueryRequest(NetworkRequestType::kFeedQuery, + GetTestFeedRequest(), AccountInfo{}, + receiver.Bind()); + network::ResourceRequest resource_request = + RespondToQueryRequest("", net::HTTP_OK); + + EXPECT_EQ( + "https://www.google.com/httpservice/retry/TrellisClankService/" + "FeedQuery?reqpld=CAHCPgQSAggB&fmt=bin&hl=en&key=dummy_api_key", + resource_request.url); + EXPECT_EQ(AccountInfo{}, + receiver.RunAndGetResult().response_info.account_info); + EXPECT_FALSE(resource_request.headers.HasHeader("Authorization")); +} +#endif // !BUILDFLAG(IS_CHROMEOS_ASH) + +TEST_F(FeedNetworkTest, SendQueryRequestPersonalized_AccountSync_NeedSignin) { + // Request should be signed in if account consent level is kSync and consent + // level needed for personalization is kSignin. + base::test::ScopedFeatureList feature_list; + SetConsentLevelNeededForFeedPersonalization(feature_list, + signin::ConsentLevel::kSignin); + + CallbackReceiver<QueryRequestResult> receiver; + + feed_network()->SendQueryRequest(NetworkRequestType::kFeedQuery, + GetTestFeedRequest(), account_info(), + receiver.Bind()); + network::ResourceRequest resource_request = + RespondToQueryRequest(GetTestFeedResponse(), net::HTTP_OK); + + EXPECT_EQ( + "https://www.google.com/httpservice/retry/TrellisClankService/" + "FeedQuery?reqpld=CAHCPgQSAggB&fmt=bin&hl=en", + resource_request.url); + EXPECT_EQ("GET", resource_request.method); + EXPECT_FALSE(resource_request.headers.HasHeader("content-encoding")); + + // Verify that it's a signed-in request. + std::string authorization; + EXPECT_TRUE( + resource_request.headers.GetHeader("Authorization", &authorization)); + EXPECT_EQ(authorization, "Bearer access_token"); + + histogram().ExpectBucketCount( + "ContentSuggestions.Feed.Network.ResponseStatus.FeedQuery", 200, 1); +} + TEST_F(FeedNetworkTest, SendQueryRequestForceSignedOut) { CallbackReceiver<QueryRequestResult> receiver; feed_network()->SendQueryRequest(NetworkRequestType::kFeedQuery,
diff --git a/components/feed/core/v2/public/feed_service.cc b/components/feed/core/v2/public/feed_service.cc index c1dbeee..5edafbb7 100644 --- a/components/feed/core/v2/public/feed_service.cc +++ b/components/feed/core/v2/public/feed_service.cc
@@ -29,6 +29,7 @@ #include "components/history/core/browser/history_service_observer.h" #include "components/history/core/browser/history_types.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/base/consent_level.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "net/base/network_change_notifier.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -78,7 +79,8 @@ void OnURLsDeleted(history::HistoryService* history_service, const history::DeletionInfo& deletion_info) override { if (internal::ShouldClearFeed( - identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSync), + identity_manager_->HasPrimaryAccount( + GetConsentLevelNeededForPersonalizedFeed()), deletion_info)) feed_stream_->OnAllHistoryDeleted(); } @@ -106,8 +108,8 @@ } AccountInfo GetAccountInfo() override { - return AccountInfo( - identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSync)); + return AccountInfo(identity_manager_->GetPrimaryAccountInfo( + GetConsentLevelNeededForPersonalizedFeed())); } bool IsOffline() override { return net::NetworkChangeNotifier::IsOffline(); } @@ -157,8 +159,8 @@ service_delegate_->PrefetchImage(url); } AccountInfo GetAccountInfo() override { - return AccountInfo( - identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSync)); + return AccountInfo(identity_manager_->GetPrimaryAccountInfo( + GetConsentLevelNeededForPersonalizedFeed())); } void RegisterExperiments(const Experiments& experiments) override { service_delegate_->RegisterExperiments(experiments); @@ -183,8 +185,11 @@ : public signin::IdentityManager::Observer { public: IdentityManagerObserverImpl(signin::IdentityManager* identity_manager, - FeedStream* stream) - : identity_manager_(identity_manager), feed_stream_(stream) {} + FeedStream* stream, + FeedService::Delegate* service_delegate) + : identity_manager_(identity_manager), + feed_stream_(stream), + service_delegate_(service_delegate) {} IdentityManagerObserverImpl(const IdentityManagerObserverImpl&) = delete; IdentityManagerObserverImpl& operator=(const IdentityManagerObserverImpl&) = delete; @@ -193,7 +198,7 @@ } void OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event) override { - switch (event.GetEventTypeFor(signin::ConsentLevel::kSync)) { + switch (event.GetEventTypeFor(GetConsentLevelNeededForPersonalizedFeed())) { case signin::PrimaryAccountChangeEvent::Type::kSet: feed_stream_->OnSignedIn(); return; @@ -205,9 +210,12 @@ } } + signin::IdentityManager& identity_manager() { return *identity_manager_; } + private: raw_ptr<signin::IdentityManager> identity_manager_; raw_ptr<FeedStream> feed_stream_; + raw_ptr<FeedService::Delegate> service_delegate_; }; FeedService::FeedService(std::unique_ptr<FeedStream> stream) @@ -255,7 +263,7 @@ stream_delegate_->Initialize(static_cast<FeedStream*>(stream_.get())); identity_manager_observer_ = std::make_unique<IdentityManagerObserverImpl>( - identity_manager, stream_.get()); + identity_manager, stream_.get(), delegate_.get()); identity_manager->AddObserver(identity_manager_observer_.get()); delegate_->RegisterExperiments(prefs::GetExperiments(*profile_prefs)); @@ -310,6 +318,11 @@ {metrics_id, std::string(reinterpret_cast<char*>(&salt), sizeof(salt))})); } +bool FeedService::IsSignedIn() { + return identity_manager_observer_->identity_manager().HasPrimaryAccount( + GetConsentLevelNeededForPersonalizedFeed()); +} + #if BUILDFLAG(IS_ANDROID) void FeedService::OnApplicationStateChange( base::android::ApplicationState state) {
diff --git a/components/feed/core/v2/public/feed_service.h b/components/feed/core/v2/public/feed_service.h index 5f81d1bd..1f9d135 100644 --- a/components/feed/core/v2/public/feed_service.h +++ b/components/feed/core/v2/public/feed_service.h
@@ -15,6 +15,7 @@ #include "components/feed/core/v2/public/types.h" #include "components/keyed_service/core/keyed_service.h" #include "components/leveldb_proto/public/proto_database.h" +#include "components/signin/public/base/consent_level.h" #include "components/web_resource/eula_accepted_notifier.h" #if BUILDFLAG(IS_ANDROID) @@ -125,6 +126,11 @@ // Whether autoplay is enabled. static bool IsAutoplayEnabled(const PrefService& pref_service); + // Returns true if the feed is personalized. + // TODO(iwells): Add comments and consider renaming to explain exceptional + // cases. + bool IsSignedIn(); + private: class StreamDelegateImpl; class NetworkDelegateImpl;
diff --git a/components/feed/core/v2/public/ntp_feed_content_fetcher.cc b/components/feed/core/v2/public/ntp_feed_content_fetcher.cc index aaaa370a0..0c38f6a 100644 --- a/components/feed/core/v2/public/ntp_feed_content_fetcher.cc +++ b/components/feed/core/v2/public/ntp_feed_content_fetcher.cc
@@ -9,6 +9,7 @@ #include "components/feed/core/proto/v2/wire/stream_structure.pb.h" #include "components/feed/core/v2/feed_network_impl.h" #include "components/feed/core/v2/proto_util.h" +#include "components/feed/feed_feature_list.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h" @@ -116,8 +117,8 @@ } AccountInfo NtpFeedContentFetcher::NetworkDelegate::GetAccountInfo() { - return AccountInfo( - identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSync)); + return AccountInfo(identity_manager_->GetPrimaryAccountInfo( + GetConsentLevelNeededForPersonalizedFeed())); } bool NtpFeedContentFetcher::NetworkDelegate::IsOffline() {
diff --git a/components/feed/core/v2/public/ntp_feed_content_fetcher.h b/components/feed/core/v2/public/ntp_feed_content_fetcher.h index 463335e6..60aa8fd 100644 --- a/components/feed/core/v2/public/ntp_feed_content_fetcher.h +++ b/components/feed/core/v2/public/ntp_feed_content_fetcher.h
@@ -12,6 +12,7 @@ #include "base/memory/raw_ptr.h" #include "components/feed/core/v2/feed_network.h" #include "components/feed/core/v2/feed_network_impl.h" +#include "components/signin/public/base/consent_level.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "url/gurl.h"
diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc index 943e70dc..4bbbda6 100644 --- a/components/feed/feed_feature_list.cc +++ b/components/feed/feed_feature_list.cc
@@ -9,6 +9,10 @@ #include "base/metrics/field_trial_params.h" #include "build/build_config.h" +#if BUILDFLAG(IS_ANDROID) +#include "components/sync/base/features.h" +#endif // BUILDFLAG(IS_ANDROID) + namespace feed { const base::Feature kInterestFeedContentSuggestions{ @@ -107,6 +111,27 @@ const base::Feature kPersonalizeFeedUnsignedUsers{ "PersonalizeFeedUnsignedUsers", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kPersonalizeFeedNonSyncUsers{ + "PersonalizeFeedNonSyncUsers", base::FEATURE_DISABLED_BY_DEFAULT}; + +signin::ConsentLevel GetConsentLevelNeededForPersonalizedFeed() { + if (!base::FeatureList::IsEnabled(kPersonalizeFeedNonSyncUsers)) + return signin::ConsentLevel::kSync; + +#if BUILDFLAG(IS_ANDROID) + // When this flag is enabled, the wording of the sync promo card + // shows that enabling sync may get the user more relevant content but does + // not imply that a signed-in user must enable sync to get personalized + // content. Therefore we can request a signed-in feed for users who are + // signed in but not syncing. + // TODO(crbug/1205923): When this wording is fully launched, use kSignin + // only. + if (!base::FeatureList::IsEnabled(syncer::kSyncAndroidPromosWithTitle)) + return signin::ConsentLevel::kSync; +#endif // BUILDFLAG(IS_ANDROID) + return signin::ConsentLevel::kSignin; +} + const base::Feature kInfoCardAcknowledgementTracking{ "InfoCardAcknowledgementTracking", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/feed/feed_feature_list.h b/components/feed/feed_feature_list.h index eb04e51..82509981 100644 --- a/components/feed/feed_feature_list.h +++ b/components/feed/feed_feature_list.h
@@ -10,6 +10,7 @@ #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" #include "build/build_config.h" +#include "components/signin/public/base/consent_level.h" // TODO(crbug.com/1165828): Clean up feedv1 features. @@ -105,6 +106,12 @@ // Personalize feed for unsigned users. extern const base::Feature kPersonalizeFeedUnsignedUsers; +// Personalize feed for signed in users who haven't enabled sync. +extern const base::Feature kPersonalizeFeedNonSyncUsers; + +// Returns the consent level needed to request a personalized feed. +signin::ConsentLevel GetConsentLevelNeededForPersonalizedFeed(); + // Feature that enables tracking the acknowledgement state for the info cards. extern const base::Feature kInfoCardAcknowledgementTracking;
diff --git a/components/feed/feed_feature_list_unittest.cc b/components/feed/feed_feature_list_unittest.cc new file mode 100644 index 0000000..a7efb1d --- /dev/null +++ b/components/feed/feed_feature_list_unittest.cc
@@ -0,0 +1,77 @@ + +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/feed/feed_feature_list.h" +#include <sstream> + +#include "base/callback.h" +#include "base/test/scoped_feature_list.h" +#include "components/signin/public/base/consent_level.h" +#include "testing/gtest/include/gtest/gtest.h" + +#if BUILDFLAG(IS_ANDROID) +#include "components/sync/base/features.h" +#endif // BUILDFLAG(IS_ANDROID) + +namespace feed { +namespace { + +// Build every possible arrangement of `features` into enabled and disabled +// groups and call `test()`. +void ForAllCombinationsOfFeatures( + std::vector<base::Feature> features, + base::RepeatingCallback<void(std::vector<base::Feature>, + std::vector<base::Feature>)> test) { + int num_cases = std::pow(2, features.size()); + for (int case_i = 0; case_i < num_cases; ++case_i) { + std::vector<base::Feature> enabled, disabled; + for (size_t feature_j = 0; feature_j < features.size(); ++feature_j) { + if ((case_i >> feature_j) % 2) + enabled.push_back(features[feature_j]); + else + disabled.push_back(features[feature_j]); + } + test.Run(std::move(enabled), std::move(disabled)); + } +} + +std::string FeaturesToString(const std::vector<base::Feature>& features) { + std::ostringstream oss; + for (auto& feature : features) + oss << feature.name << ','; + return oss.str(); +} + +} // namespace + +TEST(FeedFeatureList, GetConsentLevelNeededForPersonalizedFeed) { + // Test all combinations of features. + ForAllCombinationsOfFeatures( + { + kPersonalizeFeedNonSyncUsers, +#if BUILDFLAG(IS_ANDROID) + syncer::kSyncAndroidPromosWithTitle, +#endif // BUILDFLAG(IS_ANDROID) + }, + base::BindRepeating([](std::vector<base::Feature> enabled, + std::vector<base::Feature> disabled) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitWithFeatures(enabled, disabled); + + // Should return kSignin only when all features are enabled. + signin::ConsentLevel expected_consent_level = + signin::ConsentLevel::kSync; + if (disabled.empty()) + expected_consent_level = signin::ConsentLevel::kSignin; + + EXPECT_EQ(expected_consent_level, + GetConsentLevelNeededForPersonalizedFeed()) + << "Wrong consent level when features enabled=" + << FeaturesToString(enabled) + << " disabled=" << FeaturesToString(disabled); + })); +} + +} // namespace feed \ No newline at end of file
diff --git a/components/history/core/browser/BUILD.gn b/components/history/core/browser/BUILD.gn index 47a87e49..d413951 100644 --- a/components/history/core/browser/BUILD.gn +++ b/components/history/core/browser/BUILD.gn
@@ -102,6 +102,7 @@ ] public_deps = [ + "//components/sessions:session_id", "//components/sync/protocol", "//skia", ] @@ -199,6 +200,8 @@ "//components/test/data/history/history.54.sql", "//components/test/data/history/history.55.sql", "//components/test/data/history/history.56.sql", + "//components/test/data/history/history.57.sql", + "//components/test/data/history/history.58.sql", "//components/test/data/history/thumbnail_wild/Favicons.corrupt_meta.disable", "//components/test/data/history/thumbnail_wild/Favicons.v2.init.sql", "//components/test/data/history/thumbnail_wild/Favicons.v3.init.sql",
diff --git a/components/history/core/browser/DEPS b/components/history/core/browser/DEPS index 748dca2a..d07cbc9e 100644 --- a/components/history/core/browser/DEPS +++ b/components/history/core/browser/DEPS
@@ -6,6 +6,7 @@ "+components/favicon/core/favicon_types.h", "+components/google/core/common/google_util.h", "+components/optimization_guide", + "+components/sessions/core/session_id.h", "+components/signin/public/identity_manager", "+components/variations", "+components/enterprise/common/download_item_reroute_info.h"
diff --git a/components/history/core/browser/history_backend_db_unittest.cc b/components/history/core/browser/history_backend_db_unittest.cc index 519a461..2e214edc 100644 --- a/components/history/core/browser/history_backend_db_unittest.cc +++ b/components/history/core/browser/history_backend_db_unittest.cc
@@ -2780,6 +2780,71 @@ ASSERT_TRUE(db.DoesColumnExist("clusters_and_visits", "url_for_display")); } +TEST_F(HistoryBackendDBTest, MigrateAnnotationsAddColumnsForSync) { + ASSERT_NO_FATAL_FAILURE(CreateDBVersion(57)); + + // Precondition: Open the old version of the DB and make sure the new columns + // don't exist yet. + { + sql::Database db; + ASSERT_TRUE(db.Open(history_dir_.Append(kHistoryFilename))); + + ASSERT_FALSE(db.DoesColumnExist("context_annotations", "browser_type")); + ASSERT_FALSE(db.DoesColumnExist("context_annotations", "window_id")); + ASSERT_FALSE(db.DoesColumnExist("context_annotations", "tab_id")); + ASSERT_FALSE(db.DoesColumnExist("context_annotations", "task_id")); + ASSERT_FALSE(db.DoesColumnExist("context_annotations", "root_task_id")); + ASSERT_FALSE(db.DoesColumnExist("context_annotations", "parent_task_id")); + ASSERT_FALSE(db.DoesColumnExist("context_annotations", "response_code")); + + ASSERT_FALSE(db.DoesColumnExist("content_annotations", "page_language")); + ASSERT_FALSE(db.DoesColumnExist("content_annotations", "password_state")); + } + + // Re-open the db, triggering migration. + CreateBackendAndDatabase(); + + // The version should have been updated. + ASSERT_GE(HistoryDatabase::GetCurrentVersion(), 58); + + DeleteBackend(); + + // Open the db manually again and make sure the new columns exist. + { + sql::Database db; + ASSERT_TRUE(db.Open(history_dir_.Append(kHistoryFilename))); + + // Confirm that the new columns exist now. + EXPECT_TRUE(db.DoesColumnExist("context_annotations", "browser_type")); + EXPECT_TRUE(db.DoesColumnExist("context_annotations", "window_id")); + EXPECT_TRUE(db.DoesColumnExist("context_annotations", "tab_id")); + EXPECT_TRUE(db.DoesColumnExist("context_annotations", "task_id")); + EXPECT_TRUE(db.DoesColumnExist("context_annotations", "root_task_id")); + EXPECT_TRUE(db.DoesColumnExist("context_annotations", "parent_task_id")); + EXPECT_TRUE(db.DoesColumnExist("context_annotations", "response_code")); + + EXPECT_TRUE(db.DoesColumnExist("content_annotations", "page_language")); + EXPECT_TRUE(db.DoesColumnExist("content_annotations", "password_state")); + } +} + +// ^^^ NEW MIGRATION TESTS GO HERE ^^^ + +// Preparation for the next DB migration: This test verifies that the test DB +// file for the current version exists and can be loaded. +// In the past, we only added a history.57.sql file to the repo while adding a +// migration to the NEXT version 58. That's confusing because then the developer +// has to reverse engineer what the migration for 57 was. This test looks like +// a no-op, but verifies that the test file for the current version always +// pre-exists, so adding the NEXT migration doesn't require reverse engineering. +// If you introduce a new migration, add a test for it above, and add a new +// history.n.sql file for the new DB layout so that this test keeps passing. +TEST_F(HistoryBackendDBTest, VerifyTestSQLFileForCurrentVersionAlreadyExists) { + ASSERT_NO_FATAL_FAILURE( + CreateDBVersion(HistoryDatabase::GetCurrentVersion())); + CreateBackendAndDatabase(); +} + bool FilterURL(const GURL& url) { return url.SchemeIsHTTPOrHTTPS(); }
diff --git a/components/history/core/browser/history_backend_unittest.cc b/components/history/core/browser/history_backend_unittest.cc index d60f696..b2c4af1ab 100644 --- a/components/history/core/browser/history_backend_unittest.cc +++ b/components/history/core/browser/history_backend_unittest.cc
@@ -16,15 +16,10 @@ #include "base/bind.h" #include "base/callback.h" -#include "base/command_line.h" #include "base/files/file_path.h" #include "base/files/file_util.h" -#include "base/files/scoped_temp_dir.h" #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" -#include "base/metrics/histogram_base.h" -#include "base/metrics/histogram_samples.h" -#include "base/metrics/statistics_recorder.h" #include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" @@ -47,12 +42,10 @@ #include "components/history/core/browser/in_memory_history_backend.h" #include "components/history/core/browser/keyword_search_term.h" #include "components/history/core/browser/sync/typed_url_sync_bridge.h" -#include "components/history/core/browser/visit_delegate.h" #include "components/history/core/test/database_test_utils.h" #include "components/history/core/test/history_client_fake_bookmarks.h" #include "components/history/core/test/test_history_database.h" #include "components/history/core/test/visit_annotations_test_utils.h" -#include "components/prefs/pref_service.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -69,7 +62,6 @@ namespace { -using base::HistogramBase; using favicon::FaviconBitmap; using favicon::FaviconBitmapType; using favicon::IconMapping; @@ -123,6 +115,12 @@ observer->OnURLsModified(nullptr, rows); } +VisitContextAnnotations MakeContextAnnotations(bool omnibox_url_copied) { + VisitContextAnnotations result; + result.omnibox_url_copied = omnibox_url_copied; + return result; +} + } // namespace class HistoryBackendTestBase; @@ -3692,18 +3690,18 @@ (std::pair<URLID, VisitID>{2, 2})); ASSERT_EQ(add_url_and_visit("http://1.com/"), (std::pair<URLID, VisitID>{1, 3})); - backend_->AddContextAnnotationsForVisit(1, {true}); - backend_->AddContextAnnotationsForVisit(3, {false}); - backend_->AddContextAnnotationsForVisit(2, {true}); + backend_->AddContextAnnotationsForVisit(1, MakeContextAnnotations(true)); + backend_->AddContextAnnotationsForVisit(3, MakeContextAnnotations(false)); + backend_->AddContextAnnotationsForVisit(2, MakeContextAnnotations(true)); EXPECT_EQ(backend_->GetAnnotatedVisits(query_options).size(), 3u); // Annotated visits should have a visit IDs. - EXPECT_DCHECK_DEATH(backend_->AddContextAnnotationsForVisit(0, {true})); + EXPECT_DCHECK_DEATH( + backend_->AddContextAnnotationsForVisit(0, MakeContextAnnotations(true))); EXPECT_EQ(backend_->GetAnnotatedVisits(query_options).size(), 3u); // `GetAnnotatedVisits()` should still succeed to fetch visits that lack // annotations. They just won't have annotations attached. - backend_->AddContextAnnotationsForVisit(4, {true}); EXPECT_EQ(add_url_and_visit("http://3.com/"), (std::pair<URLID, VisitID>{3, 4})); EXPECT_EQ(backend_->GetAnnotatedVisits(query_options).size(), 4u); @@ -3712,7 +3710,7 @@ EXPECT_EQ(add_url_and_visit("http://4.com/"), (std::pair<URLID, VisitID>{4, 5})); delete_visit(5); - backend_->AddContextAnnotationsForVisit(5, {true}); + backend_->AddContextAnnotationsForVisit(5, MakeContextAnnotations(true)); EXPECT_EQ(backend_->GetAnnotatedVisits(query_options).size(), 4u); // Verify only the correct annotated visits are retrieved ordered recent @@ -3758,6 +3756,48 @@ EXPECT_EQ(annotated_visits[0].context_annotations.omnibox_url_copied, true); } +TEST_F(HistoryBackendTest, PreservesAllContextAnnotationsFields) { + auto [url_id, visit_id] = backend_->AddPageVisit( + GURL("https://url.com"), base::Time::Now(), /*referring_visit=*/0, + ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | + ui::PAGE_TRANSITION_CHAIN_START | + ui::PAGE_TRANSITION_CHAIN_END), + /*hidden=*/false, SOURCE_BROWSED, /*should_increment_typed_count=*/true, + /*opener_visit=*/0); + + // Add context annotations with non-default values for all fields. + VisitContextAnnotations annotations_in; + annotations_in.immediate_fields.browser_type = 1; + annotations_in.immediate_fields.window_id = SessionID::FromSerializedValue(2); + annotations_in.immediate_fields.tab_id = SessionID::FromSerializedValue(3); + annotations_in.immediate_fields.task_id = 4; + annotations_in.immediate_fields.root_task_id = 5; + annotations_in.immediate_fields.parent_task_id = 6; + annotations_in.immediate_fields.response_code = 200; + annotations_in.omnibox_url_copied = true; + annotations_in.is_existing_part_of_tab_group = true; + annotations_in.is_placed_in_tab_group = true; + annotations_in.is_existing_bookmark = true; + annotations_in.is_new_bookmark = true; + annotations_in.is_ntp_custom_link = true; + annotations_in.duration_since_last_visit = base::Seconds(7); + annotations_in.page_end_reason = 8; + annotations_in.duration_since_last_visit = base::Seconds(9); + + backend_->AddContextAnnotationsForVisit(visit_id, annotations_in); + + // Verify that we can read all the fields back from the DB. + history::QueryOptions query_options; + query_options.duplicate_policy = QueryOptions::KEEP_ALL_DUPLICATES; + std::vector<AnnotatedVisit> annotated_visits = + backend_->GetAnnotatedVisits(query_options); + ASSERT_EQ(annotated_visits.size(), 1u); + + VisitContextAnnotations annotations_out = + annotated_visits[0].context_annotations; + EXPECT_EQ(annotations_in, annotations_out); +} + TEST_F(HistoryBackendTest, FindMostRecentClusteredTime) { // Should return `Min()` when there are no clusters EXPECT_EQ(backend_->FindMostRecentClusteredTime(), base::Time::Min()); @@ -3899,7 +3939,8 @@ auto ids = backend_->AddPageVisit(GURL(url), last_visit_time, referring_visit, transition, false, SOURCE_BROWSED, false, opener_visit); - backend_->AddContextAnnotationsForVisit(ids.second, {}); + backend_->AddContextAnnotationsForVisit(ids.second, + VisitContextAnnotations()); }; // Navigate to 'google.com'.
diff --git a/components/history/core/browser/history_database.cc b/components/history/core/browser/history_database.cc index a68f634..1a4ed65 100644 --- a/components/history/core/browser/history_database.cc +++ b/components/history/core/browser/history_database.cc
@@ -38,7 +38,7 @@ // Current version number. We write databases at the "current" version number, // but any previous version that can read the "compatible" one can make do with // our database without *too* many bad effects. -const int kCurrentVersionNumber = 57; +const int kCurrentVersionNumber = 58; const int kCompatibleVersionNumber = 16; const char kEarlyExpirationThresholdKey[] = "early_expiration_threshold"; @@ -802,6 +802,13 @@ meta_table_.SetVersionNumber(cur_version); } + if (cur_version == 57) { + if (!MigrateAnnotationsAddColumnsForSync()) + return LogMigrationFailure(57); + cur_version++; + meta_table_.SetVersionNumber(cur_version); + } + // ========================= ^^ new migration code goes here ^^ // ADDING NEW MIGRATION CODE // =========================
diff --git a/components/history/core/browser/history_types.cc b/components/history/core/browser/history_types.cc index b253d27..f739f70 100644 --- a/components/history/core/browser/history_types.cc +++ b/components/history/core/browser/history_types.cc
@@ -398,6 +398,40 @@ // Clusters -------------------------------------------------------------------- +VisitContextAnnotations::VisitContextAnnotations() = default; + +VisitContextAnnotations::VisitContextAnnotations( + const VisitContextAnnotations& other) = default; + +VisitContextAnnotations::~VisitContextAnnotations() = default; + +bool VisitContextAnnotations::operator==( + const VisitContextAnnotations& other) const { + return immediate_fields.browser_type == other.immediate_fields.browser_type && + immediate_fields.window_id == other.immediate_fields.window_id && + immediate_fields.tab_id == other.immediate_fields.tab_id && + immediate_fields.task_id == other.immediate_fields.task_id && + immediate_fields.root_task_id == other.immediate_fields.root_task_id && + immediate_fields.parent_task_id == + other.immediate_fields.parent_task_id && + immediate_fields.response_code == + other.immediate_fields.response_code && + omnibox_url_copied == other.omnibox_url_copied && + is_existing_part_of_tab_group == other.is_existing_part_of_tab_group && + is_placed_in_tab_group == other.is_placed_in_tab_group && + is_existing_bookmark == other.is_existing_bookmark && + is_new_bookmark == other.is_new_bookmark && + is_ntp_custom_link == other.is_ntp_custom_link && + duration_since_last_visit == other.duration_since_last_visit && + page_end_reason == other.page_end_reason && + total_foreground_duration == other.total_foreground_duration; +} + +bool VisitContextAnnotations::operator!=( + const VisitContextAnnotations& other) const { + return !(*this == other); +} + AnnotatedVisit::AnnotatedVisit() = default; AnnotatedVisit::AnnotatedVisit(URLRow url_row, VisitRow visit_row,
diff --git a/components/history/core/browser/history_types.h b/components/history/core/browser/history_types.h index afd7812..567cb04 100644 --- a/components/history/core/browser/history_types.h +++ b/components/history/core/browser/history_types.h
@@ -14,7 +14,7 @@ #include <utility> #include <vector> -#include "base/callback.h" +#include "base/callback_forward.h" #include "base/containers/flat_map.h" #include "base/containers/stack_container.h" #include "base/time/time.h" @@ -23,6 +23,7 @@ #include "components/history/core/browser/url_row.h" #include "components/query_parser/query_parser.h" #include "components/query_parser/snippet.h" +#include "components/sessions/core/session_id.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/base/page_transition_types.h" #include "url/gurl.h" @@ -159,16 +160,6 @@ // used by HistoryBackend::AddVisits() to create new visits for a URL. typedef std::pair<base::Time, ui::PageTransition> VisitInfo; -// PageVisit ------------------------------------------------------------------ - -// Represents a simplified version of a visit for external users. Normally, -// views are only interested in the time, and not the other information -// associated with a VisitRow. -struct PageVisit { - URLID page_id = 0; - base::Time visit_time; -}; - // QueryResults ---------------------------------------------------------------- // Encapsulates the results of a history query. It supports an ordered list of @@ -476,9 +467,6 @@ // doesn't guarantee it's relevant for Most Visited, since other requirements // exist (e.g. certain page transition types). bool consider_for_ntp_most_visited; - // Indicates whether this URL visit can be included in FLoC computation. See - // VisitRow::floc_allowed for details. - bool floc_allowed; absl::optional<std::u16string> title; absl::optional<Opener> opener; absl::optional<int64_t> bookmark_id; @@ -747,6 +735,39 @@ // lifetime ends. This is to ensure that History actually has the visit row // already written. struct VisitContextAnnotations { + VisitContextAnnotations(); + VisitContextAnnotations(const VisitContextAnnotations& other); + ~VisitContextAnnotations(); + + bool operator==(const VisitContextAnnotations& other) const; + bool operator!=(const VisitContextAnnotations& other) const; + + // Fields known immediately on page load (when a visit is created): + struct ImmediateFields { + // The type of browser (tabbed, CCT etc) that produced this visit. + // TODO(crbug.com/1347012): Make this strongly typed instead of just an int. + int browser_type = 0; + + // The IDs of the window and tab in which the visit happened. + SessionID window_id = SessionID::InvalidValue(); + SessionID tab_id = SessionID::InvalidValue(); + + // Task IDs which can be used to group related visits together. See + // chrome/browser/complex_tasks. + int64_t task_id = -1; + int64_t root_task_id = -1; + int64_t parent_task_id = -1; + + // The HTTP response code of the navigation. + int response_code = 0; + }; + + ImmediateFields immediate_fields; + + // The remaining fields are "delayed": They are computed and written to the DB + // later, separately from the visit itself and from the "immediate" fields + // above. + // True if the user has cut or copied the omnibox URL to the clipboard for // this page load. bool omnibox_url_copied = false; @@ -833,24 +854,6 @@ VisitSource source; }; -// A minimal representation of `AnnotationVisit` used when retrieving them from -// `VisitAnnotationsDatabase`. -struct AnnotatedVisitRow { - AnnotatedVisitRow() = default; - AnnotatedVisitRow(const VisitID visit_id, - const VisitContextAnnotations& context_annotations, - const VisitContentAnnotations& content_annotations) - : visit_id(visit_id), - context_annotations(context_annotations), - content_annotations(content_annotations) {} - - VisitID visit_id; - VisitContextAnnotations context_annotations; - // TODO(manukh): retrieve and persist `content_annotations`; currently, only - // `context_annotations` are being retrieved and persisted. - VisitContentAnnotations content_annotations; -}; - // An `AnnotatedVisit` associated with some other metadata from clustering. struct ClusterVisit { ClusterVisit();
diff --git a/components/history/core/browser/url_row.cc b/components/history/core/browser/url_row.cc index e2a9a19e..59ee61b 100644 --- a/components/history/core/browser/url_row.cc +++ b/components/history/core/browser/url_row.cc
@@ -134,13 +134,17 @@ const std::vector<std::string>& related_searches, const GURL& search_normalized_url, const std::u16string& search_terms, - const std::string& alternative_title) + const std::string& alternative_title, + const std::string& page_language, + int password_state) : annotation_flags(annotation_flags), model_annotations(model_annotations), related_searches(related_searches), search_normalized_url(search_normalized_url), search_terms(search_terms), - alternative_title(alternative_title) {} + alternative_title(alternative_title), + page_language(page_language), + password_state(password_state) {} VisitContentAnnotations::VisitContentAnnotations() = default; VisitContentAnnotations::VisitContentAnnotations( const VisitContentAnnotations&) = default;
diff --git a/components/history/core/browser/url_row.h b/components/history/core/browser/url_row.h index b7e03fb..84a2d04c 100644 --- a/components/history/core/browser/url_row.h +++ b/components/history/core/browser/url_row.h
@@ -241,7 +241,9 @@ const std::vector<std::string>& related_searches, const GURL& search_normalized_url, const std::u16string& search_terms, - const std::string& alternative_title); + const std::string& alternative_title, + const std::string& page_language, + int password_state); VisitContentAnnotations(const VisitContentAnnotations& other); ~VisitContentAnnotations(); @@ -254,6 +256,13 @@ std::u16string search_terms; // Alternative page title for the visit. std::string alternative_title; + // Language of the content on the page, as an ISO 639 language code (usually + // two letters). May be "und" if the language couldn't be determined. + std::string page_language; + // Whether a password form was found on the page - see + // sessions::GetPasswordStateFromNavigation(). + // TODO(crbug.com/1347012): Make this strongly typed instead of just an int. + int password_state = 0; }; class URLResult : public URLRow {
diff --git a/components/history/core/browser/visit_annotations_database.cc b/components/history/core/browser/visit_annotations_database.cc index 5ae7f906..16afd81 100644 --- a/components/history/core/browser/visit_annotations_database.cc +++ b/components/history/core/browser/visit_annotations_database.cc
@@ -9,8 +9,6 @@ #include "base/logging.h" #include "base/ranges/algorithm.h" -#include "base/strings/strcat.h" -#include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "components/history/core/browser/url_row.h" @@ -24,10 +22,11 @@ #define HISTORY_CONTENT_ANNOTATIONS_ROW_FIELDS \ " visit_id,visibility_score,categories,page_topics_model_version," \ "annotation_flags,entities,related_searches,search_normalized_url," \ - "search_terms,alternative_title " -#define HISTORY_CONTEXT_ANNOTATIONS_ROW_FIELDS \ - " visit_id,context_annotation_flags,duration_since_last_visit," \ - "page_end_reason,total_foreground_duration " + "search_terms,alternative_title,page_language,password_state " +#define HISTORY_CONTEXT_ANNOTATIONS_ROW_FIELDS \ + " visit_id,context_annotation_flags,duration_since_last_visit," \ + "page_end_reason,total_foreground_duration,browser_type,window_id," \ + "tab_id,task_id,root_task_id,parent_task_id,response_code " #define HISTORY_CLUSTER_ROW_FIELDS \ " cluster_id,should_show_on_prominent_ui_surfaces,label,raw_label " #define HISTORY_CLUSTER_VISIT_ROW_FIELDS \ @@ -135,7 +134,14 @@ int64_t flags, base::TimeDelta duration_since_last_visit, int page_end_reason, - base::TimeDelta total_foreground_duration) { + base::TimeDelta total_foreground_duration, + int browser_type, + SessionID window_id, + SessionID tab_id, + int64_t task_id, + int64_t root_task_id, + int64_t parent_task_id, + int response_code) { VisitContextAnnotations context_annotations; context_annotations.omnibox_url_copied = flags & static_cast<uint64_t>(ContextAnnotationFlags::kOmniboxUrlCopied); @@ -155,6 +161,13 @@ context_annotations.duration_since_last_visit = duration_since_last_visit; context_annotations.page_end_reason = page_end_reason; context_annotations.total_foreground_duration = total_foreground_duration; + context_annotations.immediate_fields.browser_type = browser_type; + context_annotations.immediate_fields.window_id = window_id; + context_annotations.immediate_fields.tab_id = tab_id; + context_annotations.immediate_fields.task_id = task_id; + context_annotations.immediate_fields.root_task_id = root_task_id; + context_annotations.immediate_fields.parent_task_id = parent_task_id; + context_annotations.immediate_fields.response_code = response_code; return context_annotations; } } // namespace @@ -175,18 +188,26 @@ "related_searches VARCHAR," "search_normalized_url VARCHAR," "search_terms LONGVARCHAR," - "alternative_title VARCHAR)")) { + "alternative_title VARCHAR," + "page_language VARCHAR," + "password_state INTEGER DEFAULT 0 NOT NULL)")) { return false; } - // See `AnnotatedVisitRow` and `VisitContextAnnotations` for details about - // these fields. + // See `VisitContextAnnotations` for details about these fields. if (!GetDB().Execute("CREATE TABLE IF NOT EXISTS context_annotations(" "visit_id INTEGER PRIMARY KEY," "context_annotation_flags INTEGER NOT NULL," "duration_since_last_visit INTEGER," "page_end_reason INTEGER," - "total_foreground_duration INTEGER)")) { + "total_foreground_duration INTEGER," + "browser_type INTEGER DEFAULT 0 NOT NULL," + "window_id INTEGER DEFAULT -1 NOT NULL," + "tab_id INTEGER DEFAULT -1 NOT NULL," + "task_id INTEGER DEFAULT -1 NOT NULL," + "root_task_id INTEGER DEFAULT -1 NOT NULL," + "parent_task_id INTEGER DEFAULT -1 NOT NULL," + "response_code INTEGER DEFAULT 0 NOT NULL)")) { return false; } @@ -218,7 +239,7 @@ sql::Statement statement(GetDB().GetCachedStatement( SQL_FROM_HERE, "INSERT INTO content_annotations(" HISTORY_CONTENT_ANNOTATIONS_ROW_FIELDS - ")VALUES(?,?,?,?,?,?,?,?,?,?)")); + ")VALUES(?,?,?,?,?,?,?,?,?,?,?,?)")); statement.BindInt64(0, visit_id); statement.BindDouble( 1, static_cast<double>( @@ -238,6 +259,8 @@ visit_content_annotations.search_normalized_url.spec()); statement.BindString16(8, visit_content_annotations.search_terms); statement.BindString(9, visit_content_annotations.alternative_title); + statement.BindString(10, visit_content_annotations.page_language); + statement.BindInt(11, visit_content_annotations.password_state); if (!statement.Run()) { DVLOG(0) << "Failed to execute 'content_annotations' insert statement: " @@ -252,7 +275,7 @@ sql::Statement statement(GetDB().GetCachedStatement( SQL_FROM_HERE, "INSERT INTO context_annotations(" HISTORY_CONTEXT_ANNOTATIONS_ROW_FIELDS - ")VALUES(?,?,?,?,?)")); + ")VALUES(?,?,?,?,?,?,?,?,?,?,?,?)")); statement.BindInt64(0, visit_id); statement.BindInt64(1, ContextAnnotationsToFlags(visit_context_annotations)); statement.BindInt64( @@ -260,6 +283,17 @@ statement.BindInt(3, visit_context_annotations.page_end_reason); statement.BindInt64( 4, visit_context_annotations.total_foreground_duration.InMicroseconds()); + statement.BindInt(5, visit_context_annotations.immediate_fields.browser_type); + statement.BindInt(6, + visit_context_annotations.immediate_fields.window_id.id()); + statement.BindInt(7, visit_context_annotations.immediate_fields.tab_id.id()); + statement.BindInt64(8, visit_context_annotations.immediate_fields.task_id); + statement.BindInt64(9, + visit_context_annotations.immediate_fields.root_task_id); + statement.BindInt64( + 10, visit_context_annotations.immediate_fields.parent_task_id); + statement.BindInt(11, + visit_context_annotations.immediate_fields.response_code); if (!statement.Run()) { DVLOG(0) @@ -308,6 +342,51 @@ } } +void VisitAnnotationsDatabase::UpdateContextAnnotationsForVisit( + VisitID visit_id, + const VisitContextAnnotations& visit_context_annotations) { + DCHECK_GT(visit_id, 0); + sql::Statement statement( + GetDB().GetCachedStatement(SQL_FROM_HERE, + "UPDATE context_annotations SET " + "context_annotation_flags=?, " + "duration_since_last_visit=?, " + "page_end_reason=?, " + "total_foreground_duration=?, " + "browser_type=?, " + "window_id=?, " + "tab_id=?, " + "task_id=?, " + "root_task_id=?, " + "parent_task_id=? " + "response_code=? " + "WHERE visit_id=?")); + statement.BindInt64(0, ContextAnnotationsToFlags(visit_context_annotations)); + statement.BindInt64( + 1, visit_context_annotations.duration_since_last_visit.InMicroseconds()); + statement.BindInt(2, visit_context_annotations.page_end_reason); + statement.BindInt64( + 3, visit_context_annotations.total_foreground_duration.InMicroseconds()); + statement.BindInt(4, visit_context_annotations.immediate_fields.browser_type); + statement.BindInt(5, + visit_context_annotations.immediate_fields.window_id.id()); + statement.BindInt(6, visit_context_annotations.immediate_fields.tab_id.id()); + statement.BindInt64(7, visit_context_annotations.immediate_fields.task_id); + statement.BindInt64(8, + visit_context_annotations.immediate_fields.root_task_id); + statement.BindInt64( + 9, visit_context_annotations.immediate_fields.parent_task_id); + statement.BindInt64(10, + visit_context_annotations.immediate_fields.response_code); + statement.BindInt64(11, visit_id); + + if (!statement.Run()) { + DVLOG(0) + << "Failed to execute visit 'context_annotations' update statement: " + << "visit_id = " << visit_id; + } +} + bool VisitAnnotationsDatabase::GetContextAnnotationsForVisit( VisitID visit_id, VisitContextAnnotations* out_context_annotations) { @@ -330,7 +409,12 @@ // `VisitContextAnnotations`. *out_context_annotations = ConstructContextAnnotationsWithFlags( statement.ColumnInt64(1), base::Microseconds(statement.ColumnInt64(2)), - statement.ColumnInt(3), base::Microseconds(statement.ColumnInt64(4))); + statement.ColumnInt(3), base::Microseconds(statement.ColumnInt64(4)), + statement.ColumnInt(5), + SessionID::FromSerializedValue(statement.ColumnInt(6)), + SessionID::FromSerializedValue(statement.ColumnInt(7)), + statement.ColumnInt64(8), statement.ColumnInt64(9), + statement.ColumnInt64(10), statement.ColumnInt(11)); return true; } @@ -366,6 +450,8 @@ GURL(statement.ColumnString(7)); out_content_annotations->search_terms = statement.ColumnString16(8); out_content_annotations->alternative_title = statement.ColumnString(9); + out_content_annotations->page_language = statement.ColumnString(10); + out_content_annotations->password_state = statement.ColumnInt(11); return true; } @@ -782,4 +868,85 @@ "clusters_and_visits(visit_id)"); } +bool VisitAnnotationsDatabase::MigrateAnnotationsAddColumnsForSync() { + if (!GetDB().DoesTableExist("context_annotations")) { + NOTREACHED() << " Context annotations table should exist before migration"; + return false; + } + + // ConteXt annotation columns: + + if (!GetDB().DoesColumnExist("context_annotations", "browser_type")) { + if (!GetDB().Execute( + "ALTER TABLE context_annotations " + "ADD COLUMN browser_type INTEGER DEFAULT 0 NOT NULL")) { + return false; + } + } + + if (!GetDB().DoesColumnExist("context_annotations", "window_id")) { + if (!GetDB().Execute("ALTER TABLE context_annotations " + "ADD COLUMN window_id INTEGER DEFAULT -1 NOT NULL")) { + return false; + } + } + + if (!GetDB().DoesColumnExist("context_annotations", "tab_id")) { + if (!GetDB().Execute("ALTER TABLE context_annotations " + "ADD COLUMN tab_id INTEGER DEFAULT -1 NOT NULL")) { + return false; + } + } + + if (!GetDB().DoesColumnExist("context_annotations", "task_id")) { + if (!GetDB().Execute("ALTER TABLE context_annotations " + "ADD COLUMN task_id INTEGER DEFAULT -1 NOT NULL")) { + return false; + } + } + + if (!GetDB().DoesColumnExist("context_annotations", "root_task_id")) { + if (!GetDB().Execute( + "ALTER TABLE context_annotations " + "ADD COLUMN root_task_id INTEGER DEFAULT -1 NOT NULL")) { + return false; + } + } + + if (!GetDB().DoesColumnExist("context_annotations", "parent_task_id")) { + if (!GetDB().Execute( + "ALTER TABLE context_annotations " + "ADD COLUMN parent_task_id INTEGER DEFAULT -1 NOT NULL")) { + return false; + } + } + + if (!GetDB().DoesColumnExist("context_annotations", "response_code")) { + if (!GetDB().Execute( + "ALTER TABLE context_annotations " + "ADD COLUMN response_code INTEGER DEFAULT 0 NOT NULL")) { + return false; + } + } + + // ConteNt annotation columns: + + if (!GetDB().DoesColumnExist("content_annotations", "page_language")) { + if (!GetDB().Execute("ALTER TABLE content_annotations " + "ADD COLUMN page_language VARCHAR")) { + return false; + } + } + + if (!GetDB().DoesColumnExist("content_annotations", "password_state")) { + if (!GetDB().Execute( + "ALTER TABLE content_annotations " + "ADD COLUMN password_state INTEGER DEFAULT 0 NOT NULL")) { + return false; + } + } + + return true; +} + } // namespace history
diff --git a/components/history/core/browser/visit_annotations_database.h b/components/history/core/browser/visit_annotations_database.h index 8a1a6464..2611086 100644 --- a/components/history/core/browser/visit_annotations_database.h +++ b/components/history/core/browser/visit_annotations_database.h
@@ -51,6 +51,13 @@ VisitID visit_id, const VisitContentAnnotations& visit_content_annotations); + // Updates an existing row. The new information is set on the row, using the + // VisitID as the key. The context annotations for the visit must exist. + // Ignores failures. + void UpdateContextAnnotationsForVisit( + VisitID visit_id, + const VisitContextAnnotations& visit_context_annotations); + // Query for a `VisitContentAnnotations` given `visit_id`. If it's found and // valid, this method returns true, and `out_content_annotations` is filled. // Otherwise, this returns false, and `out_content_annotations` is unchanged. @@ -149,6 +156,18 @@ // 'clusters_and_visits' tables so they can be recreated with updated columns. bool MigrateClustersAddColumns(); + // Called by the derived classes to migrate the older context_annotations + // table by adding various columns that are (for now) needed by Sync: + // In context_annotations: + // * browser_type + // * window_id and tab_id + // * task_id, root_task_id, and parent_task_id + // * response_code + // In content_annotations: + // * page_language + // * password_state + bool MigrateAnnotationsAddColumnsForSync(); + private: // Helper to create the 'clusters' table and avoid duplicating the code. bool CreateClustersTable();
diff --git a/components/history/core/browser/visit_annotations_database_unittest.cc b/components/history/core/browser/visit_annotations_database_unittest.cc index a629ea7..a594ad0a 100644 --- a/components/history/core/browser/visit_annotations_database_unittest.cc +++ b/components/history/core/browser/visit_annotations_database_unittest.cc
@@ -21,6 +21,23 @@ using ::testing::ElementsAre; using ::testing::UnorderedElementsAre; +VisitContextAnnotations MakeContextAnnotations( + bool omnibox_url_copied, + bool is_existing_part_of_tab_group, + bool is_placed_in_tab_group, + bool is_existing_bookmark, + bool is_new_bookmark, + bool is_ntp_custom_link) { + VisitContextAnnotations result; + result.omnibox_url_copied = omnibox_url_copied; + result.is_existing_part_of_tab_group = is_existing_part_of_tab_group; + result.is_placed_in_tab_group = is_placed_in_tab_group; + result.is_existing_bookmark = is_existing_bookmark; + result.is_new_bookmark = is_new_bookmark; + result.is_ntp_custom_link = is_ntp_custom_link; + return result; +} + } // namespace class VisitAnnotationsDatabaseTest : public testing::Test, @@ -47,6 +64,19 @@ void ExpectContextAnnotations(VisitContextAnnotations actual, VisitContextAnnotations expected) { + EXPECT_EQ(actual.immediate_fields.browser_type, + expected.immediate_fields.browser_type); + EXPECT_EQ(actual.immediate_fields.window_id, + expected.immediate_fields.window_id); + EXPECT_EQ(actual.immediate_fields.tab_id, expected.immediate_fields.tab_id); + EXPECT_EQ(actual.immediate_fields.task_id, + expected.immediate_fields.task_id); + EXPECT_EQ(actual.immediate_fields.root_task_id, + expected.immediate_fields.root_task_id); + EXPECT_EQ(actual.immediate_fields.parent_task_id, + expected.immediate_fields.parent_task_id); + EXPECT_EQ(actual.immediate_fields.response_code, + expected.immediate_fields.response_code); EXPECT_EQ(actual.omnibox_url_copied, expected.omnibox_url_copied); EXPECT_EQ(actual.is_existing_part_of_tab_group, expected.is_existing_part_of_tab_group); @@ -91,9 +121,14 @@ std::vector<std::string> related_searches{"related searches", "búsquedas relacionadas"}; VisitContentAnnotations content_annotations{ - annotation_flags, model_annotations, - related_searches, GURL("http://pagewithvisit.com?q=search"), - u"search", "Alternative title"}; + annotation_flags, + model_annotations, + related_searches, + GURL("http://pagewithvisit.com?q=search"), + u"search", + "Alternative title", + "en", + 0}; AddContentAnnotationsForVisit(visit_id, content_annotations); // Query for it. @@ -131,10 +166,9 @@ AddVisitWithTime(IntToTime(10), false); const std::vector<VisitContextAnnotations> visit_context_annotations_list = { - {true, false, true, true, false, false}, - {false, true, false, false, false, true}, - {false, true, true, false, true, false}, - }; + MakeContextAnnotations(true, false, true, true, false, false), + MakeContextAnnotations(false, true, false, false, false, true), + MakeContextAnnotations(false, true, true, false, true, false)}; // Verify `AddContextAnnotationsForVisit()` and `GetAnnotatedVisits()`. AddContextAnnotationsForVisit(1, visit_context_annotations_list[0]); @@ -174,10 +208,14 @@ std::vector<std::string> related_searches{"related searches"}; VisitContentAnnotationFlags annotation_flags = VisitContentAnnotationFlag::kBrowsingTopicsEligible; - VisitContentAnnotations original{ - annotation_flags, model_annotations, - related_searches, GURL("http://pagewithvisit.com?q=search"), - u"search", "Alternative title"}; + VisitContentAnnotations original{annotation_flags, + model_annotations, + related_searches, + GURL("http://pagewithvisit.com?q=search"), + u"search", + "Alternative title", + "en", + 0}; AddContentAnnotationsForVisit(visit_id, original); // Mutate that row.
diff --git a/components/history_clusters/core/BUILD.gn b/components/history_clusters/core/BUILD.gn index 2ccb8d5..6f73a7ad 100644 --- a/components/history_clusters/core/BUILD.gn +++ b/components/history_clusters/core/BUILD.gn
@@ -35,6 +35,7 @@ "history_clusters_service_task_get_most_recent_clusters.h", "history_clusters_service_task_update_clusters.cc", "history_clusters_service_task_update_clusters.h", + "history_clusters_types.cc", "history_clusters_types.h", "history_clusters_util.cc", "history_clusters_util.h",
diff --git a/components/history_clusters/core/history_clusters_types.cc b/components/history_clusters/core/history_clusters_types.cc new file mode 100644 index 0000000..69c7b61 --- /dev/null +++ b/components/history_clusters/core/history_clusters_types.cc
@@ -0,0 +1,18 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/history_clusters/core/history_clusters_types.h" + +namespace history_clusters { + +IncompleteVisitContextAnnotations::IncompleteVisitContextAnnotations() = + default; + +IncompleteVisitContextAnnotations::IncompleteVisitContextAnnotations( + const IncompleteVisitContextAnnotations&) = default; + +IncompleteVisitContextAnnotations::~IncompleteVisitContextAnnotations() = + default; + +} // namespace history_clusters
diff --git a/components/history_clusters/core/history_clusters_types.h b/components/history_clusters/core/history_clusters_types.h index e68c77e..f85ff43 100644 --- a/components/history_clusters/core/history_clusters_types.h +++ b/components/history_clusters/core/history_clusters_types.h
@@ -80,6 +80,10 @@ // A partially built VisitContextAnnotations with its state of completeness and // associated `URLRow` and `VisitRow` which are necessary to build it. struct IncompleteVisitContextAnnotations { + IncompleteVisitContextAnnotations(); + IncompleteVisitContextAnnotations(const IncompleteVisitContextAnnotations&); + ~IncompleteVisitContextAnnotations(); + RecordingStatus status; history::URLRow url_row; history::VisitRow visit_row;
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc index 30d3301b..cfedc49 100644 --- a/components/omnibox/browser/autocomplete_controller.cc +++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -646,22 +646,26 @@ } void AutocompleteController::StartPrefetch(const AutocompleteInput& input) { - // Start prefetch requests iff no non-prefetch request is in progress. Though - // not likely, it is possible for the providers to have an active non-prefetch - // request when a prefetch request is about to be started. In such scenarios, - // starting a prefetch request will cause the providers to invalidate their - // active non-prefetch requests and never get a chance to notify the - // controller of their status; thus resulting in the controller to remain in - // an invalid state. - if (!done_) { - return; - } + TRACE_EVENT1("omnibox", "AutocompleteController::StartPrefetch", "text", + base::UTF16ToUTF8(input.text())); for (auto provider : providers_) { - if (!ShouldRunProvider(provider.get())) + if (!ShouldRunProvider(provider.get())) { continue; + } + + // Avoid starting a prefetch request if a non-prefetch request is in + // progress. Though explicitly discouraged as per documentation in + // AutocompleteProvider::StartPrefetch(), a provider may still cancel its + // in-flight non-prefetch request when a prefetch request is started. This + // may cause the provider to never get a chance to notify the controller of + // its status; resulting in the controller to remain in an invalid state. + if (!provider->done()) { + continue; + } provider->StartPrefetch(input); + DCHECK(provider->done()); } }
diff --git a/components/omnibox/browser/autocomplete_controller.h b/components/omnibox/browser/autocomplete_controller.h index 39da93b..19bdfa1 100644 --- a/components/omnibox/browser/autocomplete_controller.h +++ b/components/omnibox/browser/autocomplete_controller.h
@@ -126,8 +126,9 @@ // Made virtual for mocking in tests. virtual void Start(const AutocompleteInput& input); - // Simply calls StartPrefetch() on all providers so those providers that - // override it could perform a prefetch request and populate their caches. + // Calls StartPrefetch() on all eligible providers so that they can optionally + // perform a prefetch request to warm up their underlying service(s) and/or + // optionally cache their otherwise async response. // Made virtual for mocking in tests. virtual void StartPrefetch(const AutocompleteInput& input);
diff --git a/components/omnibox/browser/autocomplete_provider.cc b/components/omnibox/browser/autocomplete_provider.cc index c551dcc..c7adb8d 100644 --- a/components/omnibox/browser/autocomplete_provider.cc +++ b/components/omnibox/browser/autocomplete_provider.cc
@@ -93,6 +93,10 @@ listener->OnProviderUpdate(updated_matches, this); } +void AutocompleteProvider::StartPrefetch(const AutocompleteInput& input) { + DCHECK(!input.omit_asynchronous_matches()); +} + void AutocompleteProvider::Stop(bool clear_cached_results, bool due_to_user_inactivity) { done_ = true;
diff --git a/components/omnibox/browser/autocomplete_provider.h b/components/omnibox/browser/autocomplete_provider.h index f1956c8..97e722c3 100644 --- a/components/omnibox/browser/autocomplete_provider.h +++ b/components/omnibox/browser/autocomplete_provider.h
@@ -190,6 +190,21 @@ void AddListener(AutocompleteProviderListener* listener); void NotifyListeners(bool updated_matches) const; + // Called on page load. Used start a prefetch request to warm up the + // provider's underlying service(s) and/or optionally cache the provider's + // otherwise async response. A prefetch request must conform to the following: + // - It must be posted on a sequence to minimize contention on page load. + // - It must *not* depend on or affect the provider's state. + // - It must *not* stop the provider. + // - It need *not* stop when the provider is stopped. + // - It must *not* call NotifyListeners() after completing a prefetch request. + // - It must make prefetched response accessible to other instances of the + // provider, e.g., via user prefs or a keyed service, if applicable. + // The default implementation DCHECKs whether async requests are allowed. + // Overridden functions must call `AutocompleteProvider::StartPrefetch()` with + // the same arguments passed to the function. + virtual void StartPrefetch(const AutocompleteInput& input); + // Called to start an autocomplete query. The provider is responsible for // tracking its matches for this query and whether it is done processing the // query. When new matches are available or the provider finishes, it @@ -211,12 +226,6 @@ // AutocompleteController::Start(). virtual void Start(const AutocompleteInput& input, bool minimal_changes) = 0; - // Similar to Start(), but used to perform prefetch requests. Providers can - // override this method and perform a prefetch request in order to cache the - // response. Providers should *not* call NotifyListeners() after completing a - // prefetch request. - virtual void StartPrefetch(const AutocompleteInput& input) {} - // Advises the provider to stop processing. This may be called even if the // provider is already done. If the provider caches any results, it should // clear the cache based on the value of `clear_cached_results`. Normally, @@ -234,7 +243,7 @@ // The default implementation sets `done_` to true and clears `matches_` if // `clear_cached_results` is true. Overridden functions must call // `AutocompleteProvider::Stop()` with the same arguments passed to the - // function unless there is a good and well-documented reason not to do so. + // function. virtual void Stop(bool clear_cached_results, bool due_to_user_inactivity); // Returns the enum equivalent to the name of this provider.
diff --git a/components/omnibox/browser/autocomplete_provider_unittest.cc b/components/omnibox/browser/autocomplete_provider_unittest.cc index c4881c57..f52ddb2 100644 --- a/components/omnibox/browser/autocomplete_provider_unittest.cc +++ b/components/omnibox/browser/autocomplete_provider_unittest.cc
@@ -69,15 +69,17 @@ } }; -class TestAutocompleteProviderObserver +// AutocompleteController::Observer implementation that runs the provided +// closure, when the controller is done. +class TestAutocompleteControllerObserver : public AutocompleteController::Observer { public: - TestAutocompleteProviderObserver() = default; - ~TestAutocompleteProviderObserver() override = default; - TestAutocompleteProviderObserver(const TestAutocompleteProviderObserver&) = - delete; - TestAutocompleteProviderObserver& operator=( - const TestAutocompleteProviderObserver&) = delete; + TestAutocompleteControllerObserver() = default; + ~TestAutocompleteControllerObserver() override = default; + TestAutocompleteControllerObserver( + const TestAutocompleteControllerObserver&) = delete; + TestAutocompleteControllerObserver& operator=( + const TestAutocompleteControllerObserver&) = delete; void set_closure(const base::RepeatingClosure& closure) { closure_ = closure; @@ -98,6 +100,41 @@ bool is_observing_ = false; }; +// AutocompleteProviderListener implementation that runs the provided closure, +// when the provider is done. Informs the controller for non-prefetch requests. +class TestAutocompleteProviderListener : public AutocompleteProviderListener { + public: + explicit TestAutocompleteProviderListener(AutocompleteController* controller) + : controller_(controller) {} + ~TestAutocompleteProviderListener() override = default; + TestAutocompleteProviderListener(const TestAutocompleteProviderListener&) = + delete; + TestAutocompleteProviderListener& operator=( + const TestAutocompleteProviderListener&) = delete; + + void set_closure(const base::RepeatingClosure& closure) { + closure_ = closure; + } + + // TestAutocompleteProviderListener: + void OnProviderUpdate(bool updated_matches, + const AutocompleteProvider* provider) override { + controller_->OnProviderUpdate(updated_matches, provider); + if (closure_) + closure_.Run(); + } + + // Used by TestProvider to notify it is done with a prefetch request. + void OnProviderFinishedPrefetch() { + if (closure_) + closure_.Run(); + } + + private: + raw_ptr<AutocompleteController> controller_; + base::RepeatingClosure closure_; +}; + } // namespace // Autocomplete provider that provides known results. Note that this is @@ -116,12 +153,25 @@ TestProvider(const TestProvider&) = delete; TestProvider& operator=(const TestProvider&) = delete; + // AutocompleteProvider: + void StartPrefetch(const AutocompleteInput& input) override; void Start(const AutocompleteInput& input, bool minimal_changes) override; + void set_supports_prefetch(const bool supports_prefetch) { + supports_prefetch_ = supports_prefetch; + } + + bool prefetch_done() { return prefetch_done_; } + + void set_closure(const base::RepeatingClosure& closure) { + closure_ = closure; + } + protected: ~TestProvider() override = default; - void Run(); + void OnNonPrefetchRequestDone(); + void OnPrefetchRequestDone(); void AddResults(int start_at, int num); void AddResultsWithSearchTermsArgs( @@ -134,8 +184,40 @@ const std::u16string prefix_; const std::u16string match_keyword_; raw_ptr<AutocompleteProviderClient> client_; + bool supports_prefetch_{false}; + bool prefetch_done_{true}; + base::RepeatingClosure closure_; }; +void TestProvider::StartPrefetch(const AutocompleteInput& input) { + if (!supports_prefetch_) { + return; + } + + matches_.clear(); + prefetch_done_ = false; + if (closure_) { + closure_.Run(); + } + + if (!input.omit_asynchronous_matches()) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(&TestProvider::OnPrefetchRequestDone, + base::Unretained(this))); + } else { + OnPrefetchRequestDone(); + } +} + +void TestProvider::OnPrefetchRequestDone() { + AddResults(0, kResultsPerProvider); + prefetch_done_ = true; + for (auto* listener : listeners_) { + static_cast<TestAutocompleteProviderListener*>(listener) + ->OnProviderFinishedPrefetch(); + } +} + void TestProvider::Start(const AutocompleteInput& input, bool minimal_changes) { if (minimal_changes) return; @@ -158,11 +240,12 @@ if (!input.omit_asynchronous_matches()) { done_ = false; base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&TestProvider::Run, this)); + FROM_HERE, base::BindOnce(&TestProvider::OnNonPrefetchRequestDone, + base::Unretained(this))); } } -void TestProvider::Run() { +void TestProvider::OnNonPrefetchRequestDone() { AddResults(1, kResultsPerProvider); done_ = true; NotifyListeners(true); @@ -204,83 +287,6 @@ } } -// AutocompleteProviderListener implementation that calls the specified closure -// when the provider is done and informs the controller, if applicable. -class AutocompleteProviderListenerWithClosure - : public AutocompleteProviderListener { - public: - explicit AutocompleteProviderListenerWithClosure( - AutocompleteController* controller) - : controller_(controller) {} - ~AutocompleteProviderListenerWithClosure() override = default; - AutocompleteProviderListenerWithClosure( - const AutocompleteProviderListenerWithClosure&) = delete; - AutocompleteProviderListenerWithClosure& operator=( - const AutocompleteProviderListenerWithClosure&) = delete; - - void set_closure(const base::RepeatingClosure& closure) { - closure_ = closure; - } - - // Used by TestPrefetchProvider to notify it is done with a prefetch request. - void OnProviderFinishedPrefetch() { - if (closure_) - closure_.Run(); - } - - // AutocompleteProviderListener: - void OnProviderUpdate(bool updated_matches, - const AutocompleteProvider* provider) override { - controller_->OnProviderUpdate(updated_matches, provider); - if (closure_) - closure_.Run(); - } - - private: - raw_ptr<AutocompleteController> controller_; - base::RepeatingClosure closure_; -}; - -// Extends TestProvider to handle prefetch requests. It notifies its instance of -// AutocompleteProviderListenerWithClosure when is done with a prefetch request. -class TestPrefetchProvider : public TestProvider { - public: - TestPrefetchProvider(int relevance, - const std::u16string& prefix, - const std::u16string& match_keyword, - AutocompleteProviderClient* client) - : TestProvider(relevance, prefix, match_keyword, client) {} - TestPrefetchProvider(const TestPrefetchProvider&) = delete; - TestPrefetchProvider& operator=(const TestPrefetchProvider&) = delete; - - // AutocompleteProvider: - void StartPrefetch(const AutocompleteInput& input) override; - - private: - ~TestPrefetchProvider() override = default; - - void RunPrefetch(); -}; - -void TestPrefetchProvider::StartPrefetch(const AutocompleteInput& input) { - matches_.clear(); - done_ = false; - - if (!input.omit_asynchronous_matches()) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&TestPrefetchProvider::RunPrefetch, this)); - } else { - RunPrefetch(); - } -} - -void TestPrefetchProvider::RunPrefetch() { - AddResults(0, kResultsPerProvider); - done_ = true; - static_cast<AutocompleteProviderListenerWithClosure*>(listeners_[0]) - ->OnProviderFinishedPrefetch(); -} - // Helper class to make running tests of ClassifyAllMatchesInString() more // convenient. class ClassifyTest { @@ -317,6 +323,8 @@ AutocompleteProviderTest(const AutocompleteProviderTest&) = delete; AutocompleteProviderTest& operator=(const AutocompleteProviderTest&) = delete; + void CopyResults(); + protected: struct KeywordTestData { const std::u16string fill_into_edit; @@ -373,8 +381,6 @@ void ResetControllerWithKeywordProvider(); void RunExactKeymatchTest(bool allow_exact_keyword_match); - void CopyResults(); - // Returns match.destination_url as it would be set by // AutocompleteController::UpdateMatchDestinationURL(). GURL GetDestinationURL(AutocompleteMatch& match, @@ -413,7 +419,7 @@ AutocompleteResult result_; base::test::TaskEnvironment task_environment_; TestingPrefServiceSimple pref_service_; - TestAutocompleteProviderObserver autocomplete_provider_observer_; + TestAutocompleteControllerObserver autocomplete_controller_observer_; std::unique_ptr<AutocompleteController> controller_; // Owned by |controller_|. raw_ptr<MockAutocompleteProviderClient> client_; @@ -678,12 +684,12 @@ input.set_allow_exact_keyword_match(allow_exact_keyword_match); base::RunLoop run_loop; - autocomplete_provider_observer_.set_closure( + autocomplete_controller_observer_.set_closure( run_loop.QuitClosure().Then(base::BindRepeating( &AutocompleteProviderTest::CopyResults, base::Unretained(this)))); - if (!autocomplete_provider_observer_.is_observing()) { - controller_->AddObserver(&autocomplete_provider_observer_); - autocomplete_provider_observer_.set_is_observing(); + if (!autocomplete_controller_observer_.is_observing()) { + controller_->AddObserver(&autocomplete_controller_observer_); + autocomplete_controller_observer_.set_is_observing(); } controller_->Start(input); if (!controller_->done()) @@ -1678,8 +1684,7 @@ // Create an empty controller. ResetControllerWithType(0); provider_listener_ = - std::make_unique<AutocompleteProviderListenerWithClosure>( - controller_.get()); + std::make_unique<TestAutocompleteProviderListener>(controller_.get()); } ~AutocompleteProviderPrefetchTest() override = default; AutocompleteProviderPrefetchTest(const AutocompleteProviderPrefetchTest&) = @@ -1688,17 +1693,20 @@ const AutocompleteProviderPrefetchTest&) = delete; protected: - std::unique_ptr<AutocompleteProviderListenerWithClosure> provider_listener_; + std::unique_ptr<TestAutocompleteProviderListener> provider_listener_; }; TEST_F(AutocompleteProviderPrefetchTest, SupportedProvider_NonPrefetch) { // Add a test provider that supports prefetch requests. - TestPrefetchProvider* provider = new TestPrefetchProvider( - kResultsPerProvider, u"http://a", kTestTemplateURLKeyword, client_); + TestProvider* provider = new TestProvider(kResultsPerProvider, u"http://a", + kTestTemplateURLKeyword, client_); + provider->set_supports_prefetch(true); controller_->providers_.push_back(provider); - base::RunLoop run_loop; - provider_listener_->set_closure(run_loop.QuitClosure()); + base::RunLoop listener_run_loop; + provider_listener_->set_closure( + listener_run_loop.QuitClosure().Then(base::BindRepeating( + &AutocompleteProviderTest::CopyResults, base::Unretained(this)))); provider->AddListener(provider_listener_.get()); AutocompleteInput input(u"foo", metrics::OmniboxEventProto::OTHER, @@ -1709,58 +1717,73 @@ ASSERT_FALSE(controller_->done()); // Wait for the provider to finish asynchronously. - run_loop.Run(); + listener_run_loop.Run(); ASSERT_TRUE(provider->done()); ASSERT_TRUE(controller_->done()); // The results are expected to be non-empty as the provider did notify the // controller of the non-prefetch request results. - CopyResults(); EXPECT_EQ(kResultsPerProvider, result_.size()); } TEST_F(AutocompleteProviderPrefetchTest, SupportedProvider_Prefetch) { // Add a test provider that supports prefetch requests. - TestPrefetchProvider* provider = new TestPrefetchProvider( - kResultsPerProvider, u"http://a", kTestTemplateURLKeyword, client_); + TestProvider* provider = new TestProvider(kResultsPerProvider, u"http://a", + kTestTemplateURLKeyword, client_); + provider->set_supports_prefetch(true); controller_->providers_.push_back(provider); - base::RunLoop run_loop; - provider_listener_->set_closure(run_loop.QuitClosure()); + base::RunLoop provider_run_loop; + provider->set_closure(provider_run_loop.QuitClosure()); + + base::RunLoop listener_run_loop; + provider_listener_->set_closure( + listener_run_loop.QuitClosure().Then(base::BindRepeating( + &AutocompleteProviderTest::CopyResults, base::Unretained(this)))); provider->AddListener(provider_listener_.get()); AutocompleteInput input(u"", metrics::OmniboxEventProto::OTHER, TestingSchemeClassifier()); controller_->StartPrefetch(input); + // Wait for StartPrefetch() to be called on the provider. + provider_run_loop.Run(); - ASSERT_FALSE(provider->done()); - // Prefetch requests do not affect the state of the controller. + // StartPrefetch() doesn't affect the state of the provider or the controller. + ASSERT_FALSE(provider->prefetch_done()); + ASSERT_TRUE(provider->done()); ASSERT_TRUE(controller_->done()); // Wait for the provider to finish asynchronously. - run_loop.Run(); - ASSERT_TRUE(provider->done()); + listener_run_loop.Run(); + ASSERT_TRUE(provider->prefetch_done()); + ASSERT_TRUE(controller_->done()); // The results are expected to be empty as the provider did not notify the // controller of the prefetch request results. - CopyResults(); EXPECT_TRUE(result_.empty()); } TEST_F(AutocompleteProviderPrefetchTest, SupportedProvider_OngoingNonPrefetch) { // Add a test provider that supports prefetch requests. - TestPrefetchProvider* provider = new TestPrefetchProvider( - kResultsPerProvider, u"http://a", kTestTemplateURLKeyword, client_); + TestProvider* provider = new TestProvider(kResultsPerProvider, u"http://a", + kTestTemplateURLKeyword, client_); + provider->set_supports_prefetch(true); controller_->providers_.push_back(provider); - base::RunLoop run_loop; - provider_listener_->set_closure(run_loop.QuitClosure()); + base::RunLoop provider_run_loop; + provider->set_closure(provider_run_loop.QuitClosure()); + + base::RunLoop listener_run_loop; + provider_listener_->set_closure( + listener_run_loop.QuitClosure().Then(base::BindRepeating( + &AutocompleteProviderTest::CopyResults, base::Unretained(this)))); provider->AddListener(provider_listener_.get()); AutocompleteInput input(u"bar", metrics::OmniboxEventProto::OTHER, TestingSchemeClassifier()); controller_->Start(input); + ASSERT_TRUE(provider->prefetch_done()); ASSERT_FALSE(provider->done()); ASSERT_FALSE(controller_->done()); @@ -1774,14 +1797,16 @@ input.set_omit_asynchronous_matches(true); controller_->StartPrefetch(input); - // Wait for the provider to finish asynchronously. - run_loop.Run(); + ASSERT_FALSE(provider_run_loop.running()); + ASSERT_TRUE(provider->prefetch_done()); + + // Wait for the provider to finish the non-prefetch request asynchronously. + listener_run_loop.Run(); ASSERT_TRUE(provider->done()); ASSERT_TRUE(controller_->done()); // The results are expected to be non-empty as the provider did notify the // controller of the non-prefetch request results. - CopyResults(); EXPECT_EQ(kResultsPerProvider, result_.size()); } @@ -1791,16 +1816,16 @@ kTestTemplateURLKeyword, client_); controller_->providers_.push_back(provider); + base::RunLoop provider_run_loop; + provider->set_closure(provider_run_loop.QuitClosure()); + AutocompleteInput input(u"", metrics::OmniboxEventProto::OTHER, TestingSchemeClassifier()); controller_->StartPrefetch(input); - // The provider is expected to finish synchronously. + // We expect this not to call StartPrefetch() on the provider. + ASSERT_FALSE(provider_run_loop.running()); + ASSERT_TRUE(provider->prefetch_done()); ASSERT_TRUE(provider->done()); ASSERT_TRUE(controller_->done()); - - // The results are expected to be empty since the provider did a no-op for the - // prefetch request. - CopyResults(); - EXPECT_TRUE(result_.empty()); }
diff --git a/components/omnibox/browser/zero_suggest_provider.cc b/components/omnibox/browser/zero_suggest_provider.cc index 608905d..413b547 100644 --- a/components/omnibox/browser/zero_suggest_provider.cc +++ b/components/omnibox/browser/zero_suggest_provider.cc
@@ -382,17 +382,14 @@ } void ZeroSuggestProvider::StartPrefetch(const AutocompleteInput& input) { + AutocompleteProvider::StartPrefetch(input); + TRACE_EVENT0("omnibox", "ZeroSuggestProvider::StartPrefetch"); if (!AllowZeroPrefixSuggestions(client(), input)) { return; } - // Do not start a request if async requests are disallowed. - if (input.omit_asynchronous_matches()) { - return; - } - ResultType result_type = ResultTypeToRun(client(), input); if (prefetch_loader_) { @@ -539,6 +536,8 @@ ResultType result_type, const network::SimpleURLLoader* source, std::unique_ptr<std::string> response_body) { + TRACE_EVENT0("omnibox", "ZeroSuggestProvider::OnURLLoadComplete"); + DCHECK(!done_); DCHECK_EQ(loader_.get(), source); @@ -591,6 +590,8 @@ ResultType result_type, const network::SimpleURLLoader* source, std::unique_ptr<std::string> response_body) { + TRACE_EVENT0("omnibox", "ZeroSuggestProvider::OnPrefetchURLLoadComplete"); + DCHECK_EQ(prefetch_loader_.get(), source); const bool response_received =
diff --git a/components/optimization_guide/OWNERS b/components/optimization_guide/OWNERS index 0fce3af..6839ccc 100644 --- a/components/optimization_guide/OWNERS +++ b/components/optimization_guide/OWNERS
@@ -1,4 +1,5 @@ sophiechang@chromium.org mcrouse@chromium.org +rajendrant@chromium.org robertogden@chromium.org tbansal@chromium.org
diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc index 9c5e0995..f11131b 100644 --- a/components/page_info/page_info.cc +++ b/components/page_info/page_info.cc
@@ -1142,7 +1142,9 @@ if (is_cookies_subpage_enabled) { // Add allowed sites count. PageInfoUI::CookiesNewInfo cookies_info; - cookies_info.allowed_sites_count = GetSitesWithAllowedCookiesCount(); + cookies_info.allowed_sites_count = GetSitesWithAllowedCookiesAccessCount(); + cookies_info.blocked_sites_count = + GetThirdPartySitesWithBlockedCookiesAccessCount(site_url_); // TODO(crbug.com/1346305): Add dummy function for FPS information. if (privacy_sandbox::kPrivacySandboxFirstPartySetsUISampleSets.Get() && @@ -1353,11 +1355,21 @@ site_url); } -int PageInfo::GetSitesWithAllowedCookiesCount() { +int PageInfo::GetSitesWithAllowedCookiesAccessCount() { auto* settings = GetPageSpecificContentSettings(); if (!settings) return 0; - return settings->allowed_local_shared_objects().GetDomainCount(); + return settings->allowed_local_shared_objects().GetHostCount(); +} + +int PageInfo::GetThirdPartySitesWithBlockedCookiesAccessCount( + const GURL& site_url) { + auto* settings = GetPageSpecificContentSettings(); + if (!settings) + return 0; + return settings->blocked_local_shared_objects().GetHostCount() - + settings->blocked_local_shared_objects().GetHostCountForDomain( + site_url); } int PageInfo::GetFirstPartyBlockedCookiesCount(const GURL& site_url) {
diff --git a/components/page_info/page_info.h b/components/page_info/page_info.h index ac069ac..155eca7 100644 --- a/components/page_info/page_info.h +++ b/components/page_info/page_info.h
@@ -367,8 +367,9 @@ int GetThirdPartyAllowedCookiesCount(const GURL& site_url); int GetThirdPartyBlockedCookiesCount(const GURL& site_url); - // Get the count of sites allowed to access cookies. - int GetSitesWithAllowedCookiesCount(); + // Get the count of blocked and allowed sites. + int GetSitesWithAllowedCookiesAccessCount(); + int GetThirdPartySitesWithBlockedCookiesAccessCount(const GURL& site_url); // The page info UI displays information and controls for site- // specific data (local stored objects like cookies), site-specific
diff --git a/components/password_manager/core/browser/android_affiliation/affiliated_match_helper.cc b/components/password_manager/core/browser/android_affiliation/affiliated_match_helper.cc index ebd1c20..bb41fff 100644 --- a/components/password_manager/core/browser/android_affiliation/affiliated_match_helper.cc +++ b/components/password_manager/core/browser/android_affiliation/affiliated_match_helper.cc
@@ -168,10 +168,9 @@ FacetURI facet_uri = FacetURI::FromPotentiallyInvalidSpec(form->signon_realm); if (IsFacetValidForAffiliation(facet_uri)) - affiliation_service_->Prefetch(facet_uri, base::Time::Max()); - - facets.push_back(std::move(facet_uri)); + facets.push_back(std::move(facet_uri)); } + affiliation_service_->KeepPrefetchForFacets(facets); affiliation_service_->TrimUnusedCache(std::move(facets)); }
diff --git a/components/password_manager/core/browser/android_affiliation/affiliated_match_helper_unittest.cc b/components/password_manager/core/browser/android_affiliation/affiliated_match_helper_unittest.cc index 21c14d28..6f1688bb 100644 --- a/components/password_manager/core/browser/android_affiliation/affiliated_match_helper_unittest.cc +++ b/components/password_manager/core/browser/android_affiliation/affiliated_match_helper_unittest.cc
@@ -262,6 +262,28 @@ } } + void ExpectKeepPrefetchForTestLogins() { + std::vector<FacetURI> expected_facets; + expected_facets.push_back( + FacetURI::FromCanonicalSpec(kTestAndroidFacetURIAlpha3)); + expected_facets.push_back( + FacetURI::FromCanonicalSpec(kTestAndroidFacetURIBeta2)); + expected_facets.push_back( + FacetURI::FromCanonicalSpec(kTestAndroidFacetURIGamma)); + expected_facets.push_back( + FacetURI::FromCanonicalSpec(kTestAndroidFacetURIBeta3)); + + if (base::FeatureList::IsEnabled( + features::kFillingAcrossAffiliatedWebsites)) { + expected_facets.push_back( + FacetURI::FromCanonicalSpec(kTestWebFacetURIAlpha1)); + expected_facets.push_back( + FacetURI::FromCanonicalSpec(kTestWebFacetURIAlpha2)); + } + + mock_affiliation_service()->ExpectKeepPrefetchForFacets(expected_facets); + } + void ExpectCancelPrefetchForTestLogins() { mock_affiliation_service()->ExpectCallToCancelPrefetch( kTestAndroidFacetURIAlpha3); @@ -442,7 +464,7 @@ AddAndroidAndNonAndroidTestLogins(); RunUntilIdle(); - ExpectPrefetchForTestLogins(); + ExpectKeepPrefetchForTestLogins(); ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); } @@ -457,7 +479,7 @@ AddAndroidAndNonAndroidTestLogins(); - ExpectPrefetchForTestLogins(); + ExpectKeepPrefetchForTestLogins(); ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); } @@ -465,6 +487,7 @@ // Verifies that corresponding affiliation information gets prefetched. TEST_P(AffiliatedMatchHelperTest, PrefetchAffiliationsForAndroidCredentialsAddedAfterInitialization) { + mock_affiliation_service()->ExpectKeepPrefetchForFacets({}); ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); ExpectPrefetchForTestLogins(); @@ -475,7 +498,7 @@ CancelPrefetchingAffiliationsAndBrandingForRemovedAndroidCredentials) { AddAndroidAndNonAndroidTestLogins(); - ExpectPrefetchForTestLogins(); + ExpectKeepPrefetchForTestLogins(); ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); ExpectCancelPrefetchForTestLogins(); @@ -492,7 +515,7 @@ TEST_P(AffiliatedMatchHelperTest, PrefetchBeforeTrimForPrimaryKeyUpdates) { AddAndroidAndNonAndroidTestLogins(); - ExpectPrefetchForTestLogins(); + ExpectKeepPrefetchForTestLogins(); ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); mock_affiliation_service()->ExpectCallToCancelPrefetch( @@ -516,10 +539,10 @@ // expects that Prefetch() and CancelPrefetch() will each be called four times. TEST_P(AffiliatedMatchHelperTest, DuplicateCredentialsArePrefetchWithMultiplicity) { - EXPECT_CALL(*mock_affiliation_service(), - Prefetch(FacetURI::FromCanonicalSpec(kTestAndroidFacetURIAlpha3), - base::Time::Max())) - .Times(4); + mock_affiliation_service()->ExpectKeepPrefetchForFacets( + {FacetURI::FromCanonicalSpec(kTestAndroidFacetURIAlpha3), + FacetURI::FromCanonicalSpec(kTestAndroidFacetURIAlpha3), + FacetURI::FromCanonicalSpec(kTestAndroidFacetURIAlpha3)}); PasswordForm android_form(GetTestAndroidCredentials(kTestAndroidRealmAlpha3)); password_store()->AddLogin(android_form); @@ -540,6 +563,11 @@ ASSERT_NO_FATAL_FAILURE(RunDeferredInitialization()); + EXPECT_CALL(*mock_affiliation_service(), + Prefetch(FacetURI::FromCanonicalSpec(kTestAndroidFacetURIAlpha3), + base::Time::Max())) + .Times(1); + // Store one credential after deferred initialization. PasswordForm android_form4(android_form); android_form4.username_value = u"JohnDoe4";
diff --git a/components/password_manager/core/browser/hash_password_manager.cc b/components/password_manager/core/browser/hash_password_manager.cc index e81b0ed..1dbf380 100644 --- a/components/password_manager/core/browser/hash_password_manager.cc +++ b/components/password_manager/core/browser/hash_password_manager.cc
@@ -184,7 +184,7 @@ return; ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); - update->EraseListValueIf([&](const auto& dict) { + update->GetList().EraseIf([&](const auto& dict) { return AreUsernamesSame(GetAndDecryptField(dict, kUsernameFieldKey), IsGaiaPassword(dict), username, is_gaia_password); }); @@ -195,7 +195,7 @@ return; ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); - update->EraseListValueIf([&](const auto& dict) { + update->GetList().EraseIf([&](const auto& dict) { return GetAndDecryptField(dict, kIsGaiaFieldKey) == BooleanToString(is_gaia_password); }); @@ -206,7 +206,7 @@ return; ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); - update->EraseListValueIf([](const base::Value& data) { + update->GetList().EraseIf([](const base::Value& data) { if (GetAndDecryptField(data, kIsGaiaFieldKey) == "false") { return false; } @@ -321,7 +321,7 @@ if (num_erased == 0 && update_list.size() >= kMaxPasswordHashDataDictSize) { // Erase the oldest sign-in password hash data. - update->EraseListIter(std::min_element( + update_list.erase(std::min_element( update_list.begin(), update_list.end(), [](const auto& lhs, const auto& rhs) { return *lhs.GetDict().FindDouble(kLastSignInTimeFieldKey) <
diff --git a/components/password_manager/core/browser/manage_passwords_referrer.h b/components/password_manager/core/browser/manage_passwords_referrer.h index cef995aa..946455f 100644 --- a/components/password_manager/core/browser/manage_passwords_referrer.h +++ b/components/password_manager/core/browser/manage_passwords_referrer.h
@@ -58,7 +58,11 @@ // Corresponds to the situation when Chrome opens native Password Manager UI // when navigating to specified website. kPasswordsGoogleWebsite = 13, - kMaxValue = kPasswordsGoogleWebsite, + // Corresponds to the user clicking the "Check your passwords any time in + // password manager" after a successful automated password change run. + // Only used on Desktop. + kAutomatedPasswordChangeSuccessLink = 14, + kMaxValue = kAutomatedPasswordChangeSuccessLink, }; } // namespace password_manager
diff --git a/components/password_manager/core/browser/password_generation_frame_helper.h b/components/password_manager/core/browser/password_generation_frame_helper.h index 2f4058d..274bf06 100644 --- a/components/password_manager/core/browser/password_generation_frame_helper.h +++ b/components/password_manager/core/browser/password_generation_frame_helper.h
@@ -53,7 +53,9 @@ // Determines current state of password generation // |log_debug_data| determines whether log entries are sent to the // autofill::SavePasswordProgressLogger. - bool IsGenerationEnabled(bool log_debug_data) const; + // + // Virtual for testing + virtual bool IsGenerationEnabled(bool log_debug_data) const; // Returns a randomly generated password that should (but is not guaranteed // to) match the requirements of the site.
diff --git a/components/password_manager/core/browser/ui/saved_passwords_presenter.cc b/components/password_manager/core/browser/ui/saved_passwords_presenter.cc index e70bd20..8412853 100644 --- a/components/password_manager/core/browser/ui/saved_passwords_presenter.cc +++ b/components/password_manager/core/browser/ui/saved_passwords_presenter.cc
@@ -197,10 +197,30 @@ return credential.signon_realm == entry.signon_realm && credential.username == entry.username_value; }; - if (base::ranges::any_of(passwords_, have_equal_username_and_realm)) - return AddResult::kAlreadyExisits; + auto have_equal_username_and_realm_in_profile_store = + [&have_equal_username_and_realm](const PasswordForm& entry) { + return have_equal_username_and_realm(entry) && + entry.IsUsingProfileStore(); + }; + auto have_equal_username_and_realm_in_account_store = + [&have_equal_username_and_realm](const PasswordForm& entry) { + return have_equal_username_and_realm(entry) && + entry.IsUsingAccountStore(); + }; - return AddResult::kSuccess; + bool existing_password_profile = base::ranges::any_of( + passwords_, have_equal_username_and_realm_in_profile_store); + bool existing_password_account = base::ranges::any_of( + passwords_, have_equal_username_and_realm_in_account_store); + + if (!existing_password_profile && !existing_password_account) + return AddResult::kSuccess; + if (existing_password_profile && !existing_password_account) + return AddResult::kExistsInProfileStore; + if (existing_password_account && !existing_password_profile) + return AddResult::kExistsInAccountStore; + + return AddResult::kExistsInProfileAndAccountStore; } void SavedPasswordsPresenter::AddCredentialAsync(
diff --git a/components/password_manager/core/browser/ui/saved_passwords_presenter.h b/components/password_manager/core/browser/ui/saved_passwords_presenter.h index fa413d7..9991ec8 100644 --- a/components/password_manager/core/browser/ui/saved_passwords_presenter.h +++ b/components/password_manager/core/browser/ui/saved_passwords_presenter.h
@@ -73,7 +73,20 @@ kMaxValue = kEmptyPassword, }; - enum class AddResult { kSuccess, kInvalid, kAlreadyExisits }; + // Result of AddCredentialsCallback. + enum class AddResult { + // Credential is expected to be added successfully. + kSuccess, + // Credential is invalid. + kInvalid, + // Credential already exists in the profile store. + kExistsInProfileStore, + // Credential already exists in the account store. + kExistsInAccountStore, + // Credential already exists in the profile and account store. + kExistsInProfileAndAccountStore, + kMaxValue = kExistsInProfileAndAccountStore, + }; using AddCredentialsCallback = base::OnceCallback<void(const std::vector<AddResult>&)>;
diff --git a/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc b/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc index d44baef..ff466ce 100644 --- a/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc +++ b/components/password_manager/core/browser/ui/saved_passwords_presenter_unittest.cc
@@ -914,21 +914,100 @@ presenter().RemoveObserver(&observer); } +// Tests whether adding 2 passwords with 1 that already exists in the profile +// store fails with the correct response. +TEST_F(SavedPasswordsPresenterWithTwoStoresTest, + AddCredentialsListTwoPasswordOneConflictsProfileStore) { + PasswordForm existing_profile_form = + CreateTestPasswordForm(PasswordForm::Store::kProfileStore, /*index=*/0); + PasswordForm new_profile_form = + CreateTestPasswordForm(PasswordForm::Store::kProfileStore, /*index=*/1); + + profile_store().AddLogin(existing_profile_form); + RunUntilIdle(); + + base::MockCallback<SavedPasswordsPresenter::AddCredentialsCallback> + completion_callback; + + presenter().AddCredentials({CredentialUIEntry(existing_profile_form), + CredentialUIEntry(new_profile_form)}, + password_manager::PasswordForm::Type::kImported, + completion_callback.Get()); + EXPECT_CALL(completion_callback, + Run(std::vector<SavedPasswordsPresenter::AddResult>{ + SavedPasswordsPresenter::AddResult::kExistsInProfileStore, + SavedPasswordsPresenter::AddResult::kSuccess})); + RunUntilIdle(); +} + +// Tests whether adding whether adding 2 passwords with 1 that already exists in +// the account store fails with the correct response. +TEST_F(SavedPasswordsPresenterWithTwoStoresTest, + AddCredentialsListTwoPasswordOneConflictsAccountStore) { + PasswordForm existing_account_form = + CreateTestPasswordForm(PasswordForm::Store::kAccountStore, /*index=*/0); + PasswordForm new_account_form = + CreateTestPasswordForm(PasswordForm::Store::kAccountStore, /*index=*/1); + + account_store().AddLogin(existing_account_form); + RunUntilIdle(); + + base::MockCallback<SavedPasswordsPresenter::AddCredentialsCallback> + completion_callback; + presenter().AddCredentials({CredentialUIEntry(existing_account_form), + CredentialUIEntry(new_account_form)}, + password_manager::PasswordForm::Type::kImported, + completion_callback.Get()); + EXPECT_CALL(completion_callback, + Run(std::vector<SavedPasswordsPresenter::AddResult>{ + SavedPasswordsPresenter::AddResult::kExistsInAccountStore, + SavedPasswordsPresenter::AddResult::kSuccess})); + RunUntilIdle(); +} + +// Tests whether adding 2 passwords with 1 that already exists in both profile +// and account store fails with the correct response. +TEST_F(SavedPasswordsPresenterWithTwoStoresTest, + AddCredentialsListTwoPasswordOneConflictsProfileAndAccountStore) { + PasswordForm existing_profile_form = + CreateTestPasswordForm(PasswordForm::Store::kProfileStore, /*index=*/0); + PasswordForm existing_account_form = + CreateTestPasswordForm(PasswordForm::Store::kAccountStore, /*index=*/0); + + PasswordForm new_profile_form = + CreateTestPasswordForm(PasswordForm::Store::kProfileStore, /*index=*/1); + + profile_store().AddLogin(existing_profile_form); + account_store().AddLogin(existing_account_form); + RunUntilIdle(); + + base::MockCallback<SavedPasswordsPresenter::AddCredentialsCallback> + completion_callback; + presenter().AddCredentials({CredentialUIEntry(existing_profile_form), + CredentialUIEntry(new_profile_form)}, + password_manager::PasswordForm::Type::kImported, + completion_callback.Get()); + EXPECT_CALL( + completion_callback, + Run(std::vector<SavedPasswordsPresenter::AddResult>{ + SavedPasswordsPresenter::AddResult::kExistsInProfileAndAccountStore, + SavedPasswordsPresenter::AddResult::kSuccess})); + RunUntilIdle(); +} + // Tests whether adding 2 passwords notifies observers with credentials in one // store. TEST_F(SavedPasswordsPresenterWithTwoStoresTest, AddCredentialsListPasswordAccountStore) { PasswordForm account_store_form_1 = CreateTestPasswordForm(PasswordForm::Store::kAccountStore, /*index=*/0); - account_store_form_1.type = - password_manager::PasswordForm::Type::kManuallyAdded; + account_store_form_1.type = password_manager::PasswordForm::Type::kImported; account_store_form_1.date_created = base::Time::Now(); account_store_form_1.date_password_modified = base::Time::Now(); PasswordForm account_store_form_2 = CreateTestPasswordForm(PasswordForm::Store::kAccountStore, /*index=*/1); - account_store_form_2.type = - password_manager::PasswordForm::Type::kManuallyAdded; + account_store_form_2.type = password_manager::PasswordForm::Type::kImported; account_store_form_2.date_created = base::Time::Now(); account_store_form_2.date_password_modified = base::Time::Now(); @@ -944,10 +1023,9 @@ CredentialUIEntry account_store_cred_1(account_store_form_1); CredentialUIEntry account_store_cred_2(account_store_form_2); - presenter().AddCredentials( - {account_store_cred_1, account_store_cred_2}, - password_manager::PasswordForm::Type::kManuallyAdded, - completion_callback.Get()); + presenter().AddCredentials({account_store_cred_1, account_store_cred_2}, + password_manager::PasswordForm::Type::kImported, + completion_callback.Get()); EXPECT_CALL(completion_callback, Run(std::vector<SavedPasswordsPresenter::AddResult>{ SavedPasswordsPresenter::AddResult::kSuccess, @@ -963,15 +1041,13 @@ PasswordForm profile_store_form_1 = CreateTestPasswordForm(PasswordForm::Store::kProfileStore, /*index=*/0); profile_store_form_1.password_value = u""; - profile_store_form_1.type = - password_manager::PasswordForm::Type::kManuallyAdded; + profile_store_form_1.type = password_manager::PasswordForm::Type::kImported; profile_store_form_1.date_created = base::Time::Now(); profile_store_form_1.date_password_modified = base::Time::Now(); PasswordForm profile_store_form_2 = CreateTestPasswordForm(PasswordForm::Store::kProfileStore, /*index=*/1); - profile_store_form_2.type = - password_manager::PasswordForm::Type::kManuallyAdded; + profile_store_form_2.type = password_manager::PasswordForm::Type::kImported; profile_store_form_2.date_created = base::Time::Now(); profile_store_form_2.date_password_modified = base::Time::Now(); @@ -986,10 +1062,9 @@ CredentialUIEntry profile_store_cred_1(profile_store_form_1); CredentialUIEntry profile_store_cred_2(profile_store_form_2); - presenter().AddCredentials( - {profile_store_cred_1, profile_store_cred_2}, - password_manager::PasswordForm::Type::kManuallyAdded, - completion_callback.Get()); + presenter().AddCredentials({profile_store_cred_1, profile_store_cred_2}, + password_manager::PasswordForm::Type::kImported, + completion_callback.Get()); EXPECT_CALL(completion_callback, Run(std::vector<SavedPasswordsPresenter::AddResult>{ SavedPasswordsPresenter::AddResult::kInvalid,
diff --git a/components/password_manager/ios/shared_password_controller.mm b/components/password_manager/ios/shared_password_controller.mm index f7d11ec..dec00337 100644 --- a/components/password_manager/ios/shared_password_controller.mm +++ b/components/password_manager/ios/shared_password_controller.mm
@@ -127,9 +127,6 @@ // The value that was last typed by the user. NSString* _lastTypedValue; - // The max length for the focused field. - int _maxLength; - // Identifier of the last focused form. FormRendererId _lastFocusedFormIdentifier; @@ -649,36 +646,58 @@ [self formEligibleForGenerationFound:generationData]; } - std::u16string generatedPassword = - self.passwordGenerationHelper->GeneratePassword( - [self lastCommittedURL], autofill::FormSignature(0), - autofill::FieldSignature(0), _maxLength); - - self.generatedPotentialPassword = SysUTF16ToNSString(generatedPassword); - __weak SharedPasswordController* weakSelf = self; - auto completionHandler = ^{ - weakSelf.generatedPotentialPassword = nil; + auto formDataCompletion = ^(BOOL found, const autofill::FormData& form) { + autofill::FormSignature formSignature = + found ? CalculateFormSignature(form) : autofill::FormSignature(0); + autofill::FieldSignature fieldSignature = autofill::FieldSignature(0); + int maxLength = 0; + + if (found) { + for (const autofill::FormFieldData& field : form.fields) { + if (field.unique_renderer_id == fieldIdentifier) { + fieldSignature = CalculateFieldSignatureForField(field); + maxLength = field.max_length; + break; + } + } + } + + std::u16string generatedPassword = + weakSelf.passwordGenerationHelper->GeneratePassword( + [weakSelf lastCommittedURL], formSignature, fieldSignature, + maxLength); + + weakSelf.generatedPotentialPassword = SysUTF16ToNSString(generatedPassword); + + auto clearPotentialPassword = ^{ + weakSelf.generatedPotentialPassword = nil; + }; + + [weakSelf.delegate + sharedPasswordController:weakSelf + showGeneratedPotentialPassword:weakSelf.generatedPotentialPassword + decisionHandler:^(BOOL accept) { + if (accept) { + LogPasswordGenerationEvent( + autofill::password_generation:: + PASSWORD_ACCEPTED); + [weakSelf + injectGeneratedPasswordForFormId:formIdentifier + inFrame:frame + generatedPassword: + weakSelf + .generatedPotentialPassword + completionHandler: + clearPotentialPassword]; + } else { + clearPotentialPassword(); + } + }]; }; - [_delegate sharedPasswordController:self - showGeneratedPotentialPassword:self.generatedPotentialPassword - decisionHandler:^(BOOL accept) { - if (accept) { - LogPasswordGenerationEvent( - autofill::password_generation::PASSWORD_ACCEPTED); - [weakSelf - injectGeneratedPasswordForFormId:formIdentifier - inFrame:frame - generatedPassword: - weakSelf - .generatedPotentialPassword - completionHandler: - completionHandler]; - } else { - completionHandler(); - } - }]; + [self.formHelper extractPasswordFormData:formIdentifier + completionHandler:formDataCompletion]; _passwordManager->SetGenerationElementAndTypeForForm( _delegate.passwordManagerDriver, formIdentifier, fieldIdentifier, @@ -785,7 +804,6 @@ _lastFocusedFormIdentifier = params.unique_form_id; _lastFocusedFieldIdentifier = params.unique_field_id; _lastFocusedFrame = frame; - _maxLength = params.max_length; } // If there's a change in password forms on a page, they should be parsed
diff --git a/components/password_manager/ios/shared_password_controller_unittest.mm b/components/password_manager/ios/shared_password_controller_unittest.mm index fab74ba..cfd5953 100644 --- a/components/password_manager/ios/shared_password_controller_unittest.mm +++ b/components/password_manager/ios/shared_password_controller_unittest.mm
@@ -6,6 +6,7 @@ #include "base/strings/sys_string_conversions.h" #include "base/test/metrics/histogram_tester.h" +#include "components/autofill/core/browser/autofill_test_utils.h" #include "components/autofill/core/browser/ui/popup_item_ids.h" #include "components/autofill/core/common/form_data.h" #include "components/autofill/core/common/password_form_generation_data.h" @@ -111,17 +112,33 @@ (override)); }; +class MockPasswordGenerationFrameHelper + : public password_manager::PasswordGenerationFrameHelper { + public: + MOCK_METHOD(std::u16string, + GeneratePassword, + (const GURL& last_committed_url, + autofill::FormSignature form_signature, + autofill::FieldSignature field_signature, + uint32_t max_length)); + + MOCK_METHOD(bool, IsGenerationEnabled, (bool), (const)); + + explicit MockPasswordGenerationFrameHelper() + : PasswordGenerationFrameHelper(nullptr, nullptr) {} +}; + class TestPasswordManagerDriver : public StubPasswordManagerDriver { public: explicit TestPasswordManagerDriver(PasswordManagerClient* client) - : password_generation_helper_(client, this) {} + : password_generation_helper_() {} - PasswordGenerationFrameHelper* GetPasswordGenerationHelper() override { + MockPasswordGenerationFrameHelper* GetPasswordGenerationHelper() override { return &password_generation_helper_; } private: - PasswordGenerationFrameHelper password_generation_helper_; + MockPasswordGenerationFrameHelper password_generation_helper_; }; class SharedPasswordControllerTest : public PlatformTest { @@ -137,6 +154,9 @@ passwordManagerClient]; [[[delegate_ stub] andReturnValue:OCMOCK_VALUE(driver_ptr)] passwordManagerDriver]; + ON_CALL(*password_manager_driver_->GetPasswordGenerationHelper(), + IsGenerationEnabled(::testing::_)) + .WillByDefault(testing::Return(true)); form_helper_ = OCMStrictClassMock([PasswordFormHelper class]); suggestion_helper_ = OCMStrictClassMock([PasswordSuggestionHelper class]); OCMExpect([form_helper_ setDelegate:[OCMArg any]]); @@ -358,9 +378,6 @@ retrieveSuggestionsWithFormID:form_query.uniqueFormID fieldIdentifier:form_query.uniqueFieldID fieldType:form_query.fieldType]; - EXPECT_CALL(*password_manager_client_.GetPasswordFeatureManager(), - IsGenerationEnabled) - .WillOnce(Return(true)); autofill::PasswordFormGenerationData form_generation_data = { form_query.uniqueFormID, form_query.uniqueFieldID, @@ -385,10 +402,39 @@ // Tests that accepting a "Suggest a password" suggestion will give a suggested // password to the delegate. TEST_F(SharedPasswordControllerTest, SuggestsGeneratedPassword) { - autofill::FormRendererId form_id(0); - autofill::FieldRendererId field_id(1); + GURL origin("https://www.google.com/login"); + const uint64_t max_length = 10; + + autofill::FormData form_data; + form_data.url = origin; + form_data.action = origin; + form_data.name = u"login_form"; + form_data.unique_renderer_id = autofill::test::MakeFormRendererId(); + + autofill::FormFieldData field; + field.name = u"Username"; + field.id_attribute = field.name; + field.name_attribute = field.name; + field.value = u"googleuser"; + field.form_control_type = "text"; + field.unique_renderer_id = autofill::test::MakeFieldRendererId(); + form_data.fields.push_back(field); + + field.name = u"Passwd"; + field.id_attribute = field.name; + field.name_attribute = field.name; + field.value = u"p4ssword"; + field.form_control_type = "password"; + field.unique_renderer_id = autofill::test::MakeFieldRendererId(); + field.max_length = max_length; + form_data.fields.push_back(field); + + autofill::FormFieldData password_field_data = form_data.fields.back(); + autofill::FormRendererId form_id = form_data.unique_renderer_id; + autofill::FieldRendererId field_id = password_field_data.unique_renderer_id; autofill::PasswordFormGenerationData form_generation_data = { - form_id, field_id, field_id}; + form_id, field_id, + /*confirmation_field=*/autofill::FieldRendererId(0)}; [controller_ formEligibleForGenerationFound:form_generation_data]; FormSuggestion* suggestion = [FormSuggestion @@ -403,6 +449,24 @@ decisionHandler:[OCMArg any]]; EXPECT_CALL(password_manager_, SetGenerationElementAndTypeForForm); + id extract_completion_handler_arg = [OCMArg + checkWithBlock:^(void (^completion_handler)(BOOL, autofill::FormData)) { + completion_handler(/*found=*/YES, form_data); + return YES; + }]; + [[form_helper_ expect] + extractPasswordFormData:form_id + completionHandler:extract_completion_handler_arg]; + + // Verify the parameters that |GeneratePassword| receives. + autofill::FormSignature form_signature = + autofill::CalculateFormSignature(form_data); + autofill::FieldSignature field_signature = + autofill::CalculateFieldSignatureForField(password_field_data); + EXPECT_CALL(*password_manager_driver_->GetPasswordGenerationHelper(), + GeneratePassword(web_state_.GetLastCommittedURL(), form_signature, + field_signature, max_length)); + [controller_ didSelectSuggestion:suggestion form:@"test-form-name" uniqueFormID:form_id @@ -510,6 +574,16 @@ decisionHandler:[OCMArg any]]; EXPECT_CALL(password_manager_, SetGenerationElementAndTypeForForm); + autofill::FormData form_data = test_helpers::MakeSimpleFormData(); + id extract_completion_handler_arg = [OCMArg + checkWithBlock:^(void (^completion_handler)(BOOL, autofill::FormData)) { + completion_handler(/*found=*/YES, form_data); + return YES; + }]; + [[form_helper_ expect] + extractPasswordFormData:params.unique_form_id + completionHandler:extract_completion_handler_arg]; + [controller_ triggerPasswordGeneration]; [delegate_ verify];
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 7d7708e..e94938c 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -742,6 +742,11 @@ Wenn die Richtlinie konfiguriert ist, wird festgelegt, welche Erweiterungen zulässig sind. Der Wert "<ph name="ALL_EXTENSIONS" />" für "<ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />" gibt an, dass alle Erweiterungen gesperrt sind. Nutzer können nur Erweiterungen installieren, die ausdrücklich zugelassen sind. Standardmäßig können alle Erweiterungen installiert werden. Wurden jedoch alle Erweiterungen durch eine Richtlinie auf die Sperrliste gesetzt, kann diese Richtlinie mithilfe der Zulassungsliste außer Kraft gesetzt werden.</translation> <translation id="1781356041596378058">Diese Richtlinie steuert zudem den Zugriff auf Android-Entwickleroptionen. Wenn du diese Richtlinie auf "true" setzt, können Nutzer nicht auf die Entwickleroptionen zugreifen. Wenn du diese Richtlinie auf "false" setzt oder nicht konfigurierst, können Nutzer auf die Entwickleroptionen zugreifen, indem sie siebenmal auf die Build-Nummer in der Android-App "Einstellungen" tippen.</translation> +<translation id="1783412593566930189"> + Wenn die Richtlinie aktiviert (auf „True“ gesetzt) ist, bittet <ph name="PRODUCT_NAME" /> vor der Freigabe von Gerätesignalen auf nicht verwalteten Geräten verwaltete Nutzer um Einwilligung. + + Ist die Richtlinie deaktiviert (auf „False“ gesetzt) oder nicht konfiguriert, darf <ph name="PRODUCT_NAME" /> keine Gerätesignale erfassen. + Beispiele für Gerätesignale sind unter anderem Betriebssysteminformationen, Registry-Daten und ob bestimmte Dateien vorhanden sind.</translation> <translation id="1787790976045065845">Diese Richtlinie ist nur dann wirksam, wenn die Richtlinie „<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" />“ auf „<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />“ oder „<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />“ eingestellt ist und ein Nutzer, der sich mit einer Smartcard authentifiziert hat, diese entfernt. Dann legt diese Richtlinie fest, wie viele Sekunden lang eine Benachrichtigung angezeigt wird, die den Nutzer über bevorstehende Aktionen informiert. Diese Benachrichtigung blockiert den Bildschirm. Die Aktion beginnt erst nach dem Ablauf der Benachrichtigung. Der Nutzer kann die Aktion unterbinden, wenn die Smartcard vor dem Ablauf der Benachrichtigung wieder eingeführt wird. Wenn für diese Richtlinie „0“ konfiguriert ist, wird keine Benachrichtigung angezeigt und die Aktion sofort ausgeführt.</translation> <translation id="1793346220873697538">PIN-Druckmodus standardmäßig deaktivieren</translation> <translation id="1794457906032475749">Wenn die Richtlinie aktiviert ist, ist die Option zum Beibehalten bestehender Browserdaten beim Erstellen eines Unternehmensprofils standardmäßig aktiviert. @@ -1699,11 +1704,6 @@ Wenn diese Richtlinie aktiviert ist, wird die Erweiterung „Insights“ installiert und sie sendet Messwerte. Ist diese Richtlinie nicht konfiguriert oder deaktiviert, wird die Erweiterung „Insights“ nicht installiert und sie sendet keine Messwerte.</translation> -<translation id="2723692978495226412">Wenn diese Richtlinie aktiviert ist, erhält der Nutzer Empfehlungen für Apps, die er schon auf anderen Geräten installiert hat. Sie werden im Launcher nach den lokalen App-Empfehlungen angezeigt, wenn kein Suchtext eingegeben wurde. - - Wenn die Richtlinie deaktiviert oder nicht konfiguriert ist, werden diese Empfehlungen nicht angezeigt. - - Wenn diese Richtlinie konfiguriert ist, kann sie von Nutzern nicht geändert werden.</translation> <translation id="2724313944474873275">Wenn diese Richtlinie aktiviert oder nicht konfiguriert ist, können <ph name="PRODUCT_OS_NAME" />-Geräte mithilfe der Remote-Attestierung (bestätigter Zugriff) von der <ph name="PRODUCT_OS_NAME" />-Zertifizierungsstelle ein Zertifikat erhalten, das die Berechtigung des Geräts für die Wiedergabe geschützter Inhalte nachweist. Bei diesem Vorgang werden Informationen zur Bestätigung der Hardware an die <ph name="PRODUCT_OS_NAME" />-Zertifizierungsstelle gesendet, anhand derer das Gerät eindeutig identifiziert werden kann. Wenn die Richtlinie deaktiviert ist, verwendet das Gerät keine Remote-Attestierung für geschützte Inhalte, sodass darauf möglicherweise keine geschützten Inhalte wiedergegeben werden können.</translation> @@ -5124,6 +5124,7 @@ <translation id="6518102411616460786">Abwarten, bis die Zielversion auf dem Stand des Versionsdowngrades ist</translation> <translation id="6520802717075138474">Suchmaschinen bei erster Ausführung aus Standardbrowser importieren</translation> <translation id="6521971538031711337">Verwaltetem Nutzer nicht erlauben, seinen Gerätehostnamen zu konfigurieren</translation> +<translation id="6523079496775454310">Einwilligung für Gerätesignale für verwaltete Nutzer auf nicht verwalteten Geräten aktivieren</translation> <translation id="652593254122955308">Zeitlimit bis zur Schließung des inaktiven Profils</translation> <translation id="6532026122543921610">Wenn die automatische Zeitzonenerkennung nicht durch die Richtlinie "<ph name="SYSTEM_TIMEZONE_POLICY_NAME" />" deaktiviert ist, wird durch das Konfigurieren der Richtlinie die Methode zur Zeitzonenerkennung festgelegt. Diese kann von Nutzern nicht geändert werden. @@ -5215,6 +5216,7 @@ <translation id="6584541828182430328">Anzeige von Vollbild-Warnung deaktivieren</translation> <translation id="6593350713192882944">„Schnellinfo“ aktivieren</translation> <translation id="6594372503585248865">Benutzeroberflächen im Zusammenhang mit der Verbindung auf dem Remote-Host-Desktop während einer aktiven Verbindung aktivieren</translation> +<translation id="65947892191748867">Einwilligung für Gerätesignale für verwaltete Nutzer auf nicht verwalteten Geräten deaktivieren</translation> <translation id="6596675965208703569">Diese Richtlinie gibt an, wie lange (in Sekunden) ein Übertragungsgerät, das über einen Zugriffscode oder QR-Code ausgewählt wurde, im <ph name="PRODUCT_NAME" />-Menü für Übertragungsgeräte zu sehen ist. Die Lebensdauer eines Eintrags beginnt mit der ersten Eingabe des Zugriffscodes oder dem ersten Scannen des QR-Codes. Während dieses Zeitraums erscheint das Übertragungsgerät im <ph name="PRODUCT_NAME" />-Menü für Übertragungsgeräte. @@ -6455,6 +6457,7 @@ Die empfohlene Vorgehensweise ist, die Bildschirmsperre im Ruhemodus zu aktivieren und <ph name="PRODUCT_OS_NAME" /> anzuweisen, nach der Inaktivitätsverzögerung in den Ruhemodus zu wechseln. Diese Richtlinie sollte nur verwendet werden, wenn die Bildschirmsperre erheblich früher als der Ruhemodus eintreten oder der Ruhemodus bei Inaktivität gar nicht erfolgen soll.</translation> <translation id="7895553628261067384">Remotezugriff</translation> +<translation id="7899952578398457262">Verwaltete Nutzer auf nicht verwalteten Geräten für die Freigabe von Gerätesignalen um Einwilligung bitten</translation> <translation id="7900469325540540107">Beim Erstellen eines Unternehmensprofils Browserdaten standardmäßig beibehalten</translation> <translation id="7902040092815978832">Numerische Tastatur für Passwort anzeigen</translation> <translation id="7904177352786629708">Wenn die Richtlinie aktiviert ist, wird die CNAME-Suche übersprungen. Der Servername wird so wie eingegeben verwendet, wenn der Kerberos-SPN generiert wird.
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index ab1379fb..75a096e 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -749,6 +749,11 @@ Si estableces la política, se especificarán las extensiones que se exceptúan de la lista de extensiones prohibidas. Si quieres prohibir todas las extensiones, usa el valor <ph name="ALL_EXTENSIONS" /> en <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />. Así, los usuarios solo podrán instalar las extensiones permitidas explícitamente. De forma predeterminada, se permiten todas las extensiones. Sin embargo, si prohibiste extensiones mediante una política, usa la lista de extensiones permitidas para cambiar esa política.</translation> <translation id="1781356041596378058">Esta política también controla el acceso a las Opciones para programador de Android. Si habilitas esta política, los usuarios no podrán acceder a las Opciones para programador. Si estableces esta política como falsa o no la estableces, los usuarios podrán acceder a las Opciones para programador al presionar siete veces el número de compilación en la app de Configuración de Android.</translation> +<translation id="1783412593566930189"> + Si habilitas la política (True), permitirás que <ph name="PRODUCT_NAME" /> solicite el consentimiento de los usuarios administrados antes de compartir las señales de los dispositivos no administrados a fin de obtener acceso. + + Si inhabilitas la política (False) o no la estableces, <ph name="PRODUCT_NAME" /> no podrá recopilar señales de dispositivos. + La información del SO, el registro y la presencia de archivos son algunos ejemplos de señales de dispositivos.</translation> <translation id="1787790976045065845">Esta política solo tiene efecto cuando se establece la política <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> como <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> o <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />, y un usuario que se autentica mediante una tarjeta inteligente quita esa tarjeta. Luego, esta política especifica el tiempo (expresado en segundos) durante el cual se muestra una notificación con la que se informa al usuario sobre la acción inminente. Esta notificación bloquea la pantalla. La acción ocurrirá solo cuando caduque esta notificación. El usuario puede impedir que ocurra la acción reinsertando la tarjeta inteligente antes de que caduque la notificación. Si estableces esta política en cero, no se mostrará ninguna notificación y la acción ocurrirá de forma inmediata.</translation> <translation id="1793346220873697538">Desactiva la impresión con PIN de forma predeterminada</translation> <translation id="1794457906032475749">Si habilitas esta política, la opción para conservar los datos de navegación existentes cuando se cree un perfil empresarial estará marcada de forma predeterminada. @@ -1720,11 +1725,6 @@ Si habilitas la política, se instalará la extensión de estadísticas y se informarán las métricas. Si la inhabilitas o no la estableces, la extensión de estadísticas no se instalará y no informarán las métricas.</translation> -<translation id="2723692978495226412">Si habilitas esta política, se mostrarán recomendaciones de apps que el usuario haya instalado anteriormente en otros dispositivos. Se mostrarán estas recomendaciones en el Selector después de las recomendaciones locales de apps (en caso de que no se haya ingresado texto de búsqueda). - - Si inhabilitas esta política o no la estableces, no se mostrarán estas recomendaciones. - - Si la estableces, los usuarios no podrán cambiarla.</translation> <translation id="2724313944474873275">Si habilitas la política o no la estableces, los dispositivos con <ph name="PRODUCT_OS_NAME" /> podrán usar la certificación remota (Acceso verificado) para obtener un certificado emitido por la CA de <ph name="PRODUCT_OS_NAME" /> que confirme que el dispositivo es apto para reproducir contenido protegido. Este proceso implica el envío de información de aprobación del hardware a la CA de <ph name="PRODUCT_OS_NAME" /> que identifique al dispositivo de forma única. Si inhabilitas la política, el dispositivo no utilizará la certificación remota para la protección del contenido. Es posible que el dispositivo no pueda reproducir contenido protegido.</translation> @@ -5202,6 +5202,7 @@ <translation id="6518102411616460786">Espera a que el canal objetivo complete el cambio a la versión inferior del canal</translation> <translation id="6520802717075138474">Importar los motores de búsqueda desde el navegador predeterminado en la primera ejecución</translation> <translation id="6521971538031711337">Impedir que el usuario administrado configure el nombre de host del dispositivo</translation> +<translation id="6523079496775454310">Habilitar el consentimiento de la señal del dispositivo para usuarios administrados en dispositivos no administrados</translation> <translation id="652593254122955308">Tiempo de espera para cerrar el perfil inactivo</translation> <translation id="6532026122543921610">Si estableces la política, se definirá el método de detección automática de la zona horaria, a menos que la política <ph name="SYSTEM_TIMEZONE_POLICY_NAME" /> desactive esta opción. Los usuarios no podrán cambiar esta configuración. @@ -5293,6 +5294,7 @@ <translation id="6584541828182430328">Inhabilita la alerta de pantalla completa</translation> <translation id="6593350713192882944">Habilitar Respuestas rápidas</translation> <translation id="6594372503585248865">Habilitar la IU relacionada con la conexión en el escritorio del host remoto cuando una conexión está activa</translation> +<translation id="65947892191748867">Inhabilitar el consentimiento de la señal del dispositivo para usuarios administrados en dispositivos no administrados</translation> <translation id="6596675965208703569">Esta política especifica cuánto tiempo (en segundos) se puede ver un dispositivo de transmisión seleccionado anteriormente con un código QR o de acceso entre los dispositivos de transmisión en el menú de <ph name="PRODUCT_NAME" />. La vigencia de una entrada comienza en el momento en el que se ingresa el código de acceso o se escanea el código QR. Durante este período, el dispositivo de transmisión aparecerá en la lista de dispositivos de transmisión del menú de <ph name="PRODUCT_NAME" />. @@ -6535,6 +6537,7 @@ Recomendación: Para bloquear la pantalla cuando está inactiva, activa el bloqueo de pantalla en el modo de suspensión y que se suspenda <ph name="PRODUCT_OS_NAME" /> después del tiempo de espera de inactividad. Esta política solo debe usarse si el bloqueo de pantalla ocurre mucho antes que la suspensión o si no se desea la suspensión por inactividad.</translation> <translation id="7895553628261067384">Acceso remoto</translation> +<translation id="7899952578398457262">Solicitar el consentimiento de los usuarios administrados para compartir señales de dispositivos no administrados a fin de obtener acceso</translation> <translation id="7900469325540540107">Conservar los datos de navegación de forma predeterminada cuando se cree un perfil empresarial</translation> <translation id="7902040092815978832">Muestra el teclado numérico para la contraseña</translation> <translation id="7904177352786629708">Si habilitas la política, se omitirá la búsqueda de CNAME. Se usará el nombre del servidor tal como se haya introducido al generar el SPN de Kerberos.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index dbd2927..2a06a31 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -1730,11 +1730,6 @@ Si la política se habilita, la extensión de estadísticas se instalará e informará sobre las métricas. Si la política no se establece o se inhabilita, la extensión de estadísticas no se instalará ni informará sobre las métricas.</translation> -<translation id="2723692978495226412">Si se habilita esta política, se mostrarán recomendaciones de aplicaciones instaladas anteriormente por el usuario en otros dispositivos. Si no se ha introducido ningún texto de búsqueda, estas recomendaciones se mostrarán en el menú de aplicaciones después de las recomendaciones de aplicaciones locales. - - Si se inhabilita esta política o no se le asigna ningún valor, no se mostrarán estas recomendaciones. - - Si se asigna un valor a esta política, los usuarios no podrán cambiarlo.</translation> <translation id="2724313944474873275">Si se habilita esta política o no se le asigna ningún valor, los dispositivos <ph name="PRODUCT_OS_NAME" /> contarán con atestación remota (acceso verificado) para obtener un certificado emitido por la entidad emisora de certificados de <ph name="PRODUCT_OS_NAME" /> que confirme que el dispositivo cumple los requisitos para reproducir contenido protegido. Este proceso implica enviar información de aprobación del hardware a la entidad emisora de certificados de <ph name="PRODUCT_OS_NAME" /> que identifica de forma única al dispositivo. Si se inhabilita esta política, el dispositivo no usará la atestación remota para la protección del contenido y es posible que el dispositivo no pueda reproducir contenido protegido.</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 0e02033..701e646 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -1367,6 +1367,7 @@ <translation id="2341509917222115272">Si cette règle est activée ou qu'elle n'est pas configurée, les utilisateurs peuvent choisir d'associer les clients et les hôtes au moment de la connexion, ce qui évite d'avoir à saisir systématiquement un code. Si cette règle est désactivée, cette fonctionnalité n'est pas disponible.</translation> +<translation id="2342066287156668839">Activer le quota persistant.</translation> <translation id="2345547870894930157">Activer DNS-over-HTTPS sans solution de secours à risque</translation> <translation id="2349117476121456297">Si vous définissez cette règle sur "True", les touches de la première rangée du clavier deviennent des touches de fonction. Le comportement d'origine des touches multimédias est rétabli en appuyant sur la touche de recherche. @@ -1723,11 +1724,6 @@ Si la règle est activée, l'extension des insights sera installée et transmettra des métriques. Si la règle est désactivée ou non définie, l'extension des insights ne sera pas installée et ne transmettra pas de métriques.</translation> -<translation id="2723692978495226412">Si cette règle est activée, les applications précédemment installées par l'utilisateur sur d'autres appareils sont recommandées. Si aucun texte de recherche n'a été saisi, ces recommandations sont affichées dans le lanceur d'applications après les recommandations d'applications locales. - - Si cette règle est désactivée ou qu'elle n'est pas configurée, ces recommandations ne sont pas affichées. - - Si cette règle n'est pas configurée, les utilisateurs ne peuvent pas la modifier.</translation> <translation id="2724313944474873275">Si vous activez cette règle, ou si vous ne la configurez pas, les appareils <ph name="PRODUCT_OS_NAME" /> utilisent l'attestation à distance (accès validé) pour obtenir un certificat délivré par l'autorité de certification de <ph name="PRODUCT_OS_NAME" />, qui atteste que vous pouvez lire du contenu protégé sur cet appareil. Ce processus implique l'envoi d'informations relatives au matériel à l'autorité de certification de <ph name="PRODUCT_OS_NAME" /> permettant d'identifier l'appareil de façon unique. Si vous désactivez cette règle, l'appareil ne peut pas utiliser l'attestation à distance pour la protection du contenu, et pourrait ne pas pouvoir lire de contenu protégé.</translation> @@ -2694,6 +2690,7 @@ Si cette règle est désactivée ou qu'elle n'est pas configurée, <ph name="PRODUCT_OS_NAME" /> laisse l'utilisateur éteindre l'appareil.</translation> <translation id="3763515772647897871">Jour de la semaine (interprété dans le fuseau horaire local de l'appareil) où doit être lancée une recherche de mises à jour. Utilisé uniquement quand "frequency" est défini sur "WEEKLY".</translation> +<translation id="376375951585423504">Désactiver le quota persistant.</translation> <translation id="3765260570442823273">Durée du message d'avertissement avant la déconnexion pour cause d'inactivité</translation> <translation id="3770407495263198786">Cette règle permet aux administrateurs de configurer une liste d'imprimantes pour leurs utilisateurs. La sélection de l'imprimante est effectuée la première fois que l'utilisateur lance une impression. @@ -5544,6 +5541,10 @@ Remarque : bloquer des URL internes chrome://* et chrome-untrusted://* peut entraîner des erreurs inattendues ou être contourné dans certains cas particuliers. Au lieu de bloquer certaines URL internes, vérifiez si des règles plus spécifiques sont disponibles. Cas courants : au lieu de bloquer chrome://settings/certificates, utilisez <ph name="CA_CERTIFICATE_MANAGEMENT_ALLOWED_POLICY_NAME" />. Au lieu de bloquer chrome-untrusted://crosh, utilisez <ph name="SYSTEM_FEATURES_DISABLE_LIST_POLICY_NAME" />.</translation> <translation id="6894178810167845842">URL de la page "Nouvel onglet"</translation> <translation id="6897730193187922386">Supprimer les messages d'abandon de <ph name="CLOUD_PRINT_NAME" /></translation> +<translation id="6899495066226330266">À partir de M106, le quota persistant ne sera plus accepté. Cette règle réactivera la fonctionnalité de quota persistant jusqu'à M107. + Si cette règle est configurée sur activée, webkitRequestFileSystem de type persistant fonctionnera avec un quota persistant. + Si cette règle n'est pas configurée ou qu'elle est désactivée, webkitRequestFileSystem de type persistant fonctionnera avec un quota temporaire. + </translation> <translation id="6899705656741990703">Détecter automatiquement les paramètres de proxy</translation> <translation id="6902561336084511004">Fournit les configurations des serveurs d'impression disponibles. @@ -6804,6 +6805,7 @@ <translation id="8229912067600517877">Activer les Outils pour les développeurs</translation> <translation id="8238421250255592181">Indicateur booléen spécifiant si la saisie semi-automatique est disponible ou non avec le clavier à l'écran.</translation> <translation id="8239109177194627162">Désactiver la saisie automatique pour les cartes de crédit</translation> +<translation id="8239143983379015783">Forcer l'activation du quota persistant</translation> <translation id="8244171102276095471">Activer des suites de chiffrement RC4 dans TLS</translation> <translation id="8244525275280476362">Délai maximal de récupération après le rejet d'une règle</translation> <translation id="8245574649143980200">Si cette règle est activée ou qu'elle n'est pas configurée, les utilisateurs peuvent voir et utiliser la recherche par zone <ph name="GOOGLE_LENS_PRODUCT_NAME" /> via le menu contextuel. Si cette règle est désactivée, les utilisateurs ne peuvent pas voir la recherche par zone <ph name="GOOGLE_LENS_PRODUCT_NAME" /> dans le menu contextuel lorsque la recherche par zone <ph name="GOOGLE_LENS_PRODUCT_NAME" /> est disponible.</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index ec6feaa..f096e2d 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -1374,6 +1374,7 @@ <translation id="2341509917222115272">Jika kebijakan disetel ke Aktif atau tidak disetel, pengguna akan dapat menyambungkan klien dan host pada waktu koneksi, tanpa perlu memasukkan PIN setiap waktu. Jika kebijakan disetel ke Nonaktif, fitur ini tidak akan tersedia.</translation> +<translation id="2342066287156668839">Aktifkan kuota persisten.</translation> <translation id="2345547870894930157">Aktifkan DNS-over-HTTPS tanpa fallback yang tidak aman</translation> <translation id="2349117476121456297">Jika kebijakan ditetapkan ke Benar (True), tombol baris teratas pada keyboard akan bertindak sebagai perintah tombol fungsi. Jika menekan tombol Penelusuran, perilaku tombol tersebut akan kembali menjadi tombol media. @@ -1730,11 +1731,6 @@ Jika kebijakan ini disetel ke aktif, ekstensi insight akan diinstal dan melaporkan metrik. Jika kebijakan ini tidak disetel atau disetel ke nonaktif, ekstensi insight tidak akan diinstal dan tidak akan melaporkan metrik.</translation> -<translation id="2723692978495226412">Jika kebijakan ini disetel ke Aktif, rekomendasi untuk aplikasi yang sebelumnya diinstal oleh pengguna pada perangkat lain akan ditampilkan. Jika tidak ada penelusuran teks yang dimasukkan, rekomendasi ini akan muncul di peluncur setelah rekomendasi aplikasi lokal. - - Jika kebijakan ini disetel ke Nonaktif atau tidak disetel, rekomendasi ini tidak akan muncul. - - Jika kebijakan ini disetel, pengguna tidak dapat mengubahnya.</translation> <translation id="2724313944474873275">Jika kebijakan disetel ke Aktif atau tidak disetel, perangkat <ph name="PRODUCT_OS_NAME" /> dapat menggunakan pengesahan jarak jauh (Akses Terverifikasi) untuk mendapatkan sertifikat yang diterbitkan oleh CA <ph name="PRODUCT_OS_NAME" /> yang mengesahkan bahwa perangkat bersifat valid untuk memutar konten yang dilindungi. Proses ini melibatkan pengiriman informasi endorsement hardware ke CA <ph name="PRODUCT_OS_NAME" /> yang mengidentifikasi perangkat secara unik. Jika kebijakan disetel ke Nonaktif, perangkat tidak akan menggunakan pengesahan jarak jauh untuk perlindungan konten dan perangkat tidak boleh memutar konten yang dilindungi.</translation> @@ -2706,6 +2702,7 @@ Jika kebijakan disetel ke Nonaktif atau tidak disetel, <ph name="PRODUCT_OS_NAME" /> memungkinkan pengguna mematikan perangkat.</translation> <translation id="3763515772647897871">Hari dalam seminggu saat pemeriksaan update harus dilakukan, disesuaikan dengan zona waktu lokal perangkat. Hanya digunakan saat 'frequency'-nya 'WEEKLY'.</translation> +<translation id="376375951585423504">Nonaktifkan kuota persisten.</translation> <translation id="3765260570442823273">Durasi pesan peringatan proses keluar nganggur</translation> <translation id="3770407495263198786">Jike kebijakan disetel, administrator dapat menyiapkan daftar printer bagi pengguna mereka. Pemilihan printer dilakukan pada saat pengguna mencoba mencetak untuk pertama kalinya. @@ -5600,6 +5597,10 @@ Catatan: Jika diblokir, URL chrome://* dan chrome-untrusted://* internal dapat menyebabkan error yang tidak terduga atau mungkin akan dilewati dalam kasus tertentu. Daripada memblokir URL internal tertentu, sebaiknya periksa apakah tersedia kebijakan yang lebih spesifik. Kasus umum: Daripada memblokir chrome://settings/certificates, sebaiknya gunakan <ph name="CA_CERTIFICATE_MANAGEMENT_ALLOWED_POLICY_NAME" />. Daripada memblokir chrome-untrusted://crosh, sebaiknya gunakan <ph name="SYSTEM_FEATURES_DISABLE_LIST_POLICY_NAME" />.</translation> <translation id="6894178810167845842">URL halaman Tab Baru</translation> <translation id="6897730193187922386">Sembunyikan pesan penghentian <ph name="CLOUD_PRINT_NAME" /></translation> +<translation id="6899495066226330266">Mulai M106, kuota persisten tidak akan didukung lagi. Kebijakan ini akan mengaktifkan kembali fungsi kuota persisten hingga M107. + Jika kebijakan ini disetel ke aktif, webkitRequestFileSystem dengan jenis persisten akan beroperasi dengan kuota persisten. + Jika kebijakan ini tidak disetel atau disetel ke nonaktif, webkitRequestFileSystem dengan jenis persisten akan beroperasi dengan kuota sementara. + </translation> <translation id="6899705656741990703">Mendeteksi setelan proxy secara otomatis</translation> <translation id="6902561336084511004">Memberikan konfigurasi server cetak yang tersedia. @@ -6852,6 +6853,7 @@ <translation id="8229912067600517877">Aktifkan Developer Tools</translation> <translation id="8238421250255592181">Tanda boolean menunjukkan apakah keyboard virtual dapat memberikan pelengkapan otomatis.</translation> <translation id="8239109177194627162">Nonaktifkan Isi Otomatis untuk kartu kredit</translation> +<translation id="8239143983379015783">Memaksa pengaktifan kuota persisten</translation> <translation id="8244171102276095471">Mengaktifkan paket penyandian RC4 di TLS</translation> <translation id="8244525275280476362">Penundaan mengambil maksimum setelah kebijakan invalidasi</translation> <translation id="8245574649143980200">Jika kebijakan tidak disetel atau disetel ke Aktif, pengguna akan diizinkan melihat dan menggunakan item menu penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" /> di menu konteks. Jika kebijakan disetel ke Nonaktif, pengguna tidak akan dapat melihat item menu penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" /> di menu konteks saat penelusuran region <ph name="GOOGLE_LENS_PRODUCT_NAME" /> didukung.</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 341acb2..424e3f4 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -1726,11 +1726,6 @@ Se il criterio viene impostato su Enabled, l'estensione Insights verrà installata e segnalerà le metriche. Se non viene configurato o se viene impostato su Disabled, l'estensione Insights non verrà installata e non segnalerà le metriche.</translation> -<translation id="2723692978495226412">Se il criterio viene impostato su Attivato, vengono visualizzati dei consigli per le app precedentemente installate dall'utente su altri dispositivi. Questi consigli vengono visualizzati in Avvio app in seguito ai consigli sulle app locali, se non viene inserito alcun testo di ricerca. - - Se il criterio viene impostato su Disattivato o se non viene configurato, questi consigli non vengono visualizzati. - - Se viene configurato, gli utenti non possono modificarlo.</translation> <translation id="2724313944474873275">Se il criterio viene impostato su Attivato o se non viene configurato, i dispositivi <ph name="PRODUCT_OS_NAME" /> possono utilizzare l'attestazione da remoto (Accesso verificato) per ricevere un certificato emesso dall'autorità di certificazione di <ph name="PRODUCT_OS_NAME" /> in cui si afferma che il dispositivo è idoneo alla riproduzione di contenuti protetti. Questo processo comporta l'invio all'autorità di certificazione di <ph name="PRODUCT_OS_NAME" /> di informazioni di approvazione dell'hardware che identificano in modo univoco il dispositivo. Se il criterio viene impostato su Disattivato, il dispositivo non utilizza l'attestazione da remoto per la protezione dei contenuti e non può riprodurre contenuti protetti.</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index f1441f03..5365c41 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -1270,6 +1270,7 @@ <translation id="2341509917222115272">このポリシーを有効に設定するか未設定のままにした場合、ユーザーは接続時にクライアントとホストをペア設定できます。これにより、毎回 PIN を入力する手間が省けます。 このポリシーを無効に設定した場合、この機能は使用できません。</translation> +<translation id="2342066287156668839">永続的な割り当てを有効にする。</translation> <translation id="2345547870894930157">DNS-over-HTTPS を有効にする(安全でないフォールバックなし)</translation> <translation id="2349117476121456297">このポリシーを True に設定した場合、キーボードの最上段のキーがファンクション キーのコマンドとして機能します。検索キーを押すと、メディアキーの動作に戻ります。 @@ -1600,11 +1601,6 @@ このポリシーを有効に設定した場合は、分析情報の拡張機能がインストールされ、指標が報告されます。 このポリシーを未設定のままにするか無効に設定した場合は、分析情報の拡張機能はインストールされず、指標も報告されません。</translation> -<translation id="2723692978495226412">このポリシーを有効に設定した場合、ユーザーが他のデバイスで以前インストールしたアプリのおすすめが表示されます。このおすすめは、検索テキストが入力されていない場合に、ランチャー内のローカルアプリのおすすめの後に表示されます。 - - このポリシーを無効に設定するか未設定のままにした場合、このおすすめは表示されません。 - - このポリシーを設定した場合、ユーザーはこれを変更できません。</translation> <translation id="2724313944474873275">このポリシーを有効に設定するか未設定のままにした場合、<ph name="PRODUCT_OS_NAME" /> デバイスでリモート認証(確認済みアクセス)を使用して、<ph name="PRODUCT_OS_NAME" /> の CA で発行された証明書を取得し、デバイスで保護されたコンテンツが再生可能であることを証明できます。これには、デバイスを特定するハードウェア署名情報を <ph name="PRODUCT_OS_NAME" /> の CA に送信する処理も含まれます。 このポリシーを無効に設定した場合、デバイスでコンテンツ保護のリモート認証を使用できず、保護されたコンテンツを再生できません。</translation> @@ -2551,6 +2547,7 @@ このポリシーを無効に設定するか未設定のままにした場合、<ph name="PRODUCT_OS_NAME" /> ではユーザーがそのままデバイスを終了できます。</translation> <translation id="3763515772647897871">アップデートを確認する曜日(デバイスのローカル タイムゾーン)です。frequency が「WEEKLY」に指定されている場合にのみ使用されます。</translation> +<translation id="376375951585423504">永続的な割り当てを無効にする。</translation> <translation id="3765260570442823273">アイドル時のログアウト警告メッセージの表示期間</translation> <translation id="3770407495263198786">このポリシーを設定した場合、管理者はユーザー用のプリンタのリストを設定できます。プリンタの選択は、ユーザーが初めて印刷しようとしたときに行われます。 @@ -5248,6 +5245,10 @@ 注: 「chrome://*」と「chrome-untrusted://*」の内部 URL をブロックすると、予期しないエラーが発生したり、特殊なケースでは回避されたりする可能性があります。内部 URL をブロックする代わりに、使用できる具体的なポリシーがないか確認してください。一般的なケース:「chrome://settings/certificates」をブロックする代わりに <ph name="CA_CERTIFICATE_MANAGEMENT_ALLOWED_POLICY_NAME" /> を使用します。「chrome-untrusted://crosh」をブロックする代わりに <ph name="SYSTEM_FEATURES_DISABLE_LIST_POLICY_NAME" /> を使用します。</translation> <translation id="6894178810167845842">新しいタブページ URL</translation> <translation id="6897730193187922386"><ph name="CLOUD_PRINT_NAME" /> のサポート終了メッセージの表示を管理する</translation> +<translation id="6899495066226330266">M106 の永続的な割り当ての開始はサポートされなくなります。このポリシーにより、M107 まで永続的な割り当ての機能が再有効化されます。 + このポリシーを有効にした場合、永続タイプの webkitRequestFileSystem は永続的な割り当てで動作します。 + このポリシーを未設定または無効にした場合、永続タイプの webkitRequestFileSystem は一時的な割り当てで動作します。 + </translation> <translation id="6899705656741990703">プロキシ設定を自動検出する</translation> <translation id="6902561336084511004">使用できるプリント サーバーの設定を指定します。 @@ -6430,6 +6431,7 @@ <translation id="8229912067600517877">デベロッパー ツールを有効にする</translation> <translation id="8238421250255592181">画面キーボードでオートコンプリートを有効にするかどうかを示すブール値のフラグです。</translation> <translation id="8239109177194627162">クレジット カードの自動入力を無効にする</translation> +<translation id="8239143983379015783">永続的な割り当てを強制的に有効にする</translation> <translation id="8244171102276095471">TLS の RC4 暗号スイートを有効にする</translation> <translation id="8244525275280476362">ポリシーの失効から取得までの最大時間</translation> <translation id="8245574649143980200">このポリシーを未設定のままにするか有効に設定した場合、コンテキスト メニューに <ph name="GOOGLE_LENS_PRODUCT_NAME" /> の地域検索メニュー項目が表示され、ユーザーはこれを使用することができます。このポリシーを無効に設定した場合は、<ph name="GOOGLE_LENS_PRODUCT_NAME" /> の地域検索がサポートされていても、コンテキスト メニューに <ph name="GOOGLE_LENS_PRODUCT_NAME" /> の地域検索メニュー項目は表示されません。</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 5193050..f3e3ea9d 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -1372,6 +1372,7 @@ <translation id="2341509917222115272">정책을 사용 설정하거나 설정하지 않으면 사용자가 매번 PIN을 입력하지 않아도 되도록 연결 시간에 클라이언트와 호스트를 페어링할 수 있습니다. 정책을 사용 중지하면 이 기능을 사용할 수 없습니다.</translation> +<translation id="2342066287156668839">영구 할당량을 사용 설정합니다.</translation> <translation id="2345547870894930157">안전하지 않은 대체 없이 DNS-over-HTTPS 사용</translation> <translation id="2349117476121456297">이 정책을 True로 설정하면 맨 윗줄에 있는 키의 동작을 기능 키 명령어로 변경합니다 검색 키를 누르면 다시 미디어 키 동작으로 돌아옵니다. @@ -1728,11 +1729,6 @@ 정책을 사용으로 설정하면 통계 확장 프로그램이 설치되어 측정항목을 보고합니다. 정책을 설정하지 않거나 사용 안함으로 설정하면 통계 확장 프로그램이 설치되지 않고 측정항목이 보고되지 않습니다.</translation> -<translation id="2723692978495226412">이 정책을 사용 설정하면 다른 기기에서 사용자가 이전에 설치한 앱에 관한 추천이 표시됩니다. 이러한 추천은 검색어를 입력하지 않을 경우 런처에 로컬 앱 추천 아래에 표시됩니다. - - 이 정책을 사용 중지하거나 설정하지 않으면 이러한 추천이 표시되지 않습니다. - - 이 정책이 설정된 경우 사용자가 변경할 수 없습니다.</translation> <translation id="2724313944474873275">정책을 사용 설정하거나 설정하지 않으면 <ph name="PRODUCT_OS_NAME" /> 기기에서 원격 증명(인증 액세스)으로 기기에서 보호된 콘텐츠를 재생할 수 있음을 인증하기 위해 <ph name="PRODUCT_OS_NAME" /> CA에서 발급한 인증서를 가져옵니다. 여기에는 기기를 고유하게 식별하는 <ph name="PRODUCT_OS_NAME" /> CA로 하드웨어 보증 정보를 전송하는 과정이 포함됩니다. 정책을 사용 중지하면 기기는 콘텐츠 보호에 원격 증명을 사용하지 않고 기기에서 보호된 콘텐츠를 재생할 수 없게 됩니다.</translation> @@ -2702,6 +2698,7 @@ 정책을 사용 중지하거나 설정하지 않으면 <ph name="PRODUCT_OS_NAME" />에서 사용자가 기기를 종료하도록 허용합니다.</translation> <translation id="3763515772647897871">업데이트 확인이 이루어져야 하는 요일로, 기기의 현지 시간대로 변환됩니다. 'frequency'가 'WEEKLY'인 경우에만 사용됩니다.</translation> +<translation id="376375951585423504">영구 할당량을 사용 중지합니다.</translation> <translation id="3765260570442823273">유휴 로그아웃 경고 메시지 표시 시간</translation> <translation id="3770407495263198786">정책을 설정하면 관리자가 사용자의 프린터 목록을 설정할 수 있습니다. 사용자가 처음 인쇄를 시도할 때 프린터를 선택하게 됩니다. @@ -5579,6 +5576,10 @@ 참고: 내부 chrome://* 및 chrome-untrusted://* URL을 차단하면 예기치 않은 오류가 발생하거나 특수한 경우에 우회될 수 있습니다. 특정 내부 URL을 차단하는 대신 사용 가능한 구체적인 정책이 있는지 확인하세요. 일반적인 경우: chrome://settings/certificates를 차단하는 대신 <ph name="CA_CERTIFICATE_MANAGEMENT_ALLOWED_POLICY_NAME" /> 정책을 사용하세요. chrome-untrusted://crosh를 차단하는 대신 <ph name="SYSTEM_FEATURES_DISABLE_LIST_POLICY_NAME" /> 정책을 사용합니다.</translation> <translation id="6894178810167845842">새 탭 페이지 URL</translation> <translation id="6897730193187922386"><ph name="CLOUD_PRINT_NAME" /> 지원 중단 메시지 숨기기</translation> +<translation id="6899495066226330266">M106 영구 할당량은 더 이상 지원되지 않습니다. 이 정책은 M107까지 영구 할당량 기능을 다시 사용 설정합니다. + 정책을 사용으로 설정하면 영구 유형이 있는 KitKatRequestFileSystem은 영구 할당량으로 작동합니다. + 정책을 설정하지 않거나 사용 중지하면 영구 유형이 있는 KitKatRequestFileSystem은 임시 할당량으로 작동합니다. + </translation> <translation id="6899705656741990703">프록시 설정 자동 감지</translation> <translation id="6902561336084511004">사용 가능한 인쇄 서버 구성을 제공합니다. @@ -6839,6 +6840,7 @@ <translation id="8229912067600517877">개발자 도구 사용</translation> <translation id="8238421250255592181">터치 키보드가 자동 완성을 지원할 수 있는지 나타내는 부울 플래그입니다.</translation> <translation id="8239109177194627162">신용카드 입력 시 자동 완성 사용 안함</translation> +<translation id="8239143983379015783">영구 할당량을 강제 적용합니다.</translation> <translation id="8244171102276095471">TLS에서 RC4 암호화 기술을 사용 설정합니다.</translation> <translation id="8244525275280476362">정책 무효화 후 최대 가져오기 지연</translation> <translation id="8245574649143980200">정책을 설정하지 않거나 사용 설정하면 사용자가 컨텍스트 메뉴에서 <ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색을 보고 사용할 수 있습니다. 사용 중지하면 <ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색이 지원되는 경우에도 컨텍스트 메뉴에 <ph name="GOOGLE_LENS_PRODUCT_NAME" /> 영역 검색 메뉴 항목이 표시되지 않습니다.</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 1a95fd4..ee292581 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -1689,11 +1689,6 @@ Als het beleid aanstaat, wordt de extensie voor inzichten geïnstalleerd en rapporteert deze statistieken. Als het beleid niet is ingesteld of uitstaat, wordt de extensie voor inzichten niet geïnstalleerd en rapporteert deze geen statistieken.</translation> -<translation id="2723692978495226412">Als je dit beleid toepast, worden aanbevelingen gedaan voor apps die de gebruiker eerder heeft geïnstalleerd op andere apparaten. Deze aanbevelingen worden in de Launcher getoond na de aanbevelingen voor lokale apps als er geen zoektekst is ingevoerd. - - Als je het beleid niet toepast of niet instelt, worden deze aanbevelingen niet getoond. - - Als dit beleid is ingesteld, kunnen gebruikers het niet wijzigen.</translation> <translation id="2724313944474873275">Als je het beleid toepast of niet instelt, kunnen <ph name="PRODUCT_OS_NAME" />-apparaten externe attesten (Geverifieerde toegang) gebruiken om een certificaat door <ph name="PRODUCT_OS_NAME" /> te laten uitgeven. Hiermee wordt bevestigd dat het apparaat geschikt is om beschermde content af te spelen. Met dit proces wordt de informatie over hardwaregoedkeuring naar de <ph name="PRODUCT_OS_NAME" />-certificeringsinstantie gestuurd die het apparaat uniek identificeert. Als je dit beleid niet toepast, gebruikt het apparaat geen externe bevestiging voor contentbescherming en kan het apparaat geen beschermde content afspelen.</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index c8f7f01d..27cf826 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -1724,11 +1724,6 @@ Se a política for ativada, a extensão de insights será instalada e vai relatar métricas. Se ela for desativada ou deixada sem definição, a extensão de insights não será instalada e não vai relatar métricas.</translation> -<translation id="2723692978495226412">Se a política for definida como "Ativada", haverá recomendações para apps instalados anteriormente pelo usuário ou em outros dispositivos. Se nenhum texto de pesquisa tiver sido inserido, essas recomendações aparecerão no acesso rápido depois das recomendações de apps locais. - - Se a política for definida como "Desativada" ou não for definida, essas recomendações não serão exibidas. - - Se a política for definida, os usuários não poderão mudá-la.</translation> <translation id="2724313944474873275">Se a política for definida como "Ativada" ou deixada sem definição, dispositivos <ph name="PRODUCT_OS_NAME" /> poderão usar atestados remotos (acesso verificado) para receber um certificado emitido pela CA do <ph name="PRODUCT_OS_NAME" />, que declara que o dispositivo está qualificado para reproduzir conteúdo protegido. Esse processo envolve o envio de informações de endosso de hardware para a CA do <ph name="PRODUCT_OS_NAME" /> que identificam de forma exclusiva o dispositivo. Se a política for definida como "Desativada", o dispositivo não usará o atestado remoto para proteção de conteúdo e não poderá reproduzir conteúdo protegido.</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 68f9d00..5fcfe56 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -746,6 +746,11 @@ Правило ExtensionInstallWhitelist позволяет указать, какие расширения исключены из списка запрещенных. Используйте для <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> символ <ph name="ALL_EXTENSIONS" />, чтобы запретить установку любых расширений. Пользователи смогут устанавливать только разрешенные расширения. По умолчанию разрешены все расширения. Если вы запретили расширения при помощи правила, используйте список разрешенных расширений, чтобы менять настройки этого правила.</translation> <translation id="1781356041596378058">Это правило также контролирует доступ к режиму разработчика Android. Если установить для правила значение True, пользователи потеряют доступ к режиму разработчика. Если установить для правила значение False или не задать значение, пользователи смогут получить доступ к режиму разработчика, нажав на номер сборки в настройках Android семь раз.</translation> +<translation id="1783412593566930189"> + Если правило включено (установлено значение True), <ph name="PRODUCT_NAME" /> запрашивает у пользователей управляемых профилей согласие на передачу сигналов с устройств без административного контроля для получения доступа. + + Если правило отключено (установлено значение False) или не настроено, <ph name="PRODUCT_NAME" /> не может собирать сигналы с устройств. + Примеры таких сигналов: информация об операционной системе, реестре, наличии файлов и т. д.</translation> <translation id="1787790976045065845">Это правило действует, только если для правила <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> выбран параметр <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> или <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" /> и пользователь, который вошел в систему с помощью смарт-карты, вытащил ее. Правило позволяет указать, сколько секунд будет видно уведомление о скором выполнении определенного действия. Это сообщение заблокирует экран. Действие будет выполнено только после того, как истечет заданное для уведомления время. Если до этого пользователь заново вставит смарт-карту, действие не будет выполнено. Если значение равно нулю, уведомление не появляется и действие выполняется сразу.</translation> <translation id="1793346220873697538">Запретить печать с вводом PIN-кода по умолчанию</translation> <translation id="1794457906032475749">Если правило включено, возможность сохранения существующих данных о работе в браузере при создании корпоративного профиля будет активирована по умолчанию. @@ -1712,11 +1717,6 @@ Если правило включено, расширение статистики устанавливается и отправляет отчеты о показателях. Если правило не настроено или отключено, расширение статистики не устанавливается.</translation> -<translation id="2723692978495226412">Если правило включено, пользователю устройства будут показываться рекомендации для ранее установленных приложений. Эти рекомендации появятся на панели запуска после локальных рекомендаций при условии, что поисковый запрос пуст. - - Если правило отключено или не настроено, рекомендации появляться не будут. - - Если правило настроено, пользователи не смогут изменить его.</translation> <translation id="2724313944474873275">Если правило включено или не настроено, устройства с <ph name="PRODUCT_OS_NAME" /> могут проходить удаленную проверку (подтверждение доступа) для получения сертификата Центра сертификации <ph name="PRODUCT_OS_NAME" />. Этот сертификат подтверждает разрешение воспроизводить защищенный контент на устройстве. В Центр сертификации <ph name="PRODUCT_OS_NAME" /> отправляется информация об аппаратной части устройства, позволяющая определить его уникальный идентификатор. Если правило отключено, устройство не сможет проходить удаленную проверку, а воспроизведение защищенного контента на нем может не поддерживаться.</translation> @@ -5181,6 +5181,7 @@ <translation id="6518102411616460786">Ждать выхода той же стабильной версии</translation> <translation id="6520802717075138474">Импорт сведений о поисковых системах из браузера, используемого по умолчанию, при первом запуске.</translation> <translation id="6521971538031711337">Запретить управляемым пользователям настраивать имя хоста устройства</translation> +<translation id="6523079496775454310">Включить предоставление согласия на передачу сигналов с устройств без административного контроля (для управляемых профилей)</translation> <translation id="652593254122955308">Время ожидания при отсутствии активности, после которого закрывается профиль</translation> <translation id="6532026122543921610">Если автоматическое определение часового пояса не отключено правилом <ph name="SYSTEM_TIMEZONE_POLICY_NAME" />, данное правило позволяет настроить способ такого определения (пользователи не смогут изменить выбранный способ). @@ -5272,6 +5273,7 @@ <translation id="6584541828182430328">Не показывать предупреждение о выходе из полноэкранного режима</translation> <translation id="6593350713192882944">Включить быстрые ответы</translation> <translation id="6594372503585248865">Разрешить показ интерфейса, связанного с подключением, на рабочем столе удаленного хоста, когда подключение установлено</translation> +<translation id="65947892191748867">Отключить предоставление согласия на передачу сигналов с устройств без административного контроля (для управляемых профилей)</translation> <translation id="6596675965208703569">Это правило определяет, сколько секунд устройство для трансляции, выбранное с помощью кода доступа или QR-кода, будет показываться в меню <ph name="PRODUCT_NAME" />. Отсчет начинается с момента ввода или сканирования кода. В течение этого периода устройство для трансляции будет доступно в списке меню <ph name="PRODUCT_NAME" />. @@ -6515,6 +6517,7 @@ Совет. Включите функцию блокировки экрана при переходе в спящий режим и настройте в <ph name="PRODUCT_OS_NAME" /> переход в этот режим по истечении заданного периода бездействия. Используйте это правило, только если блокировка экрана должна включаться намного раньше перехода в спящий режим или если переход в спящий режим при бездействии не требуется вообще.</translation> <translation id="7895553628261067384">Удаленный доступ</translation> +<translation id="7899952578398457262">Запрашивать согласие пользователей управляемых профилей на передачу сигналов с устройств без административного контроля для получения доступа</translation> <translation id="7900469325540540107">По умолчанию сохранять данные о работе в браузере при создании корпоративного профиля</translation> <translation id="7902040092815978832">Показывать цифровую клавиатуру при вводе пароля</translation> <translation id="7904177352786629708">Если правило включено, поиск записи CNAME выполняться не будет. Будет использоваться имя сервера, введенное при создании SPN Kerberos.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 020dd0e..5f40871 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -217,6 +217,27 @@ <translation id="1223789468190631420">สถานะการเปิดใช้ Safe Browsing สำหรับแหล่งที่มาที่เชื่อถือได้</translation> <translation id="123018742985150697">ต้องจับคู่ผู้ใช้ในเครื่องและเจ้าของโฮสต์การเข้าถึงระยะไกล</translation> <translation id="123081309365616809">เปิดใช้การแคสต์เนื้อหาไปยังอุปกรณ์</translation> +<translation id="1233477540349246382"> +การทำงานเริ่มต้น (ไม่ได้ตั้งค่านโยบาย) +เมื่อมีการเพิ่มบัญชีในพื้นที่สำหรับเนื้อหา กล่องโต้ตอบขนาดเล็กจะปรากฏขึ้นเพื่อขอให้ผู้ใช้สร้างโปรไฟล์ใหม่ กล่องโต้ตอบนี้เป็นแบบปิดได้ + +<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> +หากผู้ใช้ลงชื่อเข้าใช้บริการของ Google เป็นครั้งแรกในเบราว์เซอร์ <ph name="PRODUCT_NAME" /> กล่องโต้ตอบจะปรากฏขึ้นเพื่อขอให้ผู้ใช้สร้างโปรไฟล์ใหม่สำหรับบัญชีองค์กร โดยผู้ใช้อาจคลิกยกเลิกและออกจากระบบ หรือดำเนินการต่อเพื่อสร้างโปรไฟล์ใหม่ ระบบจะไม่เพิ่มข้อมูลการท่องเว็บที่มีอยู่ไปยังโปรไฟล์ใหม่ โปรไฟล์ที่สร้างใหม่มีบัญชีรองได้ เช่น ผู้ใช้สามารถลงชื่อเข้าใช้บัญชีอื่นในพื้นที่สำหรับเนื้อหา + +<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT" /> +นี่เป็นลักษณะการทำงานเดียวกันกับ <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> เพียงแต่ว่าโปรไฟล์ที่สร้างใหม่จะไม่ได้รับอนุญาตให้มีบัญชีรอง + +<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" /> +นี่เป็นลักษณะการทำงานเดียวกันกับ <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> เพียงแต่ว่าจะมีการเพิ่มช่องทำเครื่องหมายในกล่องโต้ตอบเพื่อให้ผู้ใช้เก็บข้อมูลการท่องเว็บในเครื่องไว้ได้ +หากผู้ใช้เลือกช่องนี้ ข้อมูลโปรไฟล์ที่มีอยู่ก็จะเชื่อมโยงกับบัญชีที่จัดการ +- ข้อมูลการท่องเว็บทั้งหมดที่มีอยู่จะปรากฏในโปรไฟล์ใหม่ +- ข้อมูลนี้รวมถึงบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน ข้อมูลการป้อนข้อความอัตโนมัติ แท็บที่เปิดอยู่ คุกกี้ แคช พื้นที่เก็บข้อมูลเว็บ ส่วนขยาย ฯลฯ +หากผู้ใช้ไม่ได้เลือกช่องนี้ +- โปรไฟล์เก่าจะยังคงใช้งานได้ต่อไปและจะไม่มีการลบข้อมูลใดๆ +- ระบบจะสร้างโปรไฟล์ใหม่ + +<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT_KEEP_EXISTING_DATA" /> +นี่เป็นลักษณะการทำงานเดียวกันกับ <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" /> เพียงแต่ว่าโปรไฟล์ที่สร้างใหม่จะไม่ได้รับอนุญาตให้มีบัญชีรอง</translation> <translation id="1239526922294123540">ควบคุมว่าจะอนุญาตให้เว็บไซต์ส่งคำขอไปยังปลายทางเครือข่ายที่มีความเป็นส่วนตัวมากกว่าในลักษณะที่ไม่ปลอดภัยหรือไม่ เมื่อตั้งค่านโยบายนี้เป็น "จริง" ระบบจะปิดใช้การตรวจสอบ<ph name="PRIVATE_NETWORK_ACCESS" />ทั้งหมดสำหรับทุกต้นทาง ซึ่งอาจทำให้ผู้โจมตีสามารถโจมตี <ph name="CSRF" /> ในเซิร์ฟเวอร์ของเครือข่ายส่วนตัวได้ @@ -1691,11 +1712,6 @@ หากตั้งค่านโยบายเป็น "เปิดใช้" ระบบจะติดตั้งส่วนขยายข้อมูลเชิงลึกและมีการรายงานเมตริก หากไม่ได้ตั้งค่านโยบายหรือตั้งค่าเป็น "ปิดใช้" ระบบจะไม่ติดตั้งส่วนขยายข้อมูลเชิงลึกและจะไม่มีการรายงานเมตริก</translation> -<translation id="2723692978495226412">การตั้งค่านโยบายนี้เป็น "เปิดใช้" จะทำให้มีการแนะนำแอปที่ผู้ใช้เคยติดตั้งไว้ในอุปกรณ์อื่น การแนะนำเหล่านี้จะปรากฏใน Launcher หลังจากการแนะนำแอปในเครื่อง หากไม่มีการป้อนข้อความค้นหา - - การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ตั้งค่าจะทำให้การแนะนำดังกล่าวไม่ปรากฏขึ้น - - หากตั้งค่านโยบายนี้ไว้ ผู้ใช้จะเปลี่ยนแปลงไม่ได้</translation> <translation id="2724313944474873275">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ตั้งค่าจะทำให้อุปกรณ์ <ph name="PRODUCT_OS_NAME" /> สามารถใช้เอกสารรับรองระยะไกล (การเข้าถึงที่ยืนยันแล้ว) เพื่อรับใบรับรองที่ออกโดย CA ของ <ph name="PRODUCT_OS_NAME" /> ซึ่งยืนยันว่าอุปกรณ์มีสิทธิ์เล่นเนื้อหาที่มีการคุ้มครอง กระบวนการนี้มีการส่งข้อมูลการรับรองฮาร์ดแวร์ไปยัง CA ของ <ph name="PRODUCT_OS_NAME" /> ที่ระบุอุปกรณ์โดยไม่ซ้ำกัน การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้อุปกรณ์ไม่ใช้เอกสารรับรองระยะไกลกับการปกป้องเนื้อหาและอาจไม่เล่นเนื้อหาที่มีการคุ้มครอง</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 9d1a317..200c3e1 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -1348,6 +1348,7 @@ <translation id="2341509917222115272">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa kullanıcıların bağlantı zamanında istemcileri ve ana makineleri eşlemelerine izin verilir. Bu durumda, her defasında PIN girme gereği ortadan kalkar. Politika, Devre Dışı değerine ayarlanırsa bu özellik kullanılamaz.</translation> +<translation id="2342066287156668839">Kalıcı kotayı etkinleştir.</translation> <translation id="2345547870894930157">DNS-over-HTTPS'i güvenli olmayan geçiş olmadan etkinleştir</translation> <translation id="2349117476121456297">Politikayı True (Doğru) değerine ayarlamak, klavyenin en üst sırasındaki tuşların işlev tuşu komutları olarak davranmasını sağlar. Arama tuşuna basmak, bunların davranışını tekrar medya tuşu olarak değiştirir. @@ -1704,11 +1705,6 @@ Politika, etkin değerine ayarlanırsa analizler uzantısı yüklenir ve metrikleri raporlar. Politika ayarlanmazsa veya devre dışı değerine ayarlanırsa analizler uzantısı yüklenmez ve metrikleri raporlamaz.</translation> -<translation id="2723692978495226412">Bu politika, Etkin değerine ayarlanırsa kullanıcı tarafından daha önce diğer cihazlara yüklenen uygulamalar için öneriler verilir. Hiçbir arama metni girilmediyse bu öneriler yerel uygulama önerilerinden sonra başlatıcıda görünür. - - Bu politika, Devre Dışı değerine ayarlanır veya ayarlanmadan bırakılırsa bu öneriler görünmez. - - Bu politika ayarlanırsa kullanıcılar değiştiremez.</translation> <translation id="2724313944474873275">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa <ph name="PRODUCT_OS_NAME" /> cihazlarının, cihazın korumalı içeriği oynatmak için uygun olduğunu onaylayan <ph name="PRODUCT_OS_NAME" /> CA'sı tarafından yayınlanan bir sertifika almak amacıyla uzaktan onay (Doğrulanmış Erişim) kullanmasına izin verilir. Bu işlem, <ph name="PRODUCT_OS_NAME" /> CA'sına cihazı benzersiz bir şekilde tanımlayan donanım onay bilgilerinin gönderilmesini içerir. Politika, Devre Dışı değerine ayarlanırsa cihaz, içerik koruması için uzaktan onay kullanmaz ve korumalı içeriği oynatmayabilir.</translation> @@ -2675,6 +2671,7 @@ Politika, Devre Dışı değerine ayarlanır veya ayarlanmadan bırakılırsa <ph name="PRODUCT_OS_NAME" /> kullanıcıların cihazları kapatmasına izin verir.</translation> <translation id="3763515772647897871">Güncelleme denetiminin haftanın hangi gününde yapılması gerektiği (cihazın yerel saat dilimine göre). Yalnızca "frequency", "WEEKLY" olarak ayarlandığında kullanılır.</translation> +<translation id="376375951585423504">Kalıcı kotayı devre dışı bırak.</translation> <translation id="3765260570442823273">Boştayken çıkış yapma uyarı mesajının süresi</translation> <translation id="3770407495263198786">Politika ayarlanırsa yöneticiler kullanıcıları için bir yazıcı listesi oluşturur. Yazıcı seçimi, kullanıcılar ilk kez yazdırmaya çalıştığında yapılır. @@ -5544,6 +5541,10 @@ Not: Dahili chrome://* ile chrome-untrusted://* URL'lerinin engellenmesi beklenmeyen hatalara yol açabilir ve belirli durumlarda bunu yapmanız engellenebilir. Belirli dahili URL'leri engellemek yerine kullanabileceğiniz daha spesifik politikalar olup olmadığını kontrol edin. Yaygın durumlar: chrome://settings/certificates URL'sini engellemek yerine use <ph name="CA_CERTIFICATE_MANAGEMENT_ALLOWED_POLICY_NAME" /> politikasını kullanın. chrome-untrusted://crosh URL'sini engellemek yerine <ph name="SYSTEM_FEATURES_DISABLE_LIST_POLICY_NAME" /> politikasını kullanın.</translation> <translation id="6894178810167845842">Yeni Sekme sayfasının URL'si</translation> <translation id="6897730193187922386"><ph name="CLOUD_PRINT_NAME" /> kullanımdan kaldırma mesajlarını gizle</translation> +<translation id="6899495066226330266">Kalıcı kota, M106 sürümünden itibaren desteklenmeyecektir. Bu politika, kalıcı kota işlevini M107 sürümüne kadar yeniden etkinleştirir. + Bu politika, etkin değerine ayarlanırsa kalıcı türe sahip webkitRequestFileSystem, kalıcı kotayla çalışır. + Bu politika ayarlanmaz veya devre dışı değerine ayarlanırsa kalıcı türe sahip webkitRequestFileSystem, geçici kotayla çalışır. + </translation> <translation id="6899705656741990703">Proxy ayarlarını otomatik olarak algıla</translation> <translation id="6902561336084511004">Kullanılabilir yazdırma sunucularının yapılandırmalarını sağlar. @@ -6805,6 +6806,7 @@ <translation id="8229912067600517877">Geliştirici Araçları'nı etkinleştir</translation> <translation id="8238421250255592181">Dokunmatik klavyede otomatik tamamlama özelliği sunulup sunulamayacağını gösteren bir boole flag'i.</translation> <translation id="8239109177194627162">Kredi kartlarını otomatik doldurmayı devre dışı bırak</translation> +<translation id="8239143983379015783">Kalıcı kotanın etkinleştirilmesini zorunlu tut</translation> <translation id="8244171102276095471">TLS'deki RC4 şifre paketlerini etkinleştir</translation> <translation id="8244525275280476362">Bir politika iptal edildikten sonra maksimum getirme gecikmesi</translation> <translation id="8245574649143980200">Politika ayarlanmadan bırakılır veya Etkin değerine ayarlanırsa kullanıcıların <ph name="GOOGLE_LENS_PRODUCT_NAME" /> bölge arama menü öğesini içerik menüsünde görüntüleyip kullanmasına izin verilir. Politika, Devre Dışı değerine ayarlanırsa <ph name="GOOGLE_LENS_PRODUCT_NAME" /> bölge arama desteklendiğinde kullanıcılar <ph name="GOOGLE_LENS_PRODUCT_NAME" /> bölge arama menü öğesini içerik menüsünde görmez.</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index f2fce24c..2c9be085 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -1371,6 +1371,7 @@ <translation id="2341509917222115272">Якщо це правило ввімкнено або не налаштовано, користувачі можуть створювати пари "хост-клієнт" відразу під час підключення, не вводячи PIN-код. Якщо його вимкнено, ця функція недоступна.</translation> +<translation id="2342066287156668839">Увімкнути постійну квоту.</translation> <translation id="2345547870894930157">Увімкнути DNS-over-HTTPS без небезпечного резервного варіанту</translation> <translation id="2349117476121456297">Якщо для цього правила вибрано значення True, клавіші у верхньому ряді клавіатури за умовчанням працюватимуть як функціональні. Якщо натиснути клавішу пошуку, вони знову працюватимуть як медіа-клавіші. @@ -1727,11 +1728,6 @@ Якщо ввімкнути це правило, розширення статистики встановиться та створюватиме звіти. Якщо це правило не налаштовувати або вимкнути, розширення статистики не буде встановлюватися та створювати звіти.</translation> -<translation id="2723692978495226412">Якщо це правило ввімкнено, з'являтимуться рекомендації додатків, які користувач раніше встановив на інших пристроях. Вони відображатимуться на панелі запуску після рекомендацій локальних додатків, якщо користувач не введе пошуковий запит. - - Якщо це правило вимкнено або не налаштовано, ці рекомендації не з'являтимуться. - - Якщо це правило налаштовано, користувачі не можуть змінити його.</translation> <translation id="2724313944474873275">Якщо ввімкнути або не налаштувати це правило, пристрої <ph name="PRODUCT_OS_NAME" /> зможуть за допомогою віддаленого засвідчення (підтвердженого доступу) отримувати від ЦС <ph name="PRODUCT_OS_NAME" /> сертифікат на підтвердження того, що пристрій може відтворювати захищений контент. При цьому в ЦС <ph name="PRODUCT_OS_NAME" /> надсилається інформація про схвалення апаратного забезпечення, яка унікально ідентифікує пристрій. Якщо вимкнути це правило, пристрій не використовуватиме віддалене засвідчення для захисту контенту та, можливо, не зможе відтворювати захищений контент.</translation> @@ -2702,6 +2698,7 @@ Якщо це правило вимкнено або не налаштовано, користувачі можуть завершувати роботу пристрою в <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="3763515772647897871">День тижня, коли має перевірятися наявність оновлень (за встановленим на пристрої місцевим часовим поясом). Використовується, лише якщо для параметра frequency вибрано значення WEEKLY.</translation> +<translation id="376375951585423504">Вимкнути постійну квоту.</translation> <translation id="3765260570442823273">Тривалість повідомлення із застереженням про вихід неактивного користувача</translation> <translation id="3770407495263198786">За допомогою цього правила адміністратори можуть налаштовувати принтери для своїх користувачів. Користувачі вибирають принтер під час першого друку. @@ -5585,6 +5582,10 @@ Примітка. Блокування внутрішніх URL-адрес "chrome://*" і "chrome-untrusted://*" може призвести до неочікуваних помилок, а в окремих випадках його можна обійти. Краще не блокувати певні внутрішні URL-адреси, а дізнатися, чи доступні для них конкретніші правила. Поширені приклади: замість того, щоб блокувати URL-адресу "chrome://settings/certificates", використовуйте правило <ph name="CA_CERTIFICATE_MANAGEMENT_ALLOWED_POLICY_NAME" />, а замість того, щоб блокувати URL-адресу "chrome-untrusted://crosh", – правило <ph name="SYSTEM_FEATURES_DISABLE_LIST_POLICY_NAME" />.</translation> <translation id="6894178810167845842">URL-адреса сторінки нової вкладки</translation> <translation id="6897730193187922386">Блокувати повідомлення про припинення підтримки сервісу <ph name="CLOUD_PRINT_NAME" /></translation> +<translation id="6899495066226330266">Починаючи з версії M106, постійна квота більше не підтримується. Це правило дає змогу знову ввімкнути постійну квоту, доки не вийде версія M107. + Якщо ввімкнути це правило, webkitRequestFileSystem із постійним типом буде працювати з постійною квотою. + Якщо це правило не налаштувати або вимкнути, webkitRequestFileSystem із постійним типом буде працювати з тимчасовою квотою. + </translation> <translation id="6899705656741990703">Автоматично визначати налаштування проксі-сервера</translation> <translation id="6902561336084511004">Указує налаштування доступних серверів друку. @@ -6839,6 +6840,7 @@ <translation id="8229912067600517877">Увімкнути Інструменти розробника</translation> <translation id="8238421250255592181">Логічне значення експериментального параметра, яке вказує, чи може екранна клавіатура пропонувати автозаповнення.</translation> <translation id="8239109177194627162">Вимкнути функцію автозаповнення для кредитних карток</translation> +<translation id="8239143983379015783">Примусово ввімкнути постійну квоту</translation> <translation id="8244171102276095471">Увімкнути набори шифрів RC4 в TLS</translation> <translation id="8244525275280476362">Максимальна затримка отримання після анулювання правила</translation> <translation id="8245574649143980200">Якщо не налаштувати це правило або вибрати для нього значення Enabled, користувачі зможуть бачити й використовувати опцію пошуку за областю зображення в контекстному меню сервісу <ph name="GOOGLE_LENS_PRODUCT_NAME" />. Якщо для цього правила вибрати значення Disabled, користувачі не бачитимуть цю опцію в контекстному меню сервісу <ph name="GOOGLE_LENS_PRODUCT_NAME" />, коли <ph name="GOOGLE_LENS_PRODUCT_NAME" /> підтримує пошук за областю зображення.</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 0919e2b..8ea8cddf 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -217,6 +217,27 @@ <translation id="1223789468190631420">Trạng thái bật tính năng Duyệt web an toàn cho các nguồn đáng tin cậy</translation> <translation id="123018742985150697">Yêu cầu so khớp người dùng cục bộ và chủ sở hữu máy chủ truy cập từ xa</translation> <translation id="123081309365616809">Bật tính năng truyền nội dung đến thiết bị</translation> +<translation id="1233477540349246382"> +Chế độ mặc định (Không đặt chính sách) +Khi một tài khoản được thêm vào vùng nội dung, một hộp thoại nhỏ có thể xuất hiện yêu cầu người dùng tạo hồ sơ mới. Bạn có thể đóng hộp thoại này. + +<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> +Nếu người dùng lần đầu đăng nhập vào một dịch vụ của Google trong trình duyệt <ph name="PRODUCT_NAME" />, một hộp thoại sẽ xuất hiện yêu cầu người dùng tạo hồ sơ mới cho tài khoản doanh nghiệp của họ. Người dùng có thể nhấp vào Huỷ và đăng xuất hoặc nhấp vào Tiếp tục để tạo hồ sơ mới. Mọi dữ liệu duyệt web hiện có sẽ không được thêm vào hồ sơ mới. Hồ sơ mới tạo được phép có nhiều tài khoản phụ, chẳng hạn như người dùng có thể đăng nhập vào một tài khoản khác trong vùng nội dung. + +<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT" /> +Chế độ này tương tự như <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />, ngoại trừ việc hồ sơ mới tạo không được phép có tài khoản phụ. + +<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" /> +Chế độ này tương tự như <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />, ngoại trừ việc hộp thoại có thêm hộp đánh dấu để cho phép người dùng giữ lại dữ liệu duyệt web trên thiết bị. +Nếu người dùng đánh dấu vào hộp này, thì dữ liệu hồ sơ hiện có sẽ được liên kết với Tài khoản được quản lý. +– Tất cả dữ liệu duyệt web hiện có sẽ xuất hiện trong hồ sơ mới. +– Dữ liệu này bao gồm dấu trang, nhật ký, mật khẩu, dữ liệu tự động điền, thẻ đang mở, cookie, bộ nhớ đệm, bộ nhớ web, tiện ích, v.v. +Nếu người dùng không đánh dấu vào hộp: +– Hồ sơ cũ sẽ tiếp tục tồn tại, dữ liệu sẽ không bị mất. +– Một hồ sơ mới sẽ được tạo. + +<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT_KEEP_EXISTING_DATA" /> +Chế độ này tương tự như <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />, ngoại trừ việc hồ sơ mới tạo không được phép có tài khoản phụ.</translation> <translation id="1239526922294123540">Kiểm soát việc có cho phép các trang web gửi yêu cầu theo cách không an toàn đến các điểm cuối trên mạng có mức độ riêng tư cao hơn hay không. Khi chính sách này được đặt thành đúng, mọi quy trình kiểm tra <ph name="PRIVATE_NETWORK_ACCESS" /> đều bị tắt cho mọi nguồn gốc. Việc này có thể cho phép kẻ xấu thực hiện các cuộc tấn công <ph name="CSRF" /> trên máy chủ mạng riêng tư. @@ -1731,11 +1752,6 @@ Nếu chính sách này được đặt thành bật, tiện ích thông tin chi tiết sẽ được cài đặt và báo cáo các chỉ số. Nếu chính sách này không được đặt hoặc được đặt thành tắt, tiện ích thông tin chi tiết sẽ không được cài đặt và không báo cáo các chỉ số.</translation> -<translation id="2723692978495226412">Việc đặt chính sách này thành Bật sẽ tạo ra các đề xuất cho những ứng dụng mà trước đó người dùng đã cài đặt trên các thiết bị khác. Các đề xuất này sẽ xuất hiện trong trình chạy sau các đề xuất ứng dụng trên thiết bị nếu người dùng chưa nhập nội dung tìm kiếm nào. - - Nếu bạn đặt thành Tắt hoặc không đặt chính sách này, các đề xuất này sẽ không xuất hiện. - - Nếu bạn đặt chính sách này, người dùng sẽ không thể thay đổi.</translation> <translation id="2724313944474873275">Nếu bạn đặt thành Bật hoặc không đặt chính sách này, các thiết bị <ph name="PRODUCT_OS_NAME" /> có thể sử dụng quy trình chứng thực từ xa (Quyền truy cập đã xác minh) để nhận chứng chỉ do <ph name="PRODUCT_OS_NAME" /> CA phát hành khẳng định rằng thiết bị đủ điều kiện để phát nội dung được bảo vệ. Quy trình này bao gồm gửi thông tin chứng thực phần cứng tới <ph name="PRODUCT_OS_NAME" /> CA xác định duy nhất thiết bị. Nếu bạn đặt chính sách này thành Tắt, thiết bị sẽ không sử dụng quy trình chứng thực từ xa để bảo vệ nội dung và thiết bị không thể phát nội dung được bảo vệ.</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 01c623e..48d3c4e 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -1330,6 +1330,7 @@ <translation id="2341509917222115272">如果此政策已启用或未设置,用户便可让客户端和主机在连接时自动配对,无需每次都输入 PIN 码。 如果此政策已停用,用户则无法使用该功能。</translation> +<translation id="2342066287156668839">启用永久配额。</translation> <translation id="2345547870894930157">启用 DNS-over-HTTPS,且禁止改用不安全的查询</translation> <translation id="2349117476121456297">将此政策设为 True 时,系统会让键盘顶行中的各个键充当功能键命令。按搜索键可将这些键的行为改回媒体键。 @@ -1686,11 +1687,6 @@ 如果此政策已启用,系统将会安装数据洞见扩展程序并报告指标。 如果此政策未设置或已停用,系统将不会安装数据洞见扩展程序,也不会报告指标。</translation> -<translation id="2723692978495226412">如果此政策已启用,系统便会推荐用户曾在其他设备上安装的应用。如果用户未输入任何搜索文字,系统将在启动器中显示推荐应用(位于推荐的本地应用后面)。 - - 如果此政策已停用或未设置,系统便不会显示推荐应用。 - - 如果您设置了此政策,用户便无法更改相关设置。</translation> <translation id="2724313944474873275">如果此政策已启用或未设置,<ph name="PRODUCT_OS_NAME" />设备便可使用远程认证(已验证的访问权限)来获取由 <ph name="PRODUCT_OS_NAME" /> CA 颁发的证书,以证明该设备有资格播放受保护内容。此过程涉及向 <ph name="PRODUCT_OS_NAME" /> CA 发送用于唯一标识设备的硬件背书信息。 如果此政策已停用,设备将不会使用远程认证来保护内容,并且可能无法播放受保护内容。</translation> @@ -2648,6 +2644,7 @@ 如果此政策已停用或未设置,<ph name="PRODUCT_OS_NAME" />会允许用户将设备关机。</translation> <translation id="3763515772647897871">应在每周的哪一天(以设备的本地时区表示)检查是否有可用更新。仅在“频率”设为“WEEKLY”时使用。</translation> +<translation id="376375951585423504">停用永久配额。</translation> <translation id="3765260570442823273">待机退出警告讯息的持续时间</translation> <translation id="3770407495263198786">通过设置此政策,管理员可以为用户配置打印机列表。当用户首次尝试打印时,需要选择打印机。 @@ -5484,6 +5481,10 @@ 注意:屏蔽内部 chrome://* 网址和 chrome-trusted://* 网址可能会导致意外错误,或者可能会在特殊情况下被规避。您最好查看是否存在更多的具体政策,而不是屏蔽某些内部网址。对于常见情况:请使用 <ph name="CA_CERTIFICATE_MANAGEMENT_ALLOWED_POLICY_NAME" />,而不要屏蔽 chrome://settings/certificates。请使用 <ph name="SYSTEM_FEATURES_DISABLE_LIST_POLICY_NAME" />,而不要屏蔽 chrome-trusted://crosh。</translation> <translation id="6894178810167845842">在新标签页中打开的页面网址</translation> <translation id="6897730193187922386">禁止显示 <ph name="CLOUD_PRINT_NAME" />弃用消息</translation> +<translation id="6899495066226330266">从 M106 开始,永久配额将不再受支持。此政策用于重新启用永久配额功能,直至 M107。 + 如果此政策已启用,设有“永久”类型的 webkitRequestFileSystem 将使用永久配额运行。 + 如果此政策未设置或已停用,设有“永久”类型的 webkitRequestFileSystem 将使用临时配额运行。 + </translation> <translation id="6899705656741990703">自动检测代理设置</translation> <translation id="6902561336084511004">提供可用打印服务器的配置。 @@ -6736,6 +6737,7 @@ <translation id="8229912067600517877">启用开发者工具</translation> <translation id="8238421250255592181">一个布尔值标记,用于表明屏幕键盘能否提供自动填充功能。</translation> <translation id="8239109177194627162">禁止使用“自动填充”功能填写信用卡信息</translation> +<translation id="8239143983379015783">强制启用永久配额</translation> <translation id="8244171102276095471">在 TLS 中启用 RC4 加密套件</translation> <translation id="8244525275280476362">政策失效后的最大提取延迟</translation> <translation id="8245574649143980200">如果此政策未设置或已启用,用户便可以在上下文菜单中查看和使用 <ph name="GOOGLE_LENS_PRODUCT_NAME" />区域搜索菜单项。如果此政策已停用,而且系统支持 <ph name="GOOGLE_LENS_PRODUCT_NAME" />区域搜索,用户将不会在上下文菜单中看到 <ph name="GOOGLE_LENS_PRODUCT_NAME" />区域搜索菜单项。</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 08970381..9627bcb 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -1692,11 +1692,6 @@ 如果將這項政策設為啟用,系統會安裝深入分析擴充功能,然後由這項功能回報指標。 如果不設定這項政策或設為停用,則系統不會安裝深入分析擴充功能,這項功能也不會回報指標。</translation> -<translation id="2723692978495226412">如果將這項政策設為啟用,系統會根據使用者先前在其他裝置上安裝的應用程式,提供應用程式建議。如果未輸入任何搜尋文字,這類建議會顯示在啟動器中的本機應用程式建議之後。 - - 如果將這項政策設為停用或不設定,這類建議不會顯示。 - - 如果設定這項政策,使用者將無法變更設定。</translation> <translation id="2724313944474873275">如果將這項政策設為啟用或不設定,<ph name="PRODUCT_OS_NAME" />裝置將可使用遠端認證 (已驗證存取權),取得由 <ph name="PRODUCT_OS_NAME" />憑證授權單位核發的憑證,聲明該裝置有資格播放受保護的內容。在這項程序中,必須將可準確識別裝置的硬體簽署資訊傳送給 <ph name="PRODUCT_OS_NAME" />憑證授權單位。 如果將這項政策設為停用,則裝置不會使用遠端認證來保護內容,也無法播放受保護的內容。</translation>
diff --git a/components/safe_browsing/content/browser/download/download_stats.cc b/components/safe_browsing/content/browser/download/download_stats.cc index 9fec9e41..be80d2b 100644 --- a/components/safe_browsing/content/browser/download/download_stats.cc +++ b/components/safe_browsing/content/browser/download/download_stats.cc
@@ -108,11 +108,11 @@ base::UserMetricsAction("SafeBrowsing.Download.WarningBypassed")); } -void RecordDownloadOpened(download::DownloadDangerType danger_type, - download::DownloadContent download_content, - base::Time download_opened_time, - base::Time download_end_time, - bool show_download_in_folder) { +void RecordDownloadOpenedLatency(download::DownloadDangerType danger_type, + download::DownloadContent download_content, + base::Time download_opened_time, + base::Time download_end_time, + bool show_download_in_folder) { if (danger_type != download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS) { return; } @@ -124,13 +124,14 @@ /* min */ base::Seconds(1), /* max */ base::Days(1), /* buckets */ 50); - RecordDownloadOpenedFileType(download_content, download_opened_time, - download_end_time); + RecordDownloadOpenedLatencyFileType(download_content, download_opened_time, + download_end_time); } -void RecordDownloadOpenedFileType(download::DownloadContent download_content, - base::Time download_opened_time, - base::Time download_end_time) { +void RecordDownloadOpenedLatencyFileType( + download::DownloadContent download_content, + base::Time download_opened_time, + base::Time download_end_time) { std::string download_content_str; switch (download_content) { case download::DownloadContent::UNRECOGNIZED:
diff --git a/components/safe_browsing/content/browser/download/download_stats.h b/components/safe_browsing/content/browser/download/download_stats.h index 5cf2cc9..6549541 100644 --- a/components/safe_browsing/content/browser/download/download_stats.h +++ b/components/safe_browsing/content/browser/download/download_stats.h
@@ -55,19 +55,21 @@ bool is_https, bool has_user_gesture); -// Records that a download was opened from the download shelf or the -// chrome://downloads page. -void RecordDownloadOpened(download::DownloadDangerType danger_type, - download::DownloadContent download_content, - base::Time download_opened_time, - base::Time download_end_time, - bool show_download_in_folder); +// Records the latency after completion a download was opened from the download +// shelf/bubble or the chrome://downloads page, or show in folder was clicked. +void RecordDownloadOpenedLatency(download::DownloadDangerType danger_type, + download::DownloadContent download_content, + base::Time download_opened_time, + base::Time download_end_time, + bool show_download_in_folder); -// Records that latency between when a download was opened (via the shelf or -// chrome://downloads) by extension type. -void RecordDownloadOpenedFileType(download::DownloadContent download_content, - base::Time download_opened_time, - base::Time download_end_time); +// Records the latency after completion for when a download was opened (via the +// shelf/bubble or chrome://downloads), or show in folder was clicked, by +// extension type. +void RecordDownloadOpenedLatencyFileType( + download::DownloadContent download_content, + base::Time download_opened_time, + base::Time download_end_time); // Records the attributes of a download. void RecordDownloadFileTypeAttributes(
diff --git a/components/safe_browsing/content/browser/download/download_stats_unittest.cc b/components/safe_browsing/content/browser/download/download_stats_unittest.cc index c76d8eb..c0f38a39 100644 --- a/components/safe_browsing/content/browser/download/download_stats_unittest.cc +++ b/components/safe_browsing/content/browser/download/download_stats_unittest.cc
@@ -91,14 +91,14 @@ download::DownloadContent fake_content = download::DownloadContent::SPREADSHEET; // Not logged for dangerous downloads. - RecordDownloadOpened( + RecordDownloadOpenedLatency( download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_DANGEROUS_CONTENT, fake_content, download_end_time + base::Days(1), download_end_time, /*show_download_in_folder=*/false); histogram_tester.ExpectTotalCount( "SBClientDownload.SafeDownloadOpenedLatency2.OpenDirectly", 0); - RecordDownloadOpened( + RecordDownloadOpenedLatency( download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, fake_content, download_end_time + base::Days(1), download_end_time, /*show_download_in_folder=*/false); @@ -107,7 +107,7 @@ /*sample=*/base::Days(1), /*count=*/1); - RecordDownloadOpened( + RecordDownloadOpenedLatency( download::DownloadDangerType::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, fake_content, download_end_time + base::Hours(5), download_end_time, /*show_download_in_folder=*/true); @@ -122,25 +122,25 @@ base::Time download_end_time = base::Time::Now(); - RecordDownloadOpenedFileType(download::DownloadContent::SPREADSHEET, - download_end_time + base::Days(1), - download_end_time); + RecordDownloadOpenedLatencyFileType(download::DownloadContent::SPREADSHEET, + download_end_time + base::Days(1), + download_end_time); histogram_tester.ExpectTimeBucketCount( "SBClientDownload.SafeDownloadOpenedLatencyByContentType.SPREADSHEET", /*sample=*/base::Days(1), /*count=*/1); - RecordDownloadOpenedFileType(download::DownloadContent::PRESENTATION, - download_end_time + base::Hours(5), - download_end_time); + RecordDownloadOpenedLatencyFileType(download::DownloadContent::PRESENTATION, + download_end_time + base::Hours(5), + download_end_time); histogram_tester.ExpectTimeBucketCount( "SBClientDownload.SafeDownloadOpenedLatencyByContentType.PRESENTATION", /*sample=*/base::Hours(5), /*count=*/1); - RecordDownloadOpenedFileType(download::DownloadContent::ARCHIVE, - download_end_time + base::Days(1), - download_end_time); + RecordDownloadOpenedLatencyFileType(download::DownloadContent::ARCHIVE, + download_end_time + base::Days(1), + download_end_time); histogram_tester.ExpectTimeBucketCount( "SBClientDownload.SafeDownloadOpenedLatencyByContentType.ARCHIVE", /*sample=*/base::Days(1),
diff --git a/components/saved_tab_groups/BUILD.gn b/components/saved_tab_groups/BUILD.gn index f35deec..d0d77064 100644 --- a/components/saved_tab_groups/BUILD.gn +++ b/components/saved_tab_groups/BUILD.gn
@@ -11,6 +11,7 @@ ] deps = [ "//base", + "//components/sync", "//components/tab_groups", "//ui/gfx", "//url", @@ -20,6 +21,15 @@ source_set("unit_tests") { testonly = true - sources = [] - deps = [ ":core" ] + sources = [ "saved_tab_group_proto_conversion_unittest.cc" ] + deps = [ + ":core", + "//base", + "//base/test:test_support", + "//components/sync", + "//components/sync:test_support", + "//components/tab_groups", + "//testing/gtest", + "//url", + ] }
diff --git a/components/saved_tab_groups/DEPS b/components/saved_tab_groups/DEPS index 9fa4f70..d8bff35 100644 --- a/components/saved_tab_groups/DEPS +++ b/components/saved_tab_groups/DEPS
@@ -1,4 +1,5 @@ include_rules = [ "+components/tab_groups", + "+components/sync", "+ui/gfx" -] \ No newline at end of file +]
diff --git a/components/saved_tab_groups/saved_tab_group.cc b/components/saved_tab_groups/saved_tab_group.cc index 6839741..b9fb6e0f 100644 --- a/components/saved_tab_groups/saved_tab_group.cc +++ b/components/saved_tab_groups/saved_tab_group.cc
@@ -8,7 +8,10 @@ #include <vector> #include "base/guid.h" +#include "base/notreached.h" +#include "base/strings/utf_string_conversions.h" #include "components/saved_tab_groups/saved_tab_group_tab.h" +#include "components/sync/protocol/saved_tab_group_specifics.pb.h" #include "components/tab_groups/tab_group_color.h" #include "components/tab_groups/tab_group_id.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -41,3 +44,95 @@ SavedTabGroup::SavedTabGroup(const SavedTabGroup& other) = default; SavedTabGroup::~SavedTabGroup() = default; + +// static +SavedTabGroup SavedTabGroup::FromSpecifics( + const sync_pb::SavedTabGroupSpecifics& specific) { + const tab_groups::TabGroupColorId color = + SyncColorToTabGroupColor(specific.group().color()); + const std::u16string& title = base::UTF8ToUTF16(specific.group().title()); + + base::GUID guid = base::GUID::ParseLowercase(specific.guid()); + base::Time creation_time = base::Time::FromDeltaSinceWindowsEpoch( + base::Microseconds(specific.creation_time_windows_epoch_micros())); + base::Time update_time = base::Time::FromDeltaSinceWindowsEpoch( + base::Microseconds(specific.update_time_windows_epoch_micros())); + + return SavedTabGroup(title, color, {}, guid, absl::nullopt, creation_time, + update_time); +} + +std::unique_ptr<sync_pb::SavedTabGroupSpecifics> SavedTabGroup::ToSpecifics() { + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> pb_specific = + std::make_unique<sync_pb::SavedTabGroupSpecifics>(); + pb_specific->set_guid(saved_guid().AsLowercaseString()); + pb_specific->set_creation_time_windows_epoch_micros( + creation_time_windows_epoch_micros() + .ToDeltaSinceWindowsEpoch() + .InMicroseconds()); + pb_specific->set_update_time_windows_epoch_micros( + update_time_windows_epoch_micros() + .ToDeltaSinceWindowsEpoch() + .InMicroseconds()); + + sync_pb::SavedTabGroup* pb_group = pb_specific->mutable_group(); + pb_group->set_color(TabGroupColorToSyncColor(color())); + pb_group->set_title(base::UTF16ToUTF8(title())); + + return pb_specific; +} + +// static +tab_groups::TabGroupColorId SavedTabGroup::SyncColorToTabGroupColor( + const sync_pb::SavedTabGroup::SavedTabGroupColor color) { + switch (color) { + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_GREY: + return tab_groups::TabGroupColorId::kGrey; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_BLUE: + return tab_groups::TabGroupColorId::kBlue; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_RED: + return tab_groups::TabGroupColorId::kRed; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_YELLOW: + return tab_groups::TabGroupColorId::kYellow; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_GREEN: + return tab_groups::TabGroupColorId::kGreen; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_PINK: + return tab_groups::TabGroupColorId::kPink; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_PURPLE: + return tab_groups::TabGroupColorId::kPurple; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_CYAN: + return tab_groups::TabGroupColorId::kCyan; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_ORANGE: + return tab_groups::TabGroupColorId::kOrange; + case sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_UNSPECIFIED: + return tab_groups::TabGroupColorId::kGrey; + } +} + +// static +sync_pb::SavedTabGroup_SavedTabGroupColor +SavedTabGroup::TabGroupColorToSyncColor( + const tab_groups::TabGroupColorId color) { + switch (color) { + case tab_groups::TabGroupColorId::kGrey: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_GREY; + case tab_groups::TabGroupColorId::kBlue: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_BLUE; + case tab_groups::TabGroupColorId::kRed: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_RED; + case tab_groups::TabGroupColorId::kYellow: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_YELLOW; + case tab_groups::TabGroupColorId::kGreen: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_GREEN; + case tab_groups::TabGroupColorId::kPink: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_PINK; + case tab_groups::TabGroupColorId::kPurple: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_PURPLE; + case tab_groups::TabGroupColorId::kCyan: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_CYAN; + case tab_groups::TabGroupColorId::kOrange: + return sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_ORANGE; + } + + NOTREACHED() << "No known conversion for the supplied color."; +}
diff --git a/components/saved_tab_groups/saved_tab_group.h b/components/saved_tab_groups/saved_tab_group.h index d496598..1c5e570 100644 --- a/components/saved_tab_groups/saved_tab_group.h +++ b/components/saved_tab_groups/saved_tab_group.h
@@ -10,6 +10,7 @@ #include "base/guid.h" #include "components/saved_tab_groups/saved_tab_group_tab.h" +#include "components/sync/protocol/saved_tab_group_specifics.pb.h" #include "components/tab_groups/tab_group_color.h" #include "components/tab_groups/tab_group_id.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -40,6 +41,12 @@ const absl::optional<tab_groups::TabGroupId>& tab_group_id() const { return tab_group_id_; } + const base::Time& creation_time_windows_epoch_micros() const { + return creation_time_windows_epoch_micros_; + } + const base::Time& update_time_windows_epoch_micros() const { + return update_time_windows_epoch_micros_; + } const std::u16string& title() const { return title_; } const tab_groups::TabGroupColorId& color() const { return color_; } const std::vector<SavedTabGroupTab>& saved_tabs() const { @@ -61,6 +68,23 @@ return *this; } + // Converts a `SavedTabGroupSpecifics` retrieved from sync into a + // `SavedTabGroupTab`. + static SavedTabGroup FromSpecifics( + const sync_pb::SavedTabGroupSpecifics& specific); + + // Converts a `SavedTabGroupTab` into a `SavedTabGroupSpecifics` for sync. + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> ToSpecifics(); + + // Converts tab group color ids into the sync data type for saved tab group + // colors. + static ::sync_pb::SavedTabGroup_SavedTabGroupColor TabGroupColorToSyncColor( + const tab_groups::TabGroupColorId color); + + // Converts sync group colors into tab group colors ids. + static tab_groups::TabGroupColorId SyncColorToTabGroupColor( + const sync_pb::SavedTabGroup::SavedTabGroupColor color); + private: // The ID used to represent the group in sync. base::GUID saved_guid_; @@ -79,10 +103,11 @@ // The URLS and later webcontents (such as favicons) of the saved tab group. std::vector<SavedTabGroupTab> saved_tabs_; - // Timestamp for when the tab was created. + // Timestamp for when the tab was created using windows epoch microseconds. base::Time creation_time_windows_epoch_micros_; - // Timestamp for when the tab was last updated. + // Timestamp for when the tab was last updated using windows epoch + // microseconds. base::Time update_time_windows_epoch_micros_; };
diff --git a/components/saved_tab_groups/saved_tab_group_proto_conversion_unittest.cc b/components/saved_tab_groups/saved_tab_group_proto_conversion_unittest.cc new file mode 100644 index 0000000..d97eba8 --- /dev/null +++ b/components/saved_tab_groups/saved_tab_group_proto_conversion_unittest.cc
@@ -0,0 +1,162 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/saved_tab_groups/saved_tab_group.h" + +#include <memory> + +#include "base/guid.h" +#include "base/time/time.h" +#include "components/saved_tab_groups/saved_tab_group_tab.h" +#include "components/sync/protocol/saved_tab_group_specifics.pb.h" +#include "components/tab_groups/tab_group_color.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +class SavedTabGroupConversionTest : public testing::Test { + public: + SavedTabGroupConversionTest() : time_(base::Time::Now()) {} + + // Compare Specifics + void CompareGroupSpecifics(sync_pb::SavedTabGroupSpecifics* sp1, + sync_pb::SavedTabGroupSpecifics* sp2) { + EXPECT_EQ(sp1->guid(), sp2->guid()); + EXPECT_EQ(sp1->group().title(), sp2->group().title()); + EXPECT_EQ(sp1->group().color(), sp2->group().color()); + EXPECT_EQ(sp1->creation_time_windows_epoch_micros(), + sp2->creation_time_windows_epoch_micros()); + EXPECT_EQ(sp1->update_time_windows_epoch_micros(), + sp2->update_time_windows_epoch_micros()); + } + + void CompareTabSpecifics(sync_pb::SavedTabGroupSpecifics* sp1, + sync_pb::SavedTabGroupSpecifics* sp2) { + EXPECT_EQ(sp1->guid(), sp2->guid()); + EXPECT_EQ(sp1->tab().url(), sp2->tab().url()); + EXPECT_EQ(sp1->tab().group_guid(), sp2->tab().group_guid()); + EXPECT_EQ(sp1->creation_time_windows_epoch_micros(), + sp2->creation_time_windows_epoch_micros()); + EXPECT_EQ(sp1->update_time_windows_epoch_micros(), + sp2->update_time_windows_epoch_micros()); + } + + // Compare SavedTabGroups + void CompareGroups(SavedTabGroup group1, SavedTabGroup group2) { + EXPECT_EQ(group1.title(), group2.title()); + EXPECT_EQ(group1.color(), group2.color()); + EXPECT_EQ(group1.saved_guid(), group2.saved_guid()); + EXPECT_EQ(group1.creation_time_windows_epoch_micros(), + group2.creation_time_windows_epoch_micros()); + EXPECT_EQ(group1.update_time_windows_epoch_micros(), + group2.update_time_windows_epoch_micros()); + } + + void CompareTabs(SavedTabGroupTab group1, SavedTabGroupTab group2) { + EXPECT_EQ(group1.url(), group2.url()); + EXPECT_EQ(group1.guid(), group2.guid()); + EXPECT_EQ(group1.group_guid(), group2.group_guid()); + EXPECT_EQ(group1.creation_time_windows_epoch_micros(), + group2.creation_time_windows_epoch_micros()); + EXPECT_EQ(group1.update_time_windows_epoch_micros(), + group2.update_time_windows_epoch_micros()); + } + + base::Time time_; +}; + +TEST_F(SavedTabGroupConversionTest, GroupToSpecificRetainsData) { + // Create a group. + const std::u16string& title = u"Test title"; + const tab_groups::TabGroupColorId& color = tab_groups::TabGroupColorId::kBlue; + absl::optional<base::GUID> saved_guid = base::GUID::GenerateRandomV4(); + absl::optional<base::Time> creation_time_windows_epoch_micros = time_; + absl::optional<base::Time> update_time_windows_epoch_micros = time_; + SavedTabGroup group(title, color, {}, saved_guid, absl::nullopt, + creation_time_windows_epoch_micros, + update_time_windows_epoch_micros); + + // Use the group to create a STGSpecific. + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> specific = + group.ToSpecifics(); + + // Turn Specific into a group. + SavedTabGroup group2 = SavedTabGroup::FromSpecifics(*specific); + + // Verify the 2 groups hold the same data. + CompareGroups(group, group2); + + specific->clear_entity(); +} + +TEST_F(SavedTabGroupConversionTest, TabToSpecificRetainsData) { + // Create a tab. + SavedTabGroupTab tab(GURL("chrome://hidden_link"), + base::GUID::GenerateRandomV4(), nullptr, + base::GUID::GenerateRandomV4(), time_, time_); + + // Create a STGSpecific using `tab`. + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> specific = tab.ToSpecifics(); + + // Turn Specific into a tab. + SavedTabGroupTab tab2 = SavedTabGroupTab::FromSpecifics(*specific); + + // Verify the 2 tabs hold the same data. + CompareTabs(tab, tab2); + + specific->clear_entity(); +} + +TEST_F(SavedTabGroupConversionTest, SpecificToGroupRetainsData) { + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> pb_specific = + std::make_unique<sync_pb::SavedTabGroupSpecifics>(); + pb_specific->set_guid(base::GUID::GenerateRandomV4().AsLowercaseString()); + + int64_t time_in_micros = time_.ToDeltaSinceWindowsEpoch().InMicroseconds(); + pb_specific->set_creation_time_windows_epoch_micros(time_in_micros); + pb_specific->set_update_time_windows_epoch_micros(time_in_micros); + + sync_pb::SavedTabGroup* pb_group = pb_specific->mutable_group(); + pb_group->set_color(sync_pb::SavedTabGroup::SAVED_TAB_GROUP_COLOR_BLUE); + pb_group->set_title("Another test title"); + + // Turn a specific into a group. + SavedTabGroup group = SavedTabGroup::FromSpecifics(*pb_specific); + + // Turn the group back into a specific. + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> pb_specific_2 = + group.ToSpecifics(); + + // Verify the 2 specifics hold the same data. + CompareGroupSpecifics(pb_specific.get(), pb_specific_2.get()); + + pb_specific->clear_group(); + pb_specific_2->clear_group(); +} + +TEST_F(SavedTabGroupConversionTest, SpecificToTabRetainsData) { + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> pb_specific = + std::make_unique<sync_pb::SavedTabGroupSpecifics>(); + pb_specific->set_guid(base::GUID::GenerateRandomV4().AsLowercaseString()); + + int64_t time_in_micros = time_.ToDeltaSinceWindowsEpoch().InMicroseconds(); + pb_specific->set_creation_time_windows_epoch_micros(time_in_micros); + pb_specific->set_update_time_windows_epoch_micros(time_in_micros); + + sync_pb::SavedTabGroupTab* pb_tab = pb_specific->mutable_tab(); + pb_tab->set_url("chrome://newtab/"); + pb_tab->set_group_guid(base::GUID::GenerateRandomV4().AsLowercaseString()); + + // Turn a specific into a tab. + SavedTabGroupTab tab = SavedTabGroupTab::FromSpecifics(*pb_specific); + + // Turn the tab back into a specific. + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> pb_specific_2 = + tab.ToSpecifics(); + + // Verify the 2 specifics hold the same data. + CompareTabSpecifics(pb_specific.get(), pb_specific_2.get()); + + pb_specific->clear_tab(); + pb_specific_2->clear_tab(); +}
diff --git a/components/saved_tab_groups/saved_tab_group_tab.cc b/components/saved_tab_groups/saved_tab_group_tab.cc index 9b52dd9..d3c0cff 100644 --- a/components/saved_tab_groups/saved_tab_group_tab.cc +++ b/components/saved_tab_groups/saved_tab_group_tab.cc
@@ -31,3 +31,41 @@ : base::Time::Now()) {} SavedTabGroupTab::SavedTabGroupTab(const SavedTabGroupTab& other) = default; SavedTabGroupTab::~SavedTabGroupTab() = default; + +// static +SavedTabGroupTab SavedTabGroupTab::FromSpecifics( + const sync_pb::SavedTabGroupSpecifics& specific) { + const base::GUID& group_guid = + base::GUID::ParseLowercase(specific.tab().group_guid()); + const GURL& url = GURL(specific.tab().url()); + + base::GUID guid = base::GUID::ParseLowercase(specific.guid()); + base::Time creation_time = base::Time::FromDeltaSinceWindowsEpoch( + base::Microseconds(specific.creation_time_windows_epoch_micros())); + base::Time update_time = base::Time::FromDeltaSinceWindowsEpoch( + base::Microseconds(specific.update_time_windows_epoch_micros())); + + return SavedTabGroupTab(url, group_guid, nullptr, guid, creation_time, + update_time); +} + +std::unique_ptr<sync_pb::SavedTabGroupSpecifics> +SavedTabGroupTab::ToSpecifics() { + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> pb_specific = + std::make_unique<sync_pb::SavedTabGroupSpecifics>(); + pb_specific->set_guid(guid().AsLowercaseString()); + pb_specific->set_creation_time_windows_epoch_micros( + creation_time_windows_epoch_micros() + .ToDeltaSinceWindowsEpoch() + .InMicroseconds()); + pb_specific->set_update_time_windows_epoch_micros( + update_time_windows_epoch_micros() + .ToDeltaSinceWindowsEpoch() + .InMicroseconds()); + + sync_pb::SavedTabGroupTab* pb_tab = pb_specific->mutable_tab(); + pb_tab->set_url(url().spec()); + pb_tab->set_group_guid(group_guid().AsLowercaseString()); + + return pb_specific; +}
diff --git a/components/saved_tab_groups/saved_tab_group_tab.h b/components/saved_tab_groups/saved_tab_group_tab.h index 6ade436..1d9e2ab 100644 --- a/components/saved_tab_groups/saved_tab_group_tab.h +++ b/components/saved_tab_groups/saved_tab_group_tab.h
@@ -11,6 +11,7 @@ #include "base/guid.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" +#include "components/sync/protocol/saved_tab_group_specifics.pb.h" #include "components/tab_groups/tab_group_color.h" #include "components/tab_groups/tab_group_id.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -67,6 +68,14 @@ return *this; } + // Converts a `SavedTabGroupSpecifics` retrieved from sync into a + // `SavedTabGroupTab`. + static SavedTabGroupTab FromSpecifics( + const sync_pb::SavedTabGroupSpecifics& specific); + + // Converts this `SavedTabGroupTab` into a `SavedTabGroupSpecifics` for sync. + std::unique_ptr<sync_pb::SavedTabGroupSpecifics> ToSpecifics(); + private: // The ID used to represent the tab in sync. base::GUID guid_; @@ -87,10 +96,11 @@ // The favicon of the website this SavedTabGroupTab represents. absl::optional<gfx::Image> favicon_; - // Timestamp for when the tab was created. + // Timestamp for when the tab was created using windows epoch microseconds. base::Time creation_time_windows_epoch_micros_; - // Timestamp for when the tab was last updated. + // Timestamp for when the tab was last updated using windows epoch + // microseconds. base::Time update_time_windows_epoch_micros_; };
diff --git a/components/services/storage/service_worker/service_worker_resource_ops.cc b/components/services/storage/service_worker/service_worker_resource_ops.cc index 9023b99..b3f2d5b 100644 --- a/components/services/storage/service_worker/service_worker_resource_ops.cc +++ b/components/services/storage/service_worker/service_worker_resource_ops.cc
@@ -92,7 +92,11 @@ size_t size() const { return pickle_->size(); } private: - ~WrappedPickleIOBuffer() override = default; + ~WrappedPickleIOBuffer() override { + // `data_` is a pointer on `pickle_` and should be nullified before that to + // prevent it from being dangling. + data_ = nullptr; + } const std::unique_ptr<const base::Pickle> pickle_; };
diff --git a/components/sessions/BUILD.gn b/components/sessions/BUILD.gn index e50ea80..04122ea7 100644 --- a/components/sessions/BUILD.gn +++ b/components/sessions/BUILD.gn
@@ -75,7 +75,7 @@ } } -source_set("session_id") { +component("session_id") { sources = [ "core/session_id.cc", "core/session_id.h",
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountInfoService.java b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountInfoService.java index 2c0118e..166651da 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountInfoService.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountInfoService.java
@@ -14,7 +14,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.components.signin.base.AccountCapabilities; import org.chromium.components.signin.base.AccountInfo; -import org.chromium.components.signin.base.CoreAccountInfo; +import org.chromium.components.signin.base.CoreAccountId; import org.chromium.components.signin.identitymanager.AccountInfoService; import org.chromium.components.signin.identitymanager.IdentityManager; import org.chromium.content_public.browser.test.util.TestThreadUtils; @@ -75,22 +75,27 @@ } /** - * Adds {@link AccountInfo} with the given information to the fake service. + * Builds {@link AccountInfo} with the given information and adds it to the fake service. */ public AccountInfo addAccountInfo(String email, String fullName, String givenName, @Nullable Bitmap avatar, @NonNull AccountCapabilities capabilities) { - final CoreAccountInfo coreAccountInfo = CoreAccountInfo.createFromEmailAndGaiaId( - email, FakeAccountManagerFacade.toGaiaId(email)); - final AccountInfo accountInfo = - new AccountInfo(coreAccountInfo.getId(), coreAccountInfo.getEmail(), - coreAccountInfo.getGaiaId(), fullName, givenName, avatar, capabilities); - mAccountInfos.put(email, accountInfo); + String gaiaId = FakeAccountManagerFacade.toGaiaId(email); + final AccountInfo accountInfo = new AccountInfo(new CoreAccountId(gaiaId), email, gaiaId, + fullName, givenName, avatar, capabilities); + addAccountInfo(accountInfo); + return accountInfo; + } + + /** + * Adds {@link AccountInfo} to the fake service. + */ + public void addAccountInfo(AccountInfo accountInfo) { + mAccountInfos.put(accountInfo.getEmail(), accountInfo); ThreadUtils.runOnUiThreadBlocking(() -> { for (Observer observer : mObservers) { observer.onAccountInfoUpdated(accountInfo); } }); - return accountInfo; } }
diff --git a/components/signin/public/identity_manager/access_token_constants.cc b/components/signin/public/identity_manager/access_token_constants.cc index c7bb097e..d50e889 100644 --- a/components/signin/public/identity_manager/access_token_constants.cc +++ b/components/signin/public/identity_manager/access_token_constants.cc
@@ -64,6 +64,11 @@ // Required to fetch the ManagedAccounsSigninRestriction policy. GaiaConstants::kSecureConnectOAuth2Scope, + // Required for requesting Discover feed with personalization without + // sync consent. Sync consent isn't required for personalization but can + // improve suggestions. + GaiaConstants::kFeedOAuth2Scope, + // Required by ChromeOS only. #if BUILDFLAG(IS_CHROMEOS_ASH) GaiaConstants::kAccountsReauthOAuth2Scope,
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb index 8f336da..b364c6cc 100644 --- a/components/strings/components_strings_af.xtb +++ b/components/strings/components_strings_af.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Druk uit</translation> <translation id="1432187715652018471">bladsy wil 'n dienshanteerder installeer.</translation> <translation id="1432581352905426595">Bestuur soekenjins</translation> +<translation id="1435940442311036198">Gebruik ’n wagwoordsleutel op ’n ander toestel</translation> <translation id="1436185428532214179">Kan vra om lêers of vouers op jou toestel te wysig</translation> <translation id="1442386063175183758">Uitvoublad regs</translation> <translation id="1442987760062738829">Pons</translation> @@ -1240,6 +1241,7 @@ <translation id="4329871760342656885">Beleidontledingfout: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Stapelaar 5</translation> <translation id="4331708818696583467">Nie veilig nie</translation> +<translation id="4333561522337981382">Bestuur vensters op al jou skerms</translation> <translation id="4340575312453649552">Chrome het hierdie advertensie verwyder omdat dit te veel van jou toestel se hulpbronne gebruik het.</translation> <translation id="4340982228985273705">Hierdie rekenaar word nie bespeur as een wat deur 'n onderneming bestuur word nie en beleid kan dus net uitbreidings wat in die Chrome Webwinkel gehuisves word, outomaties installeer. Die Chrome Webwinkel se opdatering-URL is "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">Aanvaarde kredietkaarte</translation> @@ -1406,7 +1408,9 @@ <translation id="4798078619018708837">Voer die vervaldatum en CVC vir <ph name="CREDIT_CARD" /> in om jou kaartbesonderhede op te dateer. Nadat jy bevestig het, sal kaartbesonderhede vanaf jou Google-rekening met hierdie werf gedeel word.</translation> <translation id="4800132727771399293">Gaan jou vervaldatum en CVC na en probeer weer</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">Gebruik Raak-ID</translation> <translation id="4809079943450490359">Instruksies deur jou toesteladministrateur:</translation> +<translation id="4811450222531576619">Kom meer te wete oor bron en onderwerp</translation> <translation id="4812751092864334025">Drabare tegnologie</translation> <translation id="4813512666221746211">Netwerkfout</translation> <translation id="4816492930507672669">Pas op bladsy</translation> @@ -1453,6 +1457,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, druk Tab en dan Enter om te soek</translation> <translation id="4930153903256238152">Groot kapasiteit</translation> +<translation id="4934780484581617878">Vensterbestuur</translation> <translation id="4936134414789135531">Kon nie die ingevoegde <ph name="VALUE_NAME" /> kry nie.</translation> <translation id="4936675324097895694">Finansies</translation> <translation id="4940163644868678279">Incognito in Chrome</translation> @@ -1465,6 +1470,7 @@ <translation id="4958444002117714549">Vou lys uit</translation> <translation id="4964505745997821360">Gesondheidsversekering</translation> <translation id="4968522289500246572">Hierdie program is vir mobiele toestelle ontwerp en sy grootte is dalk nie maklik om te verander nie. Die program sal dalk kwessies ervaar of herbegin.</translation> +<translation id="4968665849807487749">Kan vra om vensters op al jou skerms te bestuur</translation> <translation id="4969341057194253438">Vee opname uit</translation> <translation id="4973922308112707173">Dubbelpons bo</translation> <translation id="4976702386844183910">Laas besoek op <ph name="DATE" /></translation> @@ -1677,6 +1683,7 @@ <translation id="5509780412636533143">Bestuurde boekmerke</translation> <translation id="5510481203689988000">Hierdie instelling word in webkoekie-instellings beheer.</translation> <translation id="5510766032865166053">Dit is dalk geskuif of uitgevee.</translation> +<translation id="5513528801833998679">Gebruik toestelaanmelding</translation> <translation id="5518670652865028077">Kuns en vermaak</translation> <translation id="5519516356611866228">Met jou veranderinge</translation> <translation id="5523118979700054094">Beleidnaam</translation> @@ -1704,6 +1711,7 @@ <translation id="5571083550517324815">Kan nie by hierdie adres oplaai nie. Kies 'n ander adres.</translation> <translation id="557886905979275351">Skeermesse en skeertoestelle</translation> <translation id="5580958916614886209">Gaan jou vervalmaand na en probeer weer</translation> +<translation id="558420943003240152">Bestuur wagwoorde en wagwoordsleutels …</translation> <translation id="5586446728396275693">Geen gestoorde adresse nie</translation> <translation id="5587987780934666589">Platformgebruiker</translation> <translation id="5593349413089863479">Verbinding is nie heeltemal veilig nie</translation> @@ -1768,6 +1776,7 @@ <translation id="5765072501007116331">Kies 'n adres om afleweringmetodes en -vereistes te sien</translation> <translation id="57689295674415555">Is virtuelekaartnommer nie ingevul nie?</translation> <translation id="5776313857861697733">Prioriteit</translation> +<translation id="5778389256418062749">Gebruik ’n wagwoordsleutel op ’n ander toestel</translation> <translation id="5781136890105823427">Eksperiment is geaktiveer</translation> <translation id="578305955206182703">Geelbruin</translation> <translation id="57838592816432529">Demp</translation> @@ -1968,6 +1977,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Gaan die instaanbediener-, brandmuur- en veilige-DNS-opstelling na<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Dubbelkram links</translation> +<translation id="6374865374745447009">vensterbestuur</translation> <translation id="6377268785556383139">1 resultaat vir "<ph name="SEARCH_TEXT" />"</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Moontlike heffings voor.</translation> @@ -2525,6 +2535,7 @@ <translation id="7880146494886811634">Stoor adres</translation> <translation id="7882421473871500483">Bruin</translation> <translation id="7882995332186050355">Vragvervoer- en sleepwaens</translation> +<translation id="788679692472636252">Bestuur wagwoorde en wagwoordsleutels …</translation> <translation id="7887683347370398519">Gaan jou CVC na en probeer weer</translation> <translation id="7887885240995164102">Gaan na prent-in-prent</translation> <translation id="7888575728750733395">Drukleweringvoorneme</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index 1a22cab4..3de496e 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -54,7 +54,7 @@ <translation id="1110994991967754504">ለ<ph name="PERMISSION_NAME" /> ፈቃድ አቀናብር</translation> <translation id="1112828774174131240">የቆዩ እና የሰብሳቢ ዕቃዎች</translation> <translation id="1113869188872983271">&እንደገና ደርድርን ቀልብስ</translation> -<translation id="1123753900084781868">የቀጥታ መግለጫ ጽሑፍ አሁን ላይ አይገኝም</translation> +<translation id="1123753900084781868">የቀጥታ መግለጫ ጽሁፍ አሁን ላይ አይገኝም</translation> <translation id="1125573121925420732">ማስጠንቀቂያዎች ድርጣቢያዎች የእነርሱን ደህንነት በሚያዘምኑበት ጊዜ የተለመዱ ሊሆኑ ይችላሉ። ይህ በቅርቡ መሻሻል አለበት።</translation> <translation id="112840717907525620">የመምሪያ መሸጎጫ እሺ</translation> <translation id="1130564665089811311">የገጽ ተርጉም አዝራር፣ ይህን ገጽ በGoogle ትርጉም ለመተርጎም አስገባን ይጫኑ።</translation> @@ -196,7 +196,7 @@ <translation id="1442987760062738829">ብሳ</translation> <translation id="1446396933673057385">የትክክለኝነት ፍተሻ</translation> <translation id="1447067628680007684">(x86_64)</translation> -<translation id="1453974140256777690">እርስዎ የሚለጥፉት ወይም ዓባሪ የሚያያይዙት ጽሑፍ ወደ Google ደመና ወይም ሦስተኛ ወገኖች ለትንታኔ ይላካል። ለምሳሌ፣ አደጋን ሊያስከትል ለሚችል ውሂብ ሊቃኙ ይችላሉ።</translation> +<translation id="1453974140256777690">እርስዎ የሚለጥፉት ወይም ዓባሪ የሚያያይዙት ጽሁፍ ወደ Google ደመና ወይም ሦስተኛ ወገኖች ለትንታኔ ይላካል። ለምሳሌ፣ አደጋን ሊያስከትል ለሚችል ውሂብ ሊቃኙ ይችላሉ።</translation> <translation id="1455413310270022028">ማጥፊያ</translation> <translation id="1459693405370120464">የአየር ሁኔታ</translation> <translation id="1462245070427461050">JIS B9</translation> @@ -460,7 +460,7 @@ <translation id="2153609454945889823">የGoogle Play አገልግሎቶችን ለኤአር ይጭናሉ?</translation> <translation id="2154054054215849342">ስምረት ለእርስዎ ጎራ አይገኝም</translation> <translation id="2154484045852737596">ካርትን ያርትዑ</translation> -<translation id="2161656808144014275">ጽሑፍ</translation> +<translation id="2161656808144014275">ጽሁፍ</translation> <translation id="2162510787844374618">ባንክዎን በማግኘት ላይ…</translation> <translation id="2164510882479075877">በ<ph name="HOST_NAME" /> ውስጥ የፊደል ግድፈት ካለ ይፈትሹ።</translation> <translation id="2166049586286450108">ሙሉ የአስተዳደር መድረሻ</translation> @@ -1007,7 +1007,7 @@ <translation id="3704162925118123524">እየተጠቀሙ ያሉት አውታረ መረብ በመለያ መግቢያ ገጹን እንዲጎበኙ ሊጠይቅዎት ይችላል።</translation> <translation id="3705189812819839667"><ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="370665806235115550">በመጫን ላይ…</translation> -<translation id="3709599264800900598">እርስዎ የቀዱት ጽሑፍ</translation> +<translation id="3709599264800900598">እርስዎ የቀዱት ጽሁፍ</translation> <translation id="370972442370243704">ጉዞዎችን ያብሩ</translation> <translation id="3709866969787468031">የኦዲዮ እና ሙዚቃ ሶፍትዌር</translation> <translation id="3711895659073496551">አንጠልጥል</translation> @@ -1136,7 +1136,7 @@ <translation id="4098354747657067197">አሳሳች ጣቢያ ከፊት አለ</translation> <translation id="4099048595830172239">ሚስጥራዊ ይዘት በሚታይበት ጊዜ የአስተዳዳሪ መመሪያ ማያ ገጽዎን ለ<ph name="APPLICATION_TITLE" /> ማጋራትን አይመከርም፦</translation> <translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />፣ ከዚያ በChrome ውስጥ የቅርጸ-ቁምፊ መጠኖችን እና መልከ ቁምፊዎችን ለማበጀት ትርን ከዚያ አስገባን ይጫኑ</translation> -<translation id="4101413244023615925">ጽሑፍ እና ግራፊክ</translation> +<translation id="4101413244023615925">ጽሁፍ እና ግራፊክ</translation> <translation id="410148943680000050">የዴስክቶፕ ህትመት</translation> <translation id="4103249731201008433">የመሣሪያ መለያ ቁጥር ልክ ያልሆነ ነው</translation> <translation id="4106133539597032659">የጣቢያ አዝራርን ይፍጠሩ፣ በGoogle ጣቢያዎች ውስጥ አዲስ ጣቢያ በፍጥነት ለመፍጠር አስገባን ይጫኑ</translation> @@ -1239,6 +1239,7 @@ <translation id="4329871760342656885">የፖሊሲ ትንተና ስሕተት፦ <ph name="ERROR" /></translation> <translation id="4331519897422864041">ቁልል 5</translation> <translation id="4331708818696583467">ደህንነቱ አልተጠበቀም</translation> +<translation id="4333561522337981382">በሁሉም የእርስዎ ማሳያዎች ላይ መስኮቶችን ማስተዳደር</translation> <translation id="4340575312453649552">ይህ ማስታወቂያ ለመሣሪያዎ በጣም ብዙ ሀብቶችን ተጠቅሟል፣ ስለዚህ Chrome አስወግደውታል።</translation> <translation id="4340982228985273705">ይህ ኮምፒውተር እንደ በድርጅት የሚተዳደር ሆኖ አይታይም፣ ስለዚህ መመሪያ በChrome የድር ማከማቻ ላይ የሚስተናገዱ ቅጥያዎችን ብቻ በራስ-ሰር ነው መጫን የሚችለው። የChrome ድር ማከማቻው ዝማኔ ዩአርኤል «<ph name="CWS_UPDATE_URL" />» ነው።</translation> <translation id="4346197816712207223">ተቀባይነት ያላቸው ክሬዲት ካርዶች</translation> @@ -1261,7 +1262,7 @@ <translation id="4386413576162606861">የሚና መጫወት ጨዋታዎች</translation> <translation id="4390472908992056574">ከፈፍ</translation> <translation id="4393632246160856858">የጥፍር እንክብካቤ ምርቶች</translation> -<translation id="4406883609789734330">የቀጥታ ስርጭት መግለጫ ጽሑፍ</translation> +<translation id="4406883609789734330">የቀጥታ ስርጭት መግለጫ ጽሁፍ</translation> <translation id="4406896451731180161">የፍለጋ ውጤቶች</translation> <translation id="4407755609041463909">እሳት</translation> <translation id="4408413947728134509">ኩኪዎች <ph name="NUM_COOKIES" /></translation> @@ -1361,7 +1362,7 @@ <translation id="4692623383562244444">የፍለጋ ፕሮግራሞች</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> <translation id="4702504834785592287">ጎን</translation> -<translation id="4702656508969495934">የቀጥታ መግለጫ ጽሑፍ ይታያል፣ ለትኩረት መስኮት መቀየሪያን ይጠቀሙ</translation> +<translation id="4702656508969495934">የቀጥታ መግለጫ ጽሁፍ ይታያል፣ ለትኩረት መስኮት መቀየሪያን ይጠቀሙ</translation> <translation id="470284880436071933">ወንጀል እና ፍትህ</translation> <translation id="4704732901923281920">የስነ ህይወት ሳይንሶች</translation> <translation id="4708268264240856090">የእርስዎ ግንኙነት ተቋርጧል</translation> @@ -1452,6 +1453,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />፣ ትሩን ተጫን ከዛ ለመፈለግ አስገባ</translation> <translation id="4930153903256238152">ትልቅ የመያዝ አቅም</translation> +<translation id="4934780484581617878">የመስኮት አስተዳደር</translation> <translation id="4936134414789135531">ያስገቡት <ph name="VALUE_NAME" /> ሊገኝ አልቻለም።</translation> <translation id="4936675324097895694">ፋይናንስ</translation> <translation id="4940163644868678279">በChrome ውስጥ ያለ ማንነት የማያሳውቅ</translation> @@ -1464,6 +1466,7 @@ <translation id="4958444002117714549">ዝርዝሩን ዘርጋ</translation> <translation id="4964505745997821360">የጤና መድህን</translation> <translation id="4968522289500246572">ይህ መተግበሪያ ለሞባይል የተነደፈ ነው፣ እና በጥሩ ሁኔታ መጠን ላይቀይር ይችላል። መተግበሪያው ችግሮች ሊያጋጥሙት ወይም ዳግም ሊነሳ ይችላል።</translation> +<translation id="4968665849807487749">በሁሉም የእርስዎ ማሳያዎች ላይ መስኮቶችን ለማስተዳደር መጠየቅ ይችላል</translation> <translation id="4969341057194253438">ቀረጻ ሰርዝ</translation> <translation id="4973922308112707173">ከላይ ሁለቴ ብሳ</translation> <translation id="4976702386844183910">ለመጨረሻ ጊዜ የተጎበኘው በ<ph name="DATE" /></translation> @@ -1480,7 +1483,7 @@ <translation id="5002932099480077015">የነቃ እንደሆነ Chrome ለበለጠ ፈጣን ቅጽ አሞላል ሲባል በዚህ መሳሪያ ላይ ያለው የካርድዎን ቅጂ ያከማቻል።</translation> <translation id="5011561501798487822">የተገኘ ቋንቋ</translation> <translation id="5015510746216210676">የማሽን ስም፦</translation> -<translation id="5017554619425969104">እርስዎ የቀዱት ጽሑፍ</translation> +<translation id="5017554619425969104">እርስዎ የቀዱት ጽሁፍ</translation> <translation id="5017828934289857214">በኋላ አስታውሰኝ</translation> <translation id="5018422839182700155">ይህን ገጽ መክፈት አልተቻለም</translation> <translation id="5019198164206649151">የመጠባበቂያ ማከማቻ በመጥፎ ሁኔታ ላይ</translation> @@ -1549,7 +1552,7 @@ <translation id="5159010409087891077">ገጹን ማንነት በማያሳውቅ አዲስ መስኮት ውስጥ ይክፈቱ (⇧⌘N)</translation> <translation id="5161334686036120870">ርዕሰ ጉዳይ፦</translation> <translation id="5161506081086828129">ቁልል 9</translation> -<translation id="5164798890604758545">ጽሑፍ ገብቷል</translation> +<translation id="5164798890604758545">ጽሁፍ ገብቷል</translation> <translation id="516920405563544094">የ<ph name="CREDIT_CARD" /> CVC ያስገቡ። ካረጋገጡ በኋላ የGoogle መለያዎ ካርድ ዝርዝሮች ለዚህ ጣቢያ ይጋራሉ።</translation> <translation id="5169827969064885044">የድርጅት መለያዎን መዳረሻ ሊያጡ ወይም የማንነት ስርቆት ሊያጋጥመዎት ይችላሉ። Chrome የይለፍ ቃልዎን አሁን እንዲቀይሩ ይመክራል።</translation> <translation id="5171045022955879922">ይፈልጉ ወይም ዩአርኤል ይጻፉ</translation> @@ -1591,7 +1594,7 @@ <translation id="5269999699920406580">በመላው ስርዓት ላይ የሚተገበሩ ባህሪያት በባለቤቱ ብቻ ነው ሊዋቀሩ የሚችሉት፦ <ph name="OWNER_EMAIL" /></translation> <translation id="5273658854610202413">ማስጠንቀቂያ፦ ይህ መመሪያ ሊዋሃዱ የሚችሉ የመዝገበ-ቃላት መመሪያዎች አካል ስላልሆነ በPolicyDictionaryMultipleSourceMergeList መመሪያ ላይ በተገለጸው መሠረትት አልተዋሃደም።</translation> <translation id="5273881944177595304">የድር መተግበሪያዎች እና መስመር ላይ መሣሪያዎች</translation> -<translation id="5274025349362408263">መጽሐፍት እና ስነ ጽሑፍ</translation> +<translation id="5274025349362408263">መጽሐፍት እና ስነ ጽሁፍ</translation> <translation id="5279286380302340275">ውርዶችን ያቀናብሩ</translation> <translation id="5283044957620376778">B1</translation> <translation id="5284295735376057059">የሰነድ ባሕሪያት</translation> @@ -1687,7 +1690,7 @@ <translation id="5535133333442455806">የአሰሳ ውሂብ አዝራርን ያጽዱ፣ በChrome ቅንብሮች ውስጥ የእርስዎን አሰሳ ታሪክ፣ ኩኪዎች፣ መሸጎጫዎች እና ተጨማሪ ነገሮች ለማጽዳት አስገባን ይጫኑ</translation> <translation id="5536214594743852365">የ«<ph name="SECTION" />» ክፍሉን አሳይ</translation> <translation id="5539243836947087108">ታንኳ</translation> -<translation id="5540224163453853">የተጠየቀውን ጽሑፍ ማግኘት አልተቻለም።</translation> +<translation id="5540224163453853">የተጠየቀውን ጽሁፍ ማግኘት አልተቻለም።</translation> <translation id="5540969246441091044">የፈረስ ስፖርት</translation> <translation id="5541086400771735334">የመልዕክት ሳጥን 7</translation> <translation id="5541546772353173584">ኢሜይል ያክሉ</translation> @@ -1887,7 +1890,7 @@ <translation id="6106989379647458772">በ<ph name="PAGE" /> ላይ ያለው ድረ-ገፅ ለጊዜው ተበላሽቶ ሊሆን ይችላል ወይም በቋሚነት ወደ አዲስ የድር አድራሻ ተንቀሳቅሶ ሊሆን ይችላል።</translation> <translation id="6107012941649240045">ለእዚህ ቀርቧል</translation> <translation id="610911394827799129">የእርስዎ Google መለያ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ላይ ሌሎች የአሰሳ ታሪክ ዓይነቶች ሊኖረው ይችላል።</translation> -<translation id="6116338172782435947">ወደ ቅንጥብ ሰሌዳው የተቀዱ ጽሑፍ እና ምስሎችን ይመልከቱ</translation> +<translation id="6116338172782435947">ወደ ቅንጥብ ሰሌዳው የተቀዱ ጽሁፍ እና ምስሎችን ይመልከቱ</translation> <translation id="6118782133429281336">መነሻ ዝርዝር ባዶ ነው።</translation> <translation id="6120179357481664955">የእርስዎን UPI መታወቂያ ያስታውሳሉ?</translation> <translation id="6124432979022149706">Chrome Enterprise አያያዦች</translation> @@ -1967,6 +1970,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />ተኪውን፣ ኬላውን እና ደህንነቱ የተጠበቀ የዲኤንኤስ ውቅረትን በመፈተሽ ላይ<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ድርብ በግራ በኩል ስቴፕለር ምታ</translation> +<translation id="6374865374745447009">የመስኮት አስተዳደር</translation> <translation id="6377268785556383139">ለ«<ph name="SEARCH_TEXT" />» 1 ውጤት</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">ሊሆኑ የሚችሉ ክፍያ መጠየቂያዎች እየመጡ ነው።</translation> @@ -2454,7 +2458,7 @@ <translation id="7669907849388166732">{COUNT,plural, =1{ሚስጥራዊ ተብሎ በተጠቆመ ውሂብ ላይ የተወሰዱ እርምጃዎች (ከገቡ ጊዜ ጀምሮ 1 እርምጃ)። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" />}one{ሚስጥራዊ ተብሎ በተጠቆመ ውሂብ ላይ የተወሰዱ እርምጃዎች (ከገቡ ጊዜ ጀምሮ # እርምጃዎች)። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" />}other{ሚስጥራዊ ተብሎ በተጠቆመ ውሂብ ላይ የተወሰዱ እርምጃዎች (ከገቡ ጊዜ ጀምሮ # እርምጃዎች)። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" />}}</translation> <translation id="7673278391011283842">የመልዕክት ሳጥን 6</translation> <translation id="7675325315208090829">የክፍያ ዘዴዎችን ያስተዳድሩ...</translation> -<translation id="7676643023259824263">የቅንጥብ ሰሌዳ ጽሑፍ <ph name="TEXT" /> ይፈልጉ</translation> +<translation id="7676643023259824263">የቅንጥብ ሰሌዳ ጽሁፍ <ph name="TEXT" /> ይፈልጉ</translation> <translation id="7679367271685653708">በChrome ቅንብሮች ውስጥ የአሰሳ ታሪክዎን ይመልከቱ እና ያቀናብሩ</translation> <translation id="7679947978757153706">ቤዝቦል</translation> <translation id="7681273392938116652">ምናባዊ ስፖርቶች</translation> @@ -2797,7 +2801,7 @@ <translation id="8710842507289500830">የቅርጸ-ቁምፊ ቅጥ</translation> <translation id="8712637175834984815">ገባኝ</translation> <translation id="8713438021996895321">ስነ ግጥም</translation> -<translation id="8715502133575042727">የልጆች ስነ ጽሑፍ</translation> +<translation id="8715502133575042727">የልጆች ስነ ጽሁፍ</translation> <translation id="8718314106902482036">ክፍያ አልተጠናቀቀም</translation> <translation id="8719263113926255150"><ph name="ENTITY" />፣ <ph name="DESCRIPTION" />፣ የፍለጋ ጥቆማ ሐሳብ</translation> <translation id="8719528812645237045">በርካታ ብስ ከላይ</translation> @@ -2981,7 +2985,7 @@ <translation id="9199905725844810519">ማተም ታግዷል</translation> <translation id="9205078245616868884">የእርስዎ ውሂብ በእርስዎ የስምረት የይለፍ ቃል ተመስጥሯል። ስምረትን ለመጀመር ያስገቡት።</translation> <translation id="920511547311754821">ኮድዎን ማግኘት አልቻሉም? <ph name="IDS_AUTOFILL_CARD_UNMASK_OTP_INPUT_DIALOG_NEW_CODE_MESSAGE" /></translation> -<translation id="9207861905230894330">ጽሑፍ ማከል አልተቻለም።</translation> +<translation id="9207861905230894330">ጽሁፍ ማከል አልተቻለም።</translation> <translation id="9213433120051936369">ገጽታን ያብጁ</translation> <translation id="9215416866750762878">አንድ መተግበሪያ Chrome ከዚህ ጣቢያ ጋር ደህንነቱ በተጠበቀ ሁኔታ እንዳይገናኝ እያቆመው ነው</translation> <translation id="9219103736887031265">ምስሎች</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index f5f57ad..ce3b8dd 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Çap edin</translation> <translation id="1432187715652018471">səhifə xidmət işləyici quraşdırmaq istəyir.</translation> <translation id="1432581352905426595">Axtarış sistemlərini idarə edin</translation> +<translation id="1435940442311036198">Fərqli cihazda şifrə istifadə edin</translation> <translation id="1436185428532214179">Saytlar cihazınızdakı faylları və qovluqları redaktə etmək üçün icazə istəyə bilər</translation> <translation id="1442386063175183758">Sağ küncə qatlayın</translation> <translation id="1442987760062738829">Deşik açın</translation> @@ -1403,7 +1404,9 @@ <translation id="4798078619018708837">Kart məlumatlarını yeniləmək üçün <ph name="CREDIT_CARD" /> kartının bitmə tarixini və CVC-ni daxil edin. Təsdiqlədikdən sonra Google Hesabındakı kart məlumatları bu saytda paylaşılacaq.</translation> <translation id="4800132727771399293">Bitmə tarixi və CVC nömrəsini yoxlayın və yenidən cəhd edin</translation> <translation id="4803924862070940586"><ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> +<translation id="4806051791961048632">Toxunuş ID-sindən istifadə edin</translation> <translation id="4809079943450490359">Cihaz adminindən təlimatlar:</translation> +<translation id="4811450222531576619">Onun mənbəyi və mövzusu haqqında məlumat əldə edin</translation> <translation id="4812751092864334025">Daşına bilən texnologiya</translation> <translation id="4813512666221746211">Şəbəkə xətası</translation> <translation id="4816492930507672669">Səhifəyə uyğunlaşsın</translation> @@ -1676,6 +1679,7 @@ <translation id="5509780412636533143">İdarə olunan əlfəcinlər</translation> <translation id="5510481203689988000">Bu ayar Kuki ayarlarında idarə edilir.</translation> <translation id="5510766032865166053">Köçürülmüş və ya silinmiş ola bilər.</translation> +<translation id="5513528801833998679">Cihaz girişindən istifadə edin</translation> <translation id="5518670652865028077">İncəsənət və əyləncə</translation> <translation id="5519516356611866228">Dəyişikliklərlə</translation> <translation id="5523118979700054094">Siyasət adı</translation> @@ -1703,6 +1707,7 @@ <translation id="5571083550517324815">Bu ünvandan götürmək mümkün deyil. Başqa ünvan seçin.</translation> <translation id="557886905979275351">Ülgüclər və təraş aparatları</translation> <translation id="5580958916614886209">Bitmə ayını yoxlayın və yenidən cəhd edin</translation> +<translation id="558420943003240152">Parolları və şifrələri idarə edin…</translation> <translation id="5586446728396275693">Yadda saxlanılmış ünvan yoxdur</translation> <translation id="5587987780934666589">Platforma istifadəçisi</translation> <translation id="5593349413089863479">Bağlantı tam güvənli deyil</translation> @@ -1767,6 +1772,7 @@ <translation id="5765072501007116331">Çatdırılma üsulları və tələblərinə baxın, ünvan seçin</translation> <translation id="57689295674415555">Virtual kart nömrəsi daxil edilməyib?</translation> <translation id="5776313857861697733">Prioritet</translation> +<translation id="5778389256418062749">Fərqli Cihazda Şifrə İstifadə edin</translation> <translation id="5781136890105823427">Sınaq aktiv edildi</translation> <translation id="578305955206182703">Kəhrəba</translation> <translation id="57838592816432529">Səssiz</translation> @@ -2525,6 +2531,7 @@ <translation id="7880146494886811634">Ünvanın Yadda Saxlanması</translation> <translation id="7882421473871500483">Qəhvəyi</translation> <translation id="7882995332186050355">Karqo maşınları və treyleri</translation> +<translation id="788679692472636252">Parolları və Şifrələri idarə edin…</translation> <translation id="7887683347370398519">CVC kodunuzu yoxlayın və yenidən cəhd edin</translation> <translation id="7887885240995164102">Şəkildə şəkil xüsusiyyətinə daxil olun</translation> <translation id="7888575728750733395">Çapın göstərilmə məqsədi</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index 2b0abfd5..d686ced 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -1239,6 +1239,7 @@ <translation id="4329871760342656885">Памылка пры аналізе палітыкі: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Укладчык 5</translation> <translation id="4331708818696583467">Небяспечнае змесціва</translation> +<translation id="4333561522337981382">Кіраваць вокнамі на ўсіх дысплэях</translation> <translation id="4340575312453649552">Гэта рэклама выкарыстоўвала занадта многа рэсурсаў прылады, таму Chrome выдаліў яе.</translation> <translation id="4340982228985273705">Не ўстаноўлена, што гэты камп'ютар знаходзіцца пад карпаратыўным кіраваннем, таму палітыка дазваляе аўтаматычна ўсталёўваць толькі пашырэнні з Chrome Webstore. URL-адрас абнаўлення ў Chrome Webstore: <ph name="CWS_UPDATE_URL" />.</translation> <translation id="4346197816712207223">Якія крэдытныя карткі прымаюцца</translation> @@ -1452,6 +1453,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, для пошуку націсніце Tab, затым Enter</translation> <translation id="4930153903256238152">Вялікая ёмістасць</translation> +<translation id="4934780484581617878">Кіраванне вокнамі</translation> <translation id="4936134414789135531">Устаўленае значэнне "<ph name="VALUE_NAME" />" не знойдзена.</translation> <translation id="4936675324097895694">Фінансы</translation> <translation id="4940163644868678279">Рэжым інкогніта ў браўзеры Chrome</translation> @@ -1464,6 +1466,7 @@ <translation id="4958444002117714549">Разгарнуць спіс</translation> <translation id="4964505745997821360">Медыцынскае страхаванне</translation> <translation id="4968522289500246572">Гэта праграма створана для мабільных прылад, таму змяненне яе памеру можа выклікаць памылкі. Праграма можа працаваць няправільна або перазапусціцца.</translation> +<translation id="4968665849807487749">Сайт можа запытваць дазвол кіраваць вокнамі на ўсіх дысплэях</translation> <translation id="4969341057194253438">Выдаліць запіс</translation> <translation id="4973922308112707173">Дзве дзіркі зверху</translation> <translation id="4976702386844183910">Апошняе наведванне: <ph name="DATE" /></translation> @@ -1967,6 +1970,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Праверыць канфігурацыю абароненай DNS, проксі-сервера і брандмаўэра.<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Дзве скабы злева</translation> +<translation id="6374865374745447009">кіраванне вокнамі</translation> <translation id="6377268785556383139">1 вынік па запыце "<ph name="SEARCH_TEXT" />"</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">На сайце, на які вы збіраецеся перайсці, магчыма спагнанне сродкаў.</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 19458ea..715afc7 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">প্রিন্ট</translation> <translation id="1432187715652018471">পৃষ্ঠাটি একটি পরিষেবা নিয়ন্ত্রক ইনস্টল করতে চায়।</translation> <translation id="1432581352905426595">সার্চ ইঞ্জিনগুলি পরিচালনা করুন</translation> +<translation id="1435940442311036198">অন্য কোনও ডিভাইসে পাসকী ব্যবহার করুন</translation> <translation id="1436185428532214179">আপনার ডিভাইসের ফাইল ও ফোল্ডার এডিট করার অনুমতি চাইতে পারে</translation> <translation id="1442386063175183758">ডানদিকে গেট ফোল্ড</translation> <translation id="1442987760062738829">পাঞ্চ করুন</translation> @@ -1408,7 +1409,9 @@ <translation id="4798078619018708837">আপনার কার্ডের বিবরণ আপডেট করতে <ph name="CREDIT_CARD" />-এর মেয়াদ শেষের তারিখ এবং সিভিসি লিখুন। আপনি কনফার্ম করার পর আপনার Google অ্যাকাউন্ট থেকে কার্ডের বিবরণ এই সাইটে শেয়ার করা হবে।</translation> <translation id="4800132727771399293">Check your expiration date and CVC and try again</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">টাচ আইডি ব্যবহার করুন</translation> <translation id="4809079943450490359">আপনার ডিভাইস অ্যাডমিনিস্ট্রেটরের থেকে পাওয়া নির্দেশাবলী:</translation> +<translation id="4811450222531576619">এর সোর্স এবং বিষয় সম্পর্কে জানুন</translation> <translation id="4812751092864334025">পরে থাকা যায় এমন প্রযুক্তি</translation> <translation id="4813512666221746211">নেটওয়ার্ক ত্রুটি</translation> <translation id="4816492930507672669">পৃষ্ঠাতে মানানসই</translation> @@ -1681,6 +1684,7 @@ <translation id="5509780412636533143">পরিচালিত বুকমার্কগুলি</translation> <translation id="5510481203689988000">কুকি সেটিংস থেকে এই সেটিংস নিয়ন্ত্রণ করা যায়।</translation> <translation id="5510766032865166053">এটি হয়ত সরানো বা মুছে ফেলা হয়েছে।</translation> +<translation id="5513528801833998679">'ডিভাইস সাইন-ইন' পদ্ধতি ব্যবহার করুন</translation> <translation id="5518670652865028077">আর্ট এবং বিনোদন</translation> <translation id="5519516356611866228">আপনার করা এডিট সমেত</translation> <translation id="5523118979700054094">নীতি নাম</translation> @@ -1708,6 +1712,7 @@ <translation id="5571083550517324815">এই ঠিকানা থেকে পিক-আপ করা যাবে না। অন্য ঠিকানা বেছে নিন।</translation> <translation id="557886905979275351">রেজার এবং ট্রিমার</translation> <translation id="5580958916614886209">আপনার মেয়াদ শেষের মাস পরীক্ষা করে আবার চেষ্টা করুন</translation> +<translation id="558420943003240152">পাসওয়ার্ড ও পাসকী ম্যানেজ করুন…</translation> <translation id="5586446728396275693">কোনও ঠিকানা সংরক্ষণ করা নেই</translation> <translation id="5587987780934666589">প্ল্যাটফর্ম ব্যবহারকারী</translation> <translation id="5593349413089863479">কানেকশন সম্পূর্ণ সুরক্ষিত নয়</translation> @@ -1772,6 +1777,7 @@ <translation id="5765072501007116331">ডেলিভারির পদ্ধতি এবং প্রয়োজনীয়তাগুলি দেখতে একটি ঠিকানা বেছে নিন</translation> <translation id="57689295674415555">ভার্চুয়াল কার্ডের নম্বর দেওয়া হয়নি?</translation> <translation id="5776313857861697733">অগ্রাধিকার</translation> +<translation id="5778389256418062749">অন্য কোনও ডিভাইসে পাসকী ব্যবহার করুন</translation> <translation id="5781136890105823427">এক্সপেরিমেন্ট চালু করা হয়েছে</translation> <translation id="578305955206182703">হলুদাভ বাদামি</translation> <translation id="57838592816432529">মিউট করুন</translation> @@ -2529,6 +2535,7 @@ <translation id="7880146494886811634">ঠিকানা সেভ করুন</translation> <translation id="7882421473871500483">খয়েরি</translation> <translation id="7882995332186050355">কার্গো ট্রাক ও ট্রেলার</translation> +<translation id="788679692472636252">পাসওয়ার্ড ও পাসকী ম্যানেজ করুন…</translation> <translation id="7887683347370398519">আপনার CVC পরীক্ষা করে আবার চেষ্টা করুন</translation> <translation id="7887885240995164102">'ছবির-মধ্যে-ছবি' মোডে প্রবেশ করুন</translation> <translation id="7888575728750733395">প্রিন্ট রেন্ডারিং ইনটেন্ট</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 3f65d48..6452bee3 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Tisk</translation> <translation id="1432187715652018471">stránka chce instalovat obslužný nástroj služby.</translation> <translation id="1432581352905426595">Spravovat vyhledávače</translation> +<translation id="1435940442311036198">Použití přístupového klíče na jiném zařízení</translation> <translation id="1436185428532214179">Může žádat o úpravu souborů a složek v zařízení</translation> <translation id="1442386063175183758">Pravé otevírací přeložení</translation> <translation id="1442987760062738829">Děrování</translation> @@ -1403,7 +1404,9 @@ <translation id="4798078619018708837">Chcete-li aktualizovat údaje o kartě, zadejte datum vypršení platnosti a kód CVC karty <ph name="CREDIT_CARD" />. Po potvrzení budou údaje o kartě z vašeho účtu Google poskytnuty tomuto webu.</translation> <translation id="4800132727771399293">Zkontrolujte datum vypršení platnosti a kód CVC a zkuste to znovu.</translation> <translation id="4803924862070940586"><ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> +<translation id="4806051791961048632">Použít TouchID</translation> <translation id="4809079943450490359">Pokyny od správce zařízení:</translation> +<translation id="4811450222531576619">Informace o zdroji a tématu</translation> <translation id="4812751092864334025">Nositelná technika</translation> <translation id="4813512666221746211">Chyba sítě</translation> <translation id="4816492930507672669">Přizpůsobit na stránku</translation> @@ -1676,6 +1679,7 @@ <translation id="5509780412636533143">Spravované záložky</translation> <translation id="5510481203689988000">Toto nastavení se ovládá v nastavení souborů cookie.</translation> <translation id="5510766032865166053">Soubor mohl být přesunut nebo smazán.</translation> +<translation id="5513528801833998679">Použít přihlášení v zařízení</translation> <translation id="5518670652865028077">Umění a zábava</translation> <translation id="5519516356611866228">S vašimi změnami</translation> <translation id="5523118979700054094">Název zásady</translation> @@ -1703,6 +1707,7 @@ <translation id="5571083550517324815">Vyzvednutí na této adrese není možné. Vyberte jinou adresu.</translation> <translation id="557886905979275351">Žiletky a holicí strojky</translation> <translation id="5580958916614886209">Zkontrolujte měsíc vypršení platnosti a zkuste to znovu.</translation> +<translation id="558420943003240152">Spravovat hesla a přístupové klíče…</translation> <translation id="5586446728396275693">Žádné uložené adresy</translation> <translation id="5587987780934666589">Uživatel platformy</translation> <translation id="5593349413089863479">Připojení není plně zabezpečené</translation> @@ -1767,6 +1772,7 @@ <translation id="5765072501007116331">Chcete-li zobrazit způsoby doručení a požadavky, vyberte adresu</translation> <translation id="57689295674415555">Číslo virtuální karty není vyplněno?</translation> <translation id="5776313857861697733">Priorita</translation> +<translation id="5778389256418062749">Použít přístupový klíč na jiném zařízení</translation> <translation id="5781136890105823427">Je zapnutý experiment</translation> <translation id="578305955206182703">Žlutohnědá</translation> <translation id="57838592816432529">Ztlumit</translation> @@ -2523,6 +2529,7 @@ <translation id="7880146494886811634">Uložit adresu</translation> <translation id="7882421473871500483">Hnědá</translation> <translation id="7882995332186050355">Nákladní tahače a návěsy</translation> +<translation id="788679692472636252">Spravovat hesla a přístupové klíče…</translation> <translation id="7887683347370398519">Zkontrolujte kód CVC a zkuste to znovu</translation> <translation id="7887885240995164102">Spustit režim obrazu v obraze</translation> <translation id="7888575728750733395">Vykreslovací vzor tisku</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb index 84e705b2..5812302 100644 --- a/components/strings/components_strings_cy.xtb +++ b/components/strings/components_strings_cy.xtb
@@ -1240,6 +1240,7 @@ <translation id="4329871760342656885">Gwall dosrannu polisi: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Pentyrrwr 5</translation> <translation id="4331708818696583467">Ddim yn Ddiogel</translation> +<translation id="4333561522337981382">Rheoli ffenestri ar eich holl sgriniau</translation> <translation id="4340575312453649552">Gwnaeth yr hysbyseb hon ddefnyddio gormod o adnoddau i'ch dyfais, felly gwnaeth Chrome ei dynnu.</translation> <translation id="4340982228985273705">Nid yw'r cyfrifiadur hwn yn cael ei ganfod fel un a reolir gan fenter, felly dim ond estyniadau a gynhelir ar Chrome Webstore y gall y polisi eu gosod yn awtomatig. Yr URL diweddaru Chrome Webstore yw "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">Cardiau Credyd a Dderbynnir</translation> @@ -1453,6 +1454,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, pwyswch Tab yna Enter i chwilio</translation> <translation id="4930153903256238152">Capasiti mawr</translation> +<translation id="4934780484581617878">Rheoli ffenestri</translation> <translation id="4936134414789135531">Nid oedd modd dod o hyd i'r <ph name="VALUE_NAME" /> a fewnosodwyd.</translation> <translation id="4936675324097895694">Cyllid</translation> <translation id="4940163644868678279">Modd Anhysbys yn Chrome</translation> @@ -1465,6 +1467,7 @@ <translation id="4958444002117714549">Ehangu'r rhestr</translation> <translation id="4964505745997821360">Yswiriant iechyd</translation> <translation id="4968522289500246572">Mae'r ap hwn wedi'i ddylunio ar gyfer dyfeisiau symudol ac mae'n bosib na fydd yn newid maint yn dda. Mae'n bosib y bydd yr ap yn profi problemau neu'n ailgychwyn.</translation> +<translation id="4968665849807487749">Yn gallu gofyn i reoli ffenestri ar eich holl sgriniau</translation> <translation id="4969341057194253438">Dileu'r recordiad</translation> <translation id="4973922308112707173">Dau dwll ar y brig</translation> <translation id="4976702386844183910">Ymwelwyd ddiwethaf <ph name="DATE" /></translation> @@ -1968,6 +1971,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Wrthi'n gwirio'r dirprwy weinydd, y wal dân, a'r Ffurfweddiad DNS Diogel<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Dwy stapl ar y chwith</translation> +<translation id="6374865374745447009">rheoli ffenestri</translation> <translation id="6377268785556383139">1 canlyniad ar gyfer <ph name="SEARCH_TEXT" /></translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Taliadau posib o'ch blaen.</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 8d9e175b..484e9a2 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -1240,6 +1240,7 @@ <translation id="4329871760342656885">Fejl i parsing af politik: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Stabler 5</translation> <translation id="4331708818696583467">Ikke sikker</translation> +<translation id="4333561522337981382">Administrere vinduer på alle dine skærme</translation> <translation id="4340575312453649552">Denne annonce anvendte for mange ressourcer på din enhed, så Chrome har fjernet den.</translation> <translation id="4340982228985273705">Denne computer registreres ikke som virksomhedsadministreret, så politikken kan kun automatisk installere udvidelser, der hostes i Chrome Webshop. Opdateringswebadressen til Chrome Webshop er "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">Accepterede kreditkort</translation> @@ -1453,6 +1454,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, tryk på Tab-tasten efterfulgt af Enter for at søge</translation> <translation id="4930153903256238152">Stor kapacitet</translation> +<translation id="4934780484581617878">Vinduesstyring</translation> <translation id="4936134414789135531">Den indsatte <ph name="VALUE_NAME" /> blev ikke fundet.</translation> <translation id="4936675324097895694">Økonomi</translation> <translation id="4940163644868678279">Inkognitotilstand i Chrome</translation> @@ -1465,6 +1467,7 @@ <translation id="4958444002117714549">Udvid liste</translation> <translation id="4964505745997821360">Sundhedsforsikring</translation> <translation id="4968522289500246572">Denne app er udviklet til mobilenheder. Du kan muligvis ikke justere størrelsen på den uden at opleve problemer. Hvis du gør, kan der opstå fejl, eller appen kan genstarte.</translation> +<translation id="4968665849807487749">Kan anmode om at administrere vinduer på alle dine skærme</translation> <translation id="4969341057194253438">Slet optagelse</translation> <translation id="4973922308112707173">To huller øverst</translation> <translation id="4976702386844183910">Senest besøgt <ph name="DATE" /></translation> @@ -1968,6 +1971,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Tjekker konfigurationen af proxy, firewall og sikker DNS<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Dobbelthæftning i venstre side</translation> +<translation id="6374865374745447009">vinduesstyring</translation> <translation id="6377268785556383139">1 resultat for "<ph name="SEARCH_TEXT" />"</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Potentielle debiteringer forude</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index cadd4e2..298a7b8c 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -1241,6 +1241,7 @@ <translation id="4329871760342656885">Se produjo un error al analizar la política: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Apilador 5</translation> <translation id="4331708818696583467">No seguro</translation> +<translation id="4333561522337981382">Administrar ventanas en todas tus pantallas</translation> <translation id="4340575312453649552">Chrome quitó este anuncio porque usó demasiados recursos en tu dispositivo.</translation> <translation id="4340982228985273705">Esta computadora no se detectó como una empresa administrada, por lo que la política solo puede instalar automáticamente las extensiones alojadas en Chrome Web Store. La URL de actualización de Chrome Web Store es "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">Tarjetas de crédito aceptadas</translation> @@ -1454,6 +1455,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />: presiona Tab y, luego, Intro para realizar una búsqueda</translation> <translation id="4930153903256238152">Gran capacidad</translation> +<translation id="4934780484581617878">Administración de ventanas</translation> <translation id="4936134414789135531">No se pudo encontrar el <ph name="VALUE_NAME" /> insertado.</translation> <translation id="4936675324097895694">Finanzas</translation> <translation id="4940163644868678279">Modo Incógnito en Chrome</translation> @@ -1466,6 +1468,7 @@ <translation id="4958444002117714549">Mostrar lista</translation> <translation id="4964505745997821360">Seguro médico</translation> <translation id="4968522289500246572">Esta app está diseñada para dispositivos móviles y es posible que el cambio de tamaño no funcione correctamente. Posiblemente la app se reiniciará o presentará problemas.</translation> +<translation id="4968665849807487749">Puede solicitar permiso para administrar ventanas en todas tus pantallas</translation> <translation id="4969341057194253438">Borrar grabación</translation> <translation id="4973922308112707173">Perforación doble en la parte superior</translation> <translation id="4976702386844183910">Última visita: <ph name="DATE" /></translation> @@ -1969,6 +1972,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Comprobar la configuración del proxy, firewall o DNS seguro<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Grapas dobles a la izquierda</translation> +<translation id="6374865374745447009">administración de ventanas</translation> <translation id="6377268785556383139">1 resultado para "<ph name="SEARCH_TEXT" />"</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Es posible que se cobren cargos.</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index f31ef13..78587cd 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">چاپ</translation> <translation id="1432187715652018471">این صفحه میخواهد کنترلکننده سرویس نصب کند.</translation> <translation id="1432581352905426595">مدیریت موتورهای جستجو</translation> +<translation id="1435940442311036198">استفاده از گذرکلید در دستگاهی دیگر</translation> <translation id="1436185428532214179">میتواند برای ویرایش فایلها و پوشههای موجود در دستگاهتان درخواست دهد</translation> <translation id="1442386063175183758">سمت راست تاخوردگی دروازهای</translation> <translation id="1442987760062738829">سوراخ کردن</translation> @@ -1407,7 +1408,9 @@ <translation id="4798078619018708837">برای بهروزرسانی جزئیات کارت، تاریخ انقضا و CVC کارت <ph name="CREDIT_CARD" /> را وارد کنید. بعد از تأیید کردن، جزئیات کارت از حساب Google شما با این سایت همرسانی میشود.</translation> <translation id="4800132727771399293">تاریخ انقضا و CVC را بررسی کرده و دوباره امتحان کنید</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">استفاده از شناسه لمسی</translation> <translation id="4809079943450490359">دستورالعملها از سرپرست دستگاهتان:</translation> +<translation id="4811450222531576619">با منبع و موضوعش آشنا شوید</translation> <translation id="4812751092864334025">فناوری پوشیدنی</translation> <translation id="4813512666221746211">خطای شبکه</translation> <translation id="4816492930507672669">متناسب با صفحه</translation> @@ -1680,6 +1683,7 @@ <translation id="5509780412636533143">نشانکهای مدیریت شده</translation> <translation id="5510481203689988000">این تنظیم در «تنظیمات کوکیها» کنترل میشود.</translation> <translation id="5510766032865166053">ممکن است جابهجا یا حذف شده باشد.</translation> +<translation id="5513528801833998679">استفاده از ورود به سیستم دستگاه</translation> <translation id="5518670652865028077">هنر و سرگرمی</translation> <translation id="5519516356611866228">با تغییرات اعمالشده</translation> <translation id="5523118979700054094">نام خطمشی</translation> @@ -1707,6 +1711,7 @@ <translation id="5571083550517324815">تحویل گرفتن از این نشانی ممکن نیست. نشانی دیگری را انتخاب کنید.</translation> <translation id="557886905979275351">تیغ و ریشتراش</translation> <translation id="5580958916614886209">ماه انقضا را بررسی و دوباره امتحان کنید</translation> +<translation id="558420943003240152">مدیریت گذرواژهها و گذرکلیدها…</translation> <translation id="5586446728396275693">نشانی ذخیرهشدهای وجود ندارد</translation> <translation id="5587987780934666589">کاربر پلاتفرم</translation> <translation id="5593349413089863479">اتصال کاملاً امن نیست</translation> @@ -1771,6 +1776,7 @@ <translation id="5765072501007116331">برای دیدن روشهای تحویل و شرایط موردنیاز، یک نشانی انتخاب کنید</translation> <translation id="57689295674415555">شماره کارت مجازی تکمیل نشود؟</translation> <translation id="5776313857861697733">اولویت</translation> +<translation id="5778389256418062749">استفاده از گذرکلید در دستگاهی دیگر</translation> <translation id="5781136890105823427">آزمایش فعال شد</translation> <translation id="578305955206182703">کهربایی</translation> <translation id="57838592816432529">بیصدا کردن</translation> @@ -2529,6 +2535,7 @@ <translation id="7880146494886811634">ذخیره نشانی</translation> <translation id="7882421473871500483">قهوهای</translation> <translation id="7882995332186050355">کامیون باری و تریلر</translation> +<translation id="788679692472636252">مدیریت گذرواژهها و گذرکلیدها…</translation> <translation id="7887683347370398519">CVC را بررسی کرده و دوباره امتحان کنید</translation> <translation id="7887885240995164102">ورود به تصویر در تصویر</translation> <translation id="7888575728750733395">هدف پرداز چاپ</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 2c41382..703a19ed 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -1241,6 +1241,7 @@ <translation id="4329871760342656885">Käytännön jäsennysvirhe: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Pinoaja 5</translation> <translation id="4331708818696583467">Ei turvallinen</translation> +<translation id="4333561522337981382">hallinnoida ikkunoita kaikilla näytöillä</translation> <translation id="4340575312453649552">Chrome poisti tämän mainoksen, koska se käytti liian paljon laitteen resursseja.</translation> <translation id="4340982228985273705">Havaintojen mukaan tämä tietokone ei ole yrityksen hallinnoima, joten käytäntö voi asentaa automaattisesti vain Chrome Web Storessa hostattuja laajennuksia. Chrome Web Storen päivitys-URL-osoite on <ph name="CWS_UPDATE_URL" />.</translation> <translation id="4346197816712207223">Hyväksytyt luottokortit</translation> @@ -1454,6 +1455,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, tee haku painamalla ensin sarkainta ja sitten Enter</translation> <translation id="4930153903256238152">Suuri kapasiteetti</translation> +<translation id="4934780484581617878">Ikkunoiden hallinnointi</translation> <translation id="4936134414789135531">Lisättyä arvoa (<ph name="VALUE_NAME" />) ei löytynyt.</translation> <translation id="4936675324097895694">Talous</translation> <translation id="4940163644868678279">Chromen incognito-tila</translation> @@ -1466,6 +1468,7 @@ <translation id="4958444002117714549">Laajenna luettelo</translation> <translation id="4964505745997821360">Sairausvakuutus</translation> <translation id="4968522289500246572">Sovellus on suunniteltu mobiililaitteille eikä se ehkä näy oikein, jos muutat sen kokoa. Sovellus voi käynnistyä uudelleen tai siinä voi esiintyä ongelmia.</translation> +<translation id="4968665849807487749">Saa pyytää lupaa hallinnoida ikkunoita kaikilla näytöillä</translation> <translation id="4969341057194253438">Poista tallenne</translation> <translation id="4973922308112707173">Kaksi reikää yläreunassa</translation> <translation id="4976702386844183910">Viimeksi avattu <ph name="DATE" /></translation> @@ -1969,6 +1972,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Tarkista välityspalvelimen, palomuurin ja suojatun DNS:n määritykset<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Kaksi niittiä vasemmalla</translation> +<translation id="6374865374745447009">ikkunoiden hallinnointi</translation> <translation id="6377268785556383139">1 tulos: <ph name="SEARCH_TEXT" /></translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Tästä voi seurata kuluja</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 542d575..ccc561c 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -1240,6 +1240,7 @@ <translation id="4329871760342656885">પૉલિસી વિશ્લેષણ ભૂલ: <ph name="ERROR" /></translation> <translation id="4331519897422864041">સ્ટૅકર 5</translation> <translation id="4331708818696583467">સુરક્ષિત નથી</translation> +<translation id="4333561522337981382">તમારા બધા ડિસ્પ્લે પર વિન્ડો મેનેજ કરો</translation> <translation id="4340575312453649552">આ જાહેરાતે તમારા ડિવાઇસ માટે ઘણાં વધારે સાધનોનો ઉપયોગ કર્યો, આથી Chrome દ્વારા તેને કાઢી નાખવામાં આવી છે.</translation> <translation id="4340982228985273705">આ કમ્પ્યુટર એન્ટરપ્રાઇઝ દ્વારા મેનેજ થતું હોય તેવું જણાયું નથી, તેથી પૉલિસી માત્ર Chrome Webstore પર હોસ્ટ થયેલા એક્સ્ટેન્શન ઑટોમૅટિક રીતે ઇન્સ્ટૉલ કરી શકશે. Chrome Webstore અપડેટનું URL "<ph name="CWS_UPDATE_URL" />" છે.</translation> <translation id="4346197816712207223">સ્વીકૃત ક્રેડિટ કાર્ડ</translation> @@ -1453,6 +1454,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, શોધવા માટે Tab અને પછી Enter દબાવો</translation> <translation id="4930153903256238152">વિશાળ ક્ષમતા</translation> +<translation id="4934780484581617878">વિન્ડો મેનેજમેન્ટ</translation> <translation id="4936134414789135531">શામેલ કરેલું <ph name="VALUE_NAME" /> શોધી શકાયું નથી.</translation> <translation id="4936675324097895694">નાણાકીય</translation> <translation id="4940163644868678279">Chromeમાં છૂપો મોડ</translation> @@ -1465,6 +1467,7 @@ <translation id="4958444002117714549">સૂચિ વિસ્તૃત કરો</translation> <translation id="4964505745997821360">આરોગ્ય વીમો</translation> <translation id="4968522289500246572">આ ઍપ મોબાઇલ માટે બનાવવામાં આવી છે અને કદાચ તે યોગ્ય રીતે કદ બદલી શકશે નહીં. ઍપમાં સમસ્યાઓ આવી શકે છે અથવા તે ફરી શરૂ થઈ શકે છે.</translation> +<translation id="4968665849807487749">તમે તમારા બધા ડિસ્પ્લે પર વિન્ડો મેનેજ કરવા માટે કહી શકો છો</translation> <translation id="4969341057194253438">રેકોર્ડિંગ ડિલીટ કરો</translation> <translation id="4973922308112707173">ઉપરની બાજુએ બે કાણાં પાડો</translation> <translation id="4976702386844183910">છેલ્લે <ph name="DATE" />ના રોજ મુલાકાત લીધી</translation> @@ -1968,6 +1971,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />પ્રૉક્સી, ફાયરવૉલ અને DNS ગોઠવણીને ચેક કરવાનો<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ડાબી બાજુએ સ્ટેપલ લગાવો</translation> +<translation id="6374865374745447009">વિન્ડો મેનેજમેન્ટ</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' માટે 1 પરિણામ</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">આગળ ઉપર શુલ્ક લાગવાની શક્યતા.</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index a147e7e..ac0fd049 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">प्रिंट करें</translation> <translation id="1432187715652018471">यह पेज, सेवा हैंडलर इंस्टॉल करना चाहता है.</translation> <translation id="1432581352905426595">सर्च इंजन प्रबंधित करें</translation> +<translation id="1435940442311036198">Use a passkey on a different device</translation> <translation id="1436185428532214179">साइट, आपके डिवाइस पर फ़ाइलों या फ़ोल्डर में बदलाव करने की अनुमति मांग सकती है</translation> <translation id="1442386063175183758">दायां गेट फ़ोल्ड</translation> <translation id="1442987760062738829">पंच</translation> @@ -1407,7 +1408,9 @@ <translation id="4798078619018708837">अपने कार्ड का ब्यौरा अपडेट करने के लिए <ph name="CREDIT_CARD" /> की खत्म होने की तारीख और कार्ड वेरीफ़िकेशन कोड (सीवीसी) डालें. आपके पुष्टि करने के बाद, आपके Google खाते के कार्ड का ब्यौरा इस साइट के साथ शेयर किया जाएगा.</translation> <translation id="4800132727771399293">अपने क्रेडिट कार्ड की समय सीमा खत्म होने की तारीख और कार्ड वेरीफ़िकेशन कोड (सीवीसी) जांचें और फिर से कोशिश करें</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">Use Touch ID</translation> <translation id="4809079943450490359">आपके डिवाइस के एडमिन से मिले निर्देश:</translation> +<translation id="4811450222531576619">इस पेज के स्रोत और विषय के बारे में जानें</translation> <translation id="4812751092864334025">पहने जाने वाले डिवाइस</translation> <translation id="4813512666221746211">नेटवर्क गड़बड़ी</translation> <translation id="4816492930507672669">पेज में फ़िट करें</translation> @@ -1680,6 +1683,7 @@ <translation id="5509780412636533143">प्रबंधित बुकमार्क</translation> <translation id="5510481203689988000">इस सेटिंग को कुकी की सेटिंग में कंट्रोल किया जाता है.</translation> <translation id="5510766032865166053">हो सकता है कि उसे ले जाया गया हो या हटा दिया गया हो.</translation> +<translation id="5513528801833998679">Use device sign-in</translation> <translation id="5518670652865028077">कला और मनोरंजन</translation> <translation id="5519516356611866228">किए गए बदलावों के साथ दस्तावेज़ डाउनलोड करें</translation> <translation id="5523118979700054094">नीति का नाम</translation> @@ -1707,6 +1711,7 @@ <translation id="5571083550517324815">इस पते से पिक अप नहीं किया जा सकता. कोई दूसरा पता चुनें.</translation> <translation id="557886905979275351">रेज़र और शेवर</translation> <translation id="5580958916614886209">अपने क्रेडिट कार्ड की समय सीमा खत्म होने का महीना जांचें और फिर से कोशिश करें</translation> +<translation id="558420943003240152">Manage passwords and passkeys…</translation> <translation id="5586446728396275693">कोई सहेजा गया पता नहीं है</translation> <translation id="5587987780934666589">प्लैटफ़ॉर्म का उपयोगकर्ता</translation> <translation id="5593349413089863479">कनेक्शन पूरी तरह सुरक्षित नहीं है</translation> @@ -1771,6 +1776,7 @@ <translation id="5765072501007116331">वितरण के तरीके और ज़रूरतें देखने के लिए, कोई पता चुनें</translation> <translation id="57689295674415555">वर्चुअल कार्ड नंबर नहीं भरा गया?</translation> <translation id="5776313857861697733">प्राथमिकता</translation> +<translation id="5778389256418062749">Use A Passkey On A Different Device</translation> <translation id="5781136890105823427">परफ़ॉर्मेंस जांचना चालू है</translation> <translation id="578305955206182703">ऐंबर</translation> <translation id="57838592816432529">म्यूट करें</translation> @@ -2529,6 +2535,7 @@ <translation id="7880146494886811634">पता सेव करें</translation> <translation id="7882421473871500483">भूरा</translation> <translation id="7882995332186050355">कार्गो ट्रक और ट्रेलर</translation> +<translation id="788679692472636252">Manage Passwords And Passkeys…</translation> <translation id="7887683347370398519">अपना कार्ड वेरीफ़िकेशन कोड (सीवीसी) जांचे और फिर से कोशिश करें</translation> <translation id="7887885240995164102">पिक्चर में पिक्चर चालू करें</translation> <translation id="7888575728750733395">प्रिंट रेंडरिंग इंटेंट</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index 0b4f7c7..b066266 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Տպում</translation> <translation id="1432187715652018471">Էջը ծառայության մշակիչ է ուզում տեղադրել։</translation> <translation id="1432581352905426595">Կառավարել որոնման համակարգերը</translation> +<translation id="1435940442311036198">Օգտագործել անցաբառ մեկ այլ սարքում</translation> <translation id="1436185428532214179">Կարող է հայցել ձեր սարքի ֆայլերն ու պանակները փոփոխելու թույլտվություն</translation> <translation id="1442386063175183758">Աջ քառորդի ծալում</translation> <translation id="1442987760062738829">Անցք</translation> @@ -1240,6 +1241,7 @@ <translation id="4329871760342656885">Կանոնների վերլուծման սխալ՝ <ph name="ERROR" /></translation> <translation id="4331519897422864041">Շեղջիչ 5</translation> <translation id="4331708818696583467">Անվտանգ չէ</translation> +<translation id="4333561522337981382">Կառավարել պատուհանները ձեր բոլոր էկրաններին</translation> <translation id="4340575312453649552">Այս գովազդը չափազանց շատ ռեսուրս է օգտագործել ձեր սարքում, այդ պատճառով Chrome-ը հեռացրել է այն։</translation> <translation id="4340982228985273705">Այս համակարգիչը կազմակերպության կողմից կառավարվող համակարգիչ չէ: Համաձայն կանոնի՝ ավտոմատ կարող են տեղադրվել միայն Chrome Web Store-ի ընդլայնումները: Chrome Web Store-ի թարմացման URL-ն է՝ «<ph name="CWS_UPDATE_URL" />»:</translation> <translation id="4346197816712207223">Վարկային քարտեր, որոնցով կարելի է վճարել</translation> @@ -1406,7 +1408,9 @@ <translation id="4798078619018708837">Մուտքագրեք <ph name="CREDIT_CARD" /> քարտի վավերականության ժամկետն ու CVC կոդը՝ ձեր քարտի տվյալները թարմացնելու համար։ Հաստատումից հետո ձեր Google հաշվին կցված քարտի տվյալները կօգտագործվեն այս կայքի կողմից։</translation> <translation id="4800132727771399293">Ստուգեք սպառման ժամկետն ու CVC կոդը և նորից փորձեք</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">Օգտագործել Touch ID</translation> <translation id="4809079943450490359">Հրահանգներ ձեր սարքի ադմինիստրատորի կողմից՝</translation> +<translation id="4811450222531576619">Իմացեք ավելին աղբյուրի և թեմայի մասին</translation> <translation id="4812751092864334025">Կրելի սարքերի տեխնոլոգիաներ</translation> <translation id="4813512666221746211">Ցանցի սխալ</translation> <translation id="4816492930507672669">Հարմարեցնել էջին</translation> @@ -1453,6 +1457,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />։ Որոնելու համար սեղմեք Tab, ապա՝ Enter</translation> <translation id="4930153903256238152">Մեծ տարողություն</translation> +<translation id="4934780484581617878">Պատուհանների կառավարում</translation> <translation id="4936134414789135531">Մուտքագրված «<ph name="VALUE_NAME" />» արժեքը չի գտնվել։</translation> <translation id="4936675324097895694">Ֆինանսներ</translation> <translation id="4940163644868678279">Ինկոգնիտո ռեժիմը Chrome-ում</translation> @@ -1465,6 +1470,7 @@ <translation id="4958444002117714549">Ընդարձակել ցանկը</translation> <translation id="4964505745997821360">Առողջության ապահովագրություն</translation> <translation id="4968522289500246572">Այս հավելվածը նախատեսված է բջջային սարքերի համար։ Չափսը փոխելուց հետո հավելվածը կարող է սխալներով աշխատել։</translation> +<translation id="4968665849807487749">Կարող է հայցել պատուհանները բոլոր էկրաններին կառավարելու թույլտվություն</translation> <translation id="4969341057194253438">Ջնջել տեսագրությունը </translation> <translation id="4973922308112707173">Երկու անցք վերևում</translation> @@ -1678,6 +1684,7 @@ <translation id="5509780412636533143">Կառավարվող էջանիշներ</translation> <translation id="5510481203689988000">Այս պարամետրը կարող եք կառավարել քուքիների կարգավորումներում։</translation> <translation id="5510766032865166053">Հնարավոր է, որ այն տեղափոխվել կամ ջնջվել է:</translation> +<translation id="5513528801833998679">Օգտագործել սարքի մուտքը</translation> <translation id="5518670652865028077">Արվեստ և զվարճանք</translation> <translation id="5519516356611866228">Ձեր կատարած փոփոխություններով</translation> <translation id="5523118979700054094">Կանոնի անունը</translation> @@ -1705,6 +1712,7 @@ <translation id="5571083550517324815">Տվյալ հասցեից առաքման ընդունում հնարավոր չէ: Ընտրեք այլ հասցե:</translation> <translation id="557886905979275351">Ածելիներ և սափրիչներ</translation> <translation id="5580958916614886209">Ստուգեք սպառման ամիսը և նորից փորձեք</translation> +<translation id="558420943003240152">Կառավարել գաղտնաբառերն ու անցաբառերը…</translation> <translation id="5586446728396275693">Պահված հասցեներ չկան</translation> <translation id="5587987780934666589">Հարթակի օգտատեր</translation> <translation id="5593349413089863479">Կապը լիովին պաշտպանված չէ</translation> @@ -1769,6 +1777,7 @@ <translation id="5765072501007116331">Առաքման եղանակներն ու պայմանները տեսնելու համար ընտրեք հասցե</translation> <translation id="57689295674415555">Վիրտուալ քարտի համարը չի՞ լրացվել</translation> <translation id="5776313857861697733">Առաջնահերթություն</translation> +<translation id="5778389256418062749">Օգտագործել անցաբառ մեկ այլ սարքում</translation> <translation id="5781136890105823427">Փորձարկումը միացված է</translation> <translation id="578305955206182703">Սաթ</translation> <translation id="57838592816432529">Անջատել ձայնը</translation> @@ -1969,6 +1978,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Ստուգել պրոքսի-սերվերի, հրապատի և ապահով DNS-ի կազմաձևումը<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Երկու ամրակ ձախ կողմում</translation> +<translation id="6374865374745447009">պատուհանների կառավարում</translation> <translation id="6377268785556383139">«<ph name="SEARCH_TEXT" />»-ի որոնման 1 արդյունք</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Կարող են վճարներ գանձվել</translation> @@ -2526,6 +2536,7 @@ <translation id="7880146494886811634">Պահել հասցեն</translation> <translation id="7882421473871500483">Շագանակագույն</translation> <translation id="7882995332186050355">Բեռնատարներ և քարշակներ</translation> +<translation id="788679692472636252">Կառավարել գաղտնաբառերն ու անցաբառերը…</translation> <translation id="7887683347370398519">Ստուգեք ձեր CVC կոդը և նորից փորձեք</translation> <translation id="7887885240995164102">Անցնել «նկար նկարի մեջ» ռեժիմի</translation> <translation id="7888575728750733395">Գույները վերահաշվելու եղանակ տպման համար</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index bc2bd4a..8dbfd2c 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -1240,6 +1240,7 @@ <translation id="4329871760342656885">שגיאה בניתוח המדיניות: <ph name="ERROR" /></translation> <translation id="4331519897422864041">מערים 5</translation> <translation id="4331708818696583467">לא מאובטח</translation> +<translation id="4333561522337981382">ניהול החלונות בכל המסכים</translation> <translation id="4340575312453649552">המודעה הזו צרכה משאבים רבים מדי מהמכשיר שלך, ולכן היא הוסרה על-ידי Chrome.</translation> <translation id="4340982228985273705">המחשב לא זוהה כמכשיר המנוהל על ידי הארגון, כך שלפי המדיניות מותר להתקין אוטומטית רק תוספים מחנות האינטרנט של Chrome. כתובת האתר לעדכונים מחנות האינטרנט של Chrome היא "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">כרטיסי אשראי שהסוחר מקבל</translation> @@ -1457,6 +1458,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, יש להקיש על Tab ואז על Enter כדי לחפש</translation> <translation id="4930153903256238152">קיבולת גבוהה</translation> +<translation id="4934780484581617878">ניהול החלונות</translation> <translation id="4936134414789135531">הערך <ph name="VALUE_NAME" /> שהוזן לא נמצא.</translation> <translation id="4936675324097895694">פיננסים</translation> <translation id="4940163644868678279">מצב פרטי ב-Chrome</translation> @@ -1469,6 +1471,7 @@ <translation id="4958444002117714549">הרחבת רשימה</translation> <translation id="4964505745997821360">ביטוח רפואי</translation> <translation id="4968522289500246572">האפליקציה מיועדת לנייד וייתכן ששינוי הגודל שלה לא יפעל כראוי. עשויות להיות בעיות באפליקציה או שהיא תופעל מחדש.</translation> +<translation id="4968665849807487749">האתר יכול לבקש הרשאה לנהל את החלונות בכל המסכים</translation> <translation id="4969341057194253438">מחיקת ההקלטה</translation> <translation id="4973922308112707173">שני ניקובים בחלק העליון</translation> <translation id="4976702386844183910">הכניסה האחרונה: <ph name="DATE" /></translation> @@ -1973,6 +1976,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />לבדוק את שרת ה-Proxy, תצורת ה-DNS המאובטח וחומת האש.<ph name="END_LINK" /></translation> <translation id="6366710531182496394">שתי סיכות הידוק בצד שמאל</translation> +<translation id="6374865374745447009">ניהול החלונות</translation> <translation id="6377268785556383139">תוצאה אחת בשביל '<ph name="SEARCH_TEXT" />'</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">ייתכנו חיובים באתר.</translation>
diff --git a/components/strings/components_strings_ka.xtb b/components/strings/components_strings_ka.xtb index 550f30e..958fcda 100644 --- a/components/strings/components_strings_ka.xtb +++ b/components/strings/components_strings_ka.xtb
@@ -1241,6 +1241,7 @@ <translation id="4329871760342656885">შეცდომა წესების გარჩევისას: <ph name="ERROR" /></translation> <translation id="4331519897422864041">სტეკერი 5</translation> <translation id="4331708818696583467">დაუცველი</translation> +<translation id="4333561522337981382">ფანჯრების მართვა თქვენს ყველა ეკრანზე</translation> <translation id="4340575312453649552">ეს რეკლამა იყენებდა თქვენი მოწყობილობის მეტისმეტად ბევრ რესურს, ამიტომ Chrome-მა ამოშალა ის.</translation> <translation id="4340982228985273705">ამ კომპიუტერს არ მართავს ორგანიზაცია. შესაბამისად, წესების მეშვეობით ავტომატურად შეიძლება დაინსტალირდეს მხოლოდ Chrome Web Store-ში არსებული გაფართოებები. Chrome Web Store-ის განახლების URL: „<ph name="CWS_UPDATE_URL" />“.</translation> <translation id="4346197816712207223">მისაღები საკრედიტო ბარათები</translation> @@ -1456,6 +1457,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" />-დან</translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, მოსაძიებლად დააჭირეთ Tab-ს, შემდეგ Enter-ს</translation> <translation id="4930153903256238152">დიდი მოცულობის</translation> +<translation id="4934780484581617878">ფანჯრების მართვა</translation> <translation id="4936134414789135531">ჩასმული <ph name="VALUE_NAME" /> ვერ მოიძებნა.</translation> <translation id="4936675324097895694">ფინანსები</translation> <translation id="4940163644868678279">ინკოგნიტო რეჟიმი Chrome-ში</translation> @@ -1468,6 +1470,7 @@ <translation id="4958444002117714549">სიის გაშლა</translation> <translation id="4964505745997821360">ჯანმრთელობის დაზღვევა</translation> <translation id="4968522289500246572">ეს აპი შექმნილია მობილურისთვის და შესაძლოა, ზომა არასათანადოდ შეეცვალოს. მოსალოდნელია, აპს პრობლემები წარმოექმნას ან ხელახლა გაეშვას.</translation> +<translation id="4968665849807487749">შეუძლია მოითხოვოს ფანჯრების მართვა თქვენს ყველა ეკრანზე</translation> <translation id="4969341057194253438">ჩანაწერის წაშლა</translation> <translation id="4973922308112707173">ორმაგად გახვრეტა ზემოთ</translation> <translation id="4976702386844183910">ბოლო ვიზიტი: <ph name="DATE" /></translation> @@ -1974,6 +1977,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />პროქსის, ქსელის დაცვისა და დაცული DNS-ის კონფიგურაციის შემოწმება<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ორმაგად დასტეპლერება მარცხნივ</translation> +<translation id="6374865374745447009">ფანჯრების მართვა</translation> <translation id="6377268785556383139">მოთხოვნაზე „<ph name="SEARCH_TEXT" />“ მოიძებნა 1 შედეგი</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">მოერიდეთ პოტენციურ ხარჯებს.</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index 2f1fcbf..9e476ab 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -1239,6 +1239,7 @@ <translation id="4329871760342656885">Саясатты талдау қатесі: <ph name="ERROR" /></translation> <translation id="4331519897422864041">5-жинастырушы</translation> <translation id="4331708818696583467">Қауіпсіз емес</translation> +<translation id="4333561522337981382">Барлық дисплейде терезелерді басқару</translation> <translation id="4340575312453649552">Бұл жарнама құрылғыңыздың тым көп ресурсын пайдаланғандықтан, Chrome оны өшірді.</translation> <translation id="4340982228985273705">Бұл компьютерді кәсіпорын басқармайтындықтан, саясат тек Chrome Webstore дүкенінде орналасқан кеңейтімдерді автоматты түрде орната алады. Chrome Webstore жаңартылған нұсқасының URL мекенжайы: "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">Қабылданатын несиелік карталар</translation> @@ -1452,6 +1453,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />. Іздеу үшін алдымен Tab, одан кейін Enter пернесін басыңыз.</translation> <translation id="4930153903256238152">Үлкен сыйымдылық</translation> +<translation id="4934780484581617878">Терезені басқару</translation> <translation id="4936134414789135531">Енгізілген <ph name="VALUE_NAME" /> табылмады.</translation> <translation id="4936675324097895694">Қаржы</translation> <translation id="4940163644868678279">Chrome браузеріндегі инкогнито режимі</translation> @@ -1464,6 +1466,7 @@ <translation id="4958444002117714549">Тізімді жаю</translation> <translation id="4964505745997821360">Денсаулықты сақтандыру</translation> <translation id="4968522289500246572">Бұл қолданба мобильдік құрылғыға арналған. Өлшемін өзгерту кезінде қолданба дұрыс жұмыс істемеуі немесе өшіп қосылуы мүмкін.</translation> +<translation id="4968665849807487749">Барлық дисплейде терезелерді басқару сұралуы мүмкін.</translation> <translation id="4969341057194253438">Жазбаны жою</translation> <translation id="4973922308112707173">Жоғарғы жағын екі рет тесу</translation> <translation id="4976702386844183910">Cоңғы кіру: <ph name="DATE" /></translation> @@ -1967,6 +1970,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Прокси-серверді, брандмауэрді және қауіпсіз DNS конфигурациясын тексеру<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Сол жағын екі рет қапсыру</translation> +<translation id="6374865374745447009">терезені басқару</translation> <translation id="6377268785556383139">"<ph name="SEARCH_TEXT" />" сұрауы бойынша 1 нәтиже шықты</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Сізден ақы алынуы мүмкін.</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb index 1484d4d..cf17ff5e 100644 --- a/components/strings/components_strings_km.xtb +++ b/components/strings/components_strings_km.xtb
@@ -192,6 +192,7 @@ <translation id="1430915738399379752">បោះពុម្ព</translation> <translation id="1432187715652018471">ទំព័រចង់ដំឡើងឧបករណ៍ដោះស្រាយសេវាកម្ម។</translation> <translation id="1432581352905426595">គ្រប់គ្រងម៉ាស៊ីនស្វែងរក</translation> +<translation id="1435940442311036198">ប្រើកូដសម្ងាត់នៅលើឧបករណ៍ផ្សេង</translation> <translation id="1436185428532214179">អាចស្នើសុំកែឯកសារ និងថតនៅក្នុងឧបករណ៍របស់អ្នក</translation> <translation id="1442386063175183758">បត់ភ្ជិតផ្ទាំងខាងស្ដាំ</translation> <translation id="1442987760062738829">ចោះ</translation> @@ -1411,7 +1412,9 @@ <translation id="4798078619018708837">បញ្ចូលកាលបរិច្ឆេទផុតកំណត់ និង CVC សម្រាប់ <ph name="CREDIT_CARD" /> ដើម្បីធ្វើបច្ចុប្បន្នភាពព័ត៌មានលម្អិតអំពីកាតរបស់អ្នក។ បន្ទាប់ពីអ្នកបញ្ជាក់ហើយ ព័ត៌មានលម្អិតអំពីកាតដែលបានមកពីគណនី Google របស់អ្នកនឹងត្រូវបានចែករំលែកជាមួយគេហទំព័រនេះ។</translation> <translation id="4800132727771399293">ពិនិត្យកាលបរិចេ្ឆទផុតកំណត់ និងលេខកូដ CVC ហើយព្យាយាមម្តងទៀត</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">ប្រើ TouchID</translation> <translation id="4809079943450490359">ការណែនាំពីអ្នកគ្រប់គ្រងឧបករណ៍របស់អ្នក៖</translation> +<translation id="4811450222531576619">ស្វែងយល់អំពីប្រភព និងប្រធានបទរបស់ទំព័រនេះ</translation> <translation id="4812751092864334025">បច្ចេកវិទ្យាឧបករណ៍អាចពាក់បាន</translation> <translation id="4813512666221746211">កំហុសឆ្គងបណ្តាញ</translation> <translation id="4816492930507672669">សមនឹងទំព័រ</translation> @@ -1684,6 +1687,7 @@ <translation id="5509780412636533143">ចំណាំដែលបានគ្រប់គ្រង</translation> <translation id="5510481203689988000">ការកំណត់នេះត្រូវបានគ្រប់គ្រងនៅក្នុងការកំណត់ខូគី។</translation> <translation id="5510766032865166053">វាប្រហែលជាត្រូវបានផ្លាស់ទី ឬលុប</translation> +<translation id="5513528801833998679">ប្រើការចូលឧបករណ៍</translation> <translation id="5518670652865028077">សិល្បៈ និងការកម្សាន្ត</translation> <translation id="5519516356611866228">ជាមួយការផ្លាស់ប្ដូររបស់អ្នក</translation> <translation id="5523118979700054094">ឈ្មោះគោលការណ៍</translation> @@ -1711,6 +1715,7 @@ <translation id="5571083550517324815">មិនអាចទៅយកពីអាសយដ្ឋាននេះបានទេ។ សូមជ្រើសរើសអាសយដ្ឋានផ្សេង។</translation> <translation id="557886905979275351">ឡាម និងប្រដាប់កោរោម</translation> <translation id="5580958916614886209">ពិនិត្យមើលខែផុតកំណត់របស់អ្នក រួចព្យាយាមម្តងទៀត</translation> +<translation id="558420943003240152">គ្រប់គ្រងពាក្យសម្ងាត់ និងកូដសម្ងាត់…</translation> <translation id="5586446728396275693">គ្មានអាសយដ្ឋានដែលបានរក្សាទុកទេ</translation> <translation id="5587987780934666589">អ្នកប្រើប្រាស់ប្រព័ន្ធ</translation> <translation id="5593349413089863479">ការតភ្ជាប់នេះមិនមានសុវត្ថិភាពទាំងស្រុងទេ</translation> @@ -1775,6 +1780,7 @@ <translation id="5765072501007116331">ដើម្បីមើលមធ្យោបាយ និងលក្ខខណ្ឌតម្រូវនៃការដឹកជញ្ជូនផ្ទាល់ សូមជ្រើសរើសអាសយដ្ឋាន</translation> <translation id="57689295674415555">មិនបានបំពេញលេខកាតនិម្មិតមែនទេ?</translation> <translation id="5776313857861697733">អាទិភាព</translation> +<translation id="5778389256418062749">ប្រើកូដសម្ងាត់នៅលើឧបករណ៍ផ្សេង</translation> <translation id="5781136890105823427">បានបើកការពិសោធ</translation> <translation id="578305955206182703">លឿងទុំ</translation> <translation id="57838592816432529">បិទសម្លេង</translation> @@ -2534,6 +2540,7 @@ <translation id="7880146494886811634">រក្សាទុកអាសយដ្ឋាន</translation> <translation id="7882421473871500483">ត្នោត</translation> <translation id="7882995332186050355">រថយន្តដឹកទំនិញ និងរថយន្តសណ្ដោង</translation> +<translation id="788679692472636252">គ្រប់គ្រងពាក្យសម្ងាត់ និងកូដសម្ងាត់…</translation> <translation id="7887683347370398519">ពិនិត្យលេខកូដ CVC ហើយព្យាយាមម្តងទៀត</translation> <translation id="7887885240995164102">ចូលមុខងាររូបក្នុងរូប</translation> <translation id="7888575728750733395">ចេតនានៃការបំប្លែងការបោះពុម្ព</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index ac9a2b9..8c76566 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -1239,6 +1239,7 @@ <translation id="4329871760342656885">Саясатты талдоо катасы: <ph name="ERROR" /></translation> <translation id="4331519897422864041">5-төшөгүч</translation> <translation id="4331708818696583467">Коопсуз эмес</translation> +<translation id="4333561522337981382">Бардык экрандардагы терезелерди тескөө</translation> <translation id="4340575312453649552">Бул жарнама түзмөгүңүздүн ресурстарын ашыкча колдонуп жаткандыктан Chrome аны өчүрүп койду.</translation> <translation id="4340982228985273705">Бул компьютер ишкана тарабынан башкарылбаганы аныкталды, андыктан саясат Chrome Желе дүкөнүндө жайгашкан кеңейтүүлөрдү гана автоматтык түрдө орното алат. Chrome Желе дүкөнүн жаңыртуучу URL: "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">Кабыл алынган насыя карточкалары</translation> @@ -1452,6 +1453,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />. Издөө үчүн Tab, андан соң Enter баскычтарын басыңыз</translation> <translation id="4930153903256238152">Сыйымдуулугу чоң</translation> +<translation id="4934780484581617878">Терезени тескөө</translation> <translation id="4936134414789135531">Киргизилген <ph name="VALUE_NAME" /> табылган жок.</translation> <translation id="4936675324097895694">Каржы</translation> <translation id="4940163644868678279">Chrome'догу жашыруун өтмөк</translation> @@ -1464,6 +1466,7 @@ <translation id="4958444002117714549">Тизмени жайып көрсөтүү</translation> <translation id="4964505745997821360">Ден соолукту камсыздандыруу</translation> <translation id="4968522289500246572">Бул колдонмо мобилдик түзмөк үчүн түзүлгөндүктөн, өлчөмү туура өзгөрбөшү мүмкүн. Колдонмодо маселелер келип чыгышы же өчүп күйүшү мүмкүн.</translation> +<translation id="4968665849807487749">Бардык экрандардагы терезелерди тескөөнү сурана алат</translation> <translation id="4969341057194253438">Жаздырууну өчүрүү</translation> <translation id="4973922308112707173">Жогорку жагын эки жолу тешүү</translation> <translation id="4976702386844183910">Акыркы жолу кирген: <ph name="DATE" /></translation> @@ -1967,6 +1970,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Прокси, брандауэр жана DNS конфигурациясын текшерип көрүңүз<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Сол жагын эки жолу илмек менен бекитүү</translation> +<translation id="6374865374745447009">терезени тескөө</translation> <translation id="6377268785556383139">"<ph name="SEARCH_TEXT" />" сурамы боюнча 1 жыйынтык табылды</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Акы алынышы мүмкүн.</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 98c973b..fb07c86 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">പ്രിന്റ് ചെയ്യുക</translation> <translation id="1432187715652018471">സേവനം കൈകാര്യം ചെയ്യുന്ന സംവിധാനം ഇൻസ്റ്റാൾ ചെയ്യാൻ ഈ പേജ് താൽപ്പര്യപ്പെടുന്നു.</translation> <translation id="1432581352905426595">തിരയൽ യന്ത്രം മാനേജ് ചെയ്യുക</translation> +<translation id="1435940442311036198">മറ്റൊരു ഉപകരണത്തിൽ പാസ്കീ ഉപയോഗിക്കുക</translation> <translation id="1436185428532214179">നിങ്ങളുടെ ഉപകരണത്തിലെ ഫയലുകളും ഫോൾഡറുകളും എഡിറ്റ് ചെയ്യാൻ ആവശ്യപ്പെടാം</translation> <translation id="1442386063175183758">റൈറ്റ് ഗേറ്റ് മടക്ക്</translation> <translation id="1442987760062738829">പഞ്ച് ചെയ്യുക</translation> @@ -1406,7 +1407,9 @@ <translation id="4798078619018708837">നിങ്ങളുടെ കാർഡ് വിശദാംശങ്ങൾ അപ്ഡേറ്റ് ചെയ്യാൻ <ph name="CREDIT_CARD" />-ന്റെ കാലാവധി തീരുന്ന തീയതിയും CVC-യും നൽകുക. സ്ഥിരീകരിച്ച് കഴിഞ്ഞാൽ, നിങ്ങളുടെ Google അക്കൗണ്ടിൽ നിന്നുള്ള കാർഡ് വിശദാംശങ്ങൾ ഈ സൈറ്റുമായി പങ്കിടും.</translation> <translation id="4800132727771399293">നിങ്ങളുടെ കാലഹരണ തീയതിയും CVC യും പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">ടച്ച് ഐഡി ഉപയോഗിക്കുക</translation> <translation id="4809079943450490359">നിങ്ങളുടെ ഉപകരണ അഡ്മിന്റെ നിർദ്ദേശങ്ങൾ:</translation> +<translation id="4811450222531576619">അതിന്റെ ഉറവിടത്തെയും വിഷയത്തെയും കുറിച്ച് അറിയുക</translation> <translation id="4812751092864334025">ധരിക്കാനാകുന്ന സാങ്കേതികവിദ്യ</translation> <translation id="4813512666221746211">നെറ്റ്വര്ക്ക് പിശക്</translation> <translation id="4816492930507672669">പേജിന് യുക്തമാക്കുക</translation> @@ -1679,6 +1682,7 @@ <translation id="5509780412636533143">നിയന്ത്രിത ബുക്കുമാർക്കുകൾ</translation> <translation id="5510481203689988000">കുക്കികളുടെ ക്രമീകരണത്തിൽ ഈ ക്രമീകരണം നിയന്ത്രിച്ചിരിക്കുന്നു.</translation> <translation id="5510766032865166053">ഇത് നീക്കുകയോ ഇല്ലാതാക്കുകയോ ചെയ്തിരിക്കാം.</translation> +<translation id="5513528801833998679">ഉപകരണത്തിലെ സൈൻ ഇൻ ചെയ്യൽ ഉപയോഗിക്കുക</translation> <translation id="5518670652865028077">കലയും വിനോദവും</translation> <translation id="5519516356611866228">നിങ്ങൾ വരുത്തിയ മാറ്റങ്ങൾ സഹിതം</translation> <translation id="5523118979700054094">നയത്തിന്റെ പേര്</translation> @@ -1706,6 +1710,7 @@ <translation id="5571083550517324815">ഈ വിലാസത്തിൽ നിന്ന് പിക്ക്അപ്പ് ചെയ്യാൻ കഴിയില്ല. മറ്റൊരു വിലാസം തിരഞ്ഞെടുക്കുക.</translation> <translation id="557886905979275351">റേസറുകളും ഷേവറുകളും</translation> <translation id="5580958916614886209">കാലാവധി തീരുന്ന മാസം പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക</translation> +<translation id="558420943003240152">പാസ്വേഡുകളും പാസ്കീകളും മാനേജ് ചെയ്യുക…</translation> <translation id="5586446728396275693">സംരക്ഷിച്ച വിലാസങ്ങളൊന്നുമില്ല</translation> <translation id="5587987780934666589">പ്ലാറ്റ്ഫോം ഉപയോക്താവ്</translation> <translation id="5593349413089863479">കണക്ഷൻ പൂർണ്ണമായും സുരക്ഷിതമല്ല</translation> @@ -1770,6 +1775,7 @@ <translation id="5765072501007116331">ഡെലിവറി രീതികളും ആവശ്യകതകളും കാണാൻ ഒരു വിലാസം തിരഞ്ഞെടുക്കുക</translation> <translation id="57689295674415555">വെർച്വൽ കാർഡ് നമ്പർ പൂരിപ്പിച്ചിട്ടില്ലേ?</translation> <translation id="5776313857861697733">മുൻഗണന</translation> +<translation id="5778389256418062749">മറ്റൊരു ഉപകരണത്തിൽ പാസ്കീ ഉപയോഗിക്കുക</translation> <translation id="5781136890105823427">പരീക്ഷണം പ്രവർത്തനക്ഷമമാക്കി</translation> <translation id="578305955206182703">ആംബർ</translation> <translation id="57838592816432529">മ്യൂട്ട് ചെയ്യുക</translation> @@ -2526,6 +2532,7 @@ <translation id="7880146494886811634">വിലാസം സംരക്ഷിക്കുക</translation> <translation id="7882421473871500483">തവിട്ട് നിറം</translation> <translation id="7882995332186050355">കാർഗോ ട്രക്കുകളും ട്രെയ്ലറുകളും</translation> +<translation id="788679692472636252">പാസ്വേഡുകളും പാസ്കീകളും മാനേജ് ചെയ്യുക…</translation> <translation id="7887683347370398519">നിങ്ങളുടെ CVC പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക</translation> <translation id="7887885240995164102">ചിത്രത്തിനുള്ളിലെ ചിത്രത്തിലേക്ക് പ്രവേശിക്കുക</translation> <translation id="7888575728750733395">പ്രിന്റ് റെൻഡറിംഗ് ഇന്റന്റ്</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index 393313a7..df81d6b0 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -1242,6 +1242,7 @@ <translation id="4329871760342656885">မူဝါဒခွဲခြမ်းစိတ်ဖြာမှု အမှား- <ph name="ERROR" /></translation> <translation id="4331519897422864041">စီထည့်သည့်ပုံး ၅</translation> <translation id="4331708818696583467">လုံခြုံမှုမရှိပါ</translation> +<translation id="4333561522337981382">သင့်ဖန်သားပြင်အားလုံးတွင် ဝင်းဒိုးများစီမံခြင်း</translation> <translation id="4340575312453649552">ဤကြော်ငြာသည် သင့်စက်ပစ္စည်းမှ အရင်းအမြစ်များစွာကို အသုံးပြုထားသည့်အတွက် Chrome က ၎င်းကို ဖယ်ရှားထားသည်။</translation> <translation id="4340982228985273705">ဤကွန်ပျူတာကို စီးပွားရေးလုပ်ငန်းတစ်ခုက ကြီးကြပ်မထားကြောင်း တွေ့ရှိရသောကြောင့် မူဝါဒသည် Chrome Webstore တွင် တင်ထားသည့် နောက်ဆက်တွဲများကိုသာ အလိုအလျောက် ထည့်သွင်းနိုင်ပါသည်။ Chrome Webstore အပ်ဒိတ် URL သည် "<ph name="CWS_UPDATE_URL" />" ဖြစ်သည်။</translation> <translation id="4346197816712207223">အသုံးပြုနိုင်သည့် ခရက်ဒစ်ကတ်များ</translation> @@ -1457,6 +1458,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />၊ Tab ကိုနှိပ်ပြီးနောက် Enter နှိပ်၍ ရှာဖွေပါ</translation> <translation id="4930153903256238152">သိုလှောင်နိုင်မှု မြင့်သည်</translation> +<translation id="4934780484581617878">ဝင်းဒိုး စီမံရန်</translation> <translation id="4936134414789135531">ထည့်သွင်းထားသော <ph name="VALUE_NAME" /> ကို ရှာမတွေ့ပါ။</translation> <translation id="4936675324097895694">ငွေကြေးဆိုင်ရာ</translation> <translation id="4940163644868678279">Chrome ရှိ ရုပ်ဖျက်မုဒ်</translation> @@ -1469,6 +1471,7 @@ <translation id="4958444002117714549">စာရင်းကို ချဲ့ပါ။</translation> <translation id="4964505745997821360">ကျန်းမာရေးအာမခံ</translation> <translation id="4968522289500246572">ဤအက်ပ်ကို မိုဘိုင်းအတွက် ထုတ်လုပ်ထားသဖြင့် ကောင်းစွာ အရွယ်အစားပြန်ပြင်နိုင်မည် မဟုတ်ပါ။ အက်ပ်တွင် ပြဿနာများ ဖြစ်နိုင်သည် (သို့) ပြန်စနိုင်သည်။</translation> +<translation id="4968665849807487749">သင့်ဖန်သားပြင်အားလုံးတွင် ဝင်းဒိုးများစီမံရန် တောင်းဆိုနိုင်သည်</translation> <translation id="4969341057194253438">ဖမ်းယူမှုဖိုင်ကို ဖျက်ရန်</translation> <translation id="4973922308112707173">ထိပ်တွင် နှစ်ချက်ဖောက်ရန်</translation> <translation id="4976702386844183910"><ph name="DATE" /> က နောက်ဆုံး ဝင်ကြည့်ထားသည်</translation> @@ -1974,6 +1977,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />ပရောက်စီ၊ firewall နှင့် လုံခြုံသော DNS စီစဉ်သတ်မှတ်မှုကို စစ်ဆေးနေသည်<ph name="END_LINK" /></translation> <translation id="6366710531182496394">ဘယ်ဘက်တွင် ချုပ်စက်ဖြင့် နှစ်ချက်ချုပ်ရန်</translation> +<translation id="6374865374745447009">ဝင်းဒိုး စီမံခြင်း</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' အတွက် ရလဒ် ၁ ခု</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">အခကြေးငွေ ပေးရနိုင်ခြေရှိသည်။</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 99e2331..366dd44 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">प्रिन्ट गर्नुहोस्</translation> <translation id="1432187715652018471">यो पेजले सर्भिस ह्यान्ड्लर इन्स्टल गर्ने अनुमति माग्दै छ।</translation> <translation id="1432581352905426595">खोज इन्जिनहरूको व्यवस्थापन गर्नुहोस्</translation> +<translation id="1435940442311036198">अर्कै डिभाइसको पासकी प्रयोग गर्नुहोस्</translation> <translation id="1436185428532214179">तपाईंको डिभाइसमा भएका फाइल तथा फोल्डरहरू सम्पादन गर्ने अनुमति माग्न सक्छ</translation> <translation id="1442386063175183758">दायाँ गेट फोल्ड</translation> <translation id="1442987760062738829">प्वाल</translation> @@ -1404,7 +1405,9 @@ <translation id="4798078619018708837">आफ्नो कार्डसम्बन्धी विवरणहरू अद्यावधिक गर्न <ph name="CREDIT_CARD" /> को म्याद सकिने मिति र CVC प्रविष्टि गर्नुहोस्। तपाईंले पुष्टि गरिसकेपछि तपाईंको Google खातामा रहेका कार्डसम्बन्धी विवरणहरू यो साइटसँग आदान प्रदान गरिने छ।</translation> <translation id="4800132727771399293">तपाईँको म्याद समाप्त हुने मिति र CVC जाँच गर्नुहोस् र फेरि प्रयास गर्नुहोस्</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">TouchID प्रयोग गर्नुहोस्</translation> <translation id="4809079943450490359">तपाईंको डिभाइसको एड्मिनबाट प्राप्त भएका निर्देशनहरू:</translation> +<translation id="4811450222531576619">यो पेजको स्रोत र विषयका बारेमा जान्नुहोस्</translation> <translation id="4812751092864334025">लगाउन मिल्ने प्रविधि</translation> <translation id="4813512666221746211">सञ्जाल त्रुटि</translation> <translation id="4816492930507672669">पृष्ठमा अटाउनुहोस्</translation> @@ -1677,6 +1680,7 @@ <translation id="5509780412636533143">व्यवस्थित बुकमार्कहरू</translation> <translation id="5510481203689988000">यो सेटिङ कुकीका सेटिङहरूबाट नियन्त्रण गरिन्छ।</translation> <translation id="5510766032865166053">यो सारिएको वा मेटाइएको हुन सक्छ।</translation> +<translation id="5513528801833998679">डिभाइसमा साइन इन गर्नुहोस्</translation> <translation id="5518670652865028077">कला तथा मनोरञ्जन</translation> <translation id="5519516356611866228">तपाईंले गर्नुभएका परिवर्तन लागू गरेर</translation> <translation id="5523118979700054094">नीति नाम</translation> @@ -1704,6 +1708,7 @@ <translation id="5571083550517324815">यो ठेगानाबाट पिकअप गर्न सकिँदैन। कुनै अर्को ठेगाना चयन गर्नुहोस्।</translation> <translation id="557886905979275351">दाह्री काट्ने तथा रौँ खौरने रेजर</translation> <translation id="5580958916614886209">आफ्नो म्याद सकिने महिनाको जाँच गरी फेरि प्रयास गर्नुहोस्</translation> +<translation id="558420943003240152">पासवर्ड तथा पासकीहरू व्यवस्थापन गर्नुहोस्…</translation> <translation id="5586446728396275693">सुरक्षित गरिएको कुनै ठेगाना छैन</translation> <translation id="5587987780934666589">प्लेटफर्मका प्रयोगकर्ता</translation> <translation id="5593349413089863479">इन्टरनेट पूर्ण रूपमा सुरक्षित छैन</translation> @@ -1768,6 +1773,7 @@ <translation id="5765072501007116331">डेलिभरीका विधि र मापदण्डहरू हेर्न, ठेगाना चयन गर्नुहोस्</translation> <translation id="57689295674415555">भर्चुअल कार्ड नम्बर भरिएको छैन?</translation> <translation id="5776313857861697733">प्राथमिकता</translation> +<translation id="5778389256418062749">अर्कै डिभाइसको पासकी प्रयोग गर्नुहोस्</translation> <translation id="5781136890105823427">परीक्षण सक्षम पारियो</translation> <translation id="578305955206182703">एम्बर</translation> <translation id="57838592816432529">म्यूट गर्नुहोस्</translation> @@ -2526,6 +2532,7 @@ <translation id="7880146494886811634">ठेगाना सेभ गर्नुहोस्</translation> <translation id="7882421473871500483">खैरो</translation> <translation id="7882995332186050355">कार्गो ट्रक तथा ट्रेलरहरू</translation> +<translation id="788679692472636252">पासवर्ड तथा पासकीहरू व्यवस्थापन गर्नुहोस्…</translation> <translation id="7887683347370398519">तपाईँको CVC जाँच गर्नुहोस् र फेरि प्रयास गर्नुहोस्</translation> <translation id="7887885240995164102">picture-in-picture मोडमा प्रविष्टि गर्नुहोस्</translation> <translation id="7888575728750733395">प्रिन्टिङ रेन्डर गर्ने प्रक्रियाको उद्देश्य</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 251a2a0..e90781f 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Afdrukken</translation> <translation id="1432187715652018471">De pagina wil een servicehandler installeren.</translation> <translation id="1432581352905426595">Zoekmachines beheren</translation> +<translation id="1435940442311036198">Een toegangscode gebruiken op een ander apparaat</translation> <translation id="1436185428532214179">Kan vragen of deze site bestanden en mappen op je apparaat mag bewerken</translation> <translation id="1442386063175183758">Gatefold rechts</translation> <translation id="1442987760062738829">Perforeren</translation> @@ -1402,7 +1403,9 @@ <translation id="4798078619018708837">Geef de vervaldatum en CVC-code voor <ph name="CREDIT_CARD" /> op om je creditcardgegevens te updaten. Nadat je hebt bevestigd, worden de creditcardgegevens uit je Google-account gedeeld met deze site.</translation> <translation id="4800132727771399293">Controleer je vervaldatum en CVC-code en probeer het opnieuw</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">Touch ID gebruiken</translation> <translation id="4809079943450490359">Instructies van de beheerder van je apparaat:</translation> +<translation id="4811450222531576619">Meer informatie over de bron en het onderwerp</translation> <translation id="4812751092864334025">Wearables</translation> <translation id="4813512666221746211">Netwerkfout</translation> <translation id="4816492930507672669">Aanpassen aan pagina</translation> @@ -1675,6 +1678,7 @@ <translation id="5509780412636533143">Beheerde bookmarks</translation> <translation id="5510481203689988000">Deze instelling wordt beheerd in de instellingen voor cookies.</translation> <translation id="5510766032865166053">Het bestand is mogelijk verplaatst of verwijderd.</translation> +<translation id="5513528801833998679">Inloggen op apparaat gebruiken</translation> <translation id="5518670652865028077">Kunst en entertainment</translation> <translation id="5519516356611866228">Met jouw wijzigingen</translation> <translation id="5523118979700054094">Beleidsnaam</translation> @@ -1702,6 +1706,7 @@ <translation id="5571083550517324815">Kan niet ophalen van dit adres. Selecteer een ander adres.</translation> <translation id="557886905979275351">Scheerapparaten en scheermessen</translation> <translation id="5580958916614886209">Controleer de vervalmaand en probeer het opnieuw</translation> +<translation id="558420943003240152">Wachtwoorden en toegangscodes beheren…</translation> <translation id="5586446728396275693">Geen opgeslagen adressen</translation> <translation id="5587987780934666589">Platformgebruiker</translation> <translation id="5593349413089863479">Verbinding is niet volledig beveiligd</translation> @@ -1766,6 +1771,7 @@ <translation id="5765072501007116331">Selecteer een adres om bezorgingsmethoden en vereisten te bekijken</translation> <translation id="57689295674415555">Virtueel kaartnummer niet ingevuld?</translation> <translation id="5776313857861697733">Priority</translation> +<translation id="5778389256418062749">Een toegangscode gebruiken op een ander apparaat</translation> <translation id="5781136890105823427">Experiment staat aan</translation> <translation id="578305955206182703">Geelbruin</translation> <translation id="57838592816432529">Geluid uitzetten</translation> @@ -2523,6 +2529,7 @@ <translation id="7880146494886811634">Adres opslaan</translation> <translation id="7882421473871500483">Bruin</translation> <translation id="7882995332186050355">Vrachtwagens en opleggers</translation> +<translation id="788679692472636252">Wachtwoorden en toegangscodes beheren…</translation> <translation id="7887683347370398519">Controleer je CVC-code en probeer het opnieuw</translation> <translation id="7887885240995164102">Scherm-in-scherm openen</translation> <translation id="7888575728750733395">Weergave-intentie voor afdrukken</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index d61f35f8..102e4c9 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Skriv ut</translation> <translation id="1432187715652018471">siden vil installere en tjenestebehandler</translation> <translation id="1432581352905426595">Administrer søkemotorer</translation> +<translation id="1435940442311036198">Bruk en tilgangsnøkkel på en annen enhet</translation> <translation id="1436185428532214179">Kan be om å få redigere filer og mapper på enheten</translation> <translation id="1442386063175183758">Høyre vindusfals</translation> <translation id="1442987760062738829">Hull</translation> @@ -1407,7 +1408,9 @@ <translation id="4798078619018708837">Skriv inn utløpsdatoen og verifiseringskoden for <ph name="CREDIT_CARD" /> for å oppdatere kortopplysningene dine. Etter at du har bekreftet, deles kortopplysningene fra Google-kontoen din med dette nettstedet.</translation> <translation id="4800132727771399293">Kontrollér utløpsdatoen og CVC-koden, og prøv igjen.</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">Bruk TouchID</translation> <translation id="4809079943450490359">Veiledning fra enhetsadministratoren din:</translation> +<translation id="4811450222531576619">Finn ut mer om kilden og emnet</translation> <translation id="4812751092864334025">Hapå-teknologi</translation> <translation id="4813512666221746211">Nettverksfeil</translation> <translation id="4816492930507672669">Tilpass til siden</translation> @@ -1680,6 +1683,7 @@ <translation id="5509780412636533143">Administrerte bokmerker</translation> <translation id="5510481203689988000">Dette styres i innstillingene for informasjonskapsler.</translation> <translation id="5510766032865166053">Den kan ha blitt flyttet eller slettet.</translation> +<translation id="5513528801833998679">Bruk enhetspålogging</translation> <translation id="5518670652865028077">Kunst og underholdning</translation> <translation id="5519516356611866228">Med endringene dine</translation> <translation id="5523118979700054094">Navn på retningslinje</translation> @@ -1707,6 +1711,7 @@ <translation id="5571083550517324815">Kan ikke hente på denne adressen. Velg en annen adresse.</translation> <translation id="557886905979275351">Barberhøvler og barbermaskiner</translation> <translation id="5580958916614886209">Kontrollér utløpsmåneden, og prøv igjen</translation> +<translation id="558420943003240152">Administrer passord og tilgangsnøkler…</translation> <translation id="5586446728396275693">Ingen adresser er lagret</translation> <translation id="5587987780934666589">Plattformbruker</translation> <translation id="5593349413089863479">Tilkoblingen er ikke helt sikker</translation> @@ -1771,6 +1776,7 @@ <translation id="5765072501007116331">For å se leveringsmetoder og -krav, velg en adresse</translation> <translation id="57689295674415555">Ble ikke det virtuelle kortnummeret fylt ut?</translation> <translation id="5776313857861697733">Prioritet</translation> +<translation id="5778389256418062749">Bruk en tilgangsnøkkel på en annen enhet</translation> <translation id="5781136890105823427">Et eksperiment er slått på</translation> <translation id="578305955206182703">Ravgul</translation> <translation id="57838592816432529">Kutt lyden</translation> @@ -2528,6 +2534,7 @@ <translation id="7880146494886811634">Lagre adresse</translation> <translation id="7882421473871500483">Brun</translation> <translation id="7882995332186050355">Lastebiler og trailere</translation> +<translation id="788679692472636252">Administrer passord og tilgangsnøkler…</translation> <translation id="7887683347370398519">Kontrollér CVC-koden din, og prøv igjen.</translation> <translation id="7887885240995164102">Start bilde-i-bilde</translation> <translation id="7888575728750733395">Gjengivelsesintensjon for utskrift</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index 0728dd72..815a155 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -2145,7 +2145,7 @@ <translation id="6898699227549475383">ਕੰਪਨੀ (O)</translation> <translation id="6899000063526916106"><ph name="NUMBER_OF_DIGITS" />-ਅੰਕਾਂ ਦਾ ਕੋਡ ਦਾਖਲ ਕਰੋ</translation> <translation id="6907293445143367439"><ph name="SITE_NAME" /> ਨੂੰ ਇਹ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ:</translation> -<translation id="6907458757809079309">ਤੰਦਰੁਸਤੀ</translation> +<translation id="6907458757809079309">ਫਿੱਟਨੈੱਸ</translation> <translation id="6910240653697687763"><ph name="URL" /> ਦੀ ਤੁਹਾਡੇ MIDI ਡੀਵਾਈਸਾਂ 'ਤੇ ਪੂਰਾ ਕੰਟਰੋਲ ਕਰਨ ਦੀ ਇੱਛਾ ਹੈ</translation> <translation id="691024665142758461">ਕਈ ਫ਼ਾਈਲਾਂ ਡਾਊਨਲੋਡ ਕਰੋ</translation> <translation id="6915804003454593391">ਵਰਤੋਂਕਾਰ:</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index dd65c5f9..11d3a58 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Imprimir</translation> <translation id="1432187715652018471">A página quer instalar um manipulador de serviço.</translation> <translation id="1432581352905426595">Gerenciar mecanismos de pesquisa</translation> +<translation id="1435940442311036198">Usar uma senha de acesso em outro dispositivo</translation> <translation id="1436185428532214179">Pode pedir para editar arquivos e pastas no dispositivo</translation> <translation id="1442386063175183758">Dobra janela à direita</translation> <translation id="1442987760062738829">Perfurar</translation> @@ -1407,7 +1408,9 @@ <translation id="4798078619018708837">Informe a data de validade e o CVC do <ph name="CREDIT_CARD" /> para atualizar os detalhes do cartão. Depois da confirmação, os detalhes do cartão da sua Conta do Google serão compartilhados com este site.</translation> <translation id="4800132727771399293">Verifique sua data de validade e seu CVC e tente novamente</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">Usar o Touch ID</translation> <translation id="4809079943450490359">Instruções do administrador do dispositivo:</translation> +<translation id="4811450222531576619">Saiba mais sobre a fonte e o tema</translation> <translation id="4812751092864334025">Tecnologia de wearables</translation> <translation id="4813512666221746211">Erro na rede</translation> <translation id="4816492930507672669">Ajustar à página</translation> @@ -1680,6 +1683,7 @@ <translation id="5509780412636533143">Favoritos gerenciados</translation> <translation id="5510481203689988000">Essa configuração é controlada nas configurações de cookies.</translation> <translation id="5510766032865166053">Talvez tenha sido movido ou excluído.</translation> +<translation id="5513528801833998679">Usar o login do dispositivo</translation> <translation id="5518670652865028077">Artes e entretenimento</translation> <translation id="5519516356611866228">Com suas modificações</translation> <translation id="5523118979700054094">Nome da política</translation> @@ -1707,6 +1711,7 @@ <translation id="5571083550517324815">Não é possível fazer a retirada nesse endereço. Tente um endereço diferente.</translation> <translation id="557886905979275351">Lâminas de barbear e barbeadores</translation> <translation id="5580958916614886209">Verifique o mês de validade e tente novamente</translation> +<translation id="558420943003240152">Gerenciar senhas e senhas de acesso…</translation> <translation id="5586446728396275693">Nenhum endereço salvo</translation> <translation id="5587987780934666589">Usuário da plataforma</translation> <translation id="5593349413089863479">A conexão não é totalmente segura</translation> @@ -1771,6 +1776,7 @@ <translation id="5765072501007116331">Para ver métodos e requisitos de entrega, selecione um endereço</translation> <translation id="57689295674415555">O número do cartão virtual não foi preenchido?</translation> <translation id="5776313857861697733">Prioridade</translation> +<translation id="5778389256418062749">Usar uma senha de acesso em outro dispositivo</translation> <translation id="5781136890105823427">Experimento ativado</translation> <translation id="578305955206182703">Âmbar</translation> <translation id="57838592816432529">Desativar som</translation> @@ -2529,6 +2535,7 @@ <translation id="7880146494886811634">Salvar endereço</translation> <translation id="7882421473871500483">Marrom</translation> <translation id="7882995332186050355">Trailers e caminhões de carga</translation> +<translation id="788679692472636252">Gerenciar senhas e senhas de acesso…</translation> <translation id="7887683347370398519">Verifique seu CVC e tente novamente</translation> <translation id="7887885240995164102">Entrar no modo picture-in-picture</translation> <translation id="7888575728750733395">Intent de renderização da impressão</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 3838ab22..8c2dcca8 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -1239,6 +1239,7 @@ <translation id="4329871760342656885">Ошибка обработки правила: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Укладчик 5</translation> <translation id="4331708818696583467">Не защищено</translation> +<translation id="4333561522337981382">Управлять окнами на всех ваших экранах</translation> <translation id="4340575312453649552">Это объявление удалено, так как оно использовало слишком много системных ресурсов.</translation> <translation id="4340982228985273705">По нашим данным, этот компьютер не является корпоративным, поэтому в соответствии с правилом на него можно автоматически устанавливать только расширения из Интернет-магазина Chrome. URL для обновления: <ph name="CWS_UPDATE_URL" />.</translation> <translation id="4346197816712207223">Кредитные карты, которые принимаются к оплате</translation> @@ -1452,6 +1453,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />. Нажмите Tab и затем Ввод, чтобы выполнить поиск.</translation> <translation id="4930153903256238152">Большая емкость</translation> +<translation id="4934780484581617878">Управление окнами</translation> <translation id="4936134414789135531">Введенное значение "<ph name="VALUE_NAME" />" не найдено.</translation> <translation id="4936675324097895694">Финансы</translation> <translation id="4940163644868678279">Режим инкогнито в Chrome</translation> @@ -1464,6 +1466,7 @@ <translation id="4958444002117714549">Развернуть список</translation> <translation id="4964505745997821360">Страхование здоровья</translation> <translation id="4968522289500246572">Это приложение предназначено для мобильных устройств. После изменения размера оно может работать некорректно или перезапуститься.</translation> +<translation id="4968665849807487749">Может запрашивать управление окнами на всех ваших экранах</translation> <translation id="4969341057194253438">Удалить запись</translation> <translation id="4973922308112707173">Два отверстия сверху</translation> <translation id="4976702386844183910">Последнее посещение: <ph name="DATE" /></translation> @@ -1967,6 +1970,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Проверить настройки прокси-сервера, брандмауэра и безопасного DNS-сервера<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Две скобы слева</translation> +<translation id="6374865374745447009">управление окнами</translation> <translation id="6377268785556383139">1 результат поиска по запросу "<ph name="SEARCH_TEXT" />"</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Возможное списание средств</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb index db32fe7..b7f894c5 100644 --- a/components/strings/components_strings_si.xtb +++ b/components/strings/components_strings_si.xtb
@@ -1240,6 +1240,7 @@ <translation id="4329871760342656885">ප්රතිපත්ති විග්රහ කිරීමේ දෝෂය: <ph name="ERROR" /></translation> <translation id="4331519897422864041">අට්ටිය 5</translation> <translation id="4331708818696583467">සුරක්ෂිත නැත</translation> +<translation id="4333561522337981382">ඔබේ සියලු සංදර්ශකවල කවුළු කළමනාකරණය කරන්න</translation> <translation id="4340575312453649552">මෙම දැන්වීම ඔබේ උපාංගය සඳහා භාවිත කළ සම්පත් ඉතා වැඩි බැවින්, Chrome මෙය ඉවත් කළා.</translation> <translation id="4340982228985273705">මෙම පරිගණකය ව්යවසාය කළමනාකරණය කරනු ලබන ලෙස හදුනා නොගැනේ. එම නිසා ප්රතිපත්තියට Chrome Webstore හි පමණක් ස්වයංක්රියව දිගු ස්ථාපනය කළ හැකිය. Chrome Webstore යාවත්කාලීන කිරීමේ URL "<ph name="CWS_UPDATE_URL" />" වේ.</translation> <translation id="4346197816712207223">පිළිගත් ණය කාඩ්පත්</translation> @@ -1453,6 +1454,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, සෙවීමට Tab ඔබා අනතුරුව Enter ඔබන්න</translation> <translation id="4930153903256238152">විශාල ධාරිතාව</translation> +<translation id="4934780484581617878">කවුළු කළමනාකරණය</translation> <translation id="4936134414789135531">ඇතුළත් කළ <ph name="VALUE_NAME" /> සොයා ගත නොහැකි විය.</translation> <translation id="4936675324097895694">මූල්යය</translation> <translation id="4940163644868678279">Chrome තුළ අප්රසිද්ධ</translation> @@ -1465,6 +1467,7 @@ <translation id="4958444002117714549">විදහන ලැයිස්තුව</translation> <translation id="4964505745997821360">සෞඛ්ය රක්ෂණය</translation> <translation id="4968522289500246572">මෙම යෙදුම ජංගම සඳහා සැලසුම් කර ඇති අතර ප්රතිප්රමාණ නොවීමටද හැකිය. මෙම යෙදුම ගැටලු හෝ යළි ආරම්භ වීම අත්විඳිය හැකිය.</translation> +<translation id="4968665849807487749">ඔබේ සියලු සංදර්ශකවල කවුළු කළමනාකරණය කිරීමට විමසිය හැක</translation> <translation id="4969341057194253438">පටිගත කිරීම මකන්න</translation> <translation id="4973922308112707173">ඉහළට දෙවරක් අනින්න</translation> <translation id="4976702386844183910">අවසන් වරට <ph name="DATE" /> පිවිසි</translation> @@ -1968,6 +1971,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />ප්රොක්සි, සුරැකුම් පවුර සහ සුරක්ෂිත DNS වින්යාස කිරීම පරීක්ෂා කිරීම<ph name="END_LINK" /></translation> <translation id="6366710531182496394">වමට දෙවරක් ස්ටේපල් කරන්න</translation> +<translation id="6374865374745447009">කවුළු කළමනාකරණය</translation> <translation id="6377268785556383139">'<ph name="SEARCH_TEXT" />' සඳහා 1 ප්රතිඵලයක්</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">ඉදිරියට තිබිය හැකි ගාස්තු.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index fee82acb..38df5a65 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Tlačiť</translation> <translation id="1432187715652018471">stránka chce nainštalovať obslužný nástroj služby.</translation> <translation id="1432581352905426595">Spravovať vyhľadávače</translation> +<translation id="1435940442311036198">Použiť prístupový kľúč v inom zariadení</translation> <translation id="1436185428532214179">Môže žiadať o povolenie upravovať súbory a priečinky v zariadení</translation> <translation id="1442386063175183758">Obojstranná fazóna s otváraním doprava</translation> <translation id="1442987760062738829">Prederaviť</translation> @@ -1403,7 +1404,9 @@ <translation id="4798078619018708837">Ak chcete aktualizovať údaje o karte <ph name="CREDIT_CARD" />, zadajte dátum vypršania platnosti a kód CVC. Po potvrdení sa budú údaje o karte z vášho účtu Google zdieľať s týmto webom.</translation> <translation id="4800132727771399293">Skontrolujte dátum vypršania platnosti aj kód CVC a skúste to znova</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">Použiť TouchID</translation> <translation id="4809079943450490359">Pokyny od správcu vášho zariadenia:</translation> +<translation id="4811450222531576619">Ďalšie informácie o príslušnom zdroji a téme</translation> <translation id="4812751092864334025">Nositeľné zariadenia</translation> <translation id="4813512666221746211">Chyba siete</translation> <translation id="4816492930507672669">Prispôsobiť stránke</translation> @@ -1676,6 +1679,7 @@ <translation id="5509780412636533143">Spravované záložky</translation> <translation id="5510481203689988000">Toto nastavenie je ovládané v rámci nastavení súborov cookie.</translation> <translation id="5510766032865166053">Mohol byť prenesený alebo odstránený.</translation> +<translation id="5513528801833998679">Použiť prihlásenie pomocou zariadenia</translation> <translation id="5518670652865028077">Umenie a zábava</translation> <translation id="5519516356611866228">So zmenami</translation> <translation id="5523118979700054094">Názov pravidla</translation> @@ -1703,6 +1707,7 @@ <translation id="5571083550517324815">Vyzdvihnutie na tejto adrese nie je možné. Vyberte inú adresu.</translation> <translation id="557886905979275351">Holiace strojčeky a britvy</translation> <translation id="5580958916614886209">Skontrolujte mesiac vypršania platnosti a skúste to znova</translation> +<translation id="558420943003240152">Spravovať heslá a prístupové kľúče…</translation> <translation id="5586446728396275693">Žiadne uložené adresy</translation> <translation id="5587987780934666589">Používateľ platformy</translation> <translation id="5593349413089863479">Pripojenie nie je úplne zabezpečené</translation> @@ -1767,6 +1772,7 @@ <translation id="5765072501007116331">Ak chcete zobraziť spôsoby a požiadavky doručenia, vyberte adresu</translation> <translation id="57689295674415555">Nebolo vyplnené číslo virtuálnej karty?</translation> <translation id="5776313857861697733">Priorita</translation> +<translation id="5778389256418062749">Použiť prístupový kľúč v inom zariadení</translation> <translation id="5781136890105823427">Experiment je povolený</translation> <translation id="578305955206182703">Žltohnedá</translation> <translation id="57838592816432529">Vypnúť zvuk</translation> @@ -2524,6 +2530,7 @@ <translation id="7880146494886811634">Uloženie adresy</translation> <translation id="7882421473871500483">Hnedá</translation> <translation id="7882995332186050355">Nákladné vozidlá a ťahače</translation> +<translation id="788679692472636252">Spravovať heslá a prístupové kľúče…</translation> <translation id="7887683347370398519">Skontrolujte svoj kód CVC a skúste to znova</translation> <translation id="7887885240995164102">Spustiť obraz v obraze</translation> <translation id="7888575728750733395">Vykresľovacia intencia tlače</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index d0350dd..aee6945 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -1240,6 +1240,7 @@ <translation id="4329871760342656885">Gabim i analizimit të politikës: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Stivuesi 5</translation> <translation id="4331708818696583467">Jo e sigurt</translation> +<translation id="4333561522337981382">Të menaxhojë dritaret në të gjitha ekranet e tua</translation> <translation id="4340575312453649552">Kjo reklamë përdorte shumë burime për pajisjen tënde, prandaj Chrome e hoqi.</translation> <translation id="4340982228985273705">Ky kompjuter nuk është zbuluar si i menaxhuar nga ndërmarrja, prandaj politika mund të instalojë automatikisht vetëm shtesat e strehuara në "Dyqanin e uebit të Chrome". URL-ja e përditësimit të "Dyqanit të uebit të Chrome" është "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">Kartat e pranuara të kreditit</translation> @@ -1453,6 +1454,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, shtyp "Tab", më pas "Enter" për të kërkuar</translation> <translation id="4930153903256238152">Kapaciteti i madh</translation> +<translation id="4934780484581617878">Menaxhimi i dritareve</translation> <translation id="4936134414789135531"><ph name="VALUE_NAME" /> që është futur nuk mund të gjendej.</translation> <translation id="4936675324097895694">Financa</translation> <translation id="4940163644868678279">Modaliteti "I fshehtë" në Chrome</translation> @@ -1465,6 +1467,7 @@ <translation id="4958444002117714549">Zgjero listën</translation> <translation id="4964505745997821360">Sigurimi shëndetësor</translation> <translation id="4968522289500246572">Ky aplikacion është projektuar për celular dhe përmasat mund të mos ndryshohen si duhet. Aplikacioni mund të ketë probleme ose të riniset.</translation> +<translation id="4968665849807487749">Mund të kërkojë të menaxhojë dritaret në të gjitha ekranet e tua</translation> <translation id="4969341057194253438">Fshi regjistrimin</translation> <translation id="4973922308112707173">Dy shpime lart</translation> <translation id="4976702386844183910">Vizituar së fundi më <ph name="DATE" /></translation> @@ -1967,6 +1970,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Të kontrollosh përfaqësuesin, murin mbrojtës dhe konfigurimin e DNS-së së sigurt<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Dy kapje me tel majtas</translation> +<translation id="6374865374745447009">menaxhimi i dritareve</translation> <translation id="6377268785556383139">1 rezultat për "<ph name="SEARCH_TEXT" />"</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Tarifime të mundshme përpara.</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index 8fa2a24..bafdf16 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Štampaj</translation> <translation id="1432187715652018471">Stranica želi da instalira obrađivača usluge.</translation> <translation id="1432581352905426595">Upravljaj pretraživačima</translation> +<translation id="1435940442311036198">Koristite pristupni kôd na drugom uređaju</translation> <translation id="1436185428532214179">Može da traži da menja fajlove i foldere na uređaju</translation> <translation id="1442386063175183758">Presavijanje na desnoj strani u obliku prozora</translation> <translation id="1442987760062738829">Bušenje</translation> @@ -1407,7 +1408,9 @@ <translation id="4798078619018708837">Unesite rok trajanja i CVC za karticu <ph name="CREDIT_CARD" /> da biste ažurirali podatke o kartici. Kada budete potvrdili, podaci o kartici sa Google naloga će se deliti sa ovim sajtom.</translation> <translation id="4800132727771399293">Proverite datum isteka i CVC i pokušajte ponovo</translation> <translation id="4803924862070940586"><ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> +<translation id="4806051791961048632">Koristi TouchID</translation> <translation id="4809079943450490359">Uputstva administratora uređaja:</translation> +<translation id="4811450222531576619">Saznajte više o njenom izvoru i temi</translation> <translation id="4812751092864334025">Nosiva tehnologija</translation> <translation id="4813512666221746211">Greška na mreži</translation> <translation id="4816492930507672669">Uklopi u stranicu</translation> @@ -1680,6 +1683,7 @@ <translation id="5509780412636533143">Obeleživači kojim se upravlja</translation> <translation id="5510481203689988000">Ovo podešavanje se kontroliše u podešavanjima kolačića.</translation> <translation id="5510766032865166053">Možda je premešten ili izbrisan.</translation> +<translation id="5513528801833998679">Koristite prijavljivanje na uređaju</translation> <translation id="5518670652865028077">Umetnost i zabava</translation> <translation id="5519516356611866228">Sa promenama</translation> <translation id="5523118979700054094">Naziv smernica</translation> @@ -1707,6 +1711,7 @@ <translation id="5571083550517324815">Preuzimanje sa ove adrese nije moguće. Izaberite drugu adresu.</translation> <translation id="557886905979275351">Brijači i aparati za brijanje</translation> <translation id="5580958916614886209">Proverite mesec isteka i probajte ponovo</translation> +<translation id="558420943003240152">Upravljajte lozinkama i pristupnim kodovima…</translation> <translation id="5586446728396275693">Nema sačuvanih adresa</translation> <translation id="5587987780934666589">Korisnik platforme</translation> <translation id="5593349413089863479">Veza nije potpuno bezbedna</translation> @@ -1771,6 +1776,7 @@ <translation id="5765072501007116331">Da biste videli načine i zahteve za isporuku, izaberite adresu</translation> <translation id="57689295674415555">Broj virtuelne kartice nije unet?</translation> <translation id="5776313857861697733">Prioritet</translation> +<translation id="5778389256418062749">Koristite pristupni kôd na drugom uređaju</translation> <translation id="5781136890105823427">Eksperiment je omogućen</translation> <translation id="578305955206182703">Oker</translation> <translation id="57838592816432529">Isključi zvuk</translation> @@ -2528,6 +2534,7 @@ <translation id="7880146494886811634">Sačuvajte adresu</translation> <translation id="7882421473871500483">Braon</translation> <translation id="7882995332186050355">Teretni kamioni i prikolice</translation> +<translation id="788679692472636252">Upravljajte lozinkama i pristupnim kodovima…</translation> <translation id="7887683347370398519">Proverite CVC i pokušajte ponovo</translation> <translation id="7887885240995164102">Pokreni režim slike u slici</translation> <translation id="7888575728750733395">Namera renderovanja štampanja</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index 84ab6754..ef7610d1 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Штампај</translation> <translation id="1432187715652018471">Страница жели да инсталира обрађивача услуге.</translation> <translation id="1432581352905426595">Управљај претраживачима</translation> +<translation id="1435940442311036198">Користите приступни кôд на другом уређају</translation> <translation id="1436185428532214179">Може да тражи да мења фајлове и фолдере на уређају</translation> <translation id="1442386063175183758">Пресавијање на десној страни у облику прозора</translation> <translation id="1442987760062738829">Бушење</translation> @@ -1407,7 +1408,9 @@ <translation id="4798078619018708837">Унесите рок трајања и CVC за картицу <ph name="CREDIT_CARD" /> да бисте ажурирали податке о картици. Када будете потврдили, подаци о картици са Google налога ће се делити са овим сајтом.</translation> <translation id="4800132727771399293">Проверите датум истека и CVC и покушајте поново</translation> <translation id="4803924862070940586"><ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> +<translation id="4806051791961048632">Користи TouchID</translation> <translation id="4809079943450490359">Упутства администратора уређаја:</translation> +<translation id="4811450222531576619">Сазнајте више о њеном извору и теми</translation> <translation id="4812751092864334025">Носива технологија</translation> <translation id="4813512666221746211">Грешка на мрежи</translation> <translation id="4816492930507672669">Уклопи у страницу</translation> @@ -1680,6 +1683,7 @@ <translation id="5509780412636533143">Обележивачи којим се управља</translation> <translation id="5510481203689988000">Ово подешавање се контролише у подешавањима колачића.</translation> <translation id="5510766032865166053">Можда је премештен или избрисан.</translation> +<translation id="5513528801833998679">Користите пријављивање на уређају</translation> <translation id="5518670652865028077">Уметност и забава</translation> <translation id="5519516356611866228">Са променама</translation> <translation id="5523118979700054094">Назив смерница</translation> @@ -1707,6 +1711,7 @@ <translation id="5571083550517324815">Преузимање са ове адресе није могуће. Изаберите другу адресу.</translation> <translation id="557886905979275351">Бријачи и апарати за бријање</translation> <translation id="5580958916614886209">Проверите месец истека и пробајте поново</translation> +<translation id="558420943003240152">Управљајте лозинкама и приступним кодовима…</translation> <translation id="5586446728396275693">Нема сачуваних адреса</translation> <translation id="5587987780934666589">Корисник платформе</translation> <translation id="5593349413089863479">Веза није потпуно безбедна</translation> @@ -1771,6 +1776,7 @@ <translation id="5765072501007116331">Да бисте видели начине и захтеве за испоруку, изаберите адресу</translation> <translation id="57689295674415555">Број виртуелне картице није унет?</translation> <translation id="5776313857861697733">Приоритет</translation> +<translation id="5778389256418062749">Користите приступни кôд на другом уређају</translation> <translation id="5781136890105823427">Експеримент је омогућен</translation> <translation id="578305955206182703">Окер</translation> <translation id="57838592816432529">Искључи звук</translation> @@ -2528,6 +2534,7 @@ <translation id="7880146494886811634">Сачувајте адресу</translation> <translation id="7882421473871500483">Браон</translation> <translation id="7882995332186050355">Теретни камиони и приколице</translation> +<translation id="788679692472636252">Управљајте лозинкама и приступним кодовима…</translation> <translation id="7887683347370398519">Проверите CVC и покушајте поново</translation> <translation id="7887885240995164102">Покрени режим слике у слици</translation> <translation id="7888575728750733395">Намера рендеровања штампања</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index 1389b7f..8f04aaa 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -1240,6 +1240,7 @@ <translation id="4329871760342656885">Hitilafu ya kuchanganua sera: <ph name="ERROR" /></translation> <translation id="4331519897422864041">Tupio la kutoa la printa la tano</translation> <translation id="4331708818696583467">Si Salama</translation> +<translation id="4333561522337981382">Dhibiti madirisha kwenye skrini zako zote</translation> <translation id="4340575312453649552">Tangazo hili lilitumia nyenzo nyingi mno katika kifaa chako, kwa hivyo Chrome ililiondoa.</translation> <translation id="4340982228985273705">Kompyuta hii haitambuliwi kama inayodhibitiwa na biashara. Kwa hivyo, sera inaweza tu kusakinisha viendelezi vinavyopangishwa kwenye Duka la Chrome kwenye Wavuti. URL ya kusasisha Duka la Chrome kwenye Wavuti ni "<ph name="CWS_UPDATE_URL" />".</translation> <translation id="4346197816712207223">Kadi za Mikopo Zinazokubaliwa</translation> @@ -1453,6 +1454,7 @@ <translation id="4926340098269537727"><ph name="ACTIVE_MATCH" />/<ph name="TOTAL_MATCHCOUNT" /></translation> <translation id="4929871932072157101"><ph name="KEYWORD_FOCUSED_FRIENDLY_MATCH_TEXT" />, bonyeza 'Tab' kisha 'Enter' ili utafute</translation> <translation id="4930153903256238152">Uwezo mkubwa</translation> +<translation id="4934780484581617878">Udhibiti wa dirisha</translation> <translation id="4936134414789135531">Jina <ph name="VALUE_NAME" /> lililowekwa halipo.</translation> <translation id="4936675324097895694">Fedha</translation> <translation id="4940163644868678279">Hali fiche kwenye Chrome</translation> @@ -1465,6 +1467,7 @@ <translation id="4958444002117714549">Panua orodha</translation> <translation id="4964505745997821360">Bima ya afya</translation> <translation id="4968522289500246572">Programu hii imeundwa kwa ajili ya vifaa vya mkononi na huenda ukubwa wake usibadilike vizuri. Huenda programu ikakumbwa na matatizo au izimwe kisha iwashwe tena.</translation> +<translation id="4968665849807487749">Inaweza kuomba ruhusa ya kudhibiti madirisha kwenye skrini zako zote</translation> <translation id="4969341057194253438">Futa rekodi</translation> <translation id="4973922308112707173">Toboa juu mara mbili</translation> <translation id="4976702386844183910">Ilitembelewa mara ya mwisho <ph name="DATE" /></translation> @@ -1968,6 +1971,7 @@ <translation id="6361757823711327522">B7</translation> <translation id="6364095313648930329"><ph name="BEGIN_LINK" />Kuangalia seva mbadala, kinga mtandao na Imarisha mipangilio ya DNS salama<ph name="END_LINK" /></translation> <translation id="6366710531182496394">Bana mara mbili kushoto</translation> +<translation id="6374865374745447009">udhibiti wa dirisha</translation> <translation id="6377268785556383139">Imepata tokeo 1 la '<ph name="SEARCH_TEXT" />'</translation> <translation id="6380497234672085559">A0</translation> <translation id="6383221683286411806">Huenda ukatozwa gharama.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 28abc14..419ba1fa 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -193,6 +193,7 @@ <translation id="1430915738399379752">ప్రింట్</translation> <translation id="1432187715652018471">సర్వీస్ హ్యాండ్లర్ను ఇన్స్టాల్ చేయమని పేజీ కోరుతోంది.</translation> <translation id="1432581352905426595">సెర్చ్ ఇంజిన్లను మేనేజ్ చేయండి</translation> +<translation id="1435940442311036198">వేరే పరికరంలో పాస్-కీని ఉపయోగించండి</translation> <translation id="1436185428532214179">మీ పరికరంలో ఫైళ్లు, అలాగే ఫోల్డర్లను ఎడిట్ చేయడానికి సైట్ అనుమతి అడగవచ్చు</translation> <translation id="1442386063175183758">కుడివైపు గేట్ ఫోల్డ్</translation> <translation id="1442987760062738829">రంధ్రం</translation> @@ -1409,7 +1410,9 @@ <translation id="4798078619018708837">మీ కార్డ్ వివరాలను అప్డేట్ చేయడానికి <ph name="CREDIT_CARD" /> కార్డ్ గడువు ముగింపు తేదీ, CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ Google ఖాతా నుండి కార్డ్ వివరాలు ఈ సైట్తో షేర్ చేయబడతాయి.</translation> <translation id="4800132727771399293">మీ గడువు ముగింపు తేదీ మరియు CVCని చెక్ చేసి, మళ్లీ ప్రయత్నించండి</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">TouchIDని ఉపయోగించండి</translation> <translation id="4809079943450490359">మీ పరికర అడ్మినిస్ట్రేటర్ నుండి సూచనలు:</translation> +<translation id="4811450222531576619">సోర్స్, టాపిక్ గురించి తెలుసుకోండి</translation> <translation id="4812751092864334025">టెక్నాలజీ కలిగిన ధరించే పరికరాలు</translation> <translation id="4813512666221746211">నెట్వర్క్ ఎర్రర్</translation> <translation id="4816492930507672669">పేజీకి తగినట్లు అమర్చు</translation> @@ -1682,6 +1685,7 @@ <translation id="5509780412636533143">నిర్వహించబడిన బుక్మార్క్లు</translation> <translation id="5510481203689988000">ఈ సెట్టింగ్, కుక్కీల సెట్టింగ్లలో నియంత్రించబడుతోంది.</translation> <translation id="5510766032865166053">ఇది తరలించబడి ఉండవచ్చు లేదా తొలగించబడి ఉండవచ్చు.</translation> +<translation id="5513528801833998679">పరికర సైన్ ఇన్ను ఉపయోగించండి</translation> <translation id="5518670652865028077">కళలు & వినోదం</translation> <translation id="5519516356611866228">మీరు చేసిన మార్పులతో డౌన్లోడ్ చేసుకోండి</translation> <translation id="5523118979700054094">విధానం పేరు</translation> @@ -1709,6 +1713,7 @@ <translation id="5571083550517324815">ఈ అడ్రస్ నుండి పికప్ చేసుకోవడం సాధ్యం కాదు. వేరే అడ్రస్ను ఎంచుకోండి.</translation> <translation id="557886905979275351">రేజర్లు & షేవర్లు</translation> <translation id="5580958916614886209">మీ గడువు ముగింపు నెలను చెక్ చేసి, మళ్లీ ప్రయత్నించండి</translation> +<translation id="558420943003240152">పాస్వర్డ్లను, పాస్-కీలను మేనేజ్ చేయండి…</translation> <translation id="5586446728396275693">సేవ్ చేయబడిన అడ్రస్లు లేవు</translation> <translation id="5587987780934666589">ప్లాట్ఫామ్ యూజర్</translation> <translation id="5593349413089863479">కనెక్షన్ పూర్తిగా సురక్షితమైనది కాదు</translation> @@ -1773,6 +1778,7 @@ <translation id="5765072501007116331">డెలివరీ పద్ధతులు మరియు అవసరాలను చూడాలంటే, అడ్రస్ను ఎంచుకోండి</translation> <translation id="57689295674415555">వర్చువల్ కార్డ్ నంబర్ పూరించబడలేదా?</translation> <translation id="5776313857861697733">ప్రాధాన్యత</translation> +<translation id="5778389256418062749">వేరే పరికరంలో పాస్-కీని ఉపయోగించండి</translation> <translation id="5781136890105823427">ప్రయోగం ప్రారంభించబడింది</translation> <translation id="578305955206182703">కాషాయ రంగు</translation> <translation id="57838592816432529">మ్యూట్ చేయి</translation> @@ -2531,6 +2537,7 @@ <translation id="7880146494886811634">అడ్రస్ను సేవ్ చేయండి</translation> <translation id="7882421473871500483">గోధుమ రంగు</translation> <translation id="7882995332186050355">సరుకు రవాణా చేసే ట్రక్కులు & ట్రయిలర్లు</translation> +<translation id="788679692472636252">పాస్వర్డ్లను, పాస్-కీలను మేనేజ్ చేయండి…</translation> <translation id="7887683347370398519">మీ CVCని చెక్ చేసి, మళ్లీ ప్రయత్నించండి</translation> <translation id="7887885240995164102">చిత్రంలో చిత్రం మోడ్లోకి ప్రవేశిస్తుంది</translation> <translation id="7888575728750733395">ప్రింట్ రెండరింగ్ ఇంటెంట్</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index cdc9beb..ee17a2a1 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Друк</translation> <translation id="1432187715652018471">сторінка хоче встановити обробник сервісів.</translation> <translation id="1432581352905426595">Керувати пошуковими системами</translation> +<translation id="1435940442311036198">Використати ключ доступу на іншому пристрої</translation> <translation id="1436185428532214179">Може просити дозвіл змінювати файли та папки на пристрої</translation> <translation id="1442386063175183758">Зігнути за типом "ворота праворуч"</translation> <translation id="1442987760062738829">Пробити отвір</translation> @@ -1407,7 +1408,9 @@ <translation id="4798078619018708837">Введіть дату закінчення терміну дії та код CVC картки <ph name="CREDIT_CARD" />, щоб оновити її дані. Щойно ви підтвердите дані картки в обліковому записі Google, цей сайт отримає доступ до них.</translation> <translation id="4800132727771399293">Перевірте дату закінчення терміну дії та код CVC та повторіть спробу</translation> <translation id="4803924862070940586"><ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> +<translation id="4806051791961048632">Використати Touch ID</translation> <translation id="4809079943450490359">Вказівки адміністратора вашого пристрою:</translation> +<translation id="4811450222531576619">Докладніше про джерело й тему</translation> <translation id="4812751092864334025">Гаджети</translation> <translation id="4813512666221746211">Помилка мережі</translation> <translation id="4816492930507672669">За розміром сторінки</translation> @@ -1680,6 +1683,7 @@ <translation id="5509780412636533143">Закладки, якими керує адміністратор</translation> <translation id="5510481203689988000">Цим параметром можна керувати в налаштуваннях файлів cookie.</translation> <translation id="5510766032865166053">Можливо, його переміщено або видалено.</translation> +<translation id="5513528801833998679">Здійснити вхід на пристрої</translation> <translation id="5518670652865028077">Мистецтво та розваги</translation> <translation id="5519516356611866228">Зі змінами</translation> <translation id="5523118979700054094">Назва правила</translation> @@ -1707,6 +1711,7 @@ <translation id="5571083550517324815">Адреса отримання не підтримується. Укажіть іншу адресу.</translation> <translation id="557886905979275351">Станки для гоління й електробритви</translation> <translation id="5580958916614886209">Перевірте місяць закінчення терміну дії та повторіть спробу</translation> +<translation id="558420943003240152">Керувати паролями та ключами доступу…</translation> <translation id="5586446728396275693">Немає збережених адрес</translation> <translation id="5587987780934666589">Користувач платформи</translation> <translation id="5593349413089863479">З'єднання не повністю захищене</translation> @@ -1771,6 +1776,7 @@ <translation id="5765072501007116331">Укажіть адресу, щоб переглянути способи доставки та вимоги.</translation> <translation id="57689295674415555">Номер віртуальної картки не заповнено?</translation> <translation id="5776313857861697733">Пріоритет</translation> +<translation id="5778389256418062749">Використати ключ доступу на іншому пристрої</translation> <translation id="5781136890105823427">Експеримент увімкнено</translation> <translation id="578305955206182703">Бурштиновий</translation> <translation id="57838592816432529">Вимкнути звук</translation> @@ -2529,6 +2535,7 @@ <translation id="7880146494886811634">Збережіть адресу</translation> <translation id="7882421473871500483">Коричневий</translation> <translation id="7882995332186050355">Вантажні автомобілі й трейлери</translation> +<translation id="788679692472636252">Керувати паролями та ключами доступу…</translation> <translation id="7887683347370398519">Перевірте код CVC й повторіть спробу</translation> <translation id="7887885240995164102">Увімкнути режим "Картинка в картинці"</translation> <translation id="7888575728750733395">Команда обробки друку</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 99186e42..cb8121ca 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">列印</translation> <translation id="1432187715652018471">網頁想要安裝服務處理常式。</translation> <translation id="1432581352905426595">管理搜尋引擎</translation> +<translation id="1435940442311036198">在其他裝置上使用密碼金鑰</translation> <translation id="1436185428532214179">可以要求編輯裝置上的檔案和資料夾</translation> <translation id="1442386063175183758">右半邊對折</translation> <translation id="1442987760062738829">打孔</translation> @@ -1407,7 +1408,9 @@ <translation id="4798078619018708837">請輸入 <ph name="CREDIT_CARD" /> 的到期日和信用卡驗證碼,以更新信用卡詳細資料。你確認後,這個網站就會取得你 Google 帳戶中的信用卡詳細資料。</translation> <translation id="4800132727771399293">請檢查您的有效期限和信用卡驗證碼,然後再試一次</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">使用 TouchID</translation> <translation id="4809079943450490359">來自裝置管理員的指示:</translation> +<translation id="4811450222531576619">瞭解來源和主題</translation> <translation id="4812751092864334025">穿戴式裝置</translation> <translation id="4813512666221746211">網路錯誤</translation> <translation id="4816492930507672669">依頁面大小自動調整</translation> @@ -1680,6 +1683,7 @@ <translation id="5509780412636533143">受管理書籤</translation> <translation id="5510481203689988000">你可以在 Cookie 設定中控管這項設定。</translation> <translation id="5510766032865166053">檔案可能已移至其他位置或遭到刪除。</translation> +<translation id="5513528801833998679">使用裝置登入功能</translation> <translation id="5518670652865028077">藝術與娛樂</translation> <translation id="5519516356611866228">包含你所做的變更</translation> <translation id="5523118979700054094">政策名稱</translation> @@ -1707,6 +1711,7 @@ <translation id="5571083550517324815">無法在這個地址取件,請改用其他地址。</translation> <translation id="557886905979275351">剃刀與刮鬍刀</translation> <translation id="5580958916614886209">請檢查信用卡到期月份,然後再試一次</translation> +<translation id="558420943003240152">管理密碼和密碼金鑰…</translation> <translation id="5586446728396275693">沒有已儲存的地址</translation> <translation id="5587987780934666589">平台使用者</translation> <translation id="5593349413089863479">連線可能有安全漏洞</translation> @@ -1771,6 +1776,7 @@ <translation id="5765072501007116331">如要查看快遞方式和相關規定,請選取一個地址</translation> <translation id="57689295674415555">尚未填寫虛擬卡號嗎?</translation> <translation id="5776313857861697733">優先順序</translation> +<translation id="5778389256418062749">在其他裝置上使用密碼金鑰</translation> <translation id="5781136890105823427">實驗已啟用</translation> <translation id="578305955206182703">琥珀色</translation> <translation id="57838592816432529">靜音</translation> @@ -2529,6 +2535,7 @@ <translation id="7880146494886811634">儲存地址</translation> <translation id="7882421473871500483">棕色</translation> <translation id="7882995332186050355">貨櫃卡車與拖車</translation> +<translation id="788679692472636252">管理密碼和密碼金鑰…</translation> <translation id="7887683347370398519">請檢查您的信用卡驗證碼,然後再試一次</translation> <translation id="7887885240995164102">進入子母畫面</translation> <translation id="7888575728750733395">列印算繪方式</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index c5013a94..47b0226 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -191,6 +191,7 @@ <translation id="1430915738399379752">Phrinta</translation> <translation id="1432187715652018471">leli khasi lifuna ukufaka isibambi sesevisi.</translation> <translation id="1432581352905426595">Phatha izinjini zosesho</translation> +<translation id="1435940442311036198">Sebenzisa ukhiye wokudlula kudivayisi ehlukile</translation> <translation id="1436185428532214179">Ingacela ukuhlela amafayela namafolda kudivayisi yakho</translation> <translation id="1442386063175183758">Ukugoqa kwesango lesokudla</translation> <translation id="1442987760062738829">Ukushaya</translation> @@ -1404,7 +1405,9 @@ <translation id="4798078619018708837">Faka idethi yokuphelelwa isikhathi kanye ne-CVC ye-<ph name="CREDIT_CARD" /> ukuze ubuyekeze imininingwane yekhadi lakho. Ngemuva kokuqinisekisa, imininingwane yekhadi kusuka ku-akhawunti yakho ye-Google izokwabiwa naleli sayithi.</translation> <translation id="4800132727771399293">Hlola idethi yakho yokuphelelwa yisikhathi ne-CVC uphinde uzame futhi</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> +<translation id="4806051791961048632">Sebenzisa i-Touch ID</translation> <translation id="4809079943450490359">Imiyalelo esuka kumlawuli wedivayisi yakho:</translation> +<translation id="4811450222531576619">Funda ngomthombo nesihloko sayo</translation> <translation id="4812751092864334025">Ubuchwepheshe obugqokekayo</translation> <translation id="4813512666221746211">Iphutha lenethiwekhi</translation> <translation id="4816492930507672669">Linganisa kukhasi</translation> @@ -1677,6 +1680,7 @@ <translation id="5509780412636533143">Amabhukhimakhi aphethwe</translation> <translation id="5510481203689988000">Lesi silungiselelo silawulwa kuzilungiselelo zamakhukhi.</translation> <translation id="5510766032865166053">Kungenzeka ihanjisiwe noma isusiwe.</translation> +<translation id="5513528801833998679">Sebenzisa ukungena ngemvume kwedivayisi</translation> <translation id="5518670652865028077">Ubuciko nokuzijabulisa</translation> <translation id="5519516356611866228">Kanye nezinguquko zakho</translation> <translation id="5523118979700054094">Igama le nqubomgomo</translation> @@ -1704,6 +1708,7 @@ <translation id="5571083550517324815">Ayikwazi ukulanda kusukela kuleli kheli. Khetha ikheli elihlukile.</translation> <translation id="557886905979275351">Izinsingo nokokushefa</translation> <translation id="5580958916614886209">Hlola inyanga yakho yokuphelelwa isikhathi uphinde uzame futhi</translation> +<translation id="558420943003240152">Phatha amaphasiwedi kanye nezikhiye zokudlula</translation> <translation id="5586446728396275693">Awekho amakheli alondoloziwe</translation> <translation id="5587987780934666589">Umsebenzisi wenkundla</translation> <translation id="5593349413089863479">Ukuxhuma akuvikelekile ngokuphelele</translation> @@ -1768,6 +1773,7 @@ <translation id="5765072501007116331">Ukuze ubone izindlela zokulethwa nezidingo, khetha ikheli</translation> <translation id="57689295674415555">Inombolo yekhadi le-virtual ayifakwanga?</translation> <translation id="5776313857861697733">Okubalulekile</translation> +<translation id="5778389256418062749">Sebenzisa Ukhiye Wokudlula Kudivayisi Ehlukile</translation> <translation id="5781136890105823427">Ukuhlolwa kunikwe amandla</translation> <translation id="578305955206182703">I-Amber</translation> <translation id="57838592816432529">Thulisa</translation> @@ -2526,6 +2532,7 @@ <translation id="7880146494886811634">Londoloza Ikheli</translation> <translation id="7882421473871500483">Mpofu</translation> <translation id="7882995332186050355">Amaloli emithwalo nama-trailer</translation> +<translation id="788679692472636252">Phatha Amaphasiwedi Kanye Nezikhiye Zokudlula…</translation> <translation id="7887683347370398519">Hlola i-CVC yakho uphinde uzame futhi</translation> <translation id="7887885240995164102">Faka isithombe-esithombeni</translation> <translation id="7888575728750733395">Phrinta inhloso yokunikezela</translation>
diff --git a/components/sync/protocol/entity_specifics.proto b/components/sync/protocol/entity_specifics.proto index 2ff9c55..3aa5e07 100644 --- a/components/sync/protocol/entity_specifics.proto +++ b/components/sync/protocol/entity_specifics.proto
@@ -21,6 +21,7 @@ import "components/sync/protocol/autofill_offer_specifics.proto"; import "components/sync/protocol/autofill_wallet_usage_specifics.proto"; import "components/sync/protocol/bookmark_specifics.proto"; +import "components/sync/protocol/contact_info_specifics.proto"; import "components/sync/protocol/device_info_specifics.proto"; import "components/sync/protocol/dictionary_specifics.proto"; import "components/sync/protocol/experiments_specifics.proto"; @@ -161,6 +162,7 @@ PrintersAuthorizationServerSpecifics printers_authorization_server = 974304; SavedTabGroupSpecifics saved_tab_group = 1004874; AutofillWalletUsageSpecifics autofill_wallet_usage = 1033580; + ContactInfoSpecifics contact_info = 1034378; } reserved 218175; reserved "wifi_credential";
diff --git a/components/sync/protocol/proto_value_conversions.cc b/components/sync/protocol/proto_value_conversions.cc index 25624d3bc..41f0911 100644 --- a/components/sync/protocol/proto_value_conversions.cc +++ b/components/sync/protocol/proto_value_conversions.cc
@@ -21,6 +21,7 @@ #include "components/sync/protocol/autofill_offer_specifics.pb.h" #include "components/sync/protocol/autofill_specifics.pb.h" #include "components/sync/protocol/bookmark_specifics.pb.h" +#include "components/sync/protocol/contact_info_specifics.pb.h" #include "components/sync/protocol/data_type_progress_marker.pb.h" #include "components/sync/protocol/dictionary_specifics.pb.h" #include "components/sync/protocol/entity_specifics.pb.h" @@ -331,6 +332,7 @@ IMPLEMENT_PROTO_TO_VALUE(AutofillWalletSpecifics) IMPLEMENT_PROTO_TO_VALUE(BookmarkSpecifics) IMPLEMENT_PROTO_TO_VALUE(ClientConfigParams) +IMPLEMENT_PROTO_TO_VALUE(ContactInfoSpecifics) IMPLEMENT_PROTO_TO_VALUE(DebugEventInfo) IMPLEMENT_PROTO_TO_VALUE(DebugInfo) IMPLEMENT_PROTO_TO_VALUE(DeviceInfoSpecifics)
diff --git a/components/sync/protocol/proto_value_conversions.h b/components/sync/protocol/proto_value_conversions.h index 992b567..7bc6ce6 100644 --- a/components/sync/protocol/proto_value_conversions.h +++ b/components/sync/protocol/proto_value_conversions.h
@@ -24,6 +24,7 @@ class ClientConfigParams; class ClientToServerMessage; class ClientToServerResponse; +class ContactInfoSpecifics; class DebugEventInfo; class DebugInfo; class DeviceInfoSpecifics; @@ -115,6 +116,9 @@ std::unique_ptr<base::DictionaryValue> ClientConfigParamsToValue( const sync_pb::ClientConfigParams& proto); +std::unique_ptr<base::DictionaryValue> ContactInfoSpecificsToValue( + const sync_pb::ContactInfoSpecifics& proto); + std::unique_ptr<base::DictionaryValue> DebugEventInfoToValue( const sync_pb::DebugEventInfo& proto);
diff --git a/components/sync/protocol/proto_value_conversions_unittest.cc b/components/sync/protocol/proto_value_conversions_unittest.cc index a43e653..89b707d 100644 --- a/components/sync/protocol/proto_value_conversions_unittest.cc +++ b/components/sync/protocol/proto_value_conversions_unittest.cc
@@ -15,6 +15,7 @@ #include "components/sync/protocol/app_specifics.pb.h" #include "components/sync/protocol/autofill_specifics.pb.h" #include "components/sync/protocol/bookmark_specifics.pb.h" +#include "components/sync/protocol/contact_info_specifics.pb.h" #include "components/sync/protocol/data_type_progress_marker.pb.h" #include "components/sync/protocol/device_info_specifics.pb.h" #include "components/sync/protocol/encryption.pb.h" @@ -75,6 +76,7 @@ DEFINE_SPECIFICS_TO_VALUE_TEST(autofill_profile) DEFINE_SPECIFICS_TO_VALUE_TEST(autofill_wallet) DEFINE_SPECIFICS_TO_VALUE_TEST(bookmark) +DEFINE_SPECIFICS_TO_VALUE_TEST(contact_info) DEFINE_SPECIFICS_TO_VALUE_TEST(device_info) DEFINE_SPECIFICS_TO_VALUE_TEST(dictionary) DEFINE_SPECIFICS_TO_VALUE_TEST(extension)
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h index 18b24d7..dc06ab65 100644 --- a/components/sync/protocol/proto_visitors.h +++ b/components/sync/protocol/proto_visitors.h
@@ -337,12 +337,12 @@ VISIT_PROTO_FIELDS(const sync_pb::ContactInfoSpecifics::StringToken& proto) { VISIT(value); - VISIT_ENUM(metadata); + VISIT(metadata); } VISIT_PROTO_FIELDS(const sync_pb::ContactInfoSpecifics::IntegerToken& proto) { VISIT(value); - VISIT_ENUM(metadata); + VISIT(metadata); } VISIT_PROTO_FIELDS(const sync_pb::CustomNudgeDelay& proto) { @@ -547,6 +547,7 @@ VISIT(autofill_profile); VISIT(autofill_wallet); VISIT(bookmark); + VISIT(contact_info); VISIT(device_info); VISIT(dictionary); VISIT(extension);
diff --git a/components/test/data/history/history.57.sql b/components/test/data/history/history.57.sql new file mode 100644 index 0000000..2b11a00 --- /dev/null +++ b/components/test/data/history/history.57.sql
@@ -0,0 +1,36 @@ +PRAGMA foreign_keys=OFF; +BEGIN TRANSACTION; +CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR); +INSERT INTO meta VALUES('mmap_status','-1'); +INSERT INTO meta VALUES('version','57'); +INSERT INTO meta VALUES('last_compatible_version','16'); +CREATE TABLE urls(id INTEGER PRIMARY KEY AUTOINCREMENT,url LONGVARCHAR,title LONGVARCHAR,visit_count INTEGER DEFAULT 0 NOT NULL,typed_count INTEGER DEFAULT 0 NOT NULL,last_visit_time INTEGER NOT NULL,hidden INTEGER DEFAULT 0 NOT NULL); +CREATE TABLE visits(id INTEGER PRIMARY KEY AUTOINCREMENT,url INTEGER NOT NULL,visit_time INTEGER NOT NULL,from_visit INTEGER,transition INTEGER DEFAULT 0 NOT NULL,segment_id INTEGER,visit_duration INTEGER DEFAULT 0 NOT NULL,incremented_omnibox_typed_score BOOLEAN DEFAULT FALSE NOT NULL,opener_visit INTEGER,originator_cache_guid TEXT,originator_visit_id INTEGER,originator_from_visit INTEGER,originator_opener_visit INTEGER); +CREATE TABLE visit_source(id INTEGER PRIMARY KEY,source INTEGER NOT NULL); +CREATE TABLE keyword_search_terms (keyword_id INTEGER NOT NULL,url_id INTEGER NOT NULL,term LONGVARCHAR NOT NULL,normalized_term LONGVARCHAR NOT NULL); +CREATE TABLE downloads (id INTEGER PRIMARY KEY,guid VARCHAR NOT NULL,current_path LONGVARCHAR NOT NULL,target_path LONGVARCHAR NOT NULL,start_time INTEGER NOT NULL,received_bytes INTEGER NOT NULL,total_bytes INTEGER NOT NULL,state INTEGER NOT NULL,danger_type INTEGER NOT NULL,interrupt_reason INTEGER NOT NULL,hash BLOB NOT NULL,end_time INTEGER NOT NULL,opened INTEGER NOT NULL,last_access_time INTEGER NOT NULL,transient INTEGER NOT NULL,referrer VARCHAR NOT NULL,site_url VARCHAR NOT NULL,embedder_download_data VARCHAR NOT NULL,tab_url VARCHAR NOT NULL,tab_referrer_url VARCHAR NOT NULL,http_method VARCHAR NOT NULL,by_ext_id VARCHAR NOT NULL,by_ext_name VARCHAR NOT NULL,etag VARCHAR NOT NULL,last_modified VARCHAR NOT NULL,mime_type VARCHAR(255) NOT NULL,original_mime_type VARCHAR(255) NOT NULL); +CREATE TABLE downloads_url_chains (id INTEGER NOT NULL,chain_index INTEGER NOT NULL,url LONGVARCHAR NOT NULL, PRIMARY KEY (id, chain_index) ); +CREATE TABLE downloads_slices (download_id INTEGER NOT NULL,offset INTEGER NOT NULL,received_bytes INTEGER NOT NULL,finished INTEGER NOT NULL DEFAULT 0,PRIMARY KEY (download_id, offset) ); +CREATE TABLE downloads_reroute_info (download_id INTEGER NOT NULL,reroute_info_serialized VARCHAR NOT NULL,PRIMARY KEY (download_id) ); +CREATE TABLE segments (id INTEGER PRIMARY KEY,name VARCHAR,url_id INTEGER NON NULL); +CREATE TABLE segment_usage (id INTEGER PRIMARY KEY,segment_id INTEGER NOT NULL,time_slot INTEGER NOT NULL,visit_count INTEGER DEFAULT 0 NOT NULL); +CREATE TABLE typed_url_sync_metadata (storage_key INTEGER PRIMARY KEY NOT NULL,value BLOB); +CREATE TABLE content_annotations(visit_id INTEGER PRIMARY KEY,visibility_score NUMERIC,floc_protected_score NUMERIC,categories VARCHAR,page_topics_model_version INTEGER,annotation_flags INTEGER NOT NULL,entities VARCHAR,related_searches VARCHAR,search_normalized_url VARCHAR,search_terms LONGVARCHAR,alternative_title VARCHAR); +CREATE TABLE context_annotations(visit_id INTEGER PRIMARY KEY,context_annotation_flags INTEGER NOT NULL,duration_since_last_visit INTEGER,page_end_reason INTEGER,total_foreground_duration INTEGER); +CREATE TABLE clusters(cluster_id INTEGER PRIMARY KEY,should_show_on_prominent_ui_surfaces BOOLEAN NOT NULL,label VARCHAR NOT NULL,raw_label VARCHAR NOT NULL); +CREATE TABLE clusters_and_visits(cluster_id INTEGER NOT NULL,visit_id INTEGER NOT NULL,score NUMERIC NOT NULL,engagement_score NUMERIC NOT NULL,url_for_deduping LONGVARCHAR NOT NULL,normalized_url LONGVARCHAR NOT NULL,url_for_display LONGVARCHAR NOT NULL,PRIMARY KEY(cluster_id,visit_id))WITHOUT ROWID; +DELETE FROM sqlite_sequence; +CREATE INDEX visits_url_index ON visits (url); +CREATE INDEX visits_from_index ON visits (from_visit); +CREATE INDEX visits_time_index ON visits (visit_time); +CREATE INDEX visits_originator_id_index ON visits (originator_visit_id); +CREATE INDEX keyword_search_terms_index1 ON keyword_search_terms (keyword_id, normalized_term); +CREATE INDEX keyword_search_terms_index2 ON keyword_search_terms (url_id); +CREATE INDEX keyword_search_terms_index3 ON keyword_search_terms (term); +CREATE INDEX segments_name ON segments(name); +CREATE INDEX segments_url_id ON segments(url_id); +CREATE INDEX segment_usage_time_slot_segment_id ON segment_usage(time_slot, segment_id); +CREATE INDEX segments_usage_seg_id ON segment_usage(segment_id); +CREATE INDEX clusters_for_visit ON clusters_and_visits(visit_id); +CREATE INDEX urls_url_index ON urls (url); +COMMIT;
diff --git a/components/test/data/history/history.58.sql b/components/test/data/history/history.58.sql new file mode 100644 index 0000000..a853b1f2 --- /dev/null +++ b/components/test/data/history/history.58.sql
@@ -0,0 +1,36 @@ +PRAGMA foreign_keys=OFF; +BEGIN TRANSACTION; +CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR); +INSERT INTO meta VALUES('mmap_status','-1'); +INSERT INTO meta VALUES('version','58'); +INSERT INTO meta VALUES('last_compatible_version','16'); +CREATE TABLE urls(id INTEGER PRIMARY KEY AUTOINCREMENT,url LONGVARCHAR,title LONGVARCHAR,visit_count INTEGER DEFAULT 0 NOT NULL,typed_count INTEGER DEFAULT 0 NOT NULL,last_visit_time INTEGER NOT NULL,hidden INTEGER DEFAULT 0 NOT NULL); +CREATE TABLE visits(id INTEGER PRIMARY KEY AUTOINCREMENT,url INTEGER NOT NULL,visit_time INTEGER NOT NULL,from_visit INTEGER,transition INTEGER DEFAULT 0 NOT NULL,segment_id INTEGER,visit_duration INTEGER DEFAULT 0 NOT NULL,incremented_omnibox_typed_score BOOLEAN DEFAULT FALSE NOT NULL,opener_visit INTEGER,originator_cache_guid TEXT,originator_visit_id INTEGER,originator_from_visit INTEGER,originator_opener_visit INTEGER); +CREATE TABLE visit_source(id INTEGER PRIMARY KEY,source INTEGER NOT NULL); +CREATE TABLE keyword_search_terms (keyword_id INTEGER NOT NULL,url_id INTEGER NOT NULL,term LONGVARCHAR NOT NULL,normalized_term LONGVARCHAR NOT NULL); +CREATE TABLE downloads (id INTEGER PRIMARY KEY,guid VARCHAR NOT NULL,current_path LONGVARCHAR NOT NULL,target_path LONGVARCHAR NOT NULL,start_time INTEGER NOT NULL,received_bytes INTEGER NOT NULL,total_bytes INTEGER NOT NULL,state INTEGER NOT NULL,danger_type INTEGER NOT NULL,interrupt_reason INTEGER NOT NULL,hash BLOB NOT NULL,end_time INTEGER NOT NULL,opened INTEGER NOT NULL,last_access_time INTEGER NOT NULL,transient INTEGER NOT NULL,referrer VARCHAR NOT NULL,site_url VARCHAR NOT NULL,embedder_download_data VARCHAR NOT NULL,tab_url VARCHAR NOT NULL,tab_referrer_url VARCHAR NOT NULL,http_method VARCHAR NOT NULL,by_ext_id VARCHAR NOT NULL,by_ext_name VARCHAR NOT NULL,etag VARCHAR NOT NULL,last_modified VARCHAR NOT NULL,mime_type VARCHAR(255) NOT NULL,original_mime_type VARCHAR(255) NOT NULL); +CREATE TABLE downloads_url_chains (id INTEGER NOT NULL,chain_index INTEGER NOT NULL,url LONGVARCHAR NOT NULL, PRIMARY KEY (id, chain_index) ); +CREATE TABLE downloads_slices (download_id INTEGER NOT NULL,offset INTEGER NOT NULL,received_bytes INTEGER NOT NULL,finished INTEGER NOT NULL DEFAULT 0,PRIMARY KEY (download_id, offset) ); +CREATE TABLE downloads_reroute_info (download_id INTEGER NOT NULL,reroute_info_serialized VARCHAR NOT NULL,PRIMARY KEY (download_id) ); +CREATE TABLE segments (id INTEGER PRIMARY KEY,name VARCHAR,url_id INTEGER NON NULL); +CREATE TABLE segment_usage (id INTEGER PRIMARY KEY,segment_id INTEGER NOT NULL,time_slot INTEGER NOT NULL,visit_count INTEGER DEFAULT 0 NOT NULL); +CREATE TABLE typed_url_sync_metadata (storage_key INTEGER PRIMARY KEY NOT NULL,value BLOB); +CREATE TABLE content_annotations(visit_id INTEGER PRIMARY KEY,visibility_score NUMERIC,floc_protected_score NUMERIC,categories VARCHAR,page_topics_model_version INTEGER,annotation_flags INTEGER NOT NULL,entities VARCHAR,related_searches VARCHAR,search_normalized_url VARCHAR,search_terms LONGVARCHAR,alternative_title VARCHAR,page_language VARCHAR,password_state INTEGER DEFAULT 0 NOT NULL); +CREATE TABLE context_annotations(visit_id INTEGER PRIMARY KEY,context_annotation_flags INTEGER NOT NULL,duration_since_last_visit INTEGER,page_end_reason INTEGER,total_foreground_duration INTEGER,browser_type INTEGER DEFAULT 0 NOT NULL,window_id INTEGER DEFAULT -1 NOT NULL,tab_id INTEGER DEFAULT -1 NOT NULL,task_id INTEGER DEFAULT -1 NOT NULL,root_task_id INTEGER DEFAULT -1 NOT NULL,parent_task_id INTEGER DEFAULT -1 NOT NULL,response_code INTEGER DEFAULT 0 NOT NULL); +CREATE TABLE clusters(cluster_id INTEGER PRIMARY KEY,should_show_on_prominent_ui_surfaces BOOLEAN NOT NULL,label VARCHAR NOT NULL,raw_label VARCHAR NOT NULL); +CREATE TABLE clusters_and_visits(cluster_id INTEGER NOT NULL,visit_id INTEGER NOT NULL,score NUMERIC NOT NULL,engagement_score NUMERIC NOT NULL,url_for_deduping LONGVARCHAR NOT NULL,normalized_url LONGVARCHAR NOT NULL,url_for_display LONGVARCHAR NOT NULL,PRIMARY KEY(cluster_id,visit_id))WITHOUT ROWID; +DELETE FROM sqlite_sequence; +CREATE INDEX visits_url_index ON visits (url); +CREATE INDEX visits_from_index ON visits (from_visit); +CREATE INDEX visits_time_index ON visits (visit_time); +CREATE INDEX visits_originator_id_index ON visits (originator_visit_id); +CREATE INDEX keyword_search_terms_index1 ON keyword_search_terms (keyword_id, normalized_term); +CREATE INDEX keyword_search_terms_index2 ON keyword_search_terms (url_id); +CREATE INDEX keyword_search_terms_index3 ON keyword_search_terms (term); +CREATE INDEX segments_name ON segments(name); +CREATE INDEX segments_url_id ON segments(url_id); +CREATE INDEX segment_usage_time_slot_segment_id ON segment_usage(time_slot, segment_id); +CREATE INDEX segments_usage_seg_id ON segment_usage(segment_id); +CREATE INDEX clusters_for_visit ON clusters_and_visits(visit_id); +CREATE INDEX urls_url_index ON urls (url); +COMMIT;
diff --git a/components/ukm/ukm_recorder_impl.cc b/components/ukm/ukm_recorder_impl.cc index f0fa973..92679f79 100644 --- a/components/ukm/ukm_recorder_impl.cc +++ b/components/ukm/ukm_recorder_impl.cc
@@ -217,9 +217,6 @@ UkmRecorderImpl::~UkmRecorderImpl() = default; -UkmRecorderImpl::EventAggregate::EventAggregate() = default; -UkmRecorderImpl::EventAggregate::~EventAggregate() = default; - UkmRecorderImpl::Recordings::Recordings() = default; UkmRecorderImpl::Recordings& UkmRecorderImpl::Recordings::operator=( Recordings&&) = default; @@ -363,7 +360,6 @@ NotifyAllObservers(&UkmRecorderObserver::OnUkmAllowedStateChanged, allowed); } -// TODO(rkaplow): This should be refactored. void UkmRecorderImpl::StoreRecordingsInReport(Report* report) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -426,49 +422,11 @@ } for (const auto& event_and_aggregate : recordings_.event_aggregations) { - const EventAggregate& event_aggregate = event_and_aggregate.second; Aggregate* proto_aggregate = report->add_aggregates(); - proto_aggregate->set_source_id(0); // Across all sources. proto_aggregate->set_event_hash(event_and_aggregate.first); - proto_aggregate->set_total_count(event_aggregate.total_count); - proto_aggregate->set_dropped_due_to_limits( - event_aggregate.dropped_due_to_limits); - proto_aggregate->set_dropped_due_to_sampling( - event_aggregate.dropped_due_to_sampling); - proto_aggregate->set_dropped_due_to_filter( - event_aggregate.dropped_due_to_filter); - proto_aggregate->set_dropped_due_to_unconfigured( - event_aggregate.dropped_due_to_unconfigured); - for (const auto& metric_and_aggregate : event_aggregate.metrics) { - const MetricAggregate& aggregate = metric_and_aggregate.second; - Aggregate::Metric* proto_metric = proto_aggregate->add_metrics(); - proto_metric->set_metric_hash(metric_and_aggregate.first); - proto_metric->set_value_sum(aggregate.value_sum); - proto_metric->set_value_square_sum(aggregate.value_square_sum); - if (aggregate.total_count != event_aggregate.total_count) { - proto_metric->set_total_count(aggregate.total_count); - } - if (aggregate.dropped_due_to_limits != - event_aggregate.dropped_due_to_limits) { - proto_metric->set_dropped_due_to_limits( - aggregate.dropped_due_to_limits); - } - if (aggregate.dropped_due_to_sampling != - event_aggregate.dropped_due_to_sampling) { - proto_metric->set_dropped_due_to_sampling( - aggregate.dropped_due_to_sampling); - } - if (aggregate.dropped_due_to_filter != - event_aggregate.dropped_due_to_filter) { - proto_metric->set_dropped_due_to_filter( - aggregate.dropped_due_to_filter); - } - if (aggregate.dropped_due_to_unconfigured != - event_aggregate.dropped_due_to_unconfigured) { - proto_metric->set_dropped_due_to_unconfigured( - aggregate.dropped_due_to_unconfigured); - } - } + + const EventAggregate& event_aggregate = event_and_aggregate.second; + event_aggregate.FillProto(proto_aggregate); } int num_serialized_sources = 0; for (const auto& source_type_and_count : serialized_source_type_counts) { @@ -536,6 +494,43 @@ report->set_is_continuous(recording_is_continuous_); recording_is_continuous_ = true; + int pruned_sources_age_sec = PruneData(source_ids_seen); + + // Record how old the newest truncated source is. + source_counts_proto->set_pruned_sources_age_seconds(pruned_sources_age_sec); + + // Set deferred sources count after pruning. + source_counts_proto->set_deferred_sources(recordings_.sources.size()); + // Same value as the deferred source count, for setting the carryover count + // in the next reporting cycle. + recordings_.source_counts.carryover_sources = recordings_.sources.size(); + + // We already matched these deferred sources against the URL whitelist. + // Re-whitelist them for the next report. + for (const auto& kv : recordings_.sources) { + recordings_.carryover_urls_whitelist.insert(kv.second->url().spec()); + } + + UMA_HISTOGRAM_COUNTS_1000("UKM.Sources.KeptSourcesCount", + recordings_.sources.size()); + + // Record number of sources after pruning that were carried over due to not + // having any events in this reporting cycle. + int num_sources_entryless = 0; + for (const auto& kv : recordings_.sources) { + if (!base::Contains(source_ids_seen, kv.first)) { + num_sources_entryless++; + } + } + source_counts_proto->set_entryless_sources(num_sources_entryless); + + // Notify observers that a report was generated. + if (entry_filter_) { + entry_filter_->OnStoreRecordingsInReport(); + } +} + +int UkmRecorderImpl::PruneData(std::set<SourceId>& source_ids_seen) { // Modify the set source_ids_seen by removing sources that aren't in // recordings_. We do this here as there is a few places for // recordings_.sources to be modified. The resulting set will be currently @@ -673,39 +668,7 @@ num_sources - recordings_.sources.size()); } } - - // Record how old the newest truncated source is. - source_counts_proto->set_pruned_sources_age_seconds(pruned_sources_age_sec); - - // Set deferred sources count after pruning. - source_counts_proto->set_deferred_sources(recordings_.sources.size()); - // Same value as the deferred source count, for setting the carryover count - // in the next reporting cycle. - recordings_.source_counts.carryover_sources = recordings_.sources.size(); - - // We already matched these deferred sources against the URL whitelist. - // Re-whitelist them for the next report. - for (const auto& kv : recordings_.sources) { - recordings_.carryover_urls_whitelist.insert(kv.second->url().spec()); - } - - UMA_HISTOGRAM_COUNTS_1000("UKM.Sources.KeptSourcesCount", - recordings_.sources.size()); - - // Record number of sources after pruning that were carried over due to not - // having any events in this reporting cycle. - int num_sources_entryless = 0; - for (const auto& kv : recordings_.sources) { - if (!base::Contains(source_ids_seen, kv.first)) { - num_sources_entryless++; - } - } - source_counts_proto->set_entryless_sources(num_sources_entryless); - - // Notify observers that a report was generated. - if (entry_filter_) { - entry_filter_->OnStoreRecordingsInReport(); - } + return pruned_sources_age_sec; } bool UkmRecorderImpl::ShouldRestrictToWhitelistedSourceIds() const { @@ -847,6 +810,43 @@ std::make_unique<UkmSource>(source_id, sanitized_navigation_data)); } +UkmRecorderImpl::EventAggregate::EventAggregate() = default; +UkmRecorderImpl::EventAggregate::~EventAggregate() = default; + +void UkmRecorderImpl::EventAggregate::FillProto( + Aggregate* proto_aggregate) const { + proto_aggregate->set_source_id(0); // Across all sources. + proto_aggregate->set_total_count(total_count); + proto_aggregate->set_dropped_due_to_limits(dropped_due_to_limits); + proto_aggregate->set_dropped_due_to_sampling(dropped_due_to_sampling); + proto_aggregate->set_dropped_due_to_filter(dropped_due_to_filter); + proto_aggregate->set_dropped_due_to_unconfigured(dropped_due_to_unconfigured); + for (const auto& metric_and_aggregate : metrics) { + const MetricAggregate& aggregate = metric_and_aggregate.second; + Aggregate::Metric* proto_metric = proto_aggregate->add_metrics(); + proto_metric->set_metric_hash(metric_and_aggregate.first); + proto_metric->set_value_sum(aggregate.value_sum); + proto_metric->set_value_square_sum(aggregate.value_square_sum); + if (aggregate.total_count != total_count) { + proto_metric->set_total_count(aggregate.total_count); + } + if (aggregate.dropped_due_to_limits != dropped_due_to_limits) { + proto_metric->set_dropped_due_to_limits(aggregate.dropped_due_to_limits); + } + if (aggregate.dropped_due_to_sampling != dropped_due_to_sampling) { + proto_metric->set_dropped_due_to_sampling( + aggregate.dropped_due_to_sampling); + } + if (aggregate.dropped_due_to_filter != dropped_due_to_filter) { + proto_metric->set_dropped_due_to_filter(aggregate.dropped_due_to_filter); + } + if (aggregate.dropped_due_to_unconfigured != dropped_due_to_unconfigured) { + proto_metric->set_dropped_due_to_unconfigured( + aggregate.dropped_due_to_unconfigured); + } + } +} + void UkmRecorderImpl::MaybeMarkForDeletion(SourceId source_id) { SourceIdType type = GetSourceIdType(source_id); switch (type) {
diff --git a/components/ukm/ukm_recorder_impl.h b/components/ukm/ukm_recorder_impl.h index 7a135dca..75695866 100644 --- a/components/ukm/ukm_recorder_impl.h +++ b/components/ukm/ukm_recorder_impl.h
@@ -33,6 +33,7 @@ } namespace ukm { +class Aggregate; class Report; class UkmRecorderImplTest; class UkmRecorderObserver; @@ -135,6 +136,12 @@ // Writes recordings into a report proto, and clears recordings. void StoreRecordingsInReport(Report* report); + // Prunes data after storing records in the report. Returns the time elapsed + // in seconds from the moment the newest truncated source was created to the + // moment it was discarded from memory, if pruning happened due to number + // of sources exceeding the max threshold. + int PruneData(std::set<SourceId>& source_ids_seen); + // Deletes Sources and Events with these source_ids. void PurgeSourcesAndEventsBySourceIds( const std::unordered_set<SourceId>& source_ids); @@ -195,6 +202,9 @@ EventAggregate(); ~EventAggregate(); + // Fills the proto message from the struct. + void FillProto(Aggregate* proto_aggregate) const; + base::flat_map<uint64_t, MetricAggregate> metrics; uint64_t total_count = 0; uint64_t dropped_due_to_limits = 0;
diff --git a/components/viz/service/display/skia_renderer.h b/components/viz/service/display/skia_renderer.h index 3a0074b..bb3be1d4 100644 --- a/components/viz/service/display/skia_renderer.h +++ b/components/viz/service/display/skia_renderer.h
@@ -290,7 +290,7 @@ } // Interface used for drawing. Common among different draw modes. - raw_ptr<SkCanvas, DanglingUntriaged> current_canvas_ = nullptr; + raw_ptr<SkCanvas> current_canvas_ = nullptr; class FrameResourceGpuCommandsCompletedFence; scoped_refptr<FrameResourceGpuCommandsCompletedFence> @@ -325,7 +325,7 @@ std::vector<SkMatrix> batched_cdt_matrices_; // Specific for SkDDL. - const raw_ptr<SkiaOutputSurface, DanglingUntriaged> skia_output_surface_; + const raw_ptr<SkiaOutputSurface> skia_output_surface_; const bool is_using_raw_draw_;
diff --git a/content/browser/accessibility/browser_accessibility_state_impl_unittest.cc b/content/browser/accessibility/browser_accessibility_state_impl_unittest.cc index 7fca3727e..4ac1fa13 100644 --- a/content/browser/accessibility/browser_accessibility_state_impl_unittest.cc +++ b/content/browser/accessibility/browser_accessibility_state_impl_unittest.cc
@@ -34,6 +34,11 @@ state_ = BrowserAccessibilityStateImpl::GetInstance(); } + void TearDown() override { + // Disable accessibility so that it does not impact subsequent tests. + state_->DisableAccessibility(); + } + base::test::ScopedFeatureList scoped_feature_list_; base::SimpleTestTickClock clock_; raw_ptr<BrowserAccessibilityStateImpl> state_;
diff --git a/content/browser/back_forward_cache_basics_browsertest.cc b/content/browser/back_forward_cache_basics_browsertest.cc index e41ffee..d90ef57 100644 --- a/content/browser/back_forward_cache_basics_browsertest.cc +++ b/content/browser/back_forward_cache_basics_browsertest.cc
@@ -784,7 +784,7 @@ content::FetchHistogramsFromChildProcesses(); EXPECT_THAT( - histogram_tester_.GetAllSamples(kEventPageShowPersisted), + histogram_tester().GetAllSamples(kEventPageShowPersisted), testing::UnorderedElementsAre(base::Bucket( static_cast<int>(blink::EventPageShowPersisted::kNoInRenderer), 1))); @@ -804,7 +804,7 @@ MatchEventList(rfh_b.get(), ListValueOf("window.pageshow")); content::FetchHistogramsFromChildProcesses(); EXPECT_THAT( - histogram_tester_.GetAllSamples(kEventPageShowPersisted), + histogram_tester().GetAllSamples(kEventPageShowPersisted), testing::UnorderedElementsAre(base::Bucket( static_cast<int>(blink::EventPageShowPersisted::kNoInRenderer), 2))); @@ -825,7 +825,7 @@ content::FetchHistogramsFromChildProcesses(); EXPECT_THAT( - histogram_tester_.GetAllSamples(kEventPageShowPersisted), + histogram_tester().GetAllSamples(kEventPageShowPersisted), testing::UnorderedElementsAre( base::Bucket( static_cast<int>(blink::EventPageShowPersisted::kNoInRenderer),
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc index 760d09e..7e41714 100644 --- a/content/browser/back_forward_cache_browsertest.cc +++ b/content/browser/back_forward_cache_browsertest.cc
@@ -16,6 +16,7 @@ #include "base/system/sys_info.h" #include "base/task/common/task_annotator.h" #include "base/test/bind.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/test_timeouts.h" #include "base/threading/thread_restrictions.h" #include "base/threading/thread_task_runner_handle.h" @@ -24,6 +25,7 @@ #include "build/build_config.h" #include "build/chromecast_buildflags.h" #include "build/chromeos_buildflags.h" +#include "components/ukm/test_ukm_recorder.h" #include "content/browser/bad_message.h" #include "content/browser/renderer_host/back_forward_cache_can_store_document_result.h" #include "content/browser/renderer_host/back_forward_cache_impl.h" @@ -133,7 +135,7 @@ // If this is triggered, see MojoInterfaceName in // tools/metrics/histograms/enums.xml for which values correspond which // messages. - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.UnexpectedRendererToBrowserMessage." "InterfaceName"), testing::ElementsAre()); @@ -231,6 +233,7 @@ host_resolver()->AddRule("*", "127.0.0.1"); // TestAutoSetUkmRecorder's constructor requires a sequenced context. ukm_recorder_ = std::make_unique<ukm::TestAutoSetUkmRecorder>(); + histogram_tester_ = std::make_unique<base::HistogramTester>(); ContentBrowserTest::SetUpOnMainThread(); } @@ -2646,8 +2649,12 @@ {}, location); } -ukm::TestAutoSetUkmRecorder* BackForwardCacheBrowserTest::ukm_recorder() { - return ukm_recorder_.get(); +const ukm::TestAutoSetUkmRecorder& BackForwardCacheBrowserTest::ukm_recorder() { + return *ukm_recorder_; +} + +const base::HistogramTester& BackForwardCacheBrowserTest::histogram_tester() { + return *histogram_tester_; } IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest,
diff --git a/content/browser/back_forward_cache_browsertest.h b/content/browser/back_forward_cache_browsertest.h index 47c09b0f..83a8724 100644 --- a/content/browser/back_forward_cache_browsertest.h +++ b/content/browser/back_forward_cache_browsertest.h
@@ -165,7 +165,8 @@ // `AddBlocklistedFeature`. void ExpectNotRestoredDueToBlocklistedFeature(base::Location location); - ukm::TestAutoSetUkmRecorder* ukm_recorder() override; + const ukm::TestAutoSetUkmRecorder& ukm_recorder() override; + const base::HistogramTester& histogram_tester() override; bool same_site_back_forward_cache_enabled_ = true; bool skip_same_site_if_unload_exists_ = false; @@ -189,6 +190,7 @@ std::vector<base::Feature> disabled_features_; std::unique_ptr<ukm::TestAutoSetUkmRecorder> ukm_recorder_; + std::unique_ptr<base::HistogramTester> histogram_tester_; // Store the tree result of NotRestoredReasons for the last main frame // navigation.
diff --git a/content/browser/back_forward_cache_features_browsertest.cc b/content/browser/back_forward_cache_features_browsertest.cc index 9eaefee..29ebb0e 100644 --- a/content/browser/back_forward_cache_features_browsertest.cc +++ b/content/browser/back_forward_cache_features_browsertest.cc
@@ -1554,7 +1554,7 @@ // blocklist we care about. base::HistogramBase::Sample sample = base::HistogramBase::Sample( blink::scheduler::WebSchedulerTrackedFeature::kPaymentManager); - std::vector<base::Bucket> blocklist_values = histogram_tester_.GetAllSamples( + std::vector<base::Bucket> blocklist_values = histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome." "BlocklistedFeature"); auto it = std::find_if( @@ -1563,7 +1563,7 @@ EXPECT_TRUE(it != blocklist_values.end()); std::vector<base::Bucket> all_sites_blocklist_values = - histogram_tester_.GetAllSamples( + histogram_tester().GetAllSamples( "BackForwardCache.AllSites.HistoryNavigationOutcome." "BlocklistedFeature");
diff --git a/content/browser/back_forward_cache_internal_browsertest.cc b/content/browser/back_forward_cache_internal_browsertest.cc index e02c20a..6283c98 100644 --- a/content/browser/back_forward_cache_internal_browsertest.cc +++ b/content/browser/back_forward_cache_internal_browsertest.cc
@@ -560,7 +560,7 @@ for (base::HistogramBase::Sample sample : samples) { FetchHistogramsFromChildProcesses(); EXPECT_TRUE(HistogramContainsIntValue( - sample, histogram_tester_.GetAllSamples( + sample, histogram_tester().GetAllSamples( "BackForwardCache.Experimental." "UnexpectedIPCMessagePostedToCachedFrame.MethodHash"))); } @@ -2239,7 +2239,7 @@ // Expect the back-forward restore without pageshow to be detected. content::FetchHistogramsFromChildProcesses(); - EXPECT_THAT(histogram_tester_.GetAllSamples(kHistogramName), + EXPECT_THAT(histogram_tester().GetAllSamples(kHistogramName), ElementsAre(base::Bucket(0, 1))); EXPECT_TRUE(ExecJs(current_frame_host(), R"( @@ -2256,7 +2256,7 @@ // Expect the back-forward restore with pageshow to be detected. content::FetchHistogramsFromChildProcesses(); - EXPECT_THAT(histogram_tester_.GetAllSamples(kHistogramName), + EXPECT_THAT(histogram_tester().GetAllSamples(kHistogramName), ElementsAre(base::Bucket(0, 1), base::Bucket(1, 1))); }
diff --git a/content/browser/back_forward_cache_test_util.cc b/content/browser/back_forward_cache_test_util.cc index ef9f3a51..3c23614 100644 --- a/content/browser/back_forward_cache_test_util.cc +++ b/content/browser/back_forward_cache_test_util.cc
@@ -7,12 +7,28 @@ namespace content { +namespace { + using ::testing::_; using ::testing::Each; using ::testing::ElementsAre; using ::testing::Not; using ::testing::UnorderedElementsAreArray; +void AddSampleToBuckets(std::vector<base::Bucket>* buckets, + base::HistogramBase::Sample sample) { + auto it = std::find_if( + buckets->begin(), buckets->end(), + [sample](const base::Bucket& bucket) { return bucket.min == sample; }); + if (it == buckets->end()) { + buckets->push_back(base::Bucket(sample, 1)); + } else { + it->count++; + } +} + +} // namespace + void BackForwardCacheMetricsTestMatcher::DisableCheckingMetricsForAllSites() { check_all_sites_ = false; } @@ -20,7 +36,7 @@ void BackForwardCacheMetricsTestMatcher::ExpectOutcomeDidNotChange( base::Location location) { EXPECT_EQ(expected_outcomes_, - histogram_tester_.GetAllSamples( + histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome")) << location.ToString(); @@ -28,14 +44,14 @@ return; EXPECT_EQ(expected_outcomes_, - histogram_tester_.GetAllSamples( + histogram_tester().GetAllSamples( "BackForwardCache.AllSites.HistoryNavigationOutcome")) << location.ToString(); std::string is_served_from_bfcache = "BackForwardCache.IsServedFromBackForwardCache"; EXPECT_THAT( - ukm_recorder()->GetMetrics("HistoryNavigation", {is_served_from_bfcache}), + ukm_recorder().GetMetrics("HistoryNavigation", {is_served_from_bfcache}), expected_ukm_outcomes_) << location.ToString(); } @@ -64,7 +80,7 @@ void BackForwardCacheMetricsTestMatcher::ExpectNotRestoredDidNotChange( base::Location location) { EXPECT_EQ(expected_not_restored_, - histogram_tester_.GetAllSamples( + histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome." "NotRestoredReason")) << location.ToString(); @@ -75,13 +91,13 @@ return; EXPECT_EQ(expected_not_restored_, - histogram_tester_.GetAllSamples( + histogram_tester().GetAllSamples( "BackForwardCache.AllSites.HistoryNavigationOutcome." "NotRestoredReason")) << location.ToString(); EXPECT_THAT( - ukm_recorder()->GetMetrics("HistoryNavigation", {not_restored_reasons}), + ukm_recorder().GetMetrics("HistoryNavigation", {not_restored_reasons}), expected_ukm_not_restored_reasons_) << location.ToString(); } @@ -108,7 +124,7 @@ AddSampleToBuckets(&expected_eviction_after_committing_, sample); } - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.EvictedAfterDocumentRestoredReason"), UnorderedElementsAreArray(expected_eviction_after_committing_)) << location.ToString(); @@ -116,39 +132,26 @@ return; EXPECT_THAT( - histogram_tester_.GetAllSamples( + histogram_tester().GetAllSamples( "BackForwardCache.AllSites.EvictedAfterDocumentRestoredReason"), UnorderedElementsAreArray(expected_eviction_after_committing_)) << location.ToString(); } -void BackForwardCacheMetricsTestMatcher::AddSampleToBuckets( - std::vector<base::Bucket>* buckets, - base::HistogramBase::Sample sample) { - auto it = std::find_if( - buckets->begin(), buckets->end(), - [sample](const base::Bucket& bucket) { return bucket.min == sample; }); - if (it == buckets->end()) { - buckets->push_back(base::Bucket(sample, 1)); - } else { - it->count++; - } -} - void BackForwardCacheMetricsTestMatcher::ExpectOutcome( BackForwardCacheMetrics::HistoryNavigationOutcome outcome, base::Location location) { base::HistogramBase::Sample sample = base::HistogramBase::Sample(outcome); AddSampleToBuckets(&expected_outcomes_, sample); - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome"), UnorderedElementsAreArray(expected_outcomes_)) << location.ToString(); if (!check_all_sites_) return; - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.AllSites.HistoryNavigationOutcome"), UnorderedElementsAreArray(expected_outcomes_)) << location.ToString(); @@ -160,7 +163,7 @@ expected_ukm_outcomes_.push_back( {{is_served_from_bfcache, static_cast<int64_t>(ukm_outcome)}}); EXPECT_THAT( - ukm_recorder()->GetMetrics("HistoryNavigation", {is_served_from_bfcache}), + ukm_recorder().GetMetrics("HistoryNavigation", {is_served_from_bfcache}), expected_ukm_outcomes_) << location.ToString(); } @@ -207,7 +210,7 @@ not_restored_reasons_bits |= 1ull << static_cast<int>(reason); } - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome." "NotRestoredReason"), UnorderedElementsAreArray(expected_not_restored_)) @@ -216,7 +219,7 @@ if (!check_all_sites_) return; - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.AllSites.HistoryNavigationOutcome." "NotRestoredReason"), UnorderedElementsAreArray(expected_not_restored_)) @@ -226,7 +229,7 @@ expected_ukm_not_restored_reasons_.push_back( {{not_restored_reasons, not_restored_reasons_bits}}); EXPECT_THAT( - ukm_recorder()->GetMetrics("HistoryNavigation", {not_restored_reasons}), + ukm_recorder().GetMetrics("HistoryNavigation", {not_restored_reasons}), expected_ukm_not_restored_reasons_) << location.ToString(); } @@ -239,7 +242,7 @@ AddSampleToBuckets(&expected_blocklisted_features_, sample); } - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome." "BlocklistedFeature"), UnorderedElementsAreArray(expected_blocklisted_features_)) @@ -248,7 +251,7 @@ if (!check_all_sites_) return; - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.AllSites.HistoryNavigationOutcome." "BlocklistedFeature"), UnorderedElementsAreArray(expected_blocklisted_features_)) @@ -263,7 +266,7 @@ content::BackForwardCacheMetrics::MetricValue(reason)); AddSampleToBuckets(&expected_disabled_reasons_, sample); } - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome." "DisabledForRenderFrameHostReason2"), UnorderedElementsAreArray(expected_disabled_reasons_)) @@ -277,7 +280,7 @@ base::HistogramBase::Sample sample(reason); AddSampleToBuckets(&expected_disallow_activation_reasons_, sample); } - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome." "DisallowActivationReason"), UnorderedElementsAreArray(expected_disallow_activation_reasons_)) @@ -293,7 +296,7 @@ AddSampleToBuckets(&expected_browsing_instance_not_swapped_reasons_, sample); } - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.HistoryNavigationOutcome." "BrowsingInstanceNotSwappedReason"), UnorderedElementsAreArray( @@ -302,7 +305,7 @@ if (!check_all_sites_) return; - EXPECT_THAT(histogram_tester_.GetAllSamples( + EXPECT_THAT(histogram_tester().GetAllSamples( "BackForwardCache.AllSites.HistoryNavigationOutcome." "BrowsingInstanceNotSwappedReason"), UnorderedElementsAreArray(
diff --git a/content/browser/back_forward_cache_test_util.h b/content/browser/back_forward_cache_test_util.h index 669c2e2..222538c4 100644 --- a/content/browser/back_forward_cache_test_util.h +++ b/content/browser/back_forward_cache_test_util.h
@@ -17,7 +17,28 @@ namespace content { // `BackForwardCacheMetricsTestMatcher` provides common matchers and -// expectations to help make test assertions on BackForwardCache-related states. +// expectations to help make test assertions on BackForwardCache-related +// metrics. +// +// This class tries to remove the efforts to reset HistogramTester by keeping +// local copies of expected metrics in expected_* members such that subsequent +// calls to Expect*() won't need to take previous metrics into account. +// +// For example: +// ... +// DoActionCauseFeatureA(); +// // The implementation compares {FeatureA} with metrics from +// // `histogram_tester()`, which is {FeatureA}. +// // FeatureA will be stored in in `expected_blocklisted_features_`. +// ExpectBlocklistedFeature(FeatureA); +// +// // `histogram_tester()` keeps FeatureA and continues to accumulate metrics. +// +// DoActionCauseFeatureB(); +// // The implementation compares {FeatureA, FeatureB} with accumulated +// // metrics from `histogram_tester()`, which is also {FeatureA, FeatureB}. +// ExpectBlocklistedFeature(FeatureB); +// class BackForwardCacheMetricsTestMatcher { protected: using UkmMetrics = ukm::TestUkmRecorder::HumanReadableUkmMetrics; @@ -61,21 +82,18 @@ void ExpectBucketCount(base::StringPiece name, T sample, base::HistogramBase::Count expected_count) { - histogram_tester_.ExpectBucketCount(name, sample, expected_count); + histogram_tester().ExpectBucketCount(name, sample, expected_count); } // Implementation needs to provide access to their own ukm_recorder. // Note that TestAutoSetUkmRecorder's ctor requires a sequenced context. - virtual ukm::TestAutoSetUkmRecorder* ukm_recorder() = 0; + virtual const ukm::TestAutoSetUkmRecorder& ukm_recorder() = 0; - base::HistogramTester histogram_tester_; + // Implementation needs to provide access to their own histogram_tester. + // Note that HistogramTester accumulates all data after it is constructed. + virtual const base::HistogramTester& histogram_tester() = 0; private: - // TODO(crbug.com/1352894): Move the following methods into .cc as local - // functions. - void AddSampleToBuckets(std::vector<base::Bucket>* buckets, - base::HistogramBase::Sample sample); - // Adds a new outcome to the set of expected outcomes (restored or not) and // tests that it occurred. void ExpectOutcome(BackForwardCacheMetrics::HistoryNavigationOutcome outcome, @@ -109,9 +127,6 @@ const std::vector<ShouldSwapBrowsingInstance>& reasons, base::Location location); - // TODO(crbug.com/1352894): Investigate to remove these members. Private - // methods currently have random assumptions on whether these members will be - // set before calling. std::vector<base::Bucket> expected_outcomes_; std::vector<base::Bucket> expected_not_restored_; std::vector<base::Bucket> expected_blocklisted_features_;
diff --git a/content/browser/first_party_sets/first_party_set_parser.cc b/content/browser/first_party_sets/first_party_set_parser.cc index 4b5a110a..9f42658f 100644 --- a/content/browser/first_party_sets/first_party_set_parser.cc +++ b/content/browser/first_party_sets/first_party_set_parser.cc
@@ -30,6 +30,8 @@ namespace { +using ParseError = FirstPartySetParser::ParseError; + // Ensures that the string represents an origin that is non-opaque and HTTPS. // Returns the registered domain. absl::optional<net::SchemefulSite> Canonicalize(base::StringPiece origin_string, @@ -67,6 +69,35 @@ const char kFirstPartySetPolicyReplacementsField[] = "replacements"; const char kFirstPartySetPolicyAdditionsField[] = "additions"; +// Parses a single base::Value into a net::SchemefulSite, and verifies that it +// is not already included in this set or any other. +base::expected<net::SchemefulSite, ParseError> ParseSiteAndValidate( + const base::Value& item, + const std::vector<std::pair<net::SchemefulSite, net::FirstPartySetEntry>>& + set_entries, + const base::flat_set<net::SchemefulSite>& other_sets_sites) { + if (!item.is_string()) + return base::unexpected(ParseError::kInvalidType); + + const absl::optional<net::SchemefulSite> maybe_site = + Canonicalize(item.GetString(), false /* emit_errors */); + if (!maybe_site.has_value()) + return base::unexpected(ParseError::kInvalidOrigin); + + const net::SchemefulSite& site = *maybe_site; + if (base::ranges::any_of( + set_entries, + [&](const std::pair<net::SchemefulSite, net::FirstPartySetEntry>& + site_and_entry) { return site_and_entry.first == site; })) { + return base::unexpected(ParseError::kRepeatedDomain); + } + + if (other_sets_sites.contains(site)) + return base::unexpected(ParseError::kNonDisjointSets); + + return site; +} + // Validates a single First-Party Set and parses it into a SingleSet. // Note that this is intended for use *only* on sets that were received via the // Component Updater or from enterprise policy, so this does not check @@ -75,77 +106,58 @@ // with `elements`), and singleton sets (i.e. sets must have an owner and at // least one valid member). // -// Uses `elements` to check disjointness of sets; outputs the set as `out_set`; -// and augments `elements` to include the elements of the set that was parsed. +// Uses `elements` to check disjointness of sets; augments `elements` to include +// the elements of the set that was parsed. // // Returns the parsed set if parsing and validation were successful; otherwise, // returns an appropriate FirstPartySetParser::ParseError. -base::expected<FirstPartySetParser::SingleSet, FirstPartySetParser::ParseError> -ParseSet(const base::Value& value, - bool keep_indices, - base::flat_set<net::SchemefulSite>& elements) { +base::expected<FirstPartySetParser::SingleSet, ParseError> ParseSet( + const base::Value& value, + bool keep_indices, + base::flat_set<net::SchemefulSite>& elements) { if (!value.is_dict()) - return base::unexpected(FirstPartySetParser::ParseError::kInvalidType); + return base::unexpected(ParseError::kInvalidType); + + const base::Value::Dict& dict = value.GetDict(); // Confirm that the set has an owner, and the owner is a string. - const std::string* maybe_owner = - value.GetDict().FindString(kFirstPartySetOwnerField); - if (!maybe_owner) - return base::unexpected(FirstPartySetParser::ParseError::kInvalidType); + const base::Value* primary_item = dict.Find(kFirstPartySetOwnerField); + if (!primary_item) + return base::unexpected(ParseError::kInvalidType); - absl::optional<net::SchemefulSite> canonical_owner = - Canonicalize(std::move(*maybe_owner), false /* emit_errors */); - if (!canonical_owner.has_value()) - return base::unexpected(FirstPartySetParser::ParseError::kInvalidOrigin); + base::expected<net::SchemefulSite, ParseError> primary_or_error = + ParseSiteAndValidate(*primary_item, /*set_entries=*/{}, elements); + if (!primary_or_error.has_value()) { + return base::unexpected(primary_or_error.error()); + } + const net::SchemefulSite& primary = primary_or_error.value(); - // An owner may not be a member of another set. - if (elements.contains(*canonical_owner)) - return base::unexpected(FirstPartySetParser::ParseError::kNonDisjointSets); + std::vector<std::pair<net::SchemefulSite, net::FirstPartySetEntry>> + set_entries( + {{primary, net::FirstPartySetEntry(primary, net::SiteType::kPrimary, + absl::nullopt)}}); // Confirm that the members field is present, and is an array of strings. - const base::Value* maybe_members_list = - value.FindListKey(kFirstPartySetMembersField); + const base::Value::List* maybe_members_list = + dict.FindList(kFirstPartySetMembersField); if (!maybe_members_list) - return base::unexpected(FirstPartySetParser::ParseError::kInvalidType); + return base::unexpected(ParseError::kInvalidType); - if (maybe_members_list->GetListDeprecated().empty()) - return base::unexpected(FirstPartySetParser::ParseError::kSingletonSet); + if (maybe_members_list->empty()) + return base::unexpected(ParseError::kSingletonSet); - std::vector<std::pair<net::SchemefulSite, net::FirstPartySetEntry>> sites; - sites.emplace_back( - *canonical_owner, - net::FirstPartySetEntry(*canonical_owner, net::SiteType::kPrimary, - absl::nullopt)); - // Add each member to our mapping (assuming the member is a string). + // Add each member to our mapping (after validating). uint32_t index = 0; - for (const auto& item : maybe_members_list->GetListDeprecated()) { - // Members may not be a member of another set, and may not be an owner of - // another set. - if (!item.is_string()) - return base::unexpected(FirstPartySetParser::ParseError::kInvalidType); - absl::optional<net::SchemefulSite> member = - Canonicalize(item.GetString(), false /* emit_errors */); - if (!member.has_value()) - return base::unexpected(FirstPartySetParser::ParseError::kInvalidOrigin); - - if (*member == *canonical_owner || - base::ranges::any_of( - sites, - [&](const std::pair<net::SchemefulSite, net::FirstPartySetEntry>& - site_and_entry) { - return site_and_entry.first == member; - })) { - return base::unexpected(FirstPartySetParser::ParseError::kRepeatedDomain); + for (const auto& item : *maybe_members_list) { + base::expected<net::SchemefulSite, ParseError> site_or_error = + ParseSiteAndValidate(item, set_entries, elements); + if (!site_or_error.has_value()) { + return base::unexpected(site_or_error.error()); } - - if (elements.contains(*member)) - return base::unexpected( - FirstPartySetParser::ParseError::kNonDisjointSets); - - sites.emplace_back( - *member, + set_entries.emplace_back( + site_or_error.value(), net::FirstPartySetEntry( - *canonical_owner, net::SiteType::kAssociated, + primary, net::SiteType::kAssociated, keep_indices ? absl::make_optional(net::FirstPartySetEntry::SiteIndex(index)) : absl::nullopt)); @@ -153,12 +165,12 @@ } for (const std::pair<net::SchemefulSite, net::FirstPartySetEntry>& - site_and_entry : sites) { + site_and_entry : set_entries) { bool inserted = elements.insert(site_and_entry.first).second; DCHECK(inserted); } - return FirstPartySetParser::SingleSet(sites); + return FirstPartySetParser::SingleSet(set_entries); } // Parses each set in `policy_sets` by calling ParseSet on each one. @@ -175,9 +187,8 @@ std::vector<FirstPartySetParser::SingleSet> parsed_sets; for (int i = 0; i < static_cast<int>(policy_sets->size()); i++) { - base::expected<FirstPartySetParser::SingleSet, - FirstPartySetParser::ParseError> - parsed = ParseSet((*policy_sets)[i], /*keep_indices=*/false, elements); + base::expected<FirstPartySetParser::SingleSet, ParseError> parsed = + ParseSet((*policy_sets)[i], /*keep_indices=*/false, elements); if (!parsed.has_value()) { return base::unexpected( FirstPartySetParser::PolicyParsingError{parsed.error(), set_type, i}); @@ -296,11 +307,10 @@ trimmed, base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS); if (!maybe_value.has_value()) return {}; - base::expected<FirstPartySetParser::SingleSet, - FirstPartySetParser::ParseError> - parsed = ParseSet(*maybe_value, /*keep_indices=*/true, elements); + base::expected<FirstPartySetParser::SingleSet, ParseError> parsed = + ParseSet(*maybe_value, /*keep_indices=*/true, elements); if (!parsed.has_value()) { - if (parsed.error() == FirstPartySetParser::ParseError::kInvalidOrigin) { + if (parsed.error() == ParseError::kInvalidOrigin) { // Ignore sets that include an invalid domain (which might have been // caused by a PSL update), but don't let that break other sets. continue;
diff --git a/content/browser/hid/hid_service.cc b/content/browser/hid/hid_service.cc index 0d07513..d69e32e 100644 --- a/content/browser/hid/hid_service.cc +++ b/content/browser/hid/hid_service.cc
@@ -121,11 +121,12 @@ const std::unique_ptr<HidService> parent_; }; -HidService::HidService(BrowserContext* browser_context, - const url::Origin& origin, - RenderFrameHostImpl* render_frame_host) - : browser_context_(browser_context), - render_frame_host_(render_frame_host), +HidService::HidService( + RenderFrameHostImpl* render_frame_host, + base::WeakPtr<ServiceWorkerContextCore> service_worker_context, + const url::Origin& origin) + : render_frame_host_(render_frame_host), + service_worker_context_(std::move(service_worker_context)), origin_(origin) { watchers_.set_disconnect_handler( base::BindRepeating(&HidService::OnWatcherRemoved, base::Unretained(this), @@ -133,13 +134,25 @@ HidDelegate* delegate = GetContentClient()->browser()->GetHidDelegate(); if (delegate) - delegate->AddObserver(browser_context_, this); + delegate->AddObserver(GetBrowserContext(), this); } +HidService::HidService(RenderFrameHostImpl* render_frame_host) + : HidService(render_frame_host, + /*service_worker_context=*/nullptr, + render_frame_host->GetMainFrame()->GetLastCommittedOrigin()) {} + +HidService::HidService( + base::WeakPtr<ServiceWorkerContextCore> service_worker_context, + const url::Origin& origin) + : HidService(/*render_frame_host=*/nullptr, + std::move(service_worker_context), + origin) {} + HidService::~HidService() { HidDelegate* delegate = GetContentClient()->browser()->GetHidDelegate(); if (delegate) - delegate->RemoveObserver(browser_context_, this); + delegate->RemoveObserver(GetBrowserContext(), this); // The remaining watchers will be closed from this end. if (!watchers_.empty()) @@ -175,20 +188,16 @@ // `render_frame_host` and destroys the HidService when the Mojo connection is // disconnected, RenderFrameHost is deleted, or the RenderFrameHost commits a // cross-document navigation. It forwards its Mojo interface to HidService. - new DocumentHelper( - std::make_unique<HidService>( - render_frame_host->GetBrowserContext(), - render_frame_host->GetMainFrame()->GetLastCommittedOrigin(), - render_frame_host), - *render_frame_host, std::move(receiver)); + new DocumentHelper(std::make_unique<HidService>(render_frame_host), + *render_frame_host, std::move(receiver)); } // static void HidService::Create( - BrowserContext* browser_context, + base::WeakPtr<ServiceWorkerContextCore> service_worker_context, const url::Origin& origin, mojo::PendingReceiver<blink::mojom::HidService> receiver) { - DCHECK(browser_context); + DCHECK(service_worker_context); // Avoid creating the HidService if there is no HID delegate to provide // the implementation. @@ -197,9 +206,8 @@ // This makes HidService a self-owned receiver so it will self-destruct when a // mojo interface error occurs. - mojo::MakeSelfOwnedReceiver<blink::mojom::HidService, HidService>( - std::make_unique<HidService>(browser_context, origin, - /*render_frame_host=*/nullptr), + mojo::MakeSelfOwnedReceiver( + std::make_unique<HidService>(std::move(service_worker_context), origin), std::move(receiver)); } @@ -209,10 +217,16 @@ } void HidService::GetDevices(GetDevicesCallback callback) { + auto* browser_context = GetBrowserContext(); + + if (!browser_context) { + std::move(callback).Run({}); + return; + } GetContentClient() ->browser() ->GetHidDelegate() - ->GetHidManager(browser_context_) + ->GetHidManager(browser_context) ->GetDevices(base::BindOnce(&HidService::FinishGetDevices, weak_factory_.GetWeakPtr(), std::move(callback))); @@ -224,7 +238,7 @@ RequestDeviceCallback callback) { HidDelegate* delegate = GetContentClient()->browser()->GetHidDelegate(); if (!render_frame_host_ || - !delegate->CanRequestDevicePermission(browser_context_, origin_)) { + !delegate->CanRequestDevicePermission(GetBrowserContext(), origin_)) { std::move(callback).Run(std::vector<device::mojom::HidDeviceInfoPtr>()); return; } @@ -238,6 +252,12 @@ const std::string& device_guid, mojo::PendingRemote<device::mojom::HidConnectionClient> client, ConnectCallback callback) { + auto* browser_context = GetBrowserContext(); + + if (!browser_context) { + std::move(callback).Run(mojo::NullRemote()); + return; + } if (watchers_.empty()) { IncrementActiveFrameCount(); } @@ -248,19 +268,23 @@ watcher_ids_.insert({device_guid, receiver_id}); auto* delegate = GetContentClient()->browser()->GetHidDelegate(); - delegate->GetHidManager(browser_context_) + delegate->GetHidManager(browser_context) ->Connect( device_guid, std::move(client), std::move(watcher), /*allow_protected_reports=*/false, - delegate->IsFidoAllowedForOrigin(browser_context_, origin_), + delegate->IsFidoAllowedForOrigin(browser_context, origin_), base::BindOnce(&HidService::FinishConnect, weak_factory_.GetWeakPtr(), std::move(callback))); } void HidService::Forget(device::mojom::HidDeviceInfoPtr device_info, ForgetCallback callback) { - GetContentClient()->browser()->GetHidDelegate()->RevokeDevicePermission( - browser_context_, origin_, *device_info); + auto* browser_context = GetBrowserContext(); + + if (browser_context) { + GetContentClient()->browser()->GetHidDelegate()->RevokeDevicePermission( + browser_context, origin_, *device_info); + } std::move(callback).Run(); } @@ -294,14 +318,15 @@ void HidService::OnDeviceAdded( const device::mojom::HidDeviceInfo& device_info) { + auto* browser_context = GetBrowserContext(); auto* delegate = GetContentClient()->browser()->GetHidDelegate(); - if (!delegate->HasDevicePermission(browser_context_, origin_, device_info)) + if (!delegate->HasDevicePermission(browser_context, origin_, device_info)) return; auto filtered_device_info = device_info.Clone(); RemoveProtectedReports( *filtered_device_info, - delegate->IsFidoAllowedForOrigin(browser_context_, origin_)); + delegate->IsFidoAllowedForOrigin(browser_context, origin_)); if (filtered_device_info->collections.empty()) return; @@ -324,15 +349,16 @@ if (watchers_removed > 0) OnWatcherRemoved(/*cleanup_watcher_ids=*/false); + auto* browser_context = GetBrowserContext(); auto* delegate = GetContentClient()->browser()->GetHidDelegate(); - if (!delegate->HasDevicePermission(browser_context_, origin_, device_info)) { + if (!delegate->HasDevicePermission(browser_context, origin_, device_info)) { return; } auto filtered_device_info = device_info.Clone(); RemoveProtectedReports( *filtered_device_info, - delegate->IsFidoAllowedForOrigin(browser_context_, origin_)); + delegate->IsFidoAllowedForOrigin(browser_context, origin_)); if (filtered_device_info->collections.empty()) return; @@ -342,16 +368,17 @@ void HidService::OnDeviceChanged( const device::mojom::HidDeviceInfo& device_info) { + auto* browser_context = GetBrowserContext(); auto* delegate = GetContentClient()->browser()->GetHidDelegate(); const bool has_device_permission = - delegate->HasDevicePermission(browser_context_, origin_, device_info); + delegate->HasDevicePermission(browser_context, origin_, device_info); device::mojom::HidDeviceInfoPtr filtered_device_info; if (has_device_permission) { filtered_device_info = device_info.Clone(); RemoveProtectedReports( *filtered_device_info, - delegate->IsFidoAllowedForOrigin(browser_context_, origin_)); + delegate->IsFidoAllowedForOrigin(browser_context, origin_)); } if (!has_device_permission || filtered_device_info->collections.empty()) { @@ -386,16 +413,17 @@ return; } + auto* browser_context = GetBrowserContext(); HidDelegate* delegate = GetContentClient()->browser()->GetHidDelegate(); size_t watchers_removed = base::EraseIf(watcher_ids_, [&](const auto& watcher_entry) { const auto* device_info = - delegate->GetDeviceInfo(browser_context_, watcher_entry.first); + delegate->GetDeviceInfo(browser_context, watcher_entry.first); if (!device_info) return true; - if (delegate->HasDevicePermission(browser_context_, origin_, + if (delegate->HasDevicePermission(browser_context, origin_, *device_info)) { return false; } @@ -412,17 +440,18 @@ void HidService::FinishGetDevices( GetDevicesCallback callback, std::vector<device::mojom::HidDeviceInfoPtr> devices) { + auto* browser_context = GetBrowserContext(); auto* delegate = GetContentClient()->browser()->GetHidDelegate(); bool is_fido_allowed = - delegate->IsFidoAllowedForOrigin(browser_context_, origin_); + delegate->IsFidoAllowedForOrigin(browser_context, origin_); std::vector<device::mojom::HidDeviceInfoPtr> result; for (auto& device : devices) { RemoveProtectedReports(*device, is_fido_allowed); if (device->collections.empty()) continue; - if (delegate->HasDevicePermission(browser_context_, origin_, *device)) + if (delegate->HasDevicePermission(browser_context, origin_, *device)) result.push_back(std::move(device)); } @@ -446,4 +475,14 @@ std::move(callback).Run(std::move(connection)); } +BrowserContext* HidService::GetBrowserContext() { + if (render_frame_host_) { + return render_frame_host_->GetBrowserContext(); + } + if (service_worker_context_) { + return service_worker_context_->wrapper()->browser_context(); + } + return nullptr; +} + } // namespace content
diff --git a/content/browser/hid/hid_service.h b/content/browser/hid/hid_service.h index 9e7b4a87..5c62c73 100644 --- a/content/browser/hid/hid_service.h +++ b/content/browser/hid/hid_service.h
@@ -11,6 +11,7 @@ #include "base/memory/weak_ptr.h" #include "content/browser/renderer_host/render_frame_host_impl.h" +#include "content/browser/service_worker/service_worker_context_core.h" #include "content/public/browser/hid_delegate.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" @@ -30,7 +31,8 @@ public device::mojom::HidConnectionWatcher, public HidDelegate::Observer { public: - HidService(BrowserContext*, const url::Origin&, RenderFrameHostImpl*); + explicit HidService(RenderFrameHostImpl*); + HidService(base::WeakPtr<ServiceWorkerContextCore>, const url::Origin&); HidService(HidService&) = delete; HidService& operator=(HidService&) = delete; ~HidService() override; @@ -41,7 +43,7 @@ // Use this when creating from a service worker, which doesn't have // RenderFrameHost. - static void Create(BrowserContext*, + static void Create(base::WeakPtr<ServiceWorkerContextCore>, const url::Origin&, mojo::PendingReceiver<blink::mojom::HidService>); @@ -70,6 +72,10 @@ void OnPermissionRevoked(const url::Origin& origin) override; private: + HidService(RenderFrameHostImpl* render_frame_host, + base::WeakPtr<ServiceWorkerContextCore> service_worker_context, + const url::Origin& origin); + void OnWatcherRemoved(bool cleanup_watcher_ids); void IncrementActiveFrameCount(); void DecrementActiveFrameCount(); @@ -83,15 +89,20 @@ ConnectCallback callback, mojo::PendingRemote<device::mojom::HidConnection> connection); - // The BrowserContext pointed by |browser_context_| always outlives - // HidService itself. - const raw_ptr<BrowserContext> browser_context_; + // Get the BrowserContext this HidService belongs to. It returns nullptr if + // the BrowserContext is destroyed. + BrowserContext* GetBrowserContext(); // When RenderFrameHost pointed by |render_frame_host| is destroyed, the // bound HidService will be destroyed first. It should be safe to access // |render_frame_host_| whenever it is not null. const raw_ptr<RenderFrameHostImpl> render_frame_host_; + // The ServiceWorkerContextCore of the service worker this HidService belongs + // to. + const base::WeakPtr<content::ServiceWorkerContextCore> + service_worker_context_; + // The last shown HID chooser UI. std::unique_ptr<HidChooser> chooser_; url::Origin origin_;
diff --git a/content/browser/hid/hid_service_unittest.cc b/content/browser/hid/hid_service_unittest.cc index ee2759b..da6894d 100644 --- a/content/browser/hid/hid_service_unittest.cc +++ b/content/browser/hid/hid_service_unittest.cc
@@ -13,6 +13,7 @@ #include "base/test/test_future.h" #include "content/browser/hid/hid_service.h" #include "content/browser/hid/hid_test_utils.h" +#include "content/browser/service_worker/embedded_worker_test_helper.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/hid_delegate.h" #include "content/public/common/content_client.h" @@ -45,7 +46,7 @@ enum HidServiceCreationType { kCreateUsingRenderFrameHost, - kCreateUsingBrowserContextAndOrigin, + kCreateUsingServiceWorkerContextCore, }; const char kTestUrl[] = "https://www.google.com"; @@ -56,8 +57,8 @@ switch (type) { case kCreateUsingRenderFrameHost: return "CreateUsingRenderFrameHost"; - case kCreateUsingBrowserContextAndOrigin: - return "CreateUsingBrowserContextAndOrigin"; + case kCreateUsingServiceWorkerContextCore: + return "CreateUsingServiceWorkerContextCore"; } } @@ -194,8 +195,10 @@ ->GetPrimaryMainFrame() ->GetHidService(service_.BindNewPipeAndPassReceiver()); break; - case kCreateUsingBrowserContextAndOrigin: - HidService::Create(&browser_context_, + case kCreateUsingServiceWorkerContextCore: + embedded_worker_test_helper_ = + std::make_unique<EmbeddedWorkerTestHelper>(base::FilePath()); + HidService::Create(embedded_worker_test_helper_->context()->AsWeakPtr(), url::Origin::Create(GURL(kTestUrl)), service_.BindNewPipeAndPassReceiver()); break; @@ -206,18 +209,23 @@ void CheckWebContentsHidServiceConnectedState(HidServiceCreationType type, bool expected_state) { // Skip the check when there is no web content. - if (type == kCreateUsingBrowserContextAndOrigin) { + if (type == kCreateUsingServiceWorkerContextCore) { return; } ASSERT_EQ(web_contents_->IsConnectedToHidDevice(), expected_state); } - private: + protected: BrowserTaskEnvironment task_environment_; - TestBrowserContext browser_context_; mojo::Remote<blink::mojom::HidService> service_; + + // For create hid service using RenderFrameHost. + TestBrowserContext browser_context_; TestWebContentsFactory web_contents_factory_; raw_ptr<WebContents> web_contents_; // Owned by |web_contents_factory_|. + + // For create hid service using service worker. + std::unique_ptr<EmbeddedWorkerTestHelper> embedded_worker_test_helper_; }; class HidServiceRenderFrameHostTest : public RenderViewHostImplTestHarness, @@ -232,6 +240,19 @@ public testing::WithParamInterface< std::tuple<HidServiceCreationType, bool>> {}; +// Test fixture for service worker specific tests. +class HidServiceServiceWorkerBrowserContextDestroyedTest + : public HidServiceBaseTest { + public: + void DestroyBrowserContext() { + // Reset |embedded_worker_test_helper_| will subsequently destroy the + // BrowserContext associated with it. + embedded_worker_test_helper_.reset(); + } + + void SetUp() override { GetService(kCreateUsingServiceWorkerContextCore); } +}; + } // namespace TEST_P(HidServiceTest, GetDevicesWithPermission) { @@ -979,7 +1000,7 @@ HidServiceTests, HidServiceTest, testing::Values(kCreateUsingRenderFrameHost, - kCreateUsingBrowserContextAndOrigin), + kCreateUsingServiceWorkerContextCore), [](const ::testing::TestParamInfo<HidServiceCreationType>& info) { return HidServiceCreationTypeToString(info.param); }); @@ -989,7 +1010,7 @@ HidServiceFidoTests, HidServiceFidoTest, testing::Combine(testing::Values(kCreateUsingRenderFrameHost, - kCreateUsingBrowserContextAndOrigin), + kCreateUsingServiceWorkerContextCore), testing::ValuesIn(kIsFidoAllowed)), [](const ::testing::TestParamInfo<std::tuple<HidServiceCreationType, bool>>& info) { @@ -999,4 +1020,40 @@ std::get<1>(info.param) ? "FidoAllowed" : "FidoNotAllowed"); }); +TEST_F(HidServiceServiceWorkerBrowserContextDestroyedTest, GetDevices) { + auto device_info = CreateDeviceWithOneReport(); + ConnectDevice(*device_info); + DestroyBrowserContext(); + + TestFuture<std::vector<device::mojom::HidDeviceInfoPtr>> devices_future; + service_->GetDevices(devices_future.GetCallback()); + EXPECT_EQ(0u, devices_future.Get().size()); +} + +TEST_F(HidServiceServiceWorkerBrowserContextDestroyedTest, Connect) { + auto device_info = CreateDeviceWithOneReport(); + ConnectDevice(*device_info); + mojo::PendingRemote<device::mojom::HidConnectionClient> hid_connection_client; + connection_client()->Bind( + hid_connection_client.InitWithNewPipeAndPassReceiver()); + DestroyBrowserContext(); + + TestFuture<mojo::PendingRemote<device::mojom::HidConnection>> + connection_future; + service_->Connect(kTestGuid, std::move(hid_connection_client), + connection_future.GetCallback()); + EXPECT_FALSE(connection_future.Get().is_valid()); +} + +TEST_F(HidServiceServiceWorkerBrowserContextDestroyedTest, Forget) { + auto device_info = CreateDeviceWithOneReport(); + ConnectDevice(*device_info); + + DestroyBrowserContext(); + EXPECT_CALL(hid_delegate(), RevokeDevicePermission).Times(0); + base::RunLoop run_loop; + service_->Forget(std::move(device_info), run_loop.QuitClosure()); + run_loop.Run(); +} + } // namespace content
diff --git a/content/browser/interest_group/auction_runner.cc b/content/browser/interest_group/auction_runner.cc index 2c205f4..1feb013 100644 --- a/content/browser/interest_group/auction_runner.cc +++ b/content/browser/interest_group/auction_runner.cc
@@ -57,8 +57,8 @@ UpdateInterestGroupsPostAuction(); std::move(callback_).Run( - this, /*render_url=*/absl::nullopt, - /*winning_group_key=*/absl::nullopt, + this, /*winning_group_key=*/absl::nullopt, + /*render_url=*/absl::nullopt, /*ad_component_urls=*/{}, /*report_urls=*/{}, std::move(debug_loss_report_urls), std::move(debug_win_report_urls),
diff --git a/content/browser/loader/merkle_integrity_source_stream.cc b/content/browser/loader/merkle_integrity_source_stream.cc index 8a556c13..7741cdbe 100644 --- a/content/browser/loader/merkle_integrity_source_stream.cc +++ b/content/browser/loader/merkle_integrity_source_stream.cc
@@ -52,29 +52,29 @@ MerkleIntegritySourceStream::~MerkleIntegritySourceStream() = default; -int MerkleIntegritySourceStream::FilterData(net::IOBuffer* output_buffer, - int output_buffer_size, - net::IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool upstream_eof_reached) { +base::expected<size_t, net::Error> MerkleIntegritySourceStream::FilterData( + net::IOBuffer* output_buffer, + size_t output_buffer_size, + net::IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool upstream_eof_reached) { if (failed_) { - return net::ERR_CONTENT_DECODING_FAILED; + return base::unexpected(net::ERR_CONTENT_DECODING_FAILED); } - base::span<const char> remaining_input = base::make_span( - input_buffer->data(), base::checked_cast<size_t>(input_buffer_size)); - base::span<char> remaining_output = base::make_span( - output_buffer->data(), base::checked_cast<size_t>(output_buffer_size)); + base::span<const char> remaining_input = + base::make_span(input_buffer->data(), input_buffer_size); + base::span<char> remaining_output = + base::make_span(output_buffer->data(), output_buffer_size); bool ok = FilterDataImpl(&remaining_output, &remaining_input, upstream_eof_reached); - *consumed_bytes = - input_buffer_size - base::checked_cast<int>(remaining_input.size()); + *consumed_bytes = input_buffer_size - remaining_input.size(); if (!ok) { failed_ = true; - return net::ERR_CONTENT_DECODING_FAILED; + return base::unexpected(net::ERR_CONTENT_DECODING_FAILED); } - return output_buffer_size - base::checked_cast<int>(remaining_output.size()); + return output_buffer_size - remaining_output.size(); } std::string MerkleIntegritySourceStream::GetTypeAsString() const {
diff --git a/content/browser/loader/merkle_integrity_source_stream.h b/content/browser/loader/merkle_integrity_source_stream.h index 63efe7c..6a8c50e 100644 --- a/content/browser/loader/merkle_integrity_source_stream.h +++ b/content/browser/loader/merkle_integrity_source_stream.h
@@ -33,12 +33,13 @@ ~MerkleIntegritySourceStream() override; // net::FilterSourceStream - int FilterData(net::IOBuffer* output_buffer, - int output_buffer_size, - net::IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool upstream_eof_reached) override; + base::expected<size_t, net::Error> FilterData( + net::IOBuffer* output_buffer, + size_t output_buffer_size, + net::IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool upstream_eof_reached) override; std::string GetTypeAsString() const override; private:
diff --git a/content/browser/media/media_internals_unittest.cc b/content/browser/media/media_internals_unittest.cc index 1ab0514..a2940d0 100644 --- a/content/browser/media/media_internals_unittest.cc +++ b/content/browser/media/media_internals_unittest.cc
@@ -57,27 +57,25 @@ std::string utf8_update = base::UTF16ToUTF8(update); const std::string::size_type first_brace = utf8_update.find('{'); const std::string::size_type last_brace = utf8_update.rfind('}'); - std::unique_ptr<base::Value> output_value = - base::JSONReader::ReadDeprecated( - utf8_update.substr(first_brace, last_brace - first_brace + 1)); - CHECK(output_value); + absl::optional<base::Value> output_value = base::JSONReader::Read( + utf8_update.substr(first_brace, last_brace - first_brace + 1)); + ASSERT_TRUE(output_value); + ASSERT_TRUE(output_value->is_dict()); - base::DictionaryValue* output_dict = nullptr; - CHECK(output_value->GetAsDictionary(&output_dict)); - update_data_.MergeDictionary(output_dict); + update_data_.Merge(std::move(output_value->GetDict())); } void ExpectInt(const std::string& key, int expected_value) const { - absl::optional<int> actual_value = update_data_.FindIntKey(key); + absl::optional<int> actual_value = update_data_.FindInt(key); ASSERT_TRUE(actual_value); EXPECT_EQ(expected_value, *actual_value); } void ExpectString(const std::string& key, const std::string& expected_value) const { - std::string actual_value; - ASSERT_TRUE(update_data_.GetString(key, &actual_value)); - EXPECT_EQ(expected_value, actual_value); + const std::string* actual_value = update_data_.FindString(key); + ASSERT_TRUE(actual_value); + EXPECT_EQ(expected_value, *actual_value); } void ExpectStatus(const std::string& expected_value) const { @@ -85,24 +83,22 @@ } void ExpectListOfStrings(const std::string& key, - const base::ListValue& expected_list) const { - const base::ListValue* actual_list; - ASSERT_TRUE(update_data_.GetList(key, &actual_list)); - const size_t expected_size = expected_list.GetListDeprecated().size(); - const size_t actual_size = actual_list->GetListDeprecated().size(); + const base::Value::List& expected_list) const { + const base::Value::List* actual_list = update_data_.FindList(key); + ASSERT_TRUE(actual_list); + const size_t expected_size = expected_list.size(); + const size_t actual_size = actual_list->size(); ASSERT_EQ(expected_size, actual_size); for (size_t i = 0; i < expected_size; ++i) { - const std::string* expected_value = - expected_list.GetListDeprecated()[i].GetIfString(); - const std::string* actual_value = - actual_list->GetListDeprecated()[i].GetIfString(); + const std::string* expected_value = expected_list[i].GetIfString(); + const std::string* actual_value = (*actual_list)[i].GetIfString(); ASSERT_TRUE(expected_value); ASSERT_TRUE(actual_value); EXPECT_EQ(*expected_value, *actual_value); } } - base::DictionaryValue update_data_; + base::Value::Dict update_data_; content::MediaInternals* media_internals() const { return content::MediaInternals::GetInstance(); @@ -197,7 +193,7 @@ ExpectString("id", "dummy"); #endif ExpectString("name", "dummy"); - base::ListValue expected_list; + base::Value::List expected_list; expected_list.Append(media::VideoCaptureFormat::ToString(format_hd)); ExpectListOfStrings("formats", expected_list); #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) @@ -275,8 +271,7 @@ // Verify OnError(). const char kErrorKey[] = "error_occurred"; - std::string no_value; - ASSERT_FALSE(update_data_.GetString(kErrorKey, &no_value)); + ASSERT_FALSE(update_data_.FindString(kErrorKey)); audio_log_->OnError(); base::RunLoop().RunUntilIdle(); ExpectString(kErrorKey, "true"); @@ -354,11 +349,11 @@ base::Value GetSessionsFromValueAndReset() { base::AutoLock auto_lock(lock_); - base::Value session = - update_data_.FindKeyOfType("sessions", base::Value::Type::LIST) - ->Clone(); + const base::Value::List* session_list = update_data_.FindList("sessions"); + EXPECT_TRUE(session_list); + base::Value session(session_list->Clone()); - update_data_.DictClear(); + update_data_.clear(); run_loop_ = std::make_unique<base::RunLoop>(); call_count_ = 0; @@ -368,7 +363,7 @@ void Reset() { base::AutoLock auto_lock(lock_); - update_data_.DictClear(); + update_data_.clear(); run_loop_ = std::make_unique<base::RunLoop>(); call_count_ = 0; } @@ -382,7 +377,7 @@ { base::AutoLock auto_lock(lock_); - if (!update_data_.DictEmpty() && call_count_ == wanted_call_count_) + if (!update_data_.empty() && call_count_ == wanted_call_count_) return; }
diff --git a/content/browser/renderer_host/pending_beacon_host.cc b/content/browser/renderer_host/pending_beacon_host.cc index d3531dd..1345c4d1 100644 --- a/content/browser/renderer_host/pending_beacon_host.cc +++ b/content/browser/renderer_host/pending_beacon_host.cc
@@ -29,10 +29,9 @@ void PendingBeaconHost::CreateBeacon( mojo::PendingReceiver<blink::mojom::PendingBeacon> receiver, const GURL& url, - blink::mojom::BeaconMethod method, - base::TimeDelta timeout) { + blink::mojom::BeaconMethod method) { auto beacon = - std::make_unique<Beacon>(url, method, timeout, this, std::move(receiver)); + std::make_unique<Beacon>(url, method, this, std::move(receiver)); beacons_.emplace_back(std::move(beacon)); } @@ -76,14 +75,12 @@ Beacon::Beacon(const GURL& url, blink::mojom::BeaconMethod method, - base::TimeDelta timeout, PendingBeaconHost* beacon_host, mojo::PendingReceiver<blink::mojom::PendingBeacon> receiver) : receiver_(this, std::move(receiver)), beacon_host_(beacon_host), url_(url), - method_(method), - timeout_(timeout) { + method_(method) { DCHECK(beacon_host_); }
diff --git a/content/browser/renderer_host/pending_beacon_host.h b/content/browser/renderer_host/pending_beacon_host.h index 17d139a..07475dd 100644 --- a/content/browser/renderer_host/pending_beacon_host.h +++ b/content/browser/renderer_host/pending_beacon_host.h
@@ -6,7 +6,6 @@ #define CONTENT_BROWSER_RENDERER_HOST_PENDING_BEACON_HOST_H_ #include "base/memory/raw_ptr.h" -#include "base/time/time.h" #include "content/common/content_export.h" #include "content/public/browser/document_user_data.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -23,7 +22,7 @@ class Beacon; class PendingBeaconService; -// PendingBeaconHost holds and manages a single blink::Document's pending +// `PendingBeaconHost` holds and manages a single blink::Document's pending // beacons in the browser process. // // PendingBeaconHost is created once per document and bound to a RenderFrameHost @@ -33,13 +32,22 @@ // PendingBeaconHost creates a new Beacon when `CreateBeacon` is called remotely // by a document. // +// PendingBeaconHost receives `SendBeacon` requests initiated from renderer and +// forwards it to PendingBeaconService. The requests can be initiated in one of +// the following scenarios: +// - When JavaScript executes `PendingBeacon.sendNow()`, which connects to +// receiver `Beacon`. +// - When the associated document enters `hidden` state, and the renderer's +// `PendingBeaconDispatcher` schedules the request according to individual +// PendingBeacon's backgroundTimeout property. +// - When the individual PendingBeacon's timeout property expires. +// // PendingBeaconHost is also responsible for triggering the sending of beacons: -// - When `SendBeacon` is called, the corresponding queued beacon is sent out -// and removed from the host. -// - When the associated document is discarded or deleted, the host sends out -// all queued beacons in its destructor. -// - TODO(crbug.com/1293679): When the associated document is hidden, the host -// should send out beacons according to their timeout field. +// - When the associated document is discarded or deleted, PendingBeaconHost +// sends out all queued beacons from its destructor. +// - TODO(crbug.com/1293679): When the associated document's renderer process +// crashes, PendingBeaconHost sends out all queued beacon after being +// notified by RenderProcessHostDestroyed. class CONTENT_EXPORT PendingBeaconHost : public blink::mojom::PendingBeaconHost, public DocumentUserData<PendingBeaconHost> { @@ -51,8 +59,7 @@ // Creates a new browser-side `Beacon` instance and stores it in this host. void CreateBeacon(mojo::PendingReceiver<blink::mojom::PendingBeacon> receiver, const GURL& url, - blink::mojom::BeaconMethod method, - base::TimeDelta timeout) override; + blink::mojom::BeaconMethod method) override; // Deletes the `beacon` if exists. void DeleteBeacon(Beacon* beacon); @@ -99,7 +106,6 @@ // https://github.com/WICG/unload-beacon/blob/main/README.md Beacon(const GURL& url, blink::mojom::BeaconMethod method, - base::TimeDelta timeout, PendingBeaconHost* beacon_host, mojo::PendingReceiver<blink::mojom::PendingBeacon> receiver); ~Beacon() override; @@ -146,7 +152,6 @@ raw_ptr<PendingBeaconHost> beacon_host_; GURL url_; [[maybe_unused]] const blink::mojom::BeaconMethod method_; - [[maybe_unused]] const base::TimeDelta timeout_; // The request content type for POST beacon. If `method_` is GET, this field // should not be used.
diff --git a/content/browser/renderer_host/pending_beacon_host_unittest.cc b/content/browser/renderer_host/pending_beacon_host_unittest.cc index c9279fc86..49ab731 100644 --- a/content/browser/renderer_host/pending_beacon_host_unittest.cc +++ b/content/browser/renderer_host/pending_beacon_host_unittest.cc
@@ -91,12 +91,11 @@ TEST_P(PendingBeaconHostTest, SendBeacon) { const std::string method = GetParam(); - const base::TimeDelta timeout = base::Milliseconds(0); const auto url = GURL("/test_send_beacon"); auto* host = CreateHost(); mojo::Remote<blink::mojom::PendingBeacon> remote; auto receiver = remote.BindNewPipeAndPassReceiver(); - host->CreateBeacon(std::move(receiver), url, ToBeaconMethod(method), timeout); + host->CreateBeacon(std::move(receiver), url, ToBeaconMethod(method)); SetExpectNetworkRequest(FROM_HERE, method, url); remote->SendNow(); @@ -105,7 +104,6 @@ TEST_P(PendingBeaconHostTest, SendOneOfBeacons) { const std::string method = GetParam(); - const base::TimeDelta timeout = base::Milliseconds(0); const auto* url = "/test_send_beacon"; const size_t total = 5; @@ -115,7 +113,7 @@ for (size_t i = 0; i < remotes.size(); i++) { auto receiver = remotes[i].BindNewPipeAndPassReceiver(); host->CreateBeacon(std::move(receiver), GURL(url + i), - ToBeaconMethod(method), timeout); + ToBeaconMethod(method)); } const size_t sent_beacon_i = 2; @@ -126,7 +124,6 @@ TEST_P(PendingBeaconHostTest, SendBeacons) { const std::string method = GetParam(); - const base::TimeDelta timeout = base::Milliseconds(0); const auto* url = "/test_send_beacon"; const size_t total = 5; @@ -136,7 +133,7 @@ for (size_t i = 0; i < remotes.size(); i++) { auto receiver = remotes[i].BindNewPipeAndPassReceiver(); host->CreateBeacon(std::move(receiver), GURL(url + i), - ToBeaconMethod(method), timeout); + ToBeaconMethod(method)); } for (int i = remotes.size() - 1; i >= 0; i--) { SetExpectNetworkRequest(FROM_HERE, method, GURL(url + i)); @@ -147,12 +144,11 @@ TEST_P(PendingBeaconHostTest, DeleteAndSendBeacon) { const std::string method = GetParam(); - const base::TimeDelta timeout = base::Milliseconds(0); const auto url = GURL("/test_send_beacon"); auto* host = CreateHost(); mojo::Remote<blink::mojom::PendingBeacon> remote; auto receiver = remote.BindNewPipeAndPassReceiver(); - host->CreateBeacon(std::move(receiver), url, ToBeaconMethod(method), timeout); + host->CreateBeacon(std::move(receiver), url, ToBeaconMethod(method)); // Deleted beacon won't be sent out by host. remote->Deactivate(); @@ -162,7 +158,6 @@ TEST_P(PendingBeaconHostTest, DeleteOneAndSendOtherBeacons) { const std::string method = GetParam(); - const base::TimeDelta timeout = base::Milliseconds(0); const auto* url = "/test_send_beacon"; const size_t total = 5; @@ -172,7 +167,7 @@ for (size_t i = 0; i < remotes.size(); i++) { auto receiver = remotes[i].BindNewPipeAndPassReceiver(); host->CreateBeacon(std::move(receiver), GURL(url + i), - ToBeaconMethod(method), timeout); + ToBeaconMethod(method)); } const size_t deleted_beacon_i = 2; @@ -196,13 +191,11 @@ mojo::Remote<blink::mojom::PendingBeacon> CreateBeaconAndPassRemote( const std::string& method) { - const base::TimeDelta timeout = base::Milliseconds(0); const auto url = GURL("/test_send_beacon"); host_ = CreateHost(); mojo::Remote<blink::mojom::PendingBeacon> remote; auto receiver = remote.BindNewPipeAndPassReceiver(); - host_->CreateBeacon(std::move(receiver), url, ToBeaconMethod(method), - timeout); + host_->CreateBeacon(std::move(receiver), url, ToBeaconMethod(method)); return remote; }
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index 36617e0..42024d1 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -11931,7 +11931,7 @@ } CrossOriginOpenerPolicyAccessReportManager::InstallAccessMonitorsIfNeeded( - frame_tree_node_); + navigation_request->frame_tree_node()); // Reset the salt so that media device IDs are reset for the new document // if necessary.
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 4fa6c5e..fe9c77d 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -209,8 +209,6 @@ #include "content/public/browser/android/java_interfaces.h" #include "media/audio/android/audio_manager_android.h" #include "third_party/blink/public/mojom/android_font_lookup/android_font_lookup.mojom.h" -#else -#include "content/browser/hid/hid_service.h" #endif #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) @@ -5290,13 +5288,4 @@ std::move(allocator))); } -#if !BUILDFLAG(IS_ANDROID) -void RenderProcessHostImpl::BindHidService( - const url::Origin& origin, - mojo::PendingReceiver<blink::mojom::HidService> receiver) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - content::HidService::Create(GetBrowserContext(), origin, std::move(receiver)); -} -#endif // !BUILDFLAG(IS_ANDROID) - } // namespace content
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index 09c4da85..1f0ac7ba 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -81,8 +81,6 @@ #if BUILDFLAG(IS_ANDROID) #include "content/public/browser/android/child_process_importance.h" -#else -#include "third_party/blink/public/mojom/hid/hid.mojom-forward.h" #endif #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) @@ -689,11 +687,6 @@ ipc_send_watcher_for_testing_ = std::move(watcher); } -#if !BUILDFLAG(IS_ANDROID) - void BindHidService(const url::Origin& origin, - mojo::PendingReceiver<blink::mojom::HidService> receiver); -#endif // !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(ENABLE_PLUGINS) PepperRendererConnection* pepper_renderer_connection() { return pepper_renderer_connection_.get();
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc index 14162d46..948d2f7 100644 --- a/content/browser/service_worker/embedded_worker_instance.cc +++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -59,6 +59,10 @@ #include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom.h" #include "url/gurl.h" +#if !BUILDFLAG(IS_ANDROID) +#include "content/browser/hid/hid_service.h" +#endif + // TODO(crbug.com/824858): Much of this file, which dealt with thread hops // between UI and IO, can likely be simplified when the service worker core // thread moves to the UI thread. @@ -780,7 +784,7 @@ return; } if (hid_delegate->IsServiceWorkerAllowedForOrigin(origin)) { - rph->BindHidService(origin, std::move(receiver)); + HidService::Create(context_, origin, std::move(receiver)); } } #endif // !BUILDFLAG(IS_ANDROID)
diff --git a/content/browser/tracing/background_tracing_active_scenario.cc b/content/browser/tracing/background_tracing_active_scenario.cc index 26dcd3f..258952d 100644 --- a/content/browser/tracing/background_tracing_active_scenario.cc +++ b/content/browser/tracing/background_tracing_active_scenario.cc
@@ -357,8 +357,8 @@ void BackgroundTracingActiveScenario::OnProtoDataComplete( std::unique_ptr<std::string> proto_trace) { BackgroundTracingManagerImpl::RecordMetric(Metrics::FINALIZATION_STARTED); - UMA_HISTOGRAM_MEMORY_KB("Tracing.Background.FinalizingTraceSizeInKB", - proto_trace->size() / 1024); + UMA_HISTOGRAM_COUNTS_100000("Tracing.Background.FinalizingTraceSizeInKB2", + proto_trace->size() / 1024); // Store the trace to be uploaded through UMA. // BackgroundTracingMetricsProvider::ProvideIndependentMetrics will call
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index ea54b3c..ae60b2214 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -643,6 +643,16 @@ << blink::features::kFencedFrames.name << " instead."; WebRuntimeFeatures::EnableFencedFrames(false); } + + // Topics API cannot be enabled without the support of the browser process. + if (base::FeatureList::IsEnabled(features::kPrivacySandboxAdsAPIsOverride) && + !base::FeatureList::IsEnabled(blink::features::kBrowsingTopics)) { + LOG_IF(WARNING, WebRuntimeFeatures::IsTopicsAPIEnabled()) + << "Topics cannot be enabled in this configuration. Use --" + << switches::kEnableFeatures << "=" + << blink::features::kBrowsingTopics.name << " instead."; + WebRuntimeFeatures::EnableTopicsAPI(false); + } } } // namespace
diff --git a/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java b/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java index 60b42ef..fabdeca 100644 --- a/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java
@@ -259,6 +259,8 @@ if (!consumed) break; destroyPastePopup(); for (mIterator.rewind(); mIterator.hasNext();) { + // TODO(sinansahin): Can we update the RenderCoordinates using these values + // and make them available through other scroll events? Point scrollOffset = getRootScrollOffsetStruct(scrollOffsetX, scrollOffsetY); mIterator.next().onScrollUpdateGestureConsumed(scrollOffset); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java b/content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java index f33fe27d..679aeb5 100644 --- a/content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java
@@ -4,6 +4,8 @@ package org.chromium.content.browser; +import androidx.annotation.VisibleForTesting; + import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content_public.browser.RenderCoordinates; import org.chromium.content_public.browser.WebContents; @@ -17,6 +19,8 @@ * Unless stated otherwise, all coordinates are in CSS (document) coordinate space. */ public class RenderCoordinatesImpl implements RenderCoordinates { + private static RenderCoordinatesImpl sInstanceForTesting; + // Scroll offset from the native in CSS. private float mScrollXCss; private float mScrollYCss; @@ -40,9 +44,17 @@ private float mTopContentOffsetYPix; public static RenderCoordinatesImpl fromWebContents(WebContents webContents) { + if (sInstanceForTesting != null) return sInstanceForTesting; return ((WebContentsImpl) webContents).getRenderCoordinates(); } + // TODO(https://crbug.com/1340593): Mocking |#fromWebContents()| may be a better option, when + // available. + @VisibleForTesting + public static void setInstanceForTesting(RenderCoordinatesImpl instance) { + sInstanceForTesting = instance; + } + // Internally-visible set of update methods (used by WebContentsImpl). public void reset() { mScrollXCss = mScrollYCss = 0;
diff --git a/content/public/test/fake_speech_recognition_manager.cc b/content/public/test/fake_speech_recognition_manager.cc index 6c7cf3c..abe1d5388 100644 --- a/content/public/test/fake_speech_recognition_manager.cc +++ b/content/public/test/fake_speech_recognition_manager.cc
@@ -198,7 +198,7 @@ blink::mojom::SpeechRecognitionResultPtr result = blink::mojom::SpeechRecognitionResult::New(); result->hypotheses.push_back(blink::mojom::SpeechRecognitionHypothesis::New( - base::ASCIIToUTF16(fake_result_), 1.0)); + base::UTF8ToUTF16(fake_result_), 1.0)); // If `is_provisional` is true, then the result is an interim result that // could be changed. Otherwise, it's a final result. Consequently, // `is_provisional` is the converse of `is_final`.
diff --git a/content/test/gpu/gpu_tests/cast_streaming_integration_test.py b/content/test/gpu/gpu_tests/cast_streaming_integration_test.py index 67c5cd6a..e5c6581 100644 --- a/content/test/gpu/gpu_tests/cast_streaming_integration_test.py +++ b/content/test/gpu/gpu_tests/cast_streaming_integration_test.py
@@ -33,7 +33,6 @@ @classmethod def GenerateGpuTests(cls, options: ct.ParsedCmdArgs) -> ct.TestGenerator: - cls.SetParsedCommandLineOptions(options) namespace = pixel_test_pages.PixelTestPages pages = namespace.CastStreamingReceiverPages(cls.test_base_name) for p in pages:
diff --git a/content/test/gpu/gpu_tests/expected_color_test.py b/content/test/gpu/gpu_tests/expected_color_test.py index b777c8c..7b607126 100644 --- a/content/test/gpu/gpu_tests/expected_color_test.py +++ b/content/test/gpu/gpu_tests/expected_color_test.py
@@ -123,7 +123,7 @@ expected_colors = page.expected_colors tolerance = page.tolerance - test_machine_name = self.GetParsedCommandLineOptions().test_machine_name + test_machine_name = self.GetOriginalFinderOptions().test_machine_name # First scan through the expected_colors and see if there are any scale # factor overrides that would preempt the device pixel ratio. This
diff --git a/content/test/gpu/gpu_tests/maps_integration_test.py b/content/test/gpu/gpu_tests/maps_integration_test.py index 052ab4b..8999a2d 100644 --- a/content/test/gpu/gpu_tests/maps_integration_test.py +++ b/content/test/gpu/gpu_tests/maps_integration_test.py
@@ -46,10 +46,10 @@ @classmethod def SetUpProcess(cls) -> None: - options = cls.GetParsedCommandLineOptions() + super(MapsIntegrationTest, cls).SetUpProcess() + options = cls.GetOriginalFinderOptions() color_profile_manager.ForceUntilExitSRGB( options.dont_restore_color_profile_after_test) - super(MapsIntegrationTest, cls).SetUpProcess() cls.CustomizeBrowserArgs([ cba.ENSURE_FORCED_COLOR_PROFILE, cba.FORCE_BROWSER_CRASH_ON_GPU_CRASH, @@ -68,7 +68,6 @@ @classmethod def GenerateGpuTests(cls, options: ct.ParsedCmdArgs) -> ct.TestGenerator: - cls.SetParsedCommandLineOptions(options) # The maps_pixel_expectations.json contain the actual image expectations. If # the test fails, with errors greater than the tolerance for the run, then # the logs will report the actual failure.
diff --git a/content/test/gpu/gpu_tests/pixel_integration_test.py b/content/test/gpu/gpu_tests/pixel_integration_test.py index 6f30cd160..712c9dce 100644 --- a/content/test/gpu/gpu_tests/pixel_integration_test.py +++ b/content/test/gpu/gpu_tests/pixel_integration_test.py
@@ -70,7 +70,6 @@ @classmethod def GenerateGpuTests(cls, options: ct.ParsedCmdArgs) -> ct.TestGenerator: - cls.SetParsedCommandLineOptions(options) namespace = pixel_test_pages.PixelTestPages pages = namespace.DefaultPages(cls.test_base_name) pages += namespace.GpuRasterizationPages(cls.test_base_name)
diff --git a/content/test/gpu/gpu_tests/screenshot_sync_integration_test.py b/content/test/gpu/gpu_tests/screenshot_sync_integration_test.py index 29048e74..fe454f0 100644 --- a/content/test/gpu/gpu_tests/screenshot_sync_integration_test.py +++ b/content/test/gpu/gpu_tests/screenshot_sync_integration_test.py
@@ -32,20 +32,6 @@ """The name by which this test is invoked on the command line.""" return 'screenshot_sync' - # The command line options (which are passed to subclasses' - # GenerateGpuTests) *must* be configured here, via a call to - # SetParsedCommandLineOptions. If they are not, an error will be - # raised when running the tests. - _parsed_command_line_options = None - - @classmethod - def SetParsedCommandLineOptions(cls, options: ct.ParsedCmdArgs) -> None: - cls._parsed_command_line_options = options - - @classmethod - def GetParsedCommandLineOptions(cls) -> ct.ParsedCmdArgs: - return cls._parsed_command_line_options - @classmethod def AddCommandlineArgs(cls, parser: ct.CmdArgParser) -> None: super(ScreenshotSyncIntegrationTest, cls).AddCommandlineArgs(parser) @@ -60,10 +46,10 @@ @classmethod def SetUpProcess(cls) -> None: - options = cls.GetParsedCommandLineOptions() + super(cls, ScreenshotSyncIntegrationTest).SetUpProcess() + options = cls.GetOriginalFinderOptions() color_profile_manager.ForceUntilExitSRGB( options.dont_restore_color_profile_after_test) - super(cls, ScreenshotSyncIntegrationTest).SetUpProcess() cls.CustomizeBrowserArgs([]) cls.StartBrowser() cls.SetStaticServerDirs([gpu_path_util.GPU_DATA_DIR]) @@ -87,7 +73,6 @@ @classmethod def GenerateGpuTests(cls, options: ct.ParsedCmdArgs) -> ct.TestGenerator: - cls.SetParsedCommandLineOptions(options) yield ('ScreenshotSync_SWRasterWithCanvas', 'screenshot_sync_canvas.html', ['--disable-gpu-rasterization']) yield ('ScreenshotSync_SWRasterWithDivs', 'screenshot_sync_divs.html',
diff --git a/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py b/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py index 033af94..09f08b6 100644 --- a/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py +++ b/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py
@@ -53,12 +53,6 @@ class SkiaGoldIntegrationTestBase(gpu_integration_test.GpuIntegrationTest): """Base class for all tests that upload results to Skia Gold.""" - # The command line options (which are passed to subclasses' - # GenerateGpuTests) *must* be configured here, via a call to - # SetParsedCommandLineOptions. If they are not, an error will be - # raised when running the tests. - _parsed_command_line_options = None - _error_image_cloud_storage_bucket = 'chromium-browser-gpu-tests' # This information is class-scoped, so that it can be shared across @@ -71,19 +65,11 @@ _skia_gold_properties = None @classmethod - def SetParsedCommandLineOptions(cls, options: ct.ParsedCmdArgs) -> None: - cls._parsed_command_line_options = options - - @classmethod - def GetParsedCommandLineOptions(cls) -> ct.ParsedCmdArgs: - return cls._parsed_command_line_options - - @classmethod def SetUpProcess(cls) -> None: - options = cls.GetParsedCommandLineOptions() + super(SkiaGoldIntegrationTestBase, cls).SetUpProcess() + options = cls.GetOriginalFinderOptions() color_profile_manager.ForceUntilExitSRGB( options.dont_restore_color_profile_after_test) - super(SkiaGoldIntegrationTestBase, cls).SetUpProcess() cls.CustomizeBrowserArgs([]) cls.StartBrowser() cls.SetStaticServerDirs(TEST_DATA_DIRS) @@ -93,7 +79,7 @@ def GetSkiaGoldProperties(cls) -> sgp.GpuSkiaGoldProperties: if not cls._skia_gold_properties: cls._skia_gold_properties = sgp.GpuSkiaGoldProperties( - cls.GetParsedCommandLineOptions()) + cls.GetOriginalFinderOptions()) return cls._skia_gold_properties @classmethod @@ -282,7 +268,7 @@ screenshot: ct.Screenshot) -> None: revision = cls.GetSkiaGoldProperties().git_revision machine_name = re.sub(r'\W+', '_', - cls.GetParsedCommandLineOptions().test_machine_name) + cls.GetOriginalFinderOptions().test_machine_name) base_bucket = '%s/gold_failures' % (cls._error_image_cloud_storage_bucket) image_name_with_revision_and_machine = '%s_%s_%s.png' % ( image_name, machine_name, revision) @@ -378,7 +364,7 @@ # "Retry without patch" steps automatically pass in a test filter, which # should be the only time these tests are run with a test filter on trybots. if (gold_properties.IsTryjobRun() - and self.GetParsedCommandLineOptions().has_test_filter): + and self.GetOriginalFinderOptions().has_test_filter): force_dryrun = True status, error = gold_session.RunComparison( @@ -441,7 +427,7 @@ True if the failure should be surfaced, i.e. the test should fail, otherwise False. """ - parsed_options = self.GetParsedCommandLineOptions() + parsed_options = self.GetOriginalFinderOptions() # Don't surface if we're explicitly told not to. if parsed_options.no_skia_gold_failure: return False
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt index 67a644c..4548df0 100644 --- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -133,8 +133,9 @@ [ chromeos ] Pixel_Canvas2DRedBox_NoGpuProcess [ Skip ] [ chromeos ] Pixel_CSS3DBlueBox_NoGpuProcess [ Skip ] -# Skip test that kills GPU process since Android Webview only supports +# Skip tests that kill the GPU process since Android Webview only supports # in-process GPU. +crbug.com/1167246 [ android android-webview-instrumentation ] Pixel_WebGLContextRestored [ Skip ] crbug.com/575305 [ android android-webview-instrumentation ] Pixel_WebGLSadCanvas [ Skip ] # We do not have software H.264 decoding on Android, so it can't survive a @@ -230,6 +231,15 @@ crbug.com/1201009 [ fuchsia ] Pixel_VideoStreamFromWebGLCanvas_OneCopy [ Skip ] crbug.com/1201009 [ fuchsia ] Pixel_VideoStreamFromWebGLCanvas_TwoCopy_Accelerated [ Skip ] +# Timeout on Nexus 5 +crbug.com/1353189 [ android android-nexus-5 ] Pixel_VideoStreamFromWebGLAlphaCanvas_TwoCopy_CpuReadback [ Skip ] + +# Timeout on Linux FYI Release (AMD RX 5500 XT) +crbug.com/1353189 [ linux release amd-0x7340 ] Pixel_VideoStreamFromWebGLAlphaCanvas [ Skip ] + +# Crash on Linux FYI Release (NVIDIA) using SkiaRenderer/Vulkan +crbug.com/1353189 [ linux skia-renderer-vulkan nvidia-0x2184 ] Pixel_VideoStreamFromWebGLAlphaCanvas_TwoCopy_CpuReadback [ Skip ] + ################### # Failures/Flakes # ################### @@ -244,17 +254,7 @@ crbug.com/1213674 [ mac amd-0x6821 passthrough ] Pixel_WebGLGreenTriangle_NonChromiumImage_NoAA_NoAlpha [ Failure ] crbug.com/1213674 [ mac nvidia passthrough ] Pixel_WebGLGreenTriangle_NonChromiumImage_NoAA_NoAlpha [ Failure ] -# TODO(kbr): temporary suppression until new images are triaged. -crbug.com/1167246 [ linux ] Pixel_WebGLSadCanvas [ Failure ] -crbug.com/1167246 [ win ] Pixel_WebGLSadCanvas [ Failure ] -crbug.com/1167246 [ mac ] Pixel_WebGLSadCanvas [ Failure ] -crbug.com/1167246 [ android android-chromium ] Pixel_WebGLSadCanvas [ Failure ] -crbug.com/1167246 [ fuchsia ] Pixel_WebGLSadCanvas [ Failure ] - -# TODO(kbr): temporary suppression for new test. -crbug.com/1167246 Pixel_WebGLContextRestored [ Failure ] - -# Fails on Nexus 5 +# Fails on Nexus 5 - old hardware, won't fix. crbug.com/883500 [ android android-nexus-5 ] Pixel_BackgroundImage [ Failure ] # Flakes on Nexus 5X. @@ -319,9 +319,6 @@ # Fails on Fuchsia emulators crbug.com/1302427 [ fuchsia-board-qemu-x64 ] Pixel_CanvasLowLatencyWebGLAlphaFalse [ Failure ] -# Produces blank images on gpu-fyi-try-chromeos-kevin, gpu-fyi-try-chromeos-amd64-generic. -crbug.com/1086690 [ chromeos ] Pixel_WebGLSadCanvas [ Failure ] - # Flaky blank output on ChromeOS crbug.com/1278991 [ chromeos chromeos-board-amd64-generic skia-renderer-gl ] Pixel_OffscreenCanvasWebGLDefault [ RetryOnFailure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt index 9510124d..c07b672 100644 --- a/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt
@@ -201,6 +201,12 @@ crbug.com/1201009 [ fuchsia ] WebGLCanvasCaptureTraceTest_VideoStreamFromWebGLCanvas_OneCopy [ Failure ] crbug.com/1201009 [ fuchsia ] WebGLCanvasCaptureTraceTest_VideoStreamFromWebGLCanvas_TwoCopy_Accelerated [ Failure ] +# Timeout on Nexus 5 +crbug.com/1353189 [ android android-nexus-5 ] WebGLCanvasCaptureTraceTest_VideoStreamFromWebGLAlphaCanvas* [ Skip ] + +# Timeout on Linux FYI Release (AMD RX 5500 XT) +crbug.com/1353189 [ linux release amd-0x7340 ] WebGLCanvasCaptureTraceTest_VideoStreamFromWebGL* [ Skip ] + # WebGPU is only supported on Win10, Mac, and Linux+SkiaRenderer+Vulkan. crbug.com/852089 [ android ] WebGPUTraceTest_* [ Skip ] crbug.com/852089 [ linux ] WebGPUTraceTest_* [ Skip ]
diff --git a/docs/security/sheriff.md b/docs/security/sheriff.md index e7b97124..6acb02b 100644 --- a/docs/security/sheriff.md +++ b/docs/security/sheriff.md
@@ -144,6 +144,7 @@ a duplicate of is public, remove the **Restrict-View-SecurityTeam** label. * **If the report is primarily a privacy issue**, send it to the privacy team: * Add the **Privacy** component so that it enters their triage queue. + * Change **Type-Bug-Security** to **Type-Bug**. * CC any security team members, including yourself, who may be interested in the privacy issue. * Change the **Restrict-View-SecurityTeam** label to
diff --git a/docs/speed/binary_size/fuchsia_binary_size_trybot.md b/docs/speed/binary_size/fuchsia_binary_size_trybot.md index 184b509..fd2cb3b 100644 --- a/docs/speed/binary_size/fuchsia_binary_size_trybot.md +++ b/docs/speed/binary_size/fuchsia_binary_size_trybot.md
@@ -48,40 +48,72 @@ #### What to do if the Check Fails? -- Look at the provided `commit size analysis files` stdout to understand where - the size is coming from. - - The `Read diff results` stdout will also give a breakdown of growth by - package, if any. - - If the compressed size grew (this is what we measure), but the +- The `Read diff results` stdout will also give a breakdown of growth by + package, if any: +```json +{ + "archive_filenames": [], + "compressed": { + "cast_runner": 0, + "chrome_fuchsia": 40960, # chrome_fuchsia = web_engine + cast_runner + "web_engine": 40960 # This package grew by 40kB (post-compression) + }, + "links": [], + "status_code": 1, +[...] + "uncompressed": { + "cast_runner": 0, + "chrome_fuchsia": 33444, + "web_engine": 33444 # This package grew by 32.66kB (pre-compression) + } +} +``` + - If the compressed size grew by less than 100kB, and the uncompressed size decreased, then **ignore** this failure. Add a [footer](#skipping-the-check) to the CL (see below) to document this (and ignore this failure). + - If `cast_runner` grew in size, you may need assistance from + the Chrome-Fuchsia team (fuchsia-dev@chromium.org). +- If you are writing a new feature or including a new library, consider: + - If it is a feature only intended for Chrome (a full-browser), Contact + fuchsia-dev@chromium.org to help fix this. + - Whether it belongs on a size-contrained device (think a low-end phone with a + <1GB in total disk storage). fuchsia-dev@chromium.org can be helpful: + - If it does, look into how to reduce the + [overall size](#obvious-regressions) + - If it does not, look to remove it. See below. + +If you find it *should* be removed from a size-constrained platform, you should +guard the code with the `IS_FUCHSIA` and `ARCH_CPU_ARM64` macros, as this +CPU-architecture is the (current) set that requires size-checks. **Please also +include the following comment and bug +([crbug.com/1353061](https://crbug.com/1353061)) like so:** + +```cpp +// TODO(crbug.com/1353061): Replace with more appropriate logic. +#if BUILDFLAG(IS_FUCHSIA) && defined(ARCH_CPU_ARM64) +// Feature you want to exclude from fuchsia-arm64 +// ... +#endif // BUILDFLAG(IS_FUCHSIA) && defined(ARCH_CPU_ARM64) +``` + - See if any of the generic [optimization advice] is applicable. -- If you are writing a new feature or including a new library you might want to - think about skipping the `web_engine`/`cast_runner` binaries and to restrict - this new feature/library to desktop platforms that might care less about - binary size. - - This can be done by removing it with the `is_fuchsia` BUILD tag and - `OS_FUCHSIA` macro. - - If this change belongs on a full-browser, but not - `web_engine`/`cast_runner`, - you should also guard against the `ARCH_CPU_ARM64` tag, as this - CPU-architecture is the only (current) set that requires size-checks. - See [the section below](#obvious-regressions) - If reduction is not practical, add a rationale for the increase to the commit - description. It should include: + description, and [skip the check](#skipping-the-check). It could include: - A list of any optimizations that you attempted (if applicable) - If you think that there might not be a consensus that the code your adding is worth the added file size, then add why you think it is. ### Skipping the check + Add a **footer** to the commit description along the lines of: - - `Fuchsia-Binary-Size: Size increase is unavoidable (see above).` - - `Fuchsia-Binary-Size: Uncompressed size actually decreased.` - - `Fuchsia-Binary-Size: Increase is temporary.` - - `Fuchsia-Binary-Size: See commit description.` <-- use this if longer - than one line. +- `Fuchsia-Binary-Size: Size increase is unavoidable (see above).` +- `Fuchsia-Binary-Size: Uncompressed size actually decreased.` +- `Fuchsia-Binary-Size: Increase is temporary.` +- `Fuchsia-Binary-Size: See commit description.` <-- use this if longer +than one line. ***note **Note:** Make sure there are no blank lines between `Fuchsia-Binary-Size:` and @@ -250,11 +282,15 @@ ## If All Else Fails -- For help, email [chrome-fuchsia-team@google.com]. They're expert - Chrome-Fuchsia developers! +- For help, email [fuchsia-dev@chromium.org]. They're expert + Chrome-Fuchsia developers! See [here for more + details](/docs/fuchsia/README.md). - Not all checks are perfect and sometimes you want to overrule the trybot (for example if you did your best and are unable to reduce binary size any further). +- Check out the + [Chromium binary-size](https://groups.google.com/a/chromium.org/g/binary-size) Google + group. - Adding a “Fuchsia-Binary-Size: $ANY\_TEXT\_HERE” [footer](#skipping-the-check) to your cl (next to “Bug:”) will bypass the bot assertions. @@ -263,8 +299,6 @@ adequate justification may lead to the binary size sheriff filing a bug against you to improve your cl. -[chrome-fuchsia-team@chromium.org]: https://groups.google.com/a/chromium.org/forum/#!forum/binary-size - ## Code Locations - [Trybot recipe](https://source.chromium.org/chromium/chromium/tools/build/+/main:recipes/recipes/binary_size_fuchsia_trybot.py),
diff --git a/extensions/common/api/declarative_net_request.idl b/extensions/common/api/declarative_net_request.idl index 509f439..afeab130 100644 --- a/extensions/common/api/declarative_net_request.idl +++ b/extensions/common/api/declarative_net_request.idl
@@ -443,14 +443,14 @@ // The unique identifier for the frame's document, if this request is for a // frame. - [nodoc] DOMString? documentId; + DOMString? documentId; // The type of the frame, if this request is for a frame. - [nodoc] extensionTypes.FrameType? frameType; + extensionTypes.FrameType? frameType; // The lifecycle of the frame's document, if this request is for a // frame. - [nodoc] extensionTypes.DocumentLifecycle? documentLifecycle; + extensionTypes.DocumentLifecycle? documentLifecycle; // ID of frame that wraps the frame which sent the request. Set to -1 if no // parent frame exists. @@ -458,7 +458,7 @@ // The unique identifier for the frame's parent document, if this request // is for a frame and has a parent. - [nodoc] DOMString? parentDocumentId; + DOMString? parentDocumentId; // The ID of the tab in which the request takes place. Set to -1 if the // request isn't related to a tab.
diff --git a/extensions/common/api/declarative_web_request.json b/extensions/common/api/declarative_web_request.json index bcc94e90..576dad2 100644 --- a/extensions/common/api/declarative_web_request.json +++ b/extensions/common/api/declarative_web_request.json
@@ -699,10 +699,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "optional": true, "description": "A UUID of the document that made the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the navigation occurred in.","nodoc": true}, + "documentId": {"type": "string", "optional": true, "description": "A UUID of the document that made the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "A UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the navigation occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "type": {"$ref": "webRequest.ResourceType", "description": "How the requested resource will be used."},
diff --git a/extensions/common/api/extension_types.json b/extensions/common/api/extension_types.json index 0a297c4..7e33302 100644 --- a/extensions/common/api/extension_types.json +++ b/extensions/common/api/extension_types.json
@@ -104,14 +104,12 @@ { "id": "FrameType", "type": "string", - "nodoc": true, "enum": ["outermost_frame", "fenced_frame", "sub_frame"], "description": "The type of frame." }, { "id": "DocumentLifecycle", "type": "string", - "nodoc": true, "enum": ["prerender", "active", "cached", "pending_deletion"], "description": "The document lifecycle of the frame." },
diff --git a/extensions/common/api/runtime.json b/extensions/common/api/runtime.json index 796e2bb..921db0f 100644 --- a/extensions/common/api/runtime.json +++ b/extensions/common/api/runtime.json
@@ -71,8 +71,8 @@ "nativeApplication": {"type": "string", "optional": true, "description": "The name of the native application that opened the connection, if any."}, "tlsChannelId": {"type": "string", "optional": true, "description": "The TLS channel ID of the page or frame that opened the connection, if requested by the extension or app, and if available."}, "origin": {"type": "string", "optional": true, "description": "The origin of the page or frame that opened the connection. It can vary from the url property (e.g., about:blank) or can be opaque (e.g., sandboxed iframes). This is useful for identifying if the origin can be trusted if we can't immediately tell from the URL."}, - "documentId": {"type": "string", "optional": true, "description": "A UUID of the document that opened the connection.", "nodoc": true}, - "documentLifecycle": {"type": "string", "optional": true, "description": "The lifecycle the document that opened the connection is in at the time the port was created. Note that the lifecycle state of the document may have changed since port creation.","nodoc": true} + "documentId": {"type": "string", "optional": true, "description": "A UUID of the document that opened the connection."}, + "documentLifecycle": {"type": "string", "optional": true, "description": "The lifecycle the document that opened the connection is in at the time the port was created. Note that the lifecycle state of the document may have changed since port creation."} } }, {
diff --git a/extensions/common/api/web_request.json b/extensions/common/api/web_request.json index 77414673..f69a76e 100644 --- a/extensions/common/api/web_request.json +++ b/extensions/common/api/web_request.json
@@ -196,10 +196,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "optional": true, "description": "The UUID of the document making the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "optional": true, "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "optional": true, "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "optional": true, "description": "The UUID of the document making the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "optional": true, "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "optional": true, "description": "The type of frame the request occurred in."}, "requestBody": { "type": "object", "optional": true, @@ -268,10 +268,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "description": "The UUID of the document making the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "description": "The UUID of the document making the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "initiator": {"type": "string", "optional": true, "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used."}, "type": {"$ref": "ResourceType", "description": "How the requested resource will be used."}, @@ -317,10 +317,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "description": "The UUID of the document making the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "description": "The UUID of the document making the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "type": {"$ref": "ResourceType", "description": "How the requested resource will be used."}, "initiator": {"type": "string", "optional": true, "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used."}, @@ -361,10 +361,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "description": "The UUID of the document making the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "description": "The UUID of the document making the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "type": {"$ref": "ResourceType", "description": "How the requested resource will be used."}, "initiator": {"type": "string", "optional": true, "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used."}, @@ -412,10 +412,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "description": "The UUID of the document making the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "description": "The UUID of the document making the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "type": {"$ref": "ResourceType", "description": "How the requested resource will be used."}, "initiator": {"type": "string", "optional": true, "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used."}, @@ -476,10 +476,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "description": "The UUID of the document making the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "description": "The UUID of the document making the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "type": {"$ref": "ResourceType", "description": "How the requested resource will be used."}, "initiator": {"type": "string", "optional": true, "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used."}, @@ -524,10 +524,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "description": "The UUID of the document making the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "description": "The UUID of the document making the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "type": {"$ref": "ResourceType", "description": "How the requested resource will be used."}, "initiator": {"type": "string", "optional": true, "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used."}, @@ -573,10 +573,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "description": "The UUID of the document making the request.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "description": "The UUID of the document making the request."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "type": {"$ref": "ResourceType", "description": "How the requested resource will be used."}, "initiator": {"type": "string", "optional": true, "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used."}, @@ -620,10 +620,10 @@ "method": {"type": "string", "description": "Standard HTTP method."}, "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."}, "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."}, - "documentId": {"type": "string", "description": "The UUID of the document making the request. This value is not present if the request is a navigation of a frame.", "nodoc": true}, - "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent.", "nodoc": true}, - "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in.","nodoc": true}, - "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in.","nodoc": true}, + "documentId": {"type": "string", "description": "The UUID of the document making the request. This value is not present if the request is a navigation of a frame."}, + "parentDocumentId": {"type": "string", "optional": true, "description": "The UUID of the parent document owning this frame. This is not set if there is no parent."}, + "documentLifecycle": {"$ref": "extensionTypes.DocumentLifecycle", "description": "The lifecycle the document is in."}, + "frameType": {"$ref": "extensionTypes.FrameType", "description": "The type of frame the request occurred in."}, "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."}, "type": {"$ref": "ResourceType", "description": "How the requested resource will be used."}, "initiator": {"type": "string", "optional": true, "description": "The origin where the request was initiated. This does not change through redirects. If this is an opaque origin, the string 'null' will be used."},
diff --git a/google_apis/gaia/gaia_constants.cc b/google_apis/gaia/gaia_constants.cc index 680155b..5a75502 100644 --- a/google_apis/gaia/gaia_constants.cc +++ b/google_apis/gaia/gaia_constants.cc
@@ -161,6 +161,9 @@ const char kPhotosModuleImageOAuth2Scope[] = "https://www.googleapis.com/auth/photos.image.readonly"; +// OAuth 2 scope for the Discover feed. +const char kFeedOAuth2Scope[] = "https://www.googleapis.com/auth/googlenow"; + // Used to mint uber auth tokens when needed. const char kGaiaSid[] = "sid"; const char kGaiaLsid[] = "lsid";
diff --git a/google_apis/gaia/gaia_constants.h b/google_apis/gaia/gaia_constants.h index 75c8e888..85324fd1 100644 --- a/google_apis/gaia/gaia_constants.h +++ b/google_apis/gaia/gaia_constants.h
@@ -60,6 +60,7 @@ extern const char kPhotosModuleOAuth2Scope[]; extern const char kPhotosModuleImageOAuth2Scope[]; extern const char kSecureConnectOAuth2Scope[]; +extern const char kFeedOAuth2Scope[]; // Used with uber auth tokens when needed. extern const char kGaiaSid[];
diff --git a/gpu/command_buffer/client/raster_implementation.cc b/gpu/command_buffer/client/raster_implementation.cc index 311957e..04c8e48 100644 --- a/gpu/command_buffer/client/raster_implementation.cc +++ b/gpu/command_buffer/client/raster_implementation.cc
@@ -1262,15 +1262,16 @@ SkYUVAInfo::PlaneConfig plane_config, SkYUVAInfo::Subsampling subsampling, const gpu::Mailbox yuva_plane_mailboxes[]) { - if (!planes_rgb_color_space) { - SetGLError(GL_INVALID_VALUE, "ConvertYUVAMailboxesToRGB", - "invalid color space"); - return; - } skcms_Matrix3x3 primaries = {{{0}}}; skcms_TransferFunction transfer = {0}; - planes_rgb_color_space->toXYZD50(&primaries); - planes_rgb_color_space->transferFn(&transfer); + if (planes_rgb_color_space) { + planes_rgb_color_space->toXYZD50(&primaries); + planes_rgb_color_space->transferFn(&transfer); + } else { + // Specify an invalid transfer function exponent, to ensure that when + // SkColorSpace::MakeRGB is called in the decoder, the result is nullptr. + transfer.g = -99; + } constexpr size_t kByteSize = sizeof(gpu::Mailbox) * (kNumMailboxes) + sizeof(skcms_TransferFunction) +
diff --git a/gpu/command_buffer/client/raster_interface.h b/gpu/command_buffer/client/raster_interface.h index 77ba6b63..e814b95 100644 --- a/gpu/command_buffer/client/raster_interface.h +++ b/gpu/command_buffer/client/raster_interface.h
@@ -72,6 +72,8 @@ // Copy `yuva_plane_mailboxes` to `dest_mailbox`. The color space for the // source of the copy is split into `planes_yuv_color_space` which converts // into full range RGB, and `planes_rgb_color_space` which an RGB color space. + // If `planes_rgb_color_space` is nullptr, then disable conversion to + // `dest_mailbox`'s color space. virtual void ConvertYUVAMailboxesToRGB( const gpu::Mailbox& dest_mailbox, SkYUVColorSpace planes_yuv_color_space,
diff --git a/gpu/command_buffer/service/raster_decoder.cc b/gpu/command_buffer/service/raster_decoder.cc index f4870a8..b169fcd 100644 --- a/gpu/command_buffer/service/raster_decoder.cc +++ b/gpu/command_buffer/service/raster_decoder.cc
@@ -3081,6 +3081,12 @@ source_scoped_access[i]->promise_image_texture()->backendTexture(); } + // Disable color space conversion if no source color space was specified. + if (!src_rgb_color_space) { + if (auto dest_color_space = dest_surface->imageInfo().refColorSpace()) + src_rgb_color_space = std::move(dest_color_space); + } + SkISize dest_size = SkISize::Make(dest_surface->width(), dest_surface->height()); SkYUVAInfo yuva_info(dest_size, src_plane_config, src_subsampling,
diff --git a/gpu/command_buffer/service/shared_image/compound_image_backing.cc b/gpu/command_buffer/service/shared_image/compound_image_backing.cc index 470930c..f5f135f 100644 --- a/gpu/command_buffer/service/shared_image/compound_image_backing.cc +++ b/gpu/command_buffer/service/shared_image/compound_image_backing.cc
@@ -306,19 +306,17 @@ } auto shm_backing = std::make_unique<SharedMemoryImageBacking>( - mailbox, format, size, color_space, surface_origin, alpha_type, + gpu::Mailbox(), format, size, color_space, surface_origin, alpha_type, SHARED_IMAGE_USAGE_CPU_WRITE, std::move(shm_wrapper)); - shm_backing->SetNotReferencedCounted(); auto gpu_backing = gpu_backing_factory->CreateSharedImage( - mailbox, format, surface_handle, size, color_space, surface_origin, + gpu::Mailbox(), format, surface_handle, size, color_space, surface_origin, alpha_type, usage | SHARED_IMAGE_USAGE_CPU_UPLOAD, /*is_thread_safe=*/false); if (!gpu_backing) { DLOG(ERROR) << "Failed to create GPU backing"; return nullptr; } - gpu_backing->SetNotReferencedCounted(); return std::make_unique<CompoundImageBacking>( mailbox, format, size, color_space, surface_origin, alpha_type, usage,
diff --git a/gpu/command_buffer/service/shared_image/gl_image_backing_factory.cc b/gpu/command_buffer/service/shared_image/gl_image_backing_factory.cc index 46e193f..ce485b2 100644 --- a/gpu/command_buffer/service/shared_image/gl_image_backing_factory.cc +++ b/gpu/command_buffer/service/shared_image/gl_image_backing_factory.cc
@@ -21,6 +21,7 @@ #include "ui/gfx/color_space.h" #include "ui/gfx/geometry/size.h" #include "ui/gl/buffer_format_utils.h" +#include "ui/gl/gl_image_shared_memory.h" #include "ui/gl/progress_reporter.h" namespace gpu { @@ -40,12 +41,14 @@ const GpuDriverBugWorkarounds& workarounds, const gles2::FeatureInfo* feature_info, ImageFactory* image_factory, - gl::ProgressReporter* progress_reporter) + gl::ProgressReporter* progress_reporter, + const bool for_shared_memory_gmbs) : GLCommonImageBackingFactory(gpu_preferences, workarounds, feature_info, progress_reporter), - image_factory_(image_factory) { + image_factory_(image_factory), + for_shared_memory_gmbs_(for_shared_memory_gmbs) { gpu_memory_buffer_formats_ = feature_info->feature_flags().gpu_memory_buffer_formats; // Return if scanout images are not supported @@ -150,8 +153,10 @@ return nullptr; } + const gfx::GpuMemoryBufferType handle_type = handle.type; GLenum target = - !NativeBufferNeedsPlatformSpecificTextureTarget(buffer_format, plane) + (handle_type == gfx::SHARED_MEMORY_BUFFER || + !NativeBufferNeedsPlatformSpecificTextureTarget(buffer_format, plane)) ? GL_TEXTURE_2D : gpu::GetPlatformSpecificTextureTarget(); scoped_refptr<gl::GLImage> image = @@ -176,8 +181,8 @@ texture_2d_support = (gpu::GetPlatformSpecificTextureTarget() == GL_TEXTURE_2D); #endif // BUILDFLAG(IS_MAC) - DCHECK(target != GL_TEXTURE_2D || texture_2d_support || - image->ShouldBindOrCopy() == gl::GLImage::BIND); + DCHECK(handle_type == gfx::SHARED_MEMORY_BUFFER || target != GL_TEXTURE_2D || + texture_2d_support || image->ShouldBindOrCopy() == gl::GLImage::BIND); #endif // DCHECK_IS_ON() if (usage & SHARED_IMAGE_USAGE_MACOS_VIDEO_TOOLBOX) image->DisableInUseByWindowServer(); @@ -216,6 +221,20 @@ gfx::BufferPlane plane, SurfaceHandle surface_handle, const gfx::Size& size) { + if (handle.type == gfx::SHARED_MEMORY_BUFFER) { + if (plane != gfx::BufferPlane::DEFAULT) + return nullptr; + auto image = base::MakeRefCounted<gl::GLImageSharedMemory>(size); + if (color_space.IsValid()) + image->SetColorSpace(color_space); + if (!image->Initialize(handle.region, handle.id, format, handle.offset, + handle.stride)) { + return nullptr; + } + + return image; + } + if (!image_factory_) return nullptr; @@ -237,8 +256,10 @@ if (thread_safe) { return false; } - // Never used with shared memory GMBs. - if (gmb_type == gfx::SHARED_MEMORY_BUFFER) { + // If the GLImage factory is created specifically for SHARED_MEMORY Gmbs, + // make sure that it used for that purpose based on flag + if ((for_shared_memory_gmbs_ && gmb_type != gfx::SHARED_MEMORY_BUFFER) || + (!for_shared_memory_gmbs_ && gmb_type == gfx::SHARED_MEMORY_BUFFER)) { return false; } if (usage & SHARED_IMAGE_USAGE_CPU_UPLOAD) {
diff --git a/gpu/command_buffer/service/shared_image/gl_image_backing_factory.h b/gpu/command_buffer/service/shared_image/gl_image_backing_factory.h index da6b09c..a7b6a8083 100644 --- a/gpu/command_buffer/service/shared_image/gl_image_backing_factory.h +++ b/gpu/command_buffer/service/shared_image/gl_image_backing_factory.h
@@ -34,6 +34,8 @@ class GPU_GLES2_EXPORT GLImageBackingFactory : public GLCommonImageBackingFactory { public: + // for_shared_memory_gmbs is a temporary parameter which is used for checking + // if gfx::SHARED_MEMORY_BUFFER is supported by the factory. // It is used for migrating GLImage backing, for part that works with // SharedMemory GMB with SharedMemoryImageBacking and Composite backings, and // all other parts with OzoneImageBacking and other backings. @@ -41,7 +43,8 @@ const GpuDriverBugWorkarounds& workarounds, const gles2::FeatureInfo* feature_info, ImageFactory* image_factory, - gl::ProgressReporter* progress_reporter); + gl::ProgressReporter* progress_reporter, + const bool for_shared_memory_gmbs); ~GLImageBackingFactory() override; // SharedImageBackingFactory implementation. @@ -118,6 +121,9 @@ // Factory used to generate GLImages for SCANOUT backings. const raw_ptr<ImageFactory> image_factory_ = nullptr; + // Whether factory is specifically for SHARED_MEMORY Gmbs + const bool for_shared_memory_gmbs_ = false; + BufferFormatInfo buffer_format_info_[viz::RESOURCE_FORMAT_MAX + 1]; GpuMemoryBufferFormatSet gpu_memory_buffer_formats_; };
diff --git a/gpu/command_buffer/service/shared_image/gl_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/gl_image_backing_factory_unittest.cc index df96665e..cce492b 100644 --- a/gpu/command_buffer/service/shared_image/gl_image_backing_factory_unittest.cc +++ b/gpu/command_buffer/service/shared_image/gl_image_backing_factory_unittest.cc
@@ -109,7 +109,10 @@ preferences.use_passthrough_cmd_decoder = use_passthrough(); backing_factory_ = std::make_unique<GLImageBackingFactory>( preferences, workarounds, context_state_->feature_info(), factory, - &progress_reporter_); + &progress_reporter_, /*for_shared_memory_gmbs=*/false); + backing_factory_shmem_ = std::make_unique<GLImageBackingFactory>( + preferences, workarounds, context_state_->feature_info(), factory, + &progress_reporter_, /*for_shared_memory_gmbs=*/true); memory_type_tracker_ = std::make_unique<MemoryTypeTracker>(nullptr); shared_image_representation_factory_ = @@ -139,6 +142,7 @@ scoped_refptr<gl::GLContext> context_; scoped_refptr<SharedContextState> context_state_; std::unique_ptr<GLImageBackingFactory> backing_factory_; + std::unique_ptr<GLImageBackingFactory> backing_factory_shmem_; gles2::MailboxManagerImpl mailbox_manager_; std::unique_ptr<SharedImageManager> shared_image_manager_; std::unique_ptr<MemoryTypeTracker> memory_type_tracker_; @@ -747,6 +751,44 @@ EXPECT_GT(stub_image->update_counter(), update_counter); } +TEST_P(GLImageBackingFactoryWithGMBTest, GpuMemoryBufferImportSharedMemory) { + auto mailbox = Mailbox::GenerateForSharedImage(); + gfx::Size size(256, 256); + gfx::BufferFormat format = viz::BufferFormat(get_format()); + auto color_space = gfx::ColorSpace::CreateSRGB(); + GrSurfaceOrigin surface_origin = kTopLeft_GrSurfaceOrigin; + SkAlphaType alpha_type = kPremul_SkAlphaType; + uint32_t usage = SHARED_IMAGE_USAGE_GLES2; + + size_t shm_size = 0u; + ASSERT_TRUE(gfx::BufferSizeForBufferFormatChecked(size, format, &shm_size)); + gfx::GpuMemoryBufferHandle handle; + handle.type = gfx::SHARED_MEMORY_BUFFER; + handle.region = base::UnsafeSharedMemoryRegion::Create(shm_size); + ASSERT_TRUE(handle.region.IsValid()); + handle.offset = 0; + handle.stride = static_cast<uint32_t>( + gfx::RowSizeForBufferFormat(size.width(), format, 0)); + + auto backing = backing_factory_shmem_->CreateSharedImage( + mailbox, kClientId, std::move(handle), format, gfx::BufferPlane::DEFAULT, + kNullSurfaceHandle, size, color_space, surface_origin, alpha_type, usage); + if (!can_create_scanout_or_gmb_shared_image(get_format())) { + EXPECT_FALSE(backing); + return; + } + ASSERT_TRUE(backing); + + std::unique_ptr<SharedImageRepresentationFactoryRef> ref = + shared_image_manager_->Register(std::move(backing), + memory_type_tracker_.get()); + scoped_refptr<gl::GLImage> image = GetImageFromMailbox(mailbox); + ASSERT_EQ(image->GetType(), gl::GLImage::Type::MEMORY); + auto* shm_image = static_cast<gl::GLImageSharedMemory*>(image.get()); + EXPECT_EQ(size, shm_image->GetSize()); + EXPECT_EQ(format, shm_image->format()); +} + TEST_P(GLImageBackingFactoryWithGMBTest, GpuMemoryBufferImportNative_WithRGBEmulation) { if (use_passthrough())
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc b/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc index 6566c142..b7927e8 100644 --- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc +++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing.cc
@@ -42,7 +42,6 @@ #include "ui/gl/gl_image_native_pixmap.h" #include "ui/gl/gl_image_shared_memory.h" #include "ui/gl/gl_implementation.h" -#include "ui/gl/gl_utils.h" #include "ui/gl/gl_version_info.h" #include "ui/gl/scoped_binders.h" #include "ui/gl/scoped_make_current.h" @@ -160,30 +159,6 @@ ClearTrackingSharedImageBacking::SetClearedRect(cleared_rect); } -void GLTextureImageBacking::Update(std::unique_ptr<gfx::GpuFence> in_fence) {} - -bool GLTextureImageBacking::UploadFromMemory(const SkPixmap& pixmap) { - DCHECK(gl::GLContext::GetCurrent()); - - const GLuint texture_id = GetGLServiceId(); - const GLenum gl_format = texture_params_.format; - const GLenum gl_type = texture_params_.type; - const GLenum gl_target = texture_params_.target; - - gl::GLApi* api = gl::g_current_gl_context; - gl::ScopedTextureBinder scoped_texture_binder(gl_target, texture_id); - gl::ScopedPixelStore unpack_row_length(GL_UNPACK_ROW_LENGTH, 0); - gl::ScopedPixelStore unpack_skip_pixels(GL_UNPACK_SKIP_PIXELS, 0); - gl::ScopedPixelStore unpack_skip_rows(GL_UNPACK_SKIP_ROWS, 0); - gl::ScopedPixelStore unpack_alignment(GL_UNPACK_ALIGNMENT, 4); - - api->glTexSubImage2DFn(gl_target, 0, 0, 0, size().width(), size().height(), - gl_format, gl_type, pixmap.addr()); - DCHECK_EQ(api->glGetErrorFn(), static_cast<GLenum>(GL_NO_ERROR)); - - return true; -} - bool GLTextureImageBacking::ProduceLegacyMailbox( MailboxManager* mailbox_manager) { if (IsPassthrough()) @@ -256,6 +231,8 @@ tracker); } +void GLTextureImageBacking::Update(std::unique_ptr<gfx::GpuFence> in_fence) {} + void GLTextureImageBacking::InitializeGLTexture( GLuint service_id, const InitializeGLTextureParams& params) { @@ -263,7 +240,7 @@ params.target, service_id, params.framebuffer_attachment_angle, IsPassthrough() ? &passthrough_texture_ : nullptr, IsPassthrough() ? nullptr : &texture_); - texture_params_ = params; + if (IsPassthrough()) { passthrough_texture_->SetEstimatedSize(EstimatedSize(format(), size())); SetClearedRect(params.is_cleared ? gfx::Rect(size()) : gfx::Rect());
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing.h b/gpu/command_buffer/service/shared_image/gl_texture_image_backing.h index cc814b7..a1938fd 100644 --- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing.h +++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing.h
@@ -65,7 +65,6 @@ MemoryTypeTracker* tracker, scoped_refptr<SharedContextState> context_state) override; void Update(std::unique_ptr<gfx::GpuFence> in_fence) override; - bool UploadFromMemory(const SkPixmap& pixmap) override; bool IsPassthrough() const { return is_passthrough_; } @@ -73,8 +72,6 @@ gles2::Texture* texture_ = nullptr; scoped_refptr<gles2::TexturePassthrough> passthrough_texture_; - GLTextureImageBackingHelper::InitializeGLTextureParams texture_params_; - sk_sp<SkPromiseImageTexture> cached_promise_texture_; scoped_refptr<gl::GLImageEGL> image_egl_; };
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory.cc b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory.cc index e2cb9eb..a809737 100644 --- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory.cc +++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory.cc
@@ -37,13 +37,11 @@ const GpuPreferences& gpu_preferences, const GpuDriverBugWorkarounds& workarounds, const gles2::FeatureInfo* feature_info, - gl::ProgressReporter* progress_reporter, - bool for_cpu_upload_usage) + gl::ProgressReporter* progress_reporter) : GLCommonImageBackingFactory(gpu_preferences, workarounds, feature_info, - progress_reporter), - for_cpu_upload_usage_(for_cpu_upload_usage) {} + progress_reporter) {} GLTextureImageBackingFactory::~GLTextureImageBackingFactory() = default; @@ -136,19 +134,10 @@ return false; } - bool has_cpu_upload_usage = usage & SHARED_IMAGE_USAGE_CPU_UPLOAD; + constexpr uint32_t kInvalidUsages = SHARED_IMAGE_USAGE_VIDEO_DECODE | + SHARED_IMAGE_USAGE_SCANOUT | + SHARED_IMAGE_USAGE_CPU_UPLOAD; - if (for_cpu_upload_usage_ != has_cpu_upload_usage) - return false; - - if (has_cpu_upload_usage) { - // Drop scanout usage for shared memory GMBs to match legacy behaviour - // from GLImageBackingFactory. - usage = usage & ~SHARED_IMAGE_USAGE_SCANOUT; - } - - constexpr uint32_t kInvalidUsages = - SHARED_IMAGE_USAGE_VIDEO_DECODE | SHARED_IMAGE_USAGE_SCANOUT; if (usage & kInvalidUsages) { return false; }
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory.h b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory.h index d75d5917..7feeebd 100644 --- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory.h +++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory.h
@@ -31,14 +31,10 @@ class GPU_GLES2_EXPORT GLTextureImageBackingFactory : public GLCommonImageBackingFactory { public: - // The `for_cpu_upload_usage` parameter controls if this factory accepts - // `SHARED_IMAGE_USAGE_CPU_UPLOAD`. It is strict, if true the usage must - // include CPU upload and if false it must not. GLTextureImageBackingFactory(const GpuPreferences& gpu_preferences, const GpuDriverBugWorkarounds& workarounds, const gles2::FeatureInfo* feature_info, - gl::ProgressReporter* progress_reporter, - bool for_cpu_upload_usage); + gl::ProgressReporter* progress_reporter); ~GLTextureImageBackingFactory() override; // SharedImageBackingFactory implementation. @@ -101,8 +97,6 @@ SkAlphaType alpha_type, uint32_t usage, base::span<const uint8_t> pixel_data); - - const bool for_cpu_upload_usage_; }; } // namespace gpu
diff --git a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory_unittest.cc index e1278c4..a8a3a70e 100644 --- a/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory_unittest.cc +++ b/gpu/command_buffer/service/shared_image/gl_texture_image_backing_factory_unittest.cc
@@ -105,7 +105,7 @@ preferences.use_passthrough_cmd_decoder = use_passthrough(); backing_factory_ = std::make_unique<GLTextureImageBackingFactory>( preferences, workarounds, context_state_->feature_info(), - &progress_reporter_, /*for_cpu_upload_usage=*/false); + &progress_reporter_); memory_type_tracker_ = std::make_unique<MemoryTypeTracker>(nullptr); shared_image_representation_factory_ =
diff --git a/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc b/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc index 37d4245..0e2a6d23 100644 --- a/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc +++ b/gpu/command_buffer/service/shared_image/iosurface_image_backing_factory_unittest.cc
@@ -71,7 +71,7 @@ backing_factory_ = std::make_unique<GLImageBackingFactory>( preferences, workarounds, context_state_->feature_info(), &image_factory_, - /*progress_reporter=*/nullptr); + /*progress_reporter=*/nullptr, /*for_shared_memory_gmbs=*/false); memory_type_tracker_ = std::make_unique<MemoryTypeTracker>(nullptr); shared_image_representation_factory_ =
diff --git a/gpu/command_buffer/service/shared_image/shared_image_backing.cc b/gpu/command_buffer/service/shared_image/shared_image_backing.cc index e5c9063..db0f6d51 100644 --- a/gpu/command_buffer/service/shared_image/shared_image_backing.cc +++ b/gpu/command_buffer/service/shared_image/shared_image_backing.cc
@@ -177,14 +177,8 @@ } #endif -void SharedImageBacking::SetNotReferencedCounted() { - DCHECK(!HasAnyRefs()); - is_reference_counted_ = false; -} - void SharedImageBacking::AddRef(SharedImageRepresentation* representation) { AutoLock auto_lock(this); - DCHECK(is_reference_counted_); bool first_ref = refs_.empty(); refs_.push_back(representation); @@ -196,7 +190,6 @@ void SharedImageBacking::ReleaseRef(SharedImageRepresentation* representation) { AutoLock auto_lock(this); - DCHECK(is_reference_counted_); auto found = std::find(refs_.begin(), refs_.end(), representation); DCHECK(found != refs_.end());
diff --git a/gpu/command_buffer/service/shared_image/shared_image_backing.h b/gpu/command_buffer/service/shared_image/shared_image_backing.h index 61964c31..ce81623 100644 --- a/gpu/command_buffer/service/shared_image/shared_image_backing.h +++ b/gpu/command_buffer/service/shared_image/shared_image_backing.h
@@ -99,17 +99,11 @@ const Mailbox& mailbox() const { return mailbox_; } size_t estimated_size() const { return estimated_size_; } bool is_thread_safe() const { return !!lock_; } - bool is_reference_counted() const { return is_reference_counted_; } - void OnContextLost(); // Creates SkImageInfo matching backing size, format, alpha and color space. SkImageInfo AsSkImageInfo() const; - // Disables reference counting for backing. No references should be added, - // either before or after this is called. - void SetNotReferencedCounted(); - // Concrete functions to manage a ref count. void AddRef(SharedImageRepresentation* representation); void ReleaseRef(SharedImageRepresentation* representation); @@ -283,8 +277,6 @@ const uint32_t usage_; const size_t estimated_size_; - bool is_reference_counted_ = true; - raw_ptr<SharedImageFactory> factory_ = nullptr; // Bound to the thread on which the backing is created. The |factory_|
diff --git a/gpu/command_buffer/service/shared_image/shared_image_factory.cc b/gpu/command_buffer/service/shared_image/shared_image_factory.cc index 1dfc3ac..01473b3 100644 --- a/gpu/command_buffer/service/shared_image/shared_image_factory.cc +++ b/gpu/command_buffer/service/shared_image/shared_image_factory.cc
@@ -325,8 +325,7 @@ std::make_unique<GLTextureImageBackingFactory>( gpu_preferences, workarounds, feature_info.get(), shared_context_state_ ? shared_context_state_->progress_reporter() - : nullptr, - /*for_cpu_upload_usage=*/false); + : nullptr); factories_.push_back(std::move(gl_texture_backing_factory)); } @@ -343,13 +342,12 @@ #if !BUILDFLAG(IS_ANDROID) if (use_gl) { - auto gl_texture_backing_factory = - std::make_unique<GLTextureImageBackingFactory>( - gpu_preferences, workarounds, feature_info.get(), - shared_context_state_ ? shared_context_state_->progress_reporter() - : nullptr, - /*for_cpu_upload_usage=*/true); - factories_.push_back(std::move(gl_texture_backing_factory)); + auto gl_image_backing_factory = std::make_unique<GLImageBackingFactory>( + gpu_preferences, workarounds, feature_info.get(), image_factory, + shared_context_state_ ? shared_context_state_->progress_reporter() + : nullptr, + /*for_shared_memory_gmbs=*/true); + factories_.push_back(std::move(gl_image_backing_factory)); } #endif @@ -438,7 +436,8 @@ auto gl_image_backing_factory = std::make_unique<GLImageBackingFactory>( gpu_preferences, workarounds, feature_info.get(), image_factory, shared_context_state_ ? shared_context_state_->progress_reporter() - : nullptr); + : nullptr, + /*for_shared_memory_gmbs=*/false); factories_.push_back(std::move(gl_image_backing_factory)); } #endif
diff --git a/gpu/command_buffer/service/shared_image/shared_image_representation.cc b/gpu/command_buffer/service/shared_image/shared_image_representation.cc index 711c969..55ba754 100644 --- a/gpu/command_buffer/service/shared_image/shared_image_representation.cc +++ b/gpu/command_buffer/service/shared_image/shared_image_representation.cc
@@ -27,7 +27,9 @@ // TODO(hitawala): Rewrite the reference counting so that // SharedImageRepresentation does not need manager and manager attaches to // backing in Register(). - if (manager_ && backing_->is_reference_counted()) { + // If mailbox is zero this is owned by a compound backing and not reference + // counted. + if (manager_ && !backing_->mailbox().IsZero()) { backing_->AddRef(this); } } @@ -37,7 +39,9 @@ // error is. CHECK(!has_scoped_access_) << "Destroying a SharedImageRepresentation with " "outstanding Scoped*Access objects."; - if (manager_ && backing_->is_reference_counted()) { + // If mailbox is zero this is owned by a compound backing and not reference + // counted. + if (manager_ && !backing_->mailbox().IsZero()) { manager_->OnRepresentationDestroyed(backing_->mailbox(), this); } }
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Builder/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Builder/properties.json index 5300166..c5fcc91f 100644 --- a/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Builder/properties.json +++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Builder/properties.json
@@ -13,5 +13,6 @@ }, "builder_group": "chromium.webrtc", "perf_dashboard_machine_group": "ChromiumWebRTC", - "recipe": "chromium" + "recipe": "chromium", + "xcode_build_version": "14a5294e" } \ No newline at end of file
diff --git a/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Tester/properties.json b/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Tester/properties.json index 2cf90e9..4ab63df 100644 --- a/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Tester/properties.json +++ b/infra/config/generated/builders/webrtc/WebRTC Chromium Mac Tester/properties.json
@@ -8,5 +8,6 @@ }, "builder_group": "chromium.webrtc", "perf_dashboard_machine_group": "ChromiumWebRTC", - "recipe": "chromium" + "recipe": "chromium", + "xcode_build_version": "14a5294e" } \ No newline at end of file
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index 8bef51c..5b168f7 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -3383,7 +3383,7 @@ ' },' ' "$build/reclient": {' ' "cache_silo": "Comparison Mac - cache siloed",' - ' "instance": "rbe-chromium-trusted",' + ' "instance": "rbe-chromium-trusted-test",' ' "jobs": 250,' ' "metrics_project": "chromium-reclient-metrics"' ' },' @@ -3539,7 +3539,7 @@ ' },' ' "$build/reclient": {' ' "cache_silo": "Comparison Mac - cache siloed",' - ' "instance": "rbe-chromium-trusted",' + ' "instance": "rbe-chromium-trusted-test",' ' "jobs": 250,' ' "metrics_project": "chromium-reclient-metrics"' ' },' @@ -4018,7 +4018,7 @@ ' },' ' "$build/reclient": {' ' "cache_silo": "Comparison ios - cache siloed",' - ' "instance": "rbe-chromium-trusted",' + ' "instance": "rbe-chromium-trusted-test",' ' "jobs": 250,' ' "metrics_project": "chromium-reclient-metrics"' ' },' @@ -81664,6 +81664,10 @@ ' "recipe": "chromium"' '}' execution_timeout_secs: 7200 + caches { + name: "xcode_ios_14a5294e" + path: "xcode_ios_14a5294e.app" + } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { @@ -81710,6 +81714,10 @@ ' "recipe": "chromium"' '}' execution_timeout_secs: 7200 + caches { + name: "xcode_ios_14a5294e" + path: "xcode_ios_14a5294e.app" + } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments {
diff --git a/infra/config/lib/builders.star b/infra/config/lib/builders.star index af68e77b..bead632 100644 --- a/infra/config/lib/builders.star +++ b/infra/config/lib/builders.star
@@ -283,7 +283,7 @@ return code_coverage or None -def _reclient_property(*, instance, service, jobs, rewrapper_env, profiler_service, publish_trace, cache_silo, ensure_verified): +def _reclient_property(*, instance, service, jobs, rewrapper_env, profiler_service, publish_trace, cache_silo, ensure_verified, bootstrap_env): reclient = {} instance = defaults.get_value("reclient_instance", instance) if not instance: @@ -303,6 +303,13 @@ fail("Environment variables in rewrapper_env must start with " + "'RBE_', got '%s'" % k) reclient["rewrapper_env"] = rewrapper_env + bootstrap_env = defaults.get_value("reclient_bootstrap_env", bootstrap_env) + if bootstrap_env: + for k in bootstrap_env: + if not k.startswith("RBE_"): + fail("Environment variables in bootstrap_env must start with " + + "'RBE_', got '%s'" % k) + reclient["bootstrap_env"] = bootstrap_env profiler_service = defaults.get_value("reclient_profiler_service", profiler_service) if profiler_service: reclient["profiler_service"] = profiler_service @@ -354,6 +361,7 @@ reclient_service = None, reclient_jobs = None, reclient_rewrapper_env = None, + reclient_bootstrap_env = None, reclient_profiler_service = None, reclient_publish_trace = None, reclient_cache_silo = None, @@ -411,6 +419,7 @@ reclient_service = args.DEFAULT, reclient_jobs = args.DEFAULT, reclient_rewrapper_env = args.DEFAULT, + reclient_bootstrap_env = args.DEFAULT, reclient_profiler_service = args.DEFAULT, reclient_publish_trace = args.DEFAULT, reclient_cache_silo = None, @@ -574,6 +583,9 @@ reclient_rewrapper_env: a map that sets the rewrapper flags via the environment variables. All such vars must start with the "RBE_" prefix. Has no effect if reclient_instance is not set. + reclient_bootstrap_env: a map that sets the bootstrap flags via the + environment variables. All such vars must start with the "RBE_" + prefix. Has no effect if reclient_instance is not set. reclient_profiler_service: a string indicating service name for re-client's cloud profiler. Has no effect if reclient_instance is not set. @@ -725,6 +737,7 @@ service = reclient_service, jobs = reclient_jobs, rewrapper_env = reclient_rewrapper_env, + bootstrap_env = reclient_bootstrap_env, profiler_service = reclient_profiler_service, publish_trace = reclient_publish_trace, cache_silo = reclient_cache_silo,
diff --git a/infra/config/subprojects/chromium/ci/chromium.fyi.star b/infra/config/subprojects/chromium/ci/chromium.fyi.star index 9f2227a..d7ecd32 100644 --- a/infra/config/subprojects/chromium/ci/chromium.fyi.star +++ b/infra/config/subprojects/chromium/ci/chromium.fyi.star
@@ -936,7 +936,7 @@ executable = "recipe:reclient_goma_comparison", execution_timeout = 10 * time.hour, reclient_cache_silo = "Comparison Mac - cache siloed", - reclient_instance = reclient.instance.DEFAULT_TRUSTED, + reclient_instance = reclient.instance.TEST_TRUSTED, reclient_jobs = 250, os = os.MAC_DEFAULT, cores = None, @@ -953,7 +953,7 @@ executable = "recipe:reclient_goma_comparison", execution_timeout = 10 * time.hour, reclient_cache_silo = "Comparison Mac - cache siloed", - reclient_instance = reclient.instance.DEFAULT_TRUSTED, + reclient_instance = reclient.instance.TEST_TRUSTED, reclient_jobs = 250, os = os.MAC_DEFAULT, cores = None, @@ -1021,7 +1021,7 @@ executable = "recipe:reclient_goma_comparison", execution_timeout = 10 * time.hour, reclient_cache_silo = "Comparison ios - cache siloed", - reclient_instance = reclient.instance.DEFAULT_TRUSTED, + reclient_instance = reclient.instance.TEST_TRUSTED, reclient_jobs = 250, os = os.MAC_DEFAULT, cores = None,
diff --git a/infra/config/subprojects/webrtc/webrtc.star b/infra/config/subprojects/webrtc/webrtc.star index c94c40f8..6a7df13 100644 --- a/infra/config/subprojects/webrtc/webrtc.star +++ b/infra/config/subprojects/webrtc/webrtc.star
@@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -load("//lib/builders.star", "builder", "cpu", "defaults", "goma", "os") +load("//lib/builders.star", "builder", "cpu", "defaults", "goma", "os", "xcode") luci.bucket( name = "webrtc", @@ -67,11 +67,13 @@ name = "WebRTC Chromium Mac Builder", goma_backend = goma.backend.RBE_PROD, os = os.MAC_ANY, + xcode = xcode.x14main, ) builder( name = "WebRTC Chromium Mac Tester", triggered_by = ["WebRTC Chromium Mac Builder"], + xcode = xcode.x14main, ) builder(
diff --git a/ios/chrome/app/feed_app_agent.mm b/ios/chrome/app/feed_app_agent.mm index 1818559d9..4921830 100644 --- a/ios/chrome/app/feed_app_agent.mm +++ b/ios/chrome/app/feed_app_agent.mm
@@ -130,10 +130,9 @@ // interval in Experimental Settings. - (NSDate*)earliestBackgroundRefreshBeginDate { NSDate* earliestBeginDate = nil; - NSTimeInterval intervalOverride = - GetBackgroundRefreshIntervalOverrideInSeconds(); - if (intervalOverride > 0) { - earliestBeginDate = [NSDate dateWithTimeIntervalSinceNow:intervalOverride]; + if (IsFeedOverrideDefaultsEnabled()) { + earliestBeginDate = [NSDate + dateWithTimeIntervalSinceNow:GetBackgroundRefreshIntervalInSeconds()]; } else { // This is expected to crash if FeedService is not available. earliestBeginDate = @@ -219,6 +218,7 @@ title = @"Feed Bg Refresh Failure"; } [self maybeRequestNotification:title]; + SetFeedLastBackgroundRefreshTimestamp([NSDate now]); } @end
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 31398cee..650f623a 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1155,6 +1155,9 @@ <message name="IDS_IOS_INCOGNITO_INTERSTITIAL_TITLE" desc="Title of interstitial which lets the user choose, when they open a link from an external app, whether to open it in Incognito mode or in a regular tab. [iOS only]"> Open in Incognito? </message> + <message name="IDS_IOS_INCOGNITO_INTERSTITIAL_URL_READ_MORE_BUTTON" desc="Button to unfold a URL which is being truncated, so as to let the user read more of the URL. [iOS only]"> + more + </message> <message name="IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME_INCOGNITO" desc="Button to open a link from an external app in Incognito mode rather than a regular tab. [iOS only]"> Open in Chrome Incognito </message> @@ -2564,6 +2567,9 @@ <message name="IDS_IOS_SETTINGS_TOOLBAR_ADD" desc="Label of the button displayed on the bottom toolbar of the settings' collections. Pressing this button opens the Add view. For example: Clicking this button in the Password settings would open the add password view."> Add </message> + <message name="IDS_IOS_SETTINGS_TOOLBAR_SETTINGS_SUBMENU" desc="Button text in a toolbar that will take the user to a submenu with settings related to the currently-displayed content."> + Settings + </message> <message name="IDS_IOS_SETTINGS_SWIPE_DOWN_MESSAGE" desc="Message displayed whenever a user tries to dismiss a Settings screen which is being edited, or information is being added to it."> Are you sure you want to discard your changes? </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_URL_READ_MORE_BUTTON.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_URL_READ_MORE_BUTTON.png.sha1 new file mode 100644 index 0000000..0ad7eda21 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_URL_READ_MORE_BUTTON.png.sha1
@@ -0,0 +1 @@ +7241db80adcbaafdd6c3ca03e592eb9e53591d80 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SETTINGS_TOOLBAR_SETTINGS_SUBMENU.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SETTINGS_TOOLBAR_SETTINGS_SUBMENU.png.sha1 new file mode 100644 index 0000000..f41e4181 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SETTINGS_TOOLBAR_SETTINGS_SUBMENU.png.sha1
@@ -0,0 +1 @@ +a5b60e0d5ccb2f7008c74ccd86d2561226c3fe04 \ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb index 09626af..a8ec28f7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Wys altyd</translation> <translation id="418156467088430727">Bekyk vanlyn weergawe in nuwe oortjie</translation> <translation id="4181841719683918333">Tale</translation> +<translation id="4187450337729239226">Plak en soek</translation> <translation id="4223967053752765281">Jou organisasie het aanmelding afgeskakel. Jy kan steeds jou boekmerke, geskiedenis, wagwoorde en ander instellings op hierdie toestel sien. As jy veranderinge aanbring, sal hulle nie na jou rekening sinkroniseer nie.</translation> <translation id="4233831822770018312">Wysig toestemmings</translation> <translation id="4237377247299956313">Tik op <ph name="BEGIN_BOLD" />Verstekblaaierprogram<ph name="END_BOLD" /></translation> @@ -495,6 +496,7 @@ <translation id="5118764316110575523">Af</translation> <translation id="5132942445612118989">Sinkroniseer jou wagwoorde, geskiedenis en meer op alle toestelle</translation> <translation id="5140288047769711648">Chrome sal hierdie wagwoord vir jou onthou. Jy hoef dit nie te onthou nie.</translation> +<translation id="5149188072385105201">Voeg wagwoord by …</translation> <translation id="5150492518600715772">Stuur na jou toestel toe</translation> <translation id="5168414296986405587">Gebou vir iPadOS</translation> <translation id="5173088371991956744">Sinkronisering moet verifieer dat dit jy is</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index ce386d2..fe6a3fc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -120,7 +120,7 @@ <translation id="1930989359703290198">በተወሰኑ መለያዎች አማካኝነት ብቻ እንዲገቡ ድርጅትዎ ይፈቅድልዎታል። ያልተፈቀዱ መለያዎች ተደብቀዋል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> <translation id="1941314575388338491">ለመቅዳት ሁለቴ መታ ያድርጉ።</translation> <translation id="1943478190258551035">ምናሌ → ቅንብሮች</translation> -<translation id="1952172573699511566">ሲቻል፣ ድር ጣቢያዎች በእርስዎ ተመራጭ ቋንቋ ጽሑፍ ይታያሉ።</translation> +<translation id="1952172573699511566">ሲቻል፣ ድር ጣቢያዎች በእርስዎ ተመራጭ ቋንቋ ጽሁፍ ይታያሉ።</translation> <translation id="1965935827552890526">በእርስዎ ሌላኛው ክፍት የChrome መስኮት ላይ እያደረጉ ያሉትን ነገር ያጠናቅቁ።</translation> <translation id="1973912524893600642">ውሂብን አቆይ</translation> <translation id="1974060860693918893">የላቀ</translation> @@ -139,7 +139,7 @@ <translation id="2116625576999540962"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> ንጥሎች ተንቀሳቅሰዋል</translation> <translation id="2122754583996902531">የእርስዎ አሳሽ ይተዳደራል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> <translation id="212623074644302906">ወደ የንባብ ዝርዝር ለማከል ጠይቅ</translation> -<translation id="2139867232736819575">የቀዱትን ጽሑፍ ይፈልጉ</translation> +<translation id="2139867232736819575">የቀዱትን ጽሁፍ ይፈልጉ</translation> <translation id="214201757571129614">ግባ…</translation> <translation id="2149973817440762519">እልባት አርትዕ</translation> <translation id="2155145621546387786">Chromeን አጋራ</translation> @@ -154,7 +154,7 @@ <translation id="2268044343513325586">አጽዳ</translation> <translation id="2271351792809375263">በመሣሪያዎ ላይ ባሉ ሌሎች መተግበሪያዎች ውስጥ Chrome ላይ ያስቀመጡትን የይለፍ ቃላት ይጠቀሙ</translation> <translation id="2273327106802955778">ተጨማሪ ምናሌ</translation> -<translation id="2286505070150039482">የደመቀው ጽሑፍ</translation> +<translation id="2286505070150039482">የደመቀው ጽሁፍ</translation> <translation id="2299218006564889602">የይለፍ ቃላትዎ ወደ Google የይለፍ ቃል አስተዳዳሪ ከመቀመጣቸው በፊት በመሳሪያዎ ላይ ይመሣጠራል።</translation> <translation id="2302742851632557585">ድር ጣቢያ ላይ የይለፍ ቃል ይቀይሩ</translation> <translation id="2316709634732130529">የተጠቆመውን የይለፍ ቃል ይጠቀሙ</translation> @@ -347,7 +347,7 @@ <translation id="3904829425754749514">የእርስዎ ድርጅት ስምረትን አጥፍቷል። አሁንም በዚህ መሣሪያ ላይ የእርስዎ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮችን ማየት ይችላሉ። ለውጦችን ካደረጉ ከመለያዎ ጋር አይሰምሩም።</translation> <translation id="3913386780052199712">Chrome ውስጥ ገብተዋል</translation> <translation id="3915450441834151894">የጣቢያ መረጃ</translation> -<translation id="3922310737605261887">የቀዱትን ጽሑፍ ይፈልጉ</translation> +<translation id="3922310737605261887">የቀዱትን ጽሁፍ ይፈልጉ</translation> <translation id="3928666092801078803">የእኔን ውሂብ አጣምር</translation> <translation id="3929457972718048006">አድራሻዎች</translation> <translation id="3943492037546055397">የይለፍ ቃላት</translation> @@ -378,6 +378,7 @@ <translation id="4172051516777682613">ሁልጊዜ አሳይ</translation> <translation id="418156467088430727">የመስመር ውጭ ስሪቱን በአዲስ ትር ውስጥ ይመልከቱ</translation> <translation id="4181841719683918333">ቋንቋዎች</translation> +<translation id="4187450337729239226">ለጥፍ እና ፈልግ</translation> <translation id="4223967053752765281">ድርጅትዎ በመለያ መግባትን አጥፍቷል። አሁንም በዚህ መሣሪያ ላይ የእርስዎ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮችን ማየት ይችላሉ። ለውጦችን ካደረጉ ከመለያዎ ጋር አይሰምሩም።</translation> <translation id="4233831822770018312">ፈቃዶችን ያርትዑ</translation> <translation id="4237377247299956313"><ph name="BEGIN_BOLD" />ነባሪ የአሳሽ መተግበሪያ<ph name="END_BOLD" />ን መታ ያድርጉ</translation> @@ -392,7 +393,7 @@ <translation id="430793432425771671">ሁሉንም ያመሳስሉ</translation> <translation id="4309403553630140242">ለተጨማሪ መረጃ ሁለቴ መታ ያድርጉ</translation> <translation id="430967081421617822">የምንጊዜም</translation> -<translation id="4334428914252001502">1 ያልተነበበ ጽሑፍ።</translation> +<translation id="4334428914252001502">1 ያልተነበበ ጽሁፍ።</translation> <translation id="4338650699862464074">የሚጎበኟቸው የገጾች ዩአርኤሎችን ወደ Google ይላኩ።</translation> <translation id="4343046787186034850">የካሜራ እና የማይክሮፎን መዳረሻ ተፈቅዷል</translation> <translation id="4359125752503270327">ይህ ገጽ በሌላ መተግበሪያ ውስጥ ይከፈታል።</translation> @@ -636,7 +637,7 @@ <translation id="6337234675334993532">ምስጠራ</translation> <translation id="633809752005859102">የሆነ ከበድ ያለ ችግር ተፈጥሯል። ችግሩን ለመቅረፍ እየሰራን ነው።</translation> <translation id="6342069812937806050">ልክ አሁን</translation> -<translation id="6344783595350022745">ጽሑፍ አጽዳ</translation> +<translation id="6344783595350022745">ጽሁፍ አጽዳ</translation> <translation id="6346549652287021269">አዲስ ውርድ ይጀመር?</translation> <translation id="634878792104344809">የእርስዎን የይለፍ ቃላት፣ ታሪክ እና ተጨማሪ ነገሮች በሁሉም መሣሪያዎችዎ ላይ ያስምሩ</translation> <translation id="6361848730467328243"><ph name="DOMAIN_NAME" />ን ይከተሉ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index 78090ff6..18d3b31 100644 --- a/ios/chrome/app/strings/resources/ios_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Deaktiv</translation> <translation id="5132942445612118989">Bütün cihazlarda parol, tarixçə və s. sinxronizasiya edin</translation> <translation id="5140288047769711648">Chrome bu parolu Sizin üçün yadda saxlayacaq. Parolu yadda saxlamaq məcburiyyətində deyilsiniz.</translation> +<translation id="5149188072385105201">Parol Əlavə edin...</translation> <translation id="5150492518600715772">Cihazınıza göndərin</translation> <translation id="5168414296986405587">iPadOS üçün hazırlanıb</translation> <translation id="5173088371991956744">Sinxronizasiya kimliyinizi təsdiqləməlidir</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index eebaaa4..fac9faa 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Заўсёды паказваць</translation> <translation id="418156467088430727">Паказаць пазасеткавую версію ў новай укладцы</translation> <translation id="4181841719683918333">Мовы</translation> +<translation id="4187450337729239226">Уставіць і выканаць пошук</translation> <translation id="4223967053752765281">Ваша арганізацыя адключыла магчымасць уваходу. Як і раней, вы можаце праглядаць свае закладкі, гісторыю, паролі і іншыя налады на гэтай прыладзе. Зробленыя вамі змяненні не будуць сінхранізавацца з вашым уліковым запісам.</translation> <translation id="4233831822770018312">Змяненне дазволаў</translation> <translation id="4237377247299956313">Націсніце <ph name="BEGIN_BOLD" />Стандартны браўзер<ph name="END_BOLD" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index 9760214..67a7f66 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">বন্ধ করা আছে</translation> <translation id="5132942445612118989">সমস্ত ডিভাইসে আপনার পাসওয়ার্ড, ইতিহাস ও আরও অনেক কিছু সিঙ্ক করুন</translation> <translation id="5140288047769711648">Chrome আপনার জন্য এই পাসওয়ার্ড মনে রাখবে। আপনাকে এটি মনে রাখতে হবে না।</translation> +<translation id="5149188072385105201">পাসওয়ার্ড যোগ করুন...</translation> <translation id="5150492518600715772">আপনার অন্য ডিভাইসে পাঠান</translation> <translation id="5168414296986405587">iPadOS-এর জন্য তৈরি</translation> <translation id="5173088371991956744">সিঙ্ক করার আগে যাচাই করিয়ে নিতে হবে যে এটি আপনি করছেন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 2435429..7b7de8d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Vypnuto</translation> <translation id="5132942445612118989">Vaše hesla, historie a další údaje na všech zařízeních</translation> <translation id="5140288047769711648">Chrome si pro vás toto heslo zapamatuje. Vy si ho pamatovat nemusíte.</translation> +<translation id="5149188072385105201">Přidat heslo…</translation> <translation id="5150492518600715772">Odeslat na vaše zařízení</translation> <translation id="5168414296986405587">Vytvořeno pro iPadOS</translation> <translation id="5173088371991956744">Synchronizace potřebuje ověřit vaši identitu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb index bd3c6c0..dcda0c1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Dangos bob tro</translation> <translation id="418156467088430727">Gweld Fersiwn All-lein mewn Tab Newydd</translation> <translation id="4181841719683918333">Ieithoedd</translation> +<translation id="4187450337729239226">Gludo a Chwilio</translation> <translation id="4223967053752765281">Mae eich sefydliad wedi diffodd mewngofnodi. Gallwch weld eich nodau tudalen, eich hanes, eich cyfrineiriau a'ch gosodiadau eraill ar y ddyfais hon o hyd. Os byddwch yn gwneud newidiadau, ni fyddant yn cysoni i'ch cyfrif.</translation> <translation id="4233831822770018312">Golygu Caniatadau</translation> <translation id="4237377247299956313">Tapiwch <ph name="BEGIN_BOLD" />Ap Pori Diofyn<ph name="END_BOLD" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 9ec2da6..8a32e271 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Vis altid</translation> <translation id="418156467088430727">Se offlineversion på en ny fane</translation> <translation id="4181841719683918333">Sprog</translation> +<translation id="4187450337729239226">Indsæt og søg</translation> <translation id="4223967053752765281">Din organisation har deaktiveret login. Du kan stadig se din historik samt dine bogmærker, adgangskoder og andre indstillinger på din enhed. Hvis du foretager nogen ændringer, bliver de dog ikke synkroniseret med din konto.</translation> <translation id="4233831822770018312">Rediger tilladelser</translation> <translation id="4237377247299956313">Tryk på <ph name="BEGIN_BOLD" />Standardbrowserapp<ph name="END_BOLD" /></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 fb0fb8e5..43df68c0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Mostrar siempre</translation> <translation id="418156467088430727">Ver la versión sin conexión en una nueva pestaña</translation> <translation id="4181841719683918333">Idiomas</translation> +<translation id="4187450337729239226">Pegar y buscar</translation> <translation id="4223967053752765281">Tu organización desactivó el acceso. Podrás seguir viendo tus favoritos, el historial, las contraseñas y otras opciones de configuración en este dispositivo. Si realizas cambios, no se sincronizarán con tu cuenta.</translation> <translation id="4233831822770018312">Modificar permisos</translation> <translation id="4237377247299956313">Presiona <ph name="BEGIN_BOLD" />App de navegador predeterminada<ph name="END_BOLD" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index 21ac78a..52a65e79 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">خاموش</translation> <translation id="5132942445612118989">همگامسازی گذرواژهها، سابقه و موارد دیگر در همه دستگاهها</translation> <translation id="5140288047769711648">Chrome بهجای شما گذرواژهتان را بهخاطر میسپارد. لازم نیست آن را بهخاطر بسپارید.</translation> +<translation id="5149188072385105201">افزودن گذرواژه…</translation> <translation id="5150492518600715772">ارسال به دستگاه شما</translation> <translation id="5168414296986405587">ساختهشده برای iPadOS</translation> <translation id="5173088371991956744">همگامسازی باید هویتتان را تأیید کند</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index 6548eac5..6a6cb71 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Näytä aina</translation> <translation id="418156467088430727">Näytä offline-versio uudella välilehdellä</translation> <translation id="4181841719683918333">Kielet</translation> +<translation id="4187450337729239226">Liitä ja hae</translation> <translation id="4223967053752765281">Organisaatiosi on laittanut sisäänkirjautumisen pois päältä. Voit edelleen nähdä kirjanmerkit, historian, salasanat ja muut asetukset tällä laitteella. Jos teet muutoksia, niitä ei synkronoida tilillesi.</translation> <translation id="4233831822770018312">Muokkaa lupia</translation> <translation id="4237377247299956313">Valitse <ph name="BEGIN_BOLD" />Oletusselainsovellus<ph name="END_BOLD" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index ccd7c7b..67ad158 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">હંમેશા બતાવો</translation> <translation id="418156467088430727">ઑફલાઇન વર્ઝન નવા ટૅબમાં જુઓ</translation> <translation id="4181841719683918333">ભાષાઓ</translation> +<translation id="4187450337729239226">પેસ્ટ કરો અને શોધો</translation> <translation id="4223967053752765281">તમારી સંસ્થાએ સાઇન ઇન કરવાનું બંધ કર્યું છે. તમે હજુ પણ આ ડિવાઇસ પરના તમારા બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને અન્ય સેટિંગ જોઈ શકો છો. જો તમે ફેરફારો કરશો, તો તે તમારા એકાઉન્ટ સાથે સિંક કરવામાં આવશે નહીં.</translation> <translation id="4233831822770018312">ફેરફાર કરવાની પરવાનગીઓ</translation> <translation id="4237377247299956313"><ph name="BEGIN_BOLD" />ડિફૉલ્ટ બ્રાઉઝર ઍપ<ph name="END_BOLD" /> પર ટૅપ કરો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index 948a01c..1ff5253 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">बंद है</translation> <translation id="5132942445612118989">सभी डिवाइस पर अपने पासवर्ड, इतिहास और दूसरी कई चीज़ें सिंक करें</translation> <translation id="5140288047769711648">Chrome आपके लिए इस पासवर्ड को याद रखेगा. आपको इसे याद नहीं रखना होगा.</translation> +<translation id="5149188072385105201">पासवर्ड जोड़ें...</translation> <translation id="5150492518600715772">अपने डिवाइस पर भेजें</translation> <translation id="5168414296986405587">iPadOS के लिए बनाया गया</translation> <translation id="5173088371991956744">सिंक को आपकी पहचान की पुष्टि करनी है</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 2238cd4..8ffb725 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Միշտ ցույց տալ</translation> <translation id="418156467088430727">Դիտել անցանց տարբերակը նոր ներդիրում</translation> <translation id="4181841719683918333">Լեզուներ</translation> +<translation id="4187450337729239226">Տեղադրել և որոնել</translation> <translation id="4223967053752765281">Ձեր կազմակերպությունն անջատել է դիտարկիչում մուտք գործելու հնարավորությունը։ Դուք նախկինի պես կարող եք տեսնել ձեր էջանիշները, պատմությունը, գաղտնաբառերն ու մյուս կարգավորումները այս սարքում։ Սակայն ձեր կատարած փոփոխությունները չեն համաժամացվի հաշվի հետ։</translation> <translation id="4233831822770018312">Փոփոխել թույլտվությունները</translation> <translation id="4237377247299956313">Հպեք <ph name="BEGIN_BOLD" />Դիտարկիչի կանխադրված հավելված<ph name="END_BOLD" />։</translation> @@ -495,6 +496,7 @@ <translation id="5118764316110575523">Անջատված է</translation> <translation id="5132942445612118989">Համաժամացրեք ձեր գաղտնաբառերը, պատմությունն ու մյուս կարգավորումները ձեր բոլոր սարքերում</translation> <translation id="5140288047769711648">Chrome-ը կպահի այս գաղտնաբառը ձեզ համար։ Կարիք չկա այն հիշելու։</translation> +<translation id="5149188072385105201">Ավելացնել գաղտնաբառ…</translation> <translation id="5150492518600715772">Ուղարկել իմ սարքին</translation> <translation id="5168414296986405587">Ստեղծված է iPadOS-ի համար</translation> <translation id="5173088371991956744">Համաժամացման համար անհրաժեշտ է հաստատել ձեր ինքնությունը</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index a20a77a8..66e4ab1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">להציג תמיד</translation> <translation id="418156467088430727">הצגת גרסה אופליין בכרטיסייה חדשה</translation> <translation id="4181841719683918333">שפות</translation> +<translation id="4187450337729239226">הדבקה וחיפוש</translation> <translation id="4223967053752765281">הכניסה הושבתה על ידי הארגון שלך. יש לך עדיין אפשרות לראות את הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות במכשיר הזה. שינויים שיתבצעו על ידך לא יסונכרנו בחשבון שלך.</translation> <translation id="4233831822770018312">עריכת ההרשאות</translation> <translation id="4237377247299956313">מקישים על <ph name="BEGIN_BOLD" />אפליקציית הדפדפן שמוגדרת כברירת מחדל<ph name="END_BOLD" />.</translation> @@ -440,6 +441,7 @@ <translation id="473775607612524610">עדכון</translation> <translation id="4747097190499141774">הצפנה באמצעות ביטוי סיסמה לא כוללת אמצעי תשלום וכתובות מ-Google Pay. רק מי שיודע את ביטוי הסיסמה שלך יכול לקרוא את הנתונים המוצפנים. ביטוי הסיסמה לא נשלח אל Google והיא אינה מאחסנת אותו. אם שוכחים את ביטוי הסיסמה או רוצים לשנות את ההגדרה הזו, צריך לאפס את הסנכרון. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation> <translation id="4751645464639803239">כרטיסיית מצב אנונימי חדשה</translation> +<translation id="4766112107778026136">Discover והפיד 'במעקב'</translation> <translation id="4775879719735953715">דפדפן ברירת המחדל</translation> <translation id="4778644898150334464">שימוש בסיסמה אחרת</translation> <translation id="478808905805139173">לפתוח במצב פרטי?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index a0cf50b8..0ac04fac 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">ყოველთვის ჩვენება</translation> <translation id="418156467088430727">ხაზგარეშე ვერსიის ახალ ჩანართში ნახვა</translation> <translation id="4181841719683918333">ენები</translation> +<translation id="4187450337729239226">ჩასმა და ძიება</translation> <translation id="4223967053752765281">თქვენმა ორგანიზაციამ გამორთო სისტემაში შესვლა. თქვენ მაინც შეგიძლიათ საკუთარი სანიშნეების, ისტორიის, პაროლების და სხვა პარამეტრების ამ მოწყობილობაზე სრულად ნახვა. თუ რამეს შეცვლით, ცვლილებები არ სინქრონიზდება თქვენს ანგარიშთან.</translation> <translation id="4233831822770018312">ნებართვების რედაქტირება</translation> <translation id="4237377247299956313">შეეხეთ <ph name="BEGIN_BOLD" />ბრაუზერის ნაგულისხმევ აპს<ph name="END_BOLD" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index ff831882..ef3e773 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Әрқашан көрсету</translation> <translation id="418156467088430727">Жаңа қойындының офлайн нұсқасын көру</translation> <translation id="4181841719683918333">Тілдер</translation> +<translation id="4187450337729239226">Қою және іздеу</translation> <translation id="4223967053752765281">Ұйымыңыз аккаунтқа кіруді өшірді. Осы құрылғыдағы барлық бетбелгіні, тарихты, құпия сөзді және басқа да параметрлерді көре аласыз. Егер өзгерістер енгізсеңіз, олар аккаунтыңызбен синхрондалмайды.</translation> <translation id="4233831822770018312">Өзгерту рұқсаттары</translation> <translation id="4237377247299956313"><ph name="BEGIN_BOLD" />Әдепкі браузер қолданбасы<ph name="END_BOLD" /> түймесін түртіңіз.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index 54ddabd..978a00c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">បិទ</translation> <translation id="5132942445612118989">ធ្វើសមកាលកម្មពាក្យសម្ងាត់ ប្រវត្តិ និងអ្វីៗជាច្រើនទៀតនៅលើឧបករណ៍ទាំងអស់របស់អ្នក</translation> <translation id="5140288047769711648">Chrome នឹងចងចាំពាក្យសម្ងាត់នេះសម្រាប់អ្នក។ អ្នកមិនចាំបាច់ចងចាំពាក្យសម្ងាត់នេះទេ។</translation> +<translation id="5149188072385105201">បញ្ចូលពាក្យសម្ងាត់...</translation> <translation id="5150492518600715772">ផ្ញើទៅឧបករណ៍របស់អ្នក</translation> <translation id="5168414296986405587">បានបង្កើតឡើងសម្រាប់ iPadOS</translation> <translation id="5173088371991956744">សមកាលកម្មត្រូវការផ្ទៀងផ្ទាត់ថាជាអ្នក</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index e7fad2b5..c5e600d1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Ар дайым көрүнсүн</translation> <translation id="418156467088430727">Оффлайн версиясын жаңы өтмөктөн көрүү</translation> <translation id="4181841719683918333">Тилдер</translation> +<translation id="4187450337729239226">Чаптоо жана издөө</translation> <translation id="4223967053752765281">Уюмуңуз кирүү аракетин өчүрүп койду. Ушул түзмөгүңүздө кыстармаларды, таржымалды, сырсөздөрдү жана башка жөндөөлөрүңүздү дагы деле көрүп турасыз. Эгер өзгөртүүлөрдү киргизсеңиз, алар аккаунтуңузга шайкештирилбейт.</translation> <translation id="4233831822770018312">Уруксаттарды түзөтүү</translation> <translation id="4237377247299956313"><ph name="BEGIN_BOLD" />Демейки серепчи колдонмосун<ph name="END_BOLD" /> басыңыз</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index ab409ea..e313937 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">ഓഫാണ്</translation> <translation id="5132942445612118989">നിങ്ങളുടെ പാസ്വേഡുകളും ചരിത്രവും മറ്റും എല്ലാ ഉപകരണങ്ങളിലും സമന്വയിപ്പിക്കുക</translation> <translation id="5140288047769711648">നിങ്ങൾക്കായി Chrome ഈ പാസ്വേഡ് ഓർത്തുവെയ്ക്കും. നിങ്ങളത് ഓർക്കേണ്ടതില്ല.</translation> +<translation id="5149188072385105201">പാസ്വേഡ് ചേർക്കുക...</translation> <translation id="5150492518600715772">നിങ്ങളുടെ ഉപകരണത്തിലേക്ക് അയയ്ക്കുക</translation> <translation id="5168414296986405587">iPadOS-നായി സൃഷ്ടിച്ചിരിക്കുന്നത്</translation> <translation id="5173088371991956744">സമന്വയത്തിന് ഇത് നിങ്ങൾ തന്നെയാണെന്ന് പരിശോധിച്ചുറപ്പിക്കേണ്ടതുണ്ട്</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index 38f17112..516f3ea 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">အမြဲပြရန်</translation> <translation id="418156467088430727">အော့ဖ်လိုင်းဗားရှင်းကို တဘ်အသစ်တွင် ကြည့်ရန်</translation> <translation id="4181841719683918333">ဘာသာစကားများ</translation> +<translation id="4187450337729239226">ကူးထည့်ပြီး ရှာရန်</translation> <translation id="4223967053752765281">လက်မှတ်ထိုးဝင်ခြင်းကို သင့်အဖွဲ့အစည်းက ပိတ်ထားသည်။ ဤစက်ပေါ်တွင် သင့်လိပ်စာ၊ မှတ်တမ်း၊ စကားဝှက်နှင့် အခြားဆက်တင်များကို ကြည့်နိုင်ပါသေးသည်။ အပြောင်းအလဲများ ပြုလုပ်ပါက ၎င်းတို့ကို သင်၏အကောင့်နှင့် စင့်ခ်လုပ်မည်မဟုတ်ပါ။</translation> <translation id="4233831822770018312">ခွင့်ပြုချက်များ ပြင်ဆင်ခြင်း</translation> <translation id="4237377247299956313"><ph name="BEGIN_BOLD" />မူရင်း ဘရောင်ဇာအက်ပ်<ph name="END_BOLD" /> ကို တို့ပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index 1217f31..92dfc790 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">निष्क्रिय छ</translation> <translation id="5132942445612118989">सबै यन्त्रहरूमा आफ्ना पासवर्ड, इतिहास र थप कुरा सिंक गर्नुहोस्</translation> <translation id="5140288047769711648">Chrome ले तपाईंका लागि यो पासवर्ड याद राख्ने छ। तपाईंले आफ्नो पासवर्ड सम्झिराख्नु पर्दैन।</translation> +<translation id="5149188072385105201">पासवर्ड सेभ गर्नुहोस्...</translation> <translation id="5150492518600715772">आफ्ना यन्त्रमा पठाउनुहोस्</translation> <translation id="5168414296986405587">iPadOS का लागि बनाइएको</translation> <translation id="5173088371991956744">"सिंक" ले तपाईंको पहिचान पुष्टि गर्नु पर्ने हुन्छ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 969c9a8..942059e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Uit</translation> <translation id="5132942445612118989">Je wachtwoorden, geschiedenis en meer synchroniseren op al je apparaten</translation> <translation id="5140288047769711648">Chrome onthoudt dit wachtwoord voor je. Je hoeft het niet zelf te onthouden.</translation> +<translation id="5149188072385105201">Wachtwoord toevoegen...</translation> <translation id="5150492518600715772">Verzenden naar je apparaat</translation> <translation id="5168414296986405587">Gebouwd voor iPadOS</translation> <translation id="5173088371991956744">Synchronisatie moet bevestigen dat jij het bent</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index e37a7d3d..e84ac56af8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Av</translation> <translation id="5132942445612118989">Synkroniser passordene dine, loggen din med mer på alle enheter</translation> <translation id="5140288047769711648">Chrome husker dette passordet for deg. Du trenger ikke å huske det selv.</translation> +<translation id="5149188072385105201">Legg til et passord…</translation> <translation id="5150492518600715772">Send til enheten din</translation> <translation id="5168414296986405587">Laget for iPadOS</translation> <translation id="5173088371991956744">Synkronisering må bekrefte at det er deg</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 66ed91c..efd71ce 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Desativado</translation> <translation id="5132942445612118989">Sincronize suas senhas, seu histórico e muito mais em todos os dispositivos</translation> <translation id="5140288047769711648">Esta senha ficará salva no Chrome. Você não precisa memorizá-la.</translation> +<translation id="5149188072385105201">Adicionar senha…</translation> <translation id="5150492518600715772">Enviar para seu dispositivo</translation> <translation id="5168414296986405587">Desenvolvido para iPadOS</translation> <translation id="5173088371991956744">A sincronização precisa confirmar sua identidade</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 852b32a..df6244b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Показывать всегда</translation> <translation id="418156467088430727">Открыть офлайн-версию в новой вкладке</translation> <translation id="4181841719683918333">Языки</translation> +<translation id="4187450337729239226">Вставить из буфера и найти</translation> <translation id="4223967053752765281">В вашей организации вход в браузере отключен. На этом устройстве по-прежнему доступны закладки, история, пароли и другие настройки. Однако изменения не сохраняются в вашем аккаунте.</translation> <translation id="4233831822770018312">Изменение разрешений</translation> <translation id="4237377247299956313">Нажмите <ph name="BEGIN_BOLD" />Браузер по умолчанию<ph name="END_BOLD" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb index 8845a891..25d8b21 100644 --- a/ios/chrome/app/strings/resources/ios_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">සැමවිට පෙන්වන්න</translation> <translation id="418156467088430727">අලුත් ටැබයේ නොබැඳි අනුවාදය බලන්න</translation> <translation id="4181841719683918333">භාෂා</translation> +<translation id="4187450337729239226">අලවා සොයන්න</translation> <translation id="4223967053752765281">ඔබගේ සංවිධානය පිරීම ක්රියාවිරහිත කර දැමීය. ඔබට තවම ඔබගේ පිටුසන්, ඉතිහාසය, මුරපද සහ වෙනත් සැකසීම් මෙම උපාංගයෙහි බැලිය හැකිය. ඔබ වෙනස් කිරීම් සිදු කළහොත්, ඒවා ඔබගේ ගිණුමට සමමුහුර්ත නොවනු ඇත.</translation> <translation id="4233831822770018312">අවසර සංස්කරණය කරන්න</translation> <translation id="4237377247299956313"><ph name="BEGIN_BOLD" />පෙරනිමි බ්රව්සර යෙදුම<ph name="END_BOLD" /> තට්ටු කරන්න</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index a21db77..96060c1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Vypnuté</translation> <translation id="5132942445612118989">Synchronizujte svoje heslá, históriu a ďalší obsah vo všetkých zariadeniach</translation> <translation id="5140288047769711648">Chrome si toto heslo zapamätá za vás. Nemusíte sa ho učiť naspamäť.</translation> +<translation id="5149188072385105201">Pridať heslo…</translation> <translation id="5150492518600715772">Odoslať do vášho zariadenia</translation> <translation id="5168414296986405587">Vytvorené pre iPadOS</translation> <translation id="5173088371991956744">Synchronizácia potrebuje overiť vašu totožnosť</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb index d107503..e4a66a4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Trego gjithmonë</translation> <translation id="418156467088430727">Shiko versionin jashtë linje në një skedë të re</translation> <translation id="4181841719683918333">Gjuhët</translation> +<translation id="4187450337729239226">Ngjit dhe kërko</translation> <translation id="4223967053752765281">Organizata jote ka e çaktivizuar identifikimin. Mund të shikosh ende faqeshënuesit, historikun, fjalëkalimet dhe cilësime të tjera në këtë pajisje. Nëse bën ndryshime, ato nuk do të sinkronizohen me llogarinë tënde.</translation> <translation id="4233831822770018312">Modifiko lejet</translation> <translation id="4237377247299956313">Trokit <ph name="BEGIN_BOLD" />Aplikacionin e parazgjedhur të shfletuesit<ph name="END_BOLD" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb index c50161e..aebda83 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Isključeno</translation> <translation id="5132942445612118989">Sinhronizujte lozinke, istoriju i drugi sadržaj na svim uređajima</translation> <translation id="5140288047769711648">Chrome će zapamtiti ovu lozinku umesto vas. Ne morate vi da je pamtite.</translation> +<translation id="5149188072385105201">Dodajte lozinku...</translation> <translation id="5150492518600715772">Pošaljite na uređaj</translation> <translation id="5168414296986405587">Napravljeno za iPadOS</translation> <translation id="5173088371991956744">Sinhronizacija mora da potvrdi da ste to vi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index 0bef3e7..b44475fc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Искључено</translation> <translation id="5132942445612118989">Синхронизујте лозинке, историју и други садржај на свим уређајима</translation> <translation id="5140288047769711648">Chrome ће запамтити ову лозинку уместо вас. Не морате ви да је памтите.</translation> +<translation id="5149188072385105201">Додајте лозинку...</translation> <translation id="5150492518600715772">Пошаљите на уређај</translation> <translation id="5168414296986405587">Направљено за iPadOS</translation> <translation id="5173088371991956744">Синхронизација мора да потврди да сте то ви</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 54d9ccf..2a4dc63 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -378,6 +378,7 @@ <translation id="4172051516777682613">Onyesha kila mara</translation> <translation id="418156467088430727">Tazama Toleo la Nje ya Mtandao ktk Kichupo Kipya</translation> <translation id="4181841719683918333">Lugha</translation> +<translation id="4187450337729239226">Bandika na Utafute</translation> <translation id="4223967053752765281">Shirika lako limezima kipengele cha uingiaji katika akaunti. Bado unaweza kuona alamisho, historia, manenosiri na mipangilio mingine kwenye kifaa hiki. Iwapo utafanya mabadiliko, hayatasawazishwa kwenye akaunti yako.</translation> <translation id="4233831822770018312">Badilisha ruhusa</translation> <translation id="4237377247299956313">Gusa <ph name="BEGIN_BOLD" />Programu ya Kivinjari Chaguomsingi<ph name="END_BOLD" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index faa5e51..aee7be1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">ఆఫ్ చేయబడి ఉంది</translation> <translation id="5132942445612118989">అన్ని పరికరాల్లో మీ పాస్వర్డ్లు, హిస్టరీ, మరిన్నింటిని సింక్ చేయండి</translation> <translation id="5140288047769711648">Chrome మీకు సంబంధించి ఈ పాస్వర్డ్ను గుర్తుంచుకుంటుంది. మీరు గుర్తుంచుకోనవసరం లేదు.</translation> +<translation id="5149188072385105201">పాస్వర్డ్ను జోడించండి...</translation> <translation id="5150492518600715772">మీ పరికరానికి పంపండి</translation> <translation id="5168414296986405587">iPadOS కోసం బిల్డ్ చేయబడింది</translation> <translation id="5173088371991956744">ఇది మీరేనని సింక్ వెరిఫై చేయాలి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 885a207..2eba188 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Вимк.</translation> <translation id="5132942445612118989">Синхронізуйте свої паролі, історію тощо на всіх пристроях</translation> <translation id="5140288047769711648">Chrome збереже цей пароль. Вам не потрібно його запам’ятовувати.</translation> +<translation id="5149188072385105201">Додати пароль…</translation> <translation id="5150492518600715772">Надіслати на ваш пристрій</translation> <translation id="5168414296986405587">Створено для iPadOS</translation> <translation id="5173088371991956744">Для синхронізації потрібно підтвердити вашу особу</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 12b1d51..5825532 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">關閉</translation> <translation id="5132942445612118989">同步處理你所有裝置上的密碼、歷史記錄和其他設定</translation> <translation id="5140288047769711648">Chrome 會為你儲存這組密碼,因此你不必記住密碼。</translation> +<translation id="5149188072385105201">新增密碼…</translation> <translation id="5150492518600715772">傳送到你的裝置</translation> <translation id="5168414296986405587">專為 iPadOS 打造</translation> <translation id="5173088371991956744">同步功能需要驗證你的身分</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb index 6e288b97..2624242 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -496,6 +496,7 @@ <translation id="5118764316110575523">Valiwe</translation> <translation id="5132942445612118989">Vumelanisa amaphasiwedi akho, umlando nokuningi kuwo wonke amadivayisi</translation> <translation id="5140288047769711648">I-Chrome izokukhumbulela le phasiwedi. Awudingi ukuyikhumbula.</translation> +<translation id="5149188072385105201">Engeza iphasiwedi...</translation> <translation id="5150492518600715772">Thumela kudivayisi yakho</translation> <translation id="5168414296986405587">Yakhelwe i-iPadOS</translation> <translation id="5173088371991956744">Ukuvumelanisa Kudinga Ukuqinisekisa Ukuthi Nguwe</translation>
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 04dfcc42..b3858b9f 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -352,45 +352,67 @@ #if BUILDFLAG(IOS_BACKGROUND_MODE_ENABLED) // Feed Background Refresh Feature Params -const FeatureEntry::FeatureParam kOneHourIntervalOnce[] = { +const FeatureEntry::FeatureParam kOneHourIntervalOneHourMaxAgeOnce[] = { {kEnableServerDrivenBackgroundRefreshSchedule, "false"}, {kEnableRecurringBackgroundRefreshSchedule, "false"}, + {kMaxCacheAgeInSeconds, /*60*60*/ "3600"}, {kBackgroundRefreshIntervalInSeconds, /* 60*60= */ "3600"}}; -const FeatureEntry::FeatureParam kFourHourIntervalOnce[] = { +const FeatureEntry::FeatureParam kFourHourIntervalSixHourMaxAgeOnce[] = { {kEnableServerDrivenBackgroundRefreshSchedule, "false"}, {kEnableRecurringBackgroundRefreshSchedule, "false"}, + {kMaxCacheAgeInSeconds, /*6*60*60*/ "21600"}, {kBackgroundRefreshIntervalInSeconds, /* 4*60*60= */ "14400"}}; -const FeatureEntry::FeatureParam kOneHourIntervalRecurring[] = { +const FeatureEntry::FeatureParam kOneHourIntervalOneHourMaxAgeRecurring[] = { {kEnableServerDrivenBackgroundRefreshSchedule, "false"}, {kEnableRecurringBackgroundRefreshSchedule, "true"}, + {kMaxCacheAgeInSeconds, /*60*60*/ "3600"}, {kBackgroundRefreshIntervalInSeconds, /* 60*60= */ "3600"}}; -const FeatureEntry::FeatureParam kFourHourIntervalRecurring[] = { +const FeatureEntry::FeatureParam kFourHourIntervalSixHourMaxAgeRecurring[] = { {kEnableServerDrivenBackgroundRefreshSchedule, "false"}, {kEnableRecurringBackgroundRefreshSchedule, "true"}, + {kMaxCacheAgeInSeconds, /*6*60*60*/ "21600"}, {kBackgroundRefreshIntervalInSeconds, /* 4*60*60= */ "14400"}}; -const FeatureEntry::FeatureParam kServerDrivenOnce[] = { +const FeatureEntry::FeatureParam kServerDrivenOneHourMaxAgeOnce[] = { {kEnableServerDrivenBackgroundRefreshSchedule, "true"}, {kEnableRecurringBackgroundRefreshSchedule, "false"}, - {kBackgroundRefreshIntervalInSeconds, /* 60*60= */ "3600"}}; -const FeatureEntry::FeatureParam kServerDrivenRecurring[] = { + {kMaxCacheAgeInSeconds, /*60*60*/ "3600"}, + {kBackgroundRefreshIntervalInSeconds, "0"}}; +const FeatureEntry::FeatureParam kServerDrivenOneHourMaxAgeRecurring[] = { {kEnableServerDrivenBackgroundRefreshSchedule, "true"}, {kEnableRecurringBackgroundRefreshSchedule, "true"}, - {kBackgroundRefreshIntervalInSeconds, /* 60*60= */ "3600"}}; + {kMaxCacheAgeInSeconds, /*60*60*/ "3600"}, + {kBackgroundRefreshIntervalInSeconds, "0"}}; +const FeatureEntry::FeatureParam kServerDrivenSixHourMaxAgeOnce[] = { + {kEnableServerDrivenBackgroundRefreshSchedule, "true"}, + {kEnableRecurringBackgroundRefreshSchedule, "false"}, + {kMaxCacheAgeInSeconds, /*6*60*60*/ "21600"}, + {kBackgroundRefreshIntervalInSeconds, "0"}}; +const FeatureEntry::FeatureParam kServerDrivenSixHourMaxAgeRecurring[] = { + {kEnableServerDrivenBackgroundRefreshSchedule, "true"}, + {kEnableRecurringBackgroundRefreshSchedule, "true"}, + {kMaxCacheAgeInSeconds, /*6*60*60*/ "21600"}, + {kBackgroundRefreshIntervalInSeconds, "0"}}; // Feed Background Refresh Feature Variations const FeatureEntry::FeatureVariation kFeedBackgroundRefreshVariations[] = { - {"1hr Interval Once", kOneHourIntervalOnce, std::size(kOneHourIntervalOnce), - nullptr}, - {"4hr Interval Once", kFourHourIntervalOnce, - std::size(kFourHourIntervalOnce), nullptr}, - {"1hr Interval Recurring", kOneHourIntervalRecurring, - std::size(kOneHourIntervalRecurring), nullptr}, - {"4hr Interval Recurring", kFourHourIntervalRecurring, - std::size(kFourHourIntervalRecurring), nullptr}, - {"Server Driven Once", kServerDrivenOnce, std::size(kServerDrivenOnce), - nullptr}, - {"Server Driven Recurring", kServerDrivenRecurring, - std::size(kServerDrivenRecurring), nullptr}, + {"1hr Interval 1hr Max Age Once", kOneHourIntervalOneHourMaxAgeOnce, + std::size(kOneHourIntervalOneHourMaxAgeOnce), nullptr}, + {"4hr Interval 6hr Max Age Once", kFourHourIntervalSixHourMaxAgeOnce, + std::size(kFourHourIntervalSixHourMaxAgeOnce), nullptr}, + {"1hr Interval 1hr Max Age Recurring", + kOneHourIntervalOneHourMaxAgeRecurring, + std::size(kOneHourIntervalOneHourMaxAgeRecurring), nullptr}, + {"4hr Interval 6hr Max Age Recurring", + kFourHourIntervalSixHourMaxAgeRecurring, + std::size(kFourHourIntervalSixHourMaxAgeRecurring), nullptr}, + {"Server Driven 1hr Max Age Once", kServerDrivenOneHourMaxAgeOnce, + std::size(kServerDrivenOneHourMaxAgeOnce), nullptr}, + {"Server Driven 1hr Max Age Recurring", kServerDrivenOneHourMaxAgeRecurring, + std::size(kServerDrivenOneHourMaxAgeRecurring), nullptr}, + {"Server Driven 6hr Max Age Once", kServerDrivenSixHourMaxAgeOnce, + std::size(kServerDrivenSixHourMaxAgeOnce), nullptr}, + {"Server Driven 6hr Max Age Recurring", kServerDrivenSixHourMaxAgeRecurring, + std::size(kServerDrivenSixHourMaxAgeRecurring), nullptr}, }; #endif // BUILDFLAG(IOS_BACKGROUND_MODE_ENABLED)
diff --git a/ios/chrome/browser/ntp/features.h b/ios/chrome/browser/ntp/features.h index 5eebfa9..de5949e 100644 --- a/ios/chrome/browser/ntp/features.h +++ b/ios/chrome/browser/ntp/features.h
@@ -5,6 +5,8 @@ #ifndef IOS_CHROME_BROWSER_NTP_FEATURES_H_ #define IOS_CHROME_BROWSER_NTP_FEATURES_H_ +#import <Foundation/Foundation.h> + #include "base/feature_list.h" // Feature flag to enable NTP UI pending loader blocker. @@ -30,6 +32,10 @@ // background refresh schedule. extern const char kEnableRecurringBackgroundRefreshSchedule[]; +// Feature param under `kEnableFeedBackgroundRefresh` for the max age that the +// cache is still considered fresh. +extern const char kMaxCacheAgeInSeconds[]; + // Feature param under `kEnableFeedBackgroundRefresh` for the background refresh // interval in seconds. extern const char kBackgroundRefreshIntervalInSeconds[]; @@ -52,6 +58,15 @@ // DCHECKs on the availability of `base::FeatureList`. void SaveFeedBackgroundRefreshEnabledForNextColdStart(); +// Sets the last background refresh timestamp to be displayed in Experimental +// Settings in the Settings App. This is not available in stable. +void SetFeedLastBackgroundRefreshTimestamp(NSDate* timestamp); + +// Returns the override value from Experimental Settings in the Settings App. If +// enabled, all values in Experimental Settings will override all corresponding +// defaults. +bool IsFeedOverrideDefaultsEnabled(); + // Returns true if the user should receive a local notification when a feed // background refresh is completed. Background refresh completion notifications // are only enabled by Experimental Settings. @@ -67,14 +82,14 @@ // background refresh. bool IsRecurringBackgroundRefreshScheduleEnabled(); +// Returns the max age that the cache is still considered fresh. In other words, +// the feed freshness threshold. +double GetFeedMaxCacheAgeInSeconds(); + // The earliest interval to refresh if server value is not used. This value is // an input into the DiscoverFeedService. double GetBackgroundRefreshIntervalInSeconds(); -// If greater than zero, this value should be used to completely override the -// earliest begin date provided by the DiscoverFeedService. -double GetBackgroundRefreshIntervalOverrideInSeconds(); - // Returns the background refresh max age in seconds. double GetBackgroundRefreshMaxAgeInSeconds();
diff --git a/ios/chrome/browser/ntp/features.mm b/ios/chrome/browser/ntp/features.mm index ea6541b..0a2c0ed2 100644 --- a/ios/chrome/browser/ntp/features.mm +++ b/ios/chrome/browser/ntp/features.mm
@@ -39,6 +39,7 @@ "EnableServerDrivenBackgroundRefreshSchedule"; const char kEnableRecurringBackgroundRefreshSchedule[] = "EnableRecurringBackgroundRefreshSchedule"; +const char kMaxCacheAgeInSeconds[] = "MaxCacheAgeInSeconds"; const char kBackgroundRefreshIntervalInSeconds[] = "BackgroundRefreshIntervalInSeconds"; const char kBackgroundRefreshMaxAgeInSeconds[] = @@ -66,46 +67,78 @@ forKey:kEnableFeedBackgroundRefreshForNextColdStart]; } +void SetFeedLastBackgroundRefreshTimestamp(NSDate* timestamp) { + NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = NSDateFormatterShortStyle; + dateFormatter.timeStyle = NSDateFormatterShortStyle; + dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; + [[NSUserDefaults standardUserDefaults] + setObject:[dateFormatter stringFromDate:timestamp] + forKey:@"FeedLastBackgroundRefreshTimestamp"]; +} + +bool IsFeedOverrideDefaultsEnabled() { + return [[NSUserDefaults standardUserDefaults] + boolForKey:@"FeedOverrideDefaultsEnabled"]; +} + bool IsFeedBackgroundRefreshCompletedNotificationEnabled() { return IsFeedBackgroundRefreshEnabled() && - experimental_flags::IsRefreshCompletedNotificationEnabled(); + [[NSUserDefaults standardUserDefaults] + boolForKey:@"FeedBackgroundRefreshNotificationEnabled"]; } bool IsFollowingFeedBackgroundRefreshEnabled() { - if (experimental_flags::IsForceBackgroundRefreshForFollowingFeedEnabled()) { - return true; + if (IsFeedOverrideDefaultsEnabled()) { + return [[NSUserDefaults standardUserDefaults] + boolForKey:@"FollowingFeedBackgroundRefreshEnabled"]; } return base::GetFieldTrialParamByFeatureAsBool( kEnableFeedBackgroundRefresh, kEnableFollowingFeedBackgroundRefresh, - /*default=*/false); + /*default=*/true); } bool IsServerDrivenBackgroundRefreshScheduleEnabled() { + if (IsFeedOverrideDefaultsEnabled()) { + return [[NSUserDefaults standardUserDefaults] + boolForKey:@"FeedServerDrivenBackgroundRefreshScheduleEnabled"]; + } return base::GetFieldTrialParamByFeatureAsBool( kEnableFeedBackgroundRefresh, kEnableServerDrivenBackgroundRefreshSchedule, /*default=*/false); } bool IsRecurringBackgroundRefreshScheduleEnabled() { + if (IsFeedOverrideDefaultsEnabled()) { + return [[NSUserDefaults standardUserDefaults] + boolForKey:@"FeedRecurringBackgroundRefreshScheduleEnabled"]; + } return base::GetFieldTrialParamByFeatureAsBool( kEnableFeedBackgroundRefresh, kEnableRecurringBackgroundRefreshSchedule, /*default=*/false); } +double GetFeedMaxCacheAgeInSeconds() { + if (IsFeedOverrideDefaultsEnabled()) { + return [[NSUserDefaults standardUserDefaults] + doubleForKey:@"FeedMaxCacheAgeInSeconds"]; + } + return base::GetFieldTrialParamByFeatureAsDouble(kEnableFeedBackgroundRefresh, + kMaxCacheAgeInSeconds, + /*default=*/60 * 60); +} + double GetBackgroundRefreshIntervalInSeconds() { + if (IsFeedOverrideDefaultsEnabled()) { + return [[NSUserDefaults standardUserDefaults] + doubleForKey:@"FeedBackgroundRefreshIntervalInSeconds"]; + } return base::GetFieldTrialParamByFeatureAsDouble( kEnableFeedBackgroundRefresh, kBackgroundRefreshIntervalInSeconds, /*default=*/60 * 60); } -double GetBackgroundRefreshIntervalOverrideInSeconds() { - return experimental_flags::GetBackgroundRefreshIntervalOverrideInSeconds(); -} - double GetBackgroundRefreshMaxAgeInSeconds() { - if (experimental_flags::GetBackgroundRefreshMaxAgeInSeconds() > 0) { - return experimental_flags::GetBackgroundRefreshMaxAgeInSeconds(); - } return base::GetFieldTrialParamByFeatureAsDouble( kEnableFeedBackgroundRefresh, kBackgroundRefreshMaxAgeInSeconds, /*default=*/0);
diff --git a/ios/chrome/browser/omaha/omaha_service.h b/ios/chrome/browser/omaha/omaha_service.h index 725c4f3..46c3890 100644 --- a/ios/chrome/browser/omaha/omaha_service.h +++ b/ios/chrome/browser/omaha/omaha_service.h
@@ -13,12 +13,9 @@ #include "base/no_destructor.h" #include "base/time/time.h" #include "base/timer/timer.h" +#include "base/values.h" #include "base/version.h" -namespace base { -class DictionaryValue; -} - namespace network { class SharedURLLoaderFactory; class PendingSharedURLLoaderFactory; @@ -59,7 +56,7 @@ // Returns debug information about the omaha service. static void GetDebugInformation( - base::OnceCallback<void(base::DictionaryValue*)> callback); + base::OnceCallback<void(base::Value::Dict)> callback); private: // For tests: @@ -155,7 +152,7 @@ // Computes debugging information and fill |result|. void GetDebugInformationOnIOThread( - base::OnceCallback<void(base::DictionaryValue*)> callback); + base::OnceCallback<void(base::Value::Dict)> callback); // Returns whether the next ping to send must a an install/update ping. If // |true|, the next ping must use |GetInstallRetryRequestId| as identifier
diff --git a/ios/chrome/browser/omaha/omaha_service.mm b/ios/chrome/browser/omaha/omaha_service.mm index d303355..304d498 100644 --- a/ios/chrome/browser/omaha/omaha_service.mm +++ b/ios/chrome/browser/omaha/omaha_service.mm
@@ -486,7 +486,7 @@ // static void OmahaService::GetDebugInformation( - base::OnceCallback<void(base::DictionaryValue*)> callback) { + base::OnceCallback<void(base::Value::Dict)> callback) { if (OmahaService::IsEnabled()) { OmahaService* service = GetInstance(); web::GetIOThreadTaskRunner({})->PostTask( @@ -495,11 +495,9 @@ base::Unretained(service), std::move(callback))); } else { - auto result = std::make_unique<base::DictionaryValue>(); // Invoke the callback with an empty response. web::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), base::Owned(result.release()))); + FROM_HERE, base::BindOnce(std::move(callback), base::Value::Dict())); } } @@ -788,33 +786,29 @@ } void OmahaService::GetDebugInformationOnIOThread( - base::OnceCallback<void(base::DictionaryValue*)> callback) { - auto result = std::make_unique<base::DictionaryValue>(); + base::OnceCallback<void(base::Value::Dict)> callback) { + base::Value::Dict result; - result->SetString("message", GetCurrentPingContent()); - result->SetString("last_sent_time", - base::TimeFormatShortDateAndTime(last_sent_time_)); - result->SetString("next_tries_time", - base::TimeFormatShortDateAndTime(next_tries_time_)); - result->SetString("current_ping_time", - base::TimeFormatShortDateAndTime(current_ping_time_)); - result->SetString("last_sent_version", last_sent_version_.GetString()); - result->SetString("number_of_tries", - base::StringPrintf("%d", number_of_tries_)); - result->SetString("timer_running", - base::StringPrintf("%d", timer_.IsRunning())); - result->SetString( - "timer_current_delay", - base::StringPrintf("%llds", timer_.GetCurrentDelay().InSeconds())); - result->SetString("timer_desired_run_time", - base::TimeFormatShortDateAndTime( - base::Time::Now() + - (timer_.desired_run_time() - base::TimeTicks::Now()))); + result.Set("message", GetCurrentPingContent()); + result.Set("last_sent_time", + base::TimeFormatShortDateAndTime(last_sent_time_)); + result.Set("next_tries_time", + base::TimeFormatShortDateAndTime(next_tries_time_)); + result.Set("current_ping_time", + base::TimeFormatShortDateAndTime(current_ping_time_)); + result.Set("last_sent_version", last_sent_version_.GetString()); + result.Set("number_of_tries", base::StringPrintf("%d", number_of_tries_)); + result.Set("timer_running", base::StringPrintf("%d", timer_.IsRunning())); + result.Set("timer_current_delay", + base::StringPrintf("%llds", timer_.GetCurrentDelay().InSeconds())); + result.Set("timer_desired_run_time", + base::TimeFormatShortDateAndTime( + base::Time::Now() + + (timer_.desired_run_time() - base::TimeTicks::Now()))); // Sending the value to the callback. web::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback), base::Owned(result.release()))); + FROM_HERE, base::BindOnce(std::move(callback), std::move(result))); } bool OmahaService::IsNextPingInstallRetry() {
diff --git a/ios/chrome/browser/resources/BUILD.gn b/ios/chrome/browser/resources/BUILD.gn index dc2b2d6..8a804d5 100644 --- a/ios/chrome/browser/resources/BUILD.gn +++ b/ios/chrome/browser/resources/BUILD.gn
@@ -16,6 +16,11 @@ info_plists += [ "Settings.bundle/ExperimentalFlags.plist" ] } +bundle_data("settings_experimental_feed_refresh_plist") { + sources = [ "Settings.bundle/ExperimentalFeedRefresh.plist" ] + outputs = [ "{{bundle_resources_dir}}/Settings.bundle/{{source_file_part}}" ] +} + bundle_data("settings_experimental_synctypeslist_plist") { sources = [ "Settings.bundle/ExperimentalSyncTypesListDisabled.plist" ] outputs = [ "{{bundle_resources_dir}}/Settings.bundle/{{source_file_part}}" ] @@ -24,6 +29,7 @@ bundle_data("settings_resources_experimental_plist") { public_deps = [ ":experimental_info_plist", + ":settings_experimental_feed_refresh_plist", ":settings_experimental_synctypeslist_plist", ] sources = get_target_outputs(":experimental_info_plist")
diff --git a/ios/chrome/browser/resources/Settings.bundle/Experimental.plist b/ios/chrome/browser/resources/Settings.bundle/Experimental.plist index eb303b1..c725de1b 100644 --- a/ios/chrome/browser/resources/Settings.bundle/Experimental.plist +++ b/ios/chrome/browser/resources/Settings.bundle/Experimental.plist
@@ -63,56 +63,12 @@ <false/> </dict> <dict> - <key>Title</key> - <string>Additional Feed Background Refresh Settings</string> <key>Type</key> - <string>PSGroupSpecifier</string> - <key>FooterText</key> - <string>Background Refresh must be enabled in chrome://flags to use these additional settings</string> - </dict> - <dict> - <key>Type</key> - <string>PSToggleSwitchSpecifier</string> + <string>PSChildPaneSpecifier</string> <key>Title</key> - <string>Refresh Completed Notification Enabled</string> - <key>Key</key> - <string>RefreshCompletedNotificationEnabled</string> - <key>DefaultValue</key> - <false/> - </dict> - <dict> - <key>Type</key> - <string>PSToggleSwitchSpecifier</string> - <key>Title</key> - <string>Force Background Refresh for Following Feed</string> - <key>Key</key> - <string>ForceBackgroundRefreshForFollowingFeedEnabled</string> - <key>DefaultValue</key> - <false/> - </dict> - <dict> - <key>Type</key> - <string>PSTextFieldSpecifier</string> - <key>Title</key> - <string>Refresh Interval Override In Seconds</string> - <key>Key</key> - <string>BackgroundRefreshIntervalOverrideInSeconds</string> - <key>DefaultValue</key> - <string></string> - <key>KeyboardType</key> - <string>NumberPad</string> - </dict> - <dict> - <key>Type</key> - <string>PSTextFieldSpecifier</string> - <key>Title</key> - <string>Feed Max Age In Seconds</string> - <key>Key</key> - <string>BackgroundRefreshMaxAgeInSeconds</string> - <key>DefaultValue</key> - <string></string> - <key>KeyboardType</key> - <string>NumberPad</string> + <string>Feed Refresh Settings</string> + <key>File</key> + <string>ExperimentalFeedRefresh</string> </dict> <dict> <key>Type</key>
diff --git a/ios/chrome/browser/resources/Settings.bundle/ExperimentalFeedRefresh.plist b/ios/chrome/browser/resources/Settings.bundle/ExperimentalFeedRefresh.plist new file mode 100644 index 0000000..1c23a8f --- /dev/null +++ b/ios/chrome/browser/resources/Settings.bundle/ExperimentalFeedRefresh.plist
@@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>PreferenceSpecifiers</key> + <array> + <dict> + <key>Type</key> + <string>PSTextFieldSpecifier</string> + <key>Title</key> + <string>Last Background Refresh Timestamp</string> + <key>Key</key> + <string>FeedLastBackgroundRefreshTimestamp</string> + <key>DefaultValue</key> + <string></string> + <key>KeyboardType</key> + <string>Alphabet</string> + </dict> + <dict> + <key>Title</key> + <string>Override</string> + <key>Type</key> + <string>PSGroupSpecifier</string> + <key>FooterText</key> + <string>When enabled, all the settings below override all defaults.</string> + </dict> + <dict> + <key>Type</key> + <string>PSToggleSwitchSpecifier</string> + <key>Title</key> + <string>Override defaults</string> + <key>Key</key> + <string>FeedOverrideDefaultsEnabled</string> + <key>DefaultValue</key> + <false/> + </dict> + <dict> + <key>Title</key> + <string>Foreground Refresh</string> + <key>Type</key> + <string>PSGroupSpecifier</string> + <key>FooterText</key> + <string>Foreground refreshes occur on cold starts and new NTPs. They do not occur on app foregrounding.</string> + </dict> + <dict> + <key>Type</key> + <string>PSTextFieldSpecifier</string> + <key>Title</key> + <string>Max Cache Age In Seconds</string> + <key>Key</key> + <string>FeedMaxCacheAgeInSeconds</string> + <key>DefaultValue</key> + <string></string> + <key>KeyboardType</key> + <string>NumberPad</string> + </dict> + <dict> + <key>Title</key> + <string>Background Refresh</string> + <key>Type</key> + <string>PSGroupSpecifier</string> + <key>FooterText</key> + <string>When server-driven schedule is enabled, background refreshes are scheduled for an absolute time provided by the server. Otherwise, background refreshes are scheduled for the specified interval after app backgrounding.</string> + </dict> + <dict> + <key>Type</key> + <string>PSTextFieldSpecifier</string> + <key>Title</key> + <string>Refresh Interval In Seconds</string> + <key>Key</key> + <string>FeedBackgroundRefreshIntervalInSeconds</string> + <key>DefaultValue</key> + <string></string> + <key>KeyboardType</key> + <string>NumberPad</string> + </dict> + <dict> + <key>Type</key> + <string>PSToggleSwitchSpecifier</string> + <key>Title</key> + <string>Enable Following Feed Background Refresh</string> + <key>Key</key> + <string>FollowingFeedBackgroundRefreshEnabled</string> + <key>DefaultValue</key> + <false/> + </dict> + <dict> + <key>Type</key> + <string>PSToggleSwitchSpecifier</string> + <key>Title</key> + <string>Enable server-driven schedule</string> + <key>Key</key> + <string>FeedServerDrivenBackgroundRefreshScheduleEnabled</string> + <key>DefaultValue</key> + <false/> + </dict> + <dict> + <key>Type</key> + <string>PSToggleSwitchSpecifier</string> + <key>Title</key> + <string>Enable recurring schedule</string> + <key>Key</key> + <string>FeedRecurringBackgroundRefreshScheduleEnabled</string> + <key>DefaultValue</key> + <false/> + </dict> + <dict> + <key>Title</key> + <string>Debug Settings</string> + <key>Type</key> + <string>PSGroupSpecifier</string> + <key>FooterText</key> + <string>This is not available in stable.</string> + </dict> + <dict> + <key>Type</key> + <string>PSToggleSwitchSpecifier</string> + <key>Title</key> + <string>Enable notifications when background refreshes are completed</string> + <key>Key</key> + <string>FeedBackgroundRefreshNotificationEnabled</string> + <key>DefaultValue</key> + <false/> + </dict> + </array> +</dict> +</plist>
diff --git a/ios/chrome/browser/system_flags.h b/ios/chrome/browser/system_flags.h index e7bfbf9..0d33d722 100644 --- a/ios/chrome/browser/system_flags.h +++ b/ios/chrome/browser/system_flags.h
@@ -64,24 +64,6 @@ // TODO(crbug.com/1340154): Remove after launch. bool ShouldAlwaysShowFollowIPH(); -// Returns true if the user should receive a local notification when a -// background refresh is completed. -bool IsRefreshCompletedNotificationEnabled(); - -// Returns true if background refresh should also be used for the Following -// feed. If false, the default value or finch feature flag value should be used. -bool IsForceBackgroundRefreshForFollowingFeedEnabled(); - -// Returns an interval that can be used to set the background refresh earliest -// begin date. Any value greater than zero should be used to override the -// earliest begin date provided by the DiscoverFeedService. -double GetBackgroundRefreshIntervalOverrideInSeconds(); - -// The maximum age a response can be before it is refreshed in the background. -// This check is done when the background task is executed. The default value of -// 0 means the age check is ignored. -double GetBackgroundRefreshMaxAgeInSeconds(); - // Whether memory debugging tools are enabled. bool IsMemoryDebuggingEnabled();
diff --git a/ios/chrome/browser/system_flags.mm b/ios/chrome/browser/system_flags.mm index 507fe494..3723682 100644 --- a/ios/chrome/browser/system_flags.mm +++ b/ios/chrome/browser/system_flags.mm
@@ -37,15 +37,6 @@ const base::Feature kEnableThirdPartyKeyboardWorkaround{ "EnableThirdPartyKeyboardWorkaround", base::FEATURE_ENABLED_BY_DEFAULT}; -NSString* const kRefreshCompletedNotificationEnabled = - @"RefreshCompletedNotificationEnabled"; -NSString* const kForceBackgroundRefreshForFollowingFeedEnabled = - @"ForceBackgroundRefreshForFollowingFeedEnabled"; -NSString* const kBackgroundRefreshIntervalOverrideInSeconds = - @"BackgroundRefreshIntervalOverrideInSeconds"; -NSString* const kBackgroundRefreshMaxAgeInSeconds = - @"BackgroundRefreshMaxAgeInSeconds"; - } // namespace namespace experimental_flags { @@ -101,26 +92,6 @@ [[NSUserDefaults standardUserDefaults] boolForKey:@"AlwaysShowFollowIPH"]; } -bool IsRefreshCompletedNotificationEnabled() { - return [[NSUserDefaults standardUserDefaults] - boolForKey:kRefreshCompletedNotificationEnabled]; -} - -bool IsForceBackgroundRefreshForFollowingFeedEnabled() { - return [[NSUserDefaults standardUserDefaults] - boolForKey:kForceBackgroundRefreshForFollowingFeedEnabled]; -} - -double GetBackgroundRefreshIntervalOverrideInSeconds() { - return [[NSUserDefaults standardUserDefaults] - doubleForKey:kBackgroundRefreshIntervalOverrideInSeconds]; -} - -double GetBackgroundRefreshMaxAgeInSeconds() { - return [[NSUserDefaults standardUserDefaults] - doubleForKey:kBackgroundRefreshMaxAgeInSeconds]; -} - bool IsMemoryDebuggingEnabled() { // Always return true for Chromium builds, but check the user default for // official builds because memory debugging should never be enabled on stable.
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/BUILD.gn index 8872d71..e7e03ec 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/BUILD.gn +++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/BUILD.gn
@@ -17,6 +17,7 @@ ] deps = [ "//components/prefs", + "//components/strings", "//ios/chrome/app/strings", "//ios/chrome/browser", "//ios/chrome/browser/main:public",
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm index 9dbd20b..f21cc39 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm +++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm
@@ -6,6 +6,7 @@ #import "base/strings/sys_string_conversions.h" #import "components/signin/public/base/signin_metrics.h" +#import "components/strings/grit/components_strings.h" #import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_layout_delegate.h" #import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" @@ -112,11 +113,16 @@ self.navigationItem.leftBarButtonItem = leftItem; // Set the skip button in the right bar button item. - UIBarButtonItem* skipButton = [[UIBarButtonItem alloc] - initWithTitle:l10n_util::GetNSString(IDS_IOS_CONSISTENCY_PROMO_SKIP) - style:UIBarButtonItemStylePlain - target:self - action:@selector(skipButtonAction:)]; + NSString* skipButtonTitle = + self.accessPoint == + signin_metrics::AccessPoint::ACCESS_POINT_SEND_TAB_TO_SELF_PROMO + ? l10n_util::GetNSString(IDS_CANCEL) + : l10n_util::GetNSString(IDS_IOS_CONSISTENCY_PROMO_SKIP); + UIBarButtonItem* skipButton = + [[UIBarButtonItem alloc] initWithTitle:skipButtonTitle + style:UIBarButtonItemStylePlain + target:self + action:@selector(skipButtonAction:)]; skipButton.accessibilityIdentifier = kWebSigninSkipButtonAccessibilityIdentifier; self.navigationItem.rightBarButtonItem = skipButton;
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h index fb7e61b..1c3a0ad 100644 --- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h +++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.h
@@ -56,6 +56,8 @@ version_info::Channel GetChannel() const override; PersonalDataManager* GetPersonalDataManager() override; AutocompleteHistoryManager* GetAutocompleteHistoryManager() override; + CreditCardCVCAuthenticator* GetCVCAuthenticator() override; + CreditCardOtpAuthenticator* GetOtpAuthenticator() override; PrefService* GetPrefs() override; const PrefService* GetPrefs() const override; syncer::SyncService* GetSyncService() override; @@ -149,6 +151,8 @@ __weak id<AutofillClientIOSBridge> bridge_; signin::IdentityManager* identity_manager_; std::unique_ptr<payments::PaymentsClient> payments_client_; + std::unique_ptr<CreditCardCVCAuthenticator> cvc_authenticator_; + std::unique_ptr<CreditCardOtpAuthenticator> otp_authenticator_; std::unique_ptr<FormDataImporter> form_data_importer_; scoped_refptr<AutofillWebDataService> autofill_web_data_service_; infobars::InfoBarManager* infobar_manager_;
diff --git a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm index 6aeb3a6..7035199 100644 --- a/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm +++ b/ios/chrome/browser/ui/autofill/chrome_autofill_client_ios.mm
@@ -19,6 +19,8 @@ #import "components/autofill/core/browser/logging/log_manager.h" #import "components/autofill/core/browser/payments/autofill_credit_card_filling_infobar_delegate_mobile.h" #import "components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.h" +#import "components/autofill/core/browser/payments/credit_card_cvc_authenticator.h" +#import "components/autofill/core/browser/payments/credit_card_otp_authenticator.h" #import "components/autofill/core/browser/payments/payments_client.h" #import "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h" #import "components/autofill/core/common/autofill_features.h" @@ -132,6 +134,18 @@ return autocomplete_history_manager_; } +CreditCardCVCAuthenticator* ChromeAutofillClientIOS::GetCVCAuthenticator() { + if (!cvc_authenticator_) + cvc_authenticator_ = std::make_unique<CreditCardCVCAuthenticator>(this); + return cvc_authenticator_.get(); +} + +CreditCardOtpAuthenticator* ChromeAutofillClientIOS::GetOtpAuthenticator() { + if (!otp_authenticator_) + otp_authenticator_ = std::make_unique<CreditCardOtpAuthenticator>(this); + return otp_authenticator_.get(); +} + PrefService* ChromeAutofillClientIOS::GetPrefs() { return const_cast<PrefService*>(base::as_const(*this).GetPrefs()); }
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester.mm b/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester.mm index 126e7ec7..4d1d3d7 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/full_card_requester.mm
@@ -26,8 +26,7 @@ DCHECK(result_delegate); autofill::CreditCardCVCAuthenticator* cvc_authenticator = - autofill_manager->GetCreditCardAccessManager() - ->GetOrCreateCVCAuthenticator(); + autofill_manager->client()->GetCVCAuthenticator(); cvc_authenticator->GetFullCardRequest()->GetFullCard( card, autofill::AutofillClient::UnmaskCardReason::kPaymentRequest, result_delegate, AsWeakPtr());
diff --git a/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn b/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn index 7d110f9..2e8ab699 100644 --- a/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn +++ b/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn
@@ -22,6 +22,7 @@ "resources:incognito_interstitial_screen_banner", "//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/browser/ui:feature_flags", + "//ios/chrome/browser/ui/elements:elements", "//ios/chrome/browser/ui/ntp:ntp_internal", "//ios/chrome/browser/ui/util:util", "//ios/chrome/common/ui/colors:colors",
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.h b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.h index 9978d98..e9ecd08 100644 --- a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.h +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.h
@@ -10,6 +10,9 @@ // The accessibility identifier for the Incognito interstitial. extern NSString* const kIncognitoInterstitialAccessibilityIdentifier; +// The accessibility identifier for the Incognito interstitial URL label. +extern NSString* const kIncognitoInterstitialURLLabelAccessibilityIdentifier; + // The accessibility identifier for the Cancel button in the Incognito // interstitial. extern NSString* const
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.mm b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.mm index 05e13b4..354f5f3 100644 --- a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.mm +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.mm
@@ -13,6 +13,9 @@ NSString* const kIncognitoInterstitialAccessibilityIdentifier = @"incognitoInterstitialAccessibilityIdentifier"; +NSString* const kIncognitoInterstitialURLLabelAccessibilityIdentifier = + @"incognitoInterstitialURLLabelAccessibilityIdentifier"; + NSString* const kIncognitoInterstitialCancelButtonAccessibilityIdentifier = @"incognitoInterstitialCancelButtonAccessibilityIdentifier";
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.mm b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.mm index 5c84646..943ad8a 100644 --- a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.mm +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.mm
@@ -38,7 +38,7 @@ [[IncognitoInterstitialViewController alloc] init]; self.incognitoInterstitialViewController.delegate = self; self.incognitoInterstitialViewController.URLLoaderDelegate = self; - self.incognitoInterstitialViewController.subtitleText = + self.incognitoInterstitialViewController.URLText = base::SysUTF8ToNSString(self.urlLoadParams.web_params.url.spec()); [self.baseViewController
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_egtest.mm b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_egtest.mm index bc1bf136..83ffa6d5 100644 --- a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_egtest.mm +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_egtest.mm
@@ -16,10 +16,10 @@ #endif using chrome_test_util::IncognitoInterstitialCancelButton; +using chrome_test_util::IncognitoInterstitialLabelForURL; using chrome_test_util::IncognitoInterstitialMatcher; using chrome_test_util::IncognitoInterstitialOpenInChromeButton; using chrome_test_util::IncognitoInterstitialOpenInChromeIncognitoButton; -using chrome_test_util::IncognitoInterstitialSubtitleForURL; using chrome_test_util::NTPIncognitoView; @interface IncognitoInterstitialTestCase : ChromeTestCase @@ -61,7 +61,7 @@ waitForUIElementToAppearWithMatcher:IncognitoInterstitialMatcher()]; // Check the appropriate subtitle is sufficiently visible within the // Interstitial. - [[EarlGrey selectElementWithMatcher:IncognitoInterstitialSubtitleForURL( + [[EarlGrey selectElementWithMatcher:IncognitoInterstitialLabelForURL( destinationURL.spec())] assertWithMatcher:grey_sufficientlyVisible()]; // Tap the "Open in Chrome Incognito" button. @@ -87,7 +87,7 @@ waitForUIElementToAppearWithMatcher:IncognitoInterstitialMatcher()]; // Check the appropriate subtitle is sufficiently visible within the // Interstitial. - [[EarlGrey selectElementWithMatcher:IncognitoInterstitialSubtitleForURL( + [[EarlGrey selectElementWithMatcher:IncognitoInterstitialLabelForURL( destinationURL.spec())] assertWithMatcher:grey_sufficientlyVisible()]; // Tap the "Open in Chrome" button. @@ -115,7 +115,7 @@ waitForUIElementToAppearWithMatcher:IncognitoInterstitialMatcher()]; // Check the appropriate subtitle is sufficiently visible within the // Interstitial. - [[EarlGrey selectElementWithMatcher:IncognitoInterstitialSubtitleForURL( + [[EarlGrey selectElementWithMatcher:IncognitoInterstitialLabelForURL( destinationURL.spec())] assertWithMatcher:grey_sufficientlyVisible()]; // Tap the "Open in Chrome" button. @@ -144,7 +144,7 @@ waitForUIElementToAppearWithMatcher:IncognitoInterstitialMatcher()]; // Check the appropriate subtitle is sufficiently visible within the // Interstitial. - [[EarlGrey selectElementWithMatcher:IncognitoInterstitialSubtitleForURL( + [[EarlGrey selectElementWithMatcher:IncognitoInterstitialLabelForURL( destinationURL.spec())] assertWithMatcher:grey_sufficientlyVisible()]; // Tap the "Open in Chrome Incognito" button. @@ -172,7 +172,7 @@ waitForUIElementToAppearWithMatcher:IncognitoInterstitialMatcher()]; // Check the appropriate subtitle is sufficiently visible within the // Interstitial. - [[EarlGrey selectElementWithMatcher:IncognitoInterstitialSubtitleForURL( + [[EarlGrey selectElementWithMatcher:IncognitoInterstitialLabelForURL( destinationURL.spec())] assertWithMatcher:grey_sufficientlyVisible()]; // Tap the Cancel button. @@ -199,7 +199,7 @@ waitForUIElementToAppearWithMatcher:IncognitoInterstitialMatcher()]; // Check the appropriate subtitle is sufficiently visible within the // Interstitial. - [[EarlGrey selectElementWithMatcher:IncognitoInterstitialSubtitleForURL( + [[EarlGrey selectElementWithMatcher:IncognitoInterstitialLabelForURL( destinationURL.spec())] assertWithMatcher:grey_sufficientlyVisible()]; // While the Interstitial is shown, loading an alternative URL. @@ -210,7 +210,7 @@ waitForUIElementToAppearWithMatcher:IncognitoInterstitialMatcher()]; // Check the appropriate subtitle is sufficiently visible within the // Interstitial. - [[EarlGrey selectElementWithMatcher:IncognitoInterstitialSubtitleForURL( + [[EarlGrey selectElementWithMatcher:IncognitoInterstitialLabelForURL( alternativeURL.spec())] assertWithMatcher:grey_sufficientlyVisible()]; // Tap the "Open in Chrome Incognito" button.
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h index 86af3a0..2f2e992 100644 --- a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h
@@ -20,6 +20,9 @@ // Some URLs in the controlled view can be loaded. @property(nonatomic, weak) id<NewTabPageURLLoaderDelegate> URLLoaderDelegate; +// URL text to display. +@property(nonatomic, copy) NSString* URLText; + @end #endif // IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.mm b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.mm index ae01538..fab7306d 100644 --- a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.mm +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.mm
@@ -6,6 +6,7 @@ #import "base/check.h" #import "base/cxx17_backports.h" #import "base/mac/foundation_util.h" +#import "ios/chrome/browser/ui/elements/extended_touch_target_button.h" #import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.h" #import "ios/chrome/browser/ui/ntp/incognito_view.h" #import "ios/chrome/browser/ui/ntp/revamped_incognito_view.h" @@ -26,6 +27,9 @@ // Opacity of navigation bar is scroll view content offset divided by this. const CGFloat kNavigationBarOpacityDenominator = 100; +// Maximum number of lines for the URL label, before the user unfolds it. +const int kURLLabelDefaultNumberOfLines = 3; + } // namespace @interface IncognitoInterstitialViewController () @@ -34,6 +38,16 @@ // button. @property(nonatomic, strong) UINavigationBar* navigationBar; +// Label to display the URL which is going to be opened. +@property(nonatomic, strong) UILabel* URLLabel; + +// Button which allows the user to remove the limit on the number of lines +// for `URLLabel`. +@property(nonatomic, strong) UIButton* expandURLButton; + +// Whether the number of lines of `URLLabel` is unlimited. +@property(nonatomic, assign) BOOL URLIsExpanded; + @end @implementation IncognitoInterstitialViewController @@ -57,6 +71,16 @@ self.secondaryActionString = l10n_util::GetNSString(IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME); + // This needs to be called after parameters of `PromoStyleViewController` have + // been set, but before adding additional layout constraints, since these + // constraints can only be activated once the complete view hierarchy has been + // constructed and relevant views belong to the same hierarchy. + [super viewDidLoad]; + + self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; + self.modalInPresentation = YES; + + // Creating the Incognito view (same one as NTP). UIScrollView* incognitoView = NULL; if (base::FeatureList::IsEnabled(kIncognitoNtpRevamp)) { RevampedIncognitoView* revampedIncognitoView = @@ -71,11 +95,39 @@ revampedIncognitoView.URLLoaderDelegate = self.URLLoaderDelegate; incognitoView = revampedIncognitoView; } + incognitoView.translatesAutoresizingMaskIntoConstraints = NO; - [self.specificContentView addSubview:incognitoView]; + // The Incognito view is put inside a container because it might try + // to put constraints on its superview. + UIView* incognitoViewContainer = [[UIView alloc] init]; + incognitoViewContainer.translatesAutoresizingMaskIntoConstraints = NO; + [incognitoViewContainer addSubview:incognitoView]; - self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; - self.modalInPresentation = YES; + // A stack view is created to contain the URL label as well as the + // Incognito view container. + UIStackView* stackView = [[UIStackView alloc] + initWithArrangedSubviews:@[ self.URLLabel, incognitoViewContainer ]]; + stackView.translatesAutoresizingMaskIntoConstraints = NO; + stackView.axis = UILayoutConstraintAxisVertical; + [self.specificContentView addSubview:stackView]; + + // Create the gradient view located on the leading end of the "more" button + // which lets the user unfold the URL label. + UIView* gradientView = [[UIView alloc] + initWithFrame:CGRectMake(0, 0, self.URLLabel.font.lineHeight, + self.URLLabel.font.lineHeight)]; + gradientView.translatesAutoresizingMaskIntoConstraints = NO; + gradientView.backgroundColor = self.view.backgroundColor; + CAGradientLayer* gradientLayer = [CAGradientLayer layer]; + gradientLayer.frame = gradientView.bounds; + gradientLayer.startPoint = CGPointMake(0.0, 0.0); + gradientLayer.endPoint = CGPointMake(1.0, 0.0); + gradientLayer.colors = + @[ (id)[UIColor clearColor].CGColor, (id)[UIColor whiteColor].CGColor ]; + gradientView.layer.mask = gradientLayer; + [self.expandURLButton addSubview:gradientView]; + // Add the "more" button to the content view. + [self.specificContentView addSubview:self.expandURLButton]; UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel @@ -92,24 +144,38 @@ [self.navigationBar pushNavigationItem:navigationRootItem animated:false]; [self updateNavigationBarAppearanceWithOpacity:0.0]; - // This needs to be called after parameters of `PromoStyleViewController` have - // been set, but before adding additional layout constraints, since these - // constraints can only be activated once the complete view hierarchy has been - // constructed and relevant views belong to the same hierarchy. - [super viewDidLoad]; - incognitoView.translatesAutoresizingMaskIntoConstraints = NO; [NSLayoutConstraint activateConstraints:@[ - [incognitoView.leadingAnchor + [stackView.leadingAnchor constraintEqualToAnchor:self.specificContentView.leadingAnchor], - [incognitoView.trailingAnchor + [stackView.trailingAnchor constraintEqualToAnchor:self.specificContentView.trailingAnchor], - [incognitoView.topAnchor + [stackView.topAnchor constraintEqualToAnchor:self.specificContentView.topAnchor], - [incognitoView.bottomAnchor + [stackView.bottomAnchor constraintEqualToAnchor:self.specificContentView.bottomAnchor], [incognitoView.heightAnchor constraintEqualToAnchor:incognitoView.contentLayoutGuide.heightAnchor], + [incognitoViewContainer.leadingAnchor + constraintEqualToAnchor:incognitoView.leadingAnchor], + [incognitoViewContainer.trailingAnchor + constraintEqualToAnchor:incognitoView.trailingAnchor], + [incognitoViewContainer.topAnchor + constraintEqualToAnchor:incognitoView.topAnchor], + [incognitoViewContainer.bottomAnchor + constraintEqualToAnchor:incognitoView.bottomAnchor], + [gradientView.trailingAnchor + constraintEqualToAnchor:self.expandURLButton.leadingAnchor], + [gradientView.bottomAnchor + constraintEqualToAnchor:self.expandURLButton.bottomAnchor], + [gradientView.topAnchor + constraintEqualToAnchor:self.expandURLButton.topAnchor], + [gradientView.widthAnchor + constraintEqualToAnchor:gradientView.heightAnchor], + [self.expandURLButton.trailingAnchor + constraintEqualToAnchor:self.URLLabel.trailingAnchor], + [self.expandURLButton.bottomAnchor + constraintEqualToAnchor:self.URLLabel.bottomAnchor], ]]; [self.view addSubview:self.navigationBar]; @@ -128,6 +194,70 @@ [super traitCollectionDidChange:previousTraitCollection]; } +- (void)viewDidLayoutSubviews { + if (self.URLIsExpanded) { + self.expandURLButton.hidden = YES; + self.URLLabel.numberOfLines = 0; + } else { + CGRect URLLabelBoundingRect = [self.URLLabel.text + boundingRectWithSize:CGSizeMake(self.URLLabel.bounds.size.width, + CGFLOAT_MAX) + options:NSStringDrawingUsesLineFragmentOrigin + attributes:@{NSFontAttributeName : self.URLLabel.font} + context:nil]; + int expandedNumberOfLines = + URLLabelBoundingRect.size.height / self.URLLabel.font.lineHeight; + self.expandURLButton.hidden = + (expandedNumberOfLines <= kURLLabelDefaultNumberOfLines); + } +} + +#pragma mark - Accessors + +- (UILabel*)URLLabel { + if (!_URLLabel) { + _URLLabel = [[UILabel alloc] initWithFrame:self.view.frame]; + _URLLabel.lineBreakMode = NSLineBreakByClipping; + _URLLabel.text = self.URLText; + _URLLabel.numberOfLines = kURLLabelDefaultNumberOfLines; + _URLLabel.textAlignment = NSTextAlignmentCenter; + _URLLabel.translatesAutoresizingMaskIntoConstraints = NO; + _URLLabel.accessibilityIdentifier = + kIncognitoInterstitialURLLabelAccessibilityIdentifier; + } + return _URLLabel; +} + +- (UIButton*)expandURLButton { + if (!_expandURLButton) { + __weak __typeof(self) weakSelf = self; + UIAction* readMoreAction = [UIAction actionWithHandler:^(id sender) { + [weakSelf expandURLButtonWasTapped]; + }]; + + NSAttributedString* readMoreString = [[NSAttributedString alloc] + initWithString:l10n_util::GetNSString( + IDS_IOS_INCOGNITO_INTERSTITIAL_URL_READ_MORE_BUTTON) + attributes:@{ + NSFontAttributeName : _URLLabel.font, + NSForegroundColorAttributeName : [UIColor colorNamed:kBlueColor] + }]; + + _expandURLButton = + [[ExtendedTouchTargetButton alloc] initWithFrame:CGRectZero + primaryAction:readMoreAction]; + [_expandURLButton setAttributedTitle:readMoreString + forState:UIControlStateNormal]; + _expandURLButton.titleEdgeInsets = UIEdgeInsetsMake( + CGFLOAT_EPSILON, CGFLOAT_EPSILON, CGFLOAT_EPSILON, CGFLOAT_EPSILON); + _expandURLButton.contentEdgeInsets = UIEdgeInsetsMake( + CGFLOAT_EPSILON, CGFLOAT_EPSILON, CGFLOAT_EPSILON, CGFLOAT_EPSILON); + _expandURLButton.backgroundColor = self.view.backgroundColor; + _expandURLButton.translatesAutoresizingMaskIntoConstraints = NO; + } + return _expandURLButton; +} + #pragma mark - UIScrollViewDelegate // This override allows scroll detection of the scroll view contained within the @@ -185,4 +315,10 @@ self.navigationBar.tintColor = [UIColor colorNamed:kBlueColor]; } +// Called when `expandURLButton` is tapped. +- (void)expandURLButtonWasTapped { + self.URLIsExpanded = YES; + [self.view setNeedsLayout]; +} + @end
diff --git a/ios/chrome/browser/ui/omnibox/keyboard_assist/omnibox_assistive_keyboard_views_utils.mm b/ios/chrome/browser/ui/omnibox/keyboard_assist/omnibox_assistive_keyboard_views_utils.mm index e0bd124..7a76a9f 100644 --- a/ios/chrome/browser/ui/omnibox/keyboard_assist/omnibox_assistive_keyboard_views_utils.mm +++ b/ios/chrome/browser/ui/omnibox/keyboard_assist/omnibox_assistive_keyboard_views_utils.mm
@@ -96,9 +96,11 @@ UIPasteControl* pasteControl = [[UIPasteControl alloc] initWithConfiguration:pasteControlConfiguration]; pasteControl.target = pasteTarget; - pasteControl.accessibilityLabel = - l10n_util::GetNSString(IDS_IOS_KEYBOARD_ACCESSORY_VIEW_PASTE_SEARCH); pasteControl.accessibilityIdentifier = kPasteSearchInputAccessoryViewID; + // Set as accessiblity hint since UIPasteControl already set the + // accessiblityLabel. + pasteControl.accessibilityHint = + l10n_util::GetNSString(IDS_IOS_KEYBOARD_ACCESSORY_VIEW_PASTE_SEARCH); // Set content size category to extra small to reduce the size of the paste // icon. [pasteControl setMaximumContentSizeCategory:UIContentSizeCategoryExtraSmall];
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm index ca4ee00..3aa4b3c 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
@@ -683,9 +683,11 @@ AuthenticationService* authenticationService = AuthenticationServiceFactory::GetForBrowserState(_browserState); DCHECK(authenticationService); - authenticationService->SignOut( - signin_metrics::ProfileSignout::USER_DELETED_ACCOUNT_COOKIES, - /*force_clear_browsing_data=*/false, nil); + if (!base::FeatureList::IsEnabled(switches::kEnableCbdSignOut)) { + authenticationService->SignOut( + signin_metrics::ProfileSignout::USER_DELETED_ACCOUNT_COOKIES, + /*force_clear_browsing_data=*/false, nil); + } } }
diff --git a/ios/chrome/browser/ui/settings/settings_root_table_constants.h b/ios/chrome/browser/ui/settings/settings_root_table_constants.h index 25e89d3..838d03f 100644 --- a/ios/chrome/browser/ui/settings/settings_root_table_constants.h +++ b/ios/chrome/browser/ui/settings/settings_root_table_constants.h
@@ -11,5 +11,6 @@ extern NSString* const kSettingsToolbarDeleteButtonId; extern NSString* const kSettingsToolbarEditButtonId; extern NSString* const kSettingsToolbarEditDoneButtonId; +extern NSString* const kSettingsToolbarSettingsButtonId; #endif // IOS_CHROME_BROWSER_UI_SETTINGS_SETTINGS_ROOT_TABLE_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/settings/settings_root_table_constants.mm b/ios/chrome/browser/ui/settings/settings_root_table_constants.mm index 9d73099..4f109d8 100644 --- a/ios/chrome/browser/ui/settings/settings_root_table_constants.mm +++ b/ios/chrome/browser/ui/settings/settings_root_table_constants.mm
@@ -17,3 +17,6 @@ NSString* const kSettingsToolbarEditDoneButtonId = @"kSettingsToolbarEditDoneButtonId"; + +NSString* const kSettingsToolbarSettingsButtonId = + @"kSettingsToolbarSettingsButtonId";
diff --git a/ios/chrome/browser/ui/settings/settings_root_table_view_controller.h b/ios/chrome/browser/ui/settings/settings_root_table_view_controller.h index 9330b3d..7634fa5 100644 --- a/ios/chrome/browser/ui/settings/settings_root_table_view_controller.h +++ b/ios/chrome/browser/ui/settings/settings_root_table_view_controller.h
@@ -25,6 +25,9 @@ // Add button for the toolbar. @property(nonatomic, strong, readonly) UIBarButtonItem* addButtonInToolbar; +// Settings button for the toolbar. +@property(nonatomic, strong, readonly) UIBarButtonItem* settingsButtonInToolbar; + // Whether this table view controller should hide the "Done" button (the right // navigation bar button). Default is NO. @property(nonatomic, assign) BOOL shouldHideDoneButton; @@ -34,11 +37,17 @@ @property(nonatomic, assign) BOOL shouldDisableDoneButtonOnEdit; // Whether this table view controller should show the "Add" button in the -// toolbar(bottom left). Default is NO. +// toolbar(bottom left). Cannot be set to YES if +// `shouldShowSettingsButtonInToolbar` is already enabled. Default is NO. @property(nonatomic, assign) BOOL shouldShowAddButtonInToolbar; +// Whether this table view controller should show the "Settings" button in the +// toolbar(bottom left). Cannot be set to YES if `shouldShowAddButtonInToolbar` +// is already enabled. Default is NO. +@property(nonatomic, assign) BOOL shouldShowSettingsButtonInToolbar; + // Whether this table view controller should show the "Delete" button in the -// toolbar(bottom left). Default is YES. Set in `viewDidLoad`. +// toolbar(bottom left) in edit mode. Default is YES. Set in `viewDidLoad`. @property(nonatomic, assign) BOOL shouldShowDeleteButtonInToolbar; // Updates the edit or done button to reflect editing state. If the @@ -108,10 +117,14 @@ // * Removes the transparent veil. - (void)allowUserInteraction; -// Called when the add button in the toolbar is pressed. Subclasses should -// override this method. +// Called when the add button in the toolbar is pressed. Subclasses must +// override this method if `shouldShowAddButtonInToolbar` is set to YES. - (void)addButtonCallback; +// Called when the add button in the toolbar is pressed. Subclasses must +// override this method if `shouldShowSettingsButtonInToolbar` is set to YES. +- (void)settingsButtonCallback; + @end #endif // IOS_CHROME_BROWSER_UI_SETTINGS_SETTINGS_ROOT_TABLE_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/settings/settings_root_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_root_table_view_controller.mm index e7d09d6..9b25711 100644 --- a/ios/chrome/browser/ui/settings/settings_root_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_root_table_view_controller.mm
@@ -51,6 +51,9 @@ // Add button for the toolbar. @property(nonatomic, strong) UIBarButtonItem* addButtonInToolbar; +// Settings button for the toolbar. +@property(nonatomic, strong) UIBarButtonItem* settingsButtonInToolbar; + // Item displayed before the user interactions are prevented. This is used to // store the item while the interaction is prevented. @property(nonatomic, strong) UIBarButtonItem* savedBarButtonItem; @@ -102,6 +105,13 @@ if (self.shouldHideToolbar) { return; } + + // `shouldShowAddButtonInToolbar` and `shouldShowSettingsButtonInToolbar` + // should not both be YES at the same time, as they conflict with each other + // (both occupy the same space in the toolbar). + DCHECK(!(self.shouldShowAddButtonInToolbar && + self.shouldShowSettingsButtonInToolbar)); + UIBarButtonItem* flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil @@ -112,6 +122,8 @@ toolbarLeftButton = self.deleteButton; } else if (self.shouldShowAddButtonInToolbar) { toolbarLeftButton = self.addButtonInToolbar; + } else if (self.shouldShowSettingsButtonInToolbar) { + toolbarLeftButton = self.settingsButtonInToolbar; } UIBarButtonItem* editOrDoneButton = @@ -158,6 +170,20 @@ return _addButtonInToolbar; } +- (UIBarButtonItem*)settingsButtonInToolbar { + if (!_settingsButtonInToolbar) { + _settingsButtonInToolbar = [[UIBarButtonItem alloc] + initWithTitle:l10n_util::GetNSString( + IDS_IOS_SETTINGS_TOOLBAR_SETTINGS_SUBMENU) + style:UIBarButtonItemStylePlain + target:self + action:@selector(settingsButtonCallback)]; + _settingsButtonInToolbar.accessibilityIdentifier = + kSettingsToolbarSettingsButtonId; + } + return _settingsButtonInToolbar; +} + #pragma mark - UIViewController - (void)viewDidLoad { @@ -435,6 +461,11 @@ NOTREACHED(); } +- (void)settingsButtonCallback { + // Subclasses should implement. + NOTREACHED(); +} + #pragma mark - UIAdaptivePresentationControllerDelegate - (BOOL)presentationControllerShouldDismiss:
diff --git a/ios/chrome/browser/ui/webui/omaha_ui.cc b/ios/chrome/browser/ui/webui/omaha_ui.cc index e15af052..f6dd73a3 100644 --- a/ios/chrome/browser/ui/webui/omaha_ui.cc +++ b/ios/chrome/browser/ui/webui/omaha_ui.cc
@@ -51,7 +51,7 @@ void HandleRequestDebugInformation(const base::Value::List& args); // Called when the debug information have been computed. - void OnDebugInformationAvailable(base::DictionaryValue* debug_information); + void OnDebugInformationAvailable(base::Value::Dict debug_information); // WeakPtr factory needed because this object might be deleted before // receiving the callbacks from the OmahaService. @@ -77,8 +77,8 @@ } void OmahaDOMHandler::OnDebugInformationAvailable( - base::DictionaryValue* debug_information) { - base::ValueView args[] = {*debug_information}; + base::Value::Dict debug_information) { + base::ValueView args[] = {debug_information}; web_ui()->CallJavascriptFunction("updateOmahaDebugInformation", args); }
diff --git a/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm b/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm index 4c73ddb..aec7dbb 100644 --- a/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm +++ b/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm
@@ -387,11 +387,17 @@ - (void)setShouldBannerFillTopSpace:(BOOL)shouldBannerFillTopSpace { _shouldBannerFillTopSpace = shouldBannerFillTopSpace; [self setupBannerConstraints]; + self.imageView.image = + [self scaleBannerWithCurrentImage:self.imageView.image + toSize:[self computeBannerImageSize]]; } - (void)setShouldHideBanner:(BOOL)shouldHideBanner { _shouldHideBanner = shouldHideBanner; [self setupBannerConstraints]; + self.imageView.image = + [self scaleBannerWithCurrentImage:self.imageView.image + toSize:[self computeBannerImageSize]]; } - (void)setPrimaryActionString:(NSString*)text { @@ -489,7 +495,7 @@ // Use |primaryActionString| even if scrolling to the end is mandatory // because at the viewDidLoad stage, the scroll view hasn't computed its - // content height, so there is no way to know if scrolling is needed. This + // content height, so there is no way to knOow if scrolling is needed. This // label will be updated at the viewDidAppear stage if necessary. [_primaryActionButton setTitle:self.primaryActionString forState:UIControlStateNormal];
diff --git a/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_strings_am.xtb b/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_strings_am.xtb index 0294c6b0..18e02260 100644 --- a/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_strings_am.xtb +++ b/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_strings_am.xtb
@@ -9,5 +9,5 @@ <translation id="6120021866613542190">ማንነት የማያሳውቅ ፍለጋ</translation> <translation id="6196207969502475924">የድምጽ ፍለጋ</translation> <translation id="8383052013774505331">የቀዱትን አገናኝ ይጎብኙ</translation> -<translation id="8504982932030734536">የቀዱትን ጽሑፍ ይፈልጉ</translation> +<translation id="8504982932030734536">የቀዱትን ጽሁፍ ይፈልጉ</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/test/earl_grey/chrome_matchers.h b/ios/chrome/test/earl_grey/chrome_matchers.h index 429b540d..fda18d3c 100644 --- a/ios/chrome/test/earl_grey/chrome_matchers.h +++ b/ios/chrome/test/earl_grey/chrome_matchers.h
@@ -551,7 +551,7 @@ // Returns a matcher for the subtitle of the Incognito Interstitial, // as it should appear when `URL` was given to the Interstitial. -id<GREYMatcher> IncognitoInterstitialSubtitleForURL(const std::string& url); +id<GREYMatcher> IncognitoInterstitialLabelForURL(const std::string& url); // Returns a matcher for the primary action button in the Incognito // Interstitial.
diff --git a/ios/chrome/test/earl_grey/chrome_matchers.mm b/ios/chrome/test/earl_grey/chrome_matchers.mm index e721fe6..63aaee9 100644 --- a/ios/chrome/test/earl_grey/chrome_matchers.mm +++ b/ios/chrome/test/earl_grey/chrome_matchers.mm
@@ -720,9 +720,9 @@ return [ChromeMatchersAppInterface incognitoInterstitial]; } -id<GREYMatcher> IncognitoInterstitialSubtitleForURL(const std::string& url) { +id<GREYMatcher> IncognitoInterstitialLabelForURL(const std::string& url) { return [ChromeMatchersAppInterface - incognitoInterstitialSubtitleForURL:base::SysUTF8ToNSString(url)]; + incognitoInterstitialLabelForURL:base::SysUTF8ToNSString(url)]; } id<GREYMatcher> IncognitoInterstitialOpenInChromeIncognitoButton() {
diff --git a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h index 5975e5b3..5865811 100644 --- a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h +++ b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.h
@@ -578,7 +578,7 @@ // Returns a matcher for the subtitle of the Incognito Interstitial, // as it should appear when `URL` was given to the Interstitial. -+ (id<GREYMatcher>)incognitoInterstitialSubtitleForURL:(NSString*)url; ++ (id<GREYMatcher>)incognitoInterstitialLabelForURL:(NSString*)url; // Returns a matcher for the primary action button in the Incognito // Interstitial.
diff --git a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm index 605b422fd..b3fe4fce 100644 --- a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm +++ b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
@@ -1113,10 +1113,10 @@ return grey_accessibilityID(kIncognitoInterstitialAccessibilityIdentifier); } -+ (id<GREYMatcher>)incognitoInterstitialSubtitleForURL:(NSString*)url { - return grey_allOf( - grey_accessibilityID(kPromoStyleSubtitleAccessibilityIdentifier), - grey_accessibilityLabel(url), nullptr); ++ (id<GREYMatcher>)incognitoInterstitialLabelForURL:(NSString*)url { + return grey_allOf(grey_accessibilityID( + kIncognitoInterstitialURLLabelAccessibilityIdentifier), + grey_accessibilityLabel(url), nullptr); } + (id<GREYMatcher>)incognitoInterstitialOpenInChromeIncognitoButton {
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index afbf7ff..2d16323 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -bf83314709cbcd8b425996de7c5ac75cbf4dae73 \ No newline at end of file +0d93ead6cbadbd2bbe69b1b1418b6b96e3a826e3 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index b4925c1..b8aa67a 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -cb424b44f05743826cea48104dd86e95a4dc06a5 \ No newline at end of file +d274270cc718a3160e5bf51dd4600d9b085fac81 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index 7b82b67b..9877cb5f 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -5d8fd40458185e846f0ef2a1bc833a3b2fe7aebb \ No newline at end of file +8f56d23a22438a3e1c1f7c659596d2aeffbb625b \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index 2dac6c5..5c9b68f 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -8d8e8813fca2f62e5ce4a5b92d1f1753511cc9c1 \ No newline at end of file +d49b006d0fcdd2db7d64de52d29e30054d6b44fd \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 index e7663f0..f9a5f4d0 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -3fed867e537a8eb0965f9dbaef0bd2f7e4a05dc7 \ No newline at end of file +bd683aff4d11756b84422d688f7c3fa2e6213cea \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 index de6c3c0..af4a032 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -97917ba5feca2622a02987ff860eecc0236266ec \ No newline at end of file +a97aa9b93e7001d1dc49e69493acdb3fe87133b4 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index 27d062f2..f248c449 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -5fd89a76196347f433fe647605b671558ace73af \ No newline at end of file +0527fe31f706fb7f5e2c8bd821963bcd26b155d7 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index d636404..ebb9e200 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -9b6b6d93825fac944d48d11c371dec3d79e2534f \ No newline at end of file +a82311bb8b9714305e20a48ec2b7ee2d9e37c3ba \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index a5bdfe7..dd240aa 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -7a4b34eb7bebf4d442b8200e3c95bb33c39a54f6 \ No newline at end of file +7cd4e6f45691223d12a506561bd1664c963c03c4 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index 1592f87..17219a1 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -ff22673ff91691afac4a3645b2f99233cd538709 \ No newline at end of file +3df93084769e270e1bc472165cd82fe04a151516 \ No newline at end of file
diff --git a/media/audio/cras/audio_manager_chromeos.cc b/media/audio/cras/audio_manager_chromeos.cc index 50bdd67e..2acbf29 100644 --- a/media/audio/cras/audio_manager_chromeos.cc +++ b/media/audio/cras/audio_manager_chromeos.cc
@@ -221,8 +221,6 @@ AudioDeviceNames* device_names) { DCHECK(device_names->empty()); - device_names->push_back(AudioDeviceName::CreateDefault()); - AudioDeviceList devices; GetAudioDevices(&devices); @@ -246,6 +244,8 @@ ProcessVirtualDeviceName(device_names, device_list); } } + if (!device_names->empty()) + device_names->push_front(AudioDeviceName::CreateDefault()); } void AudioManagerChromeOS::GetAudioInputDeviceNames( @@ -439,11 +439,7 @@ bool AudioManagerChromeOS::IsDefault(const std::string& device_id, bool is_input) { - AudioDeviceNames device_names; - GetAudioDeviceNamesImpl(is_input, &device_names); - DCHECK(!device_names.empty()); - const AudioDeviceName& device_name = device_names.front(); - return device_name.unique_id == device_id; + return AudioDeviceDescription::IsDefaultDevice(device_id); } std::string AudioManagerChromeOS::GetHardwareDeviceFromDeviceId(
diff --git a/media/audio/cras/audio_manager_cras.cc b/media/audio/cras/audio_manager_cras.cc index 6490f6e..4762e88f 100644 --- a/media/audio/cras/audio_manager_cras.cc +++ b/media/audio/cras/audio_manager_cras.cc
@@ -63,20 +63,22 @@ void AudioManagerCras::GetAudioInputDeviceNames( AudioDeviceNames* device_names) { - device_names->push_back(AudioDeviceName::CreateDefault()); for (const auto& device : cras_util_->CrasGetAudioDevices(DeviceType::kInput)) { device_names->emplace_back(device.name, base::NumberToString(device.id)); } + if (!device_names->empty()) + device_names->push_front(AudioDeviceName::CreateDefault()); } void AudioManagerCras::GetAudioOutputDeviceNames( AudioDeviceNames* device_names) { - device_names->push_back(AudioDeviceName::CreateDefault()); for (const auto& device : cras_util_->CrasGetAudioDevices(DeviceType::kOutput)) { device_names->emplace_back(device.name, base::NumberToString(device.id)); } + if (!device_names->empty()) + device_names->push_front(AudioDeviceName::CreateDefault()); } // Checks if a system AEC with a specific group ID is flagged to be deactivated
diff --git a/media/audio/cras/audio_manager_cras_unittest.cc b/media/audio/cras/audio_manager_cras_unittest.cc index 8d0a3de..434eccf 100644 --- a/media/audio/cras/audio_manager_cras_unittest.cc +++ b/media/audio/cras/audio_manager_cras_unittest.cc
@@ -70,6 +70,35 @@ EXPECT_EQ(ret, true); } +TEST_F(AudioManagerCrasTest, CheckDefaultNoDevice) { + std::unique_ptr<MockCrasUtil> util = std::make_unique<MockCrasUtil>(); + std::vector<CrasDevice> devices; + AudioDeviceNames device_names; + EXPECT_CALL(*util, CrasGetAudioDevices(DeviceType::kInput)) + .WillOnce(testing::Return(devices)); + EXPECT_CALL(*util, CrasGetAudioDevices(DeviceType::kOutput)) + .WillOnce(testing::Return(devices)); + mock_manager_->SetCrasUtil(std::move(util)); + mock_manager_->GetAudioInputDeviceNames(&device_names); + EXPECT_EQ(device_names.empty(), true); + mock_manager_->GetAudioOutputDeviceNames(&device_names); + EXPECT_EQ(device_names.empty(), true); +} + +TEST_F(AudioManagerCrasTest, CheckDefaultDevice) { + std::unique_ptr<MockCrasUtil> util = std::make_unique<MockCrasUtil>(); + std::vector<CrasDevice> devices; + AudioDeviceNames device_names; + CrasDevice dev; + dev.type = DeviceType::kInput; + devices.emplace_back(dev); + EXPECT_CALL(*util, CrasGetAudioDevices(DeviceType::kInput)) + .WillOnce(testing::Return(devices)); + mock_manager_->SetCrasUtil(std::move(util)); + mock_manager_->GetAudioInputDeviceNames(&device_names); + EXPECT_EQ(device_names.size(), 2u); +} + TEST_F(AudioManagerCrasTest, MaxChannel) { std::unique_ptr<MockCrasUtil> util = std::make_unique<MockCrasUtil>(); std::vector<CrasDevice> devices;
diff --git a/media/cast/encoding/external_video_encoder.cc b/media/cast/encoding/external_video_encoder.cc index e1e13772..4440185 100644 --- a/media/cast/encoding/external_video_encoder.cc +++ b/media/cast/encoding/external_video_encoder.cc
@@ -26,7 +26,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/time/time.h" -#include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "media/base/bind_to_current_loop.h" #include "media/base/bitrate.h" @@ -250,7 +249,6 @@ base::TimeTicks reference_time, bool key_frame_requested, VideoEncoder::FrameEncodedCallback frame_encoded_callback) { - TRACE_EVENT0("media", "ExternalVideoEncoder::EncodeVideoFrame"); DCHECK(task_runner_->RunsTasksInCurrentSequence()); in_progress_frame_encodes_.push_back(InProgressExternalVideoFrameEncode(
diff --git a/media/mojo/clients/mojo_video_encode_accelerator.cc b/media/mojo/clients/mojo_video_encode_accelerator.cc index 5f03572..2e418be 100644 --- a/media/mojo/clients/mojo_video_encode_accelerator.cc +++ b/media/mojo/clients/mojo_video_encode_accelerator.cc
@@ -9,7 +9,6 @@ #include "base/bind.h" #include "base/logging.h" #include "base/memory/raw_ptr.h" -#include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "gpu/ipc/client/gpu_channel_host.h" #include "media/base/media_log.h" @@ -155,8 +154,6 @@ void MojoVideoEncodeAccelerator::Encode(scoped_refptr<VideoFrame> frame, bool force_keyframe) { - TRACE_EVENT1("media", "MojoVideoEncodeAccelerator::Encode", "timestamp", - frame->timestamp()); DVLOG(2) << __func__ << " tstamp=" << frame->timestamp(); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); size_t num_planes = VideoFrame::NumPlanes(frame->format());
diff --git a/media/video/video_encode_accelerator_adapter.cc b/media/video/video_encode_accelerator_adapter.cc index 04ddb35c..0a62632a 100644 --- a/media/video/video_encode_accelerator_adapter.cc +++ b/media/video/video_encode_accelerator_adapter.cc
@@ -16,7 +16,6 @@ #include "base/task/bind_post_task.h" #include "base/task/sequenced_task_runner.h" #include "base/time/time.h" -#include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "media/base/bind_to_current_loop.h" #include "media/base/bitstream_buffer.h" @@ -338,9 +337,6 @@ scoped_refptr<VideoFrame> frame, bool key_frame, EncoderStatusCB done_cb) { - TRACE_EVENT1("media", - "VideoEncodeAcceleratorAdapter::EncodeOnAcceleratorThread", - "timestamp", frame->timestamp()); DCHECK_CALLED_ON_VALID_SEQUENCE(accelerator_sequence_checker_); if (state_ == State::kWaitingForFirstFrame || @@ -734,7 +730,6 @@ VideoEncodeAcceleratorAdapter::PrepareCpuFrame( const gfx::Size& size, scoped_refptr<VideoFrame> src_frame) { - TRACE_EVENT0("media", "VideoEncodeAcceleratorAdapter::PrepareCpuFrame"); auto handle = input_pool_->MaybeAllocateBuffer(input_buffer_size_); if (!handle) return EncoderStatus(EncoderStatus::Codes::kEncoderFailedEncode); @@ -774,7 +769,6 @@ VideoEncodeAcceleratorAdapter::PrepareGpuFrame( const gfx::Size& size, scoped_refptr<VideoFrame> src_frame) { - TRACE_EVENT0("media", "VideoEncodeAcceleratorAdapter::PrepareGpuFrame"); DCHECK_CALLED_ON_VALID_SEQUENCE(accelerator_sequence_checker_); DCHECK(src_frame); if (src_frame->HasGpuMemoryBuffer() &&
diff --git a/net/base/features.cc b/net/base/features.cc index c8a1f85..ed5ce45 100644 --- a/net/base/features.cc +++ b/net/base/features.cc
@@ -286,8 +286,8 @@ const base::Feature kPartitionedCookiesBypassOriginTrial{ "PartitionedCookiesBypassOriginTrial", base::FEATURE_DISABLED_BY_DEFAULT}; -const base::Feature kNoncedPartitionedCookies{ - "NoncedPartitionedCookies", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kNoncedPartitionedCookies{"NoncedPartitionedCookies", + base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kExtraCookieValidityChecks{ "ExtraCookieValidityChecks", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/net/base/io_buffer.cc b/net/base/io_buffer.cc index 26e0e02..b61780c 100644 --- a/net/base/io_buffer.cc +++ b/net/base/io_buffer.cc
@@ -106,8 +106,11 @@ void GrowableIOBuffer::SetCapacity(int capacity) { DCHECK_GE(capacity, 0); + // this will get reset in `set_offset`. + data_ = nullptr; // realloc will crash if it fails. real_data_.reset(static_cast<char*>(realloc(real_data_.release(), capacity))); + capacity_ = capacity; if (offset_ > capacity) set_offset(capacity);
diff --git a/net/base/io_buffer.h b/net/base/io_buffer.h index f2141357..b8f9a8a 100644 --- a/net/base/io_buffer.h +++ b/net/base/io_buffer.h
@@ -94,7 +94,7 @@ virtual ~IOBuffer(); - raw_ptr<char, DanglingUntriaged> data_; + raw_ptr<char> data_; }; // This version stores the size of the buffer so that the creator of the object
diff --git a/net/cookies/cookie_partition_key_unittest.cc b/net/cookies/cookie_partition_key_unittest.cc index 8a68fcf..4bbb7cf 100644 --- a/net/cookies/cookie_partition_key_unittest.cc +++ b/net/cookies/cookie_partition_key_unittest.cc
@@ -3,33 +3,39 @@ // found in the LICENSE file. #include <string> +#include <tuple> -#include "net/cookies/cookie_partition_key.h" #include "base/test/scoped_feature_list.h" #include "net/base/features.h" #include "net/cookies/cookie_constants.h" +#include "net/cookies/cookie_partition_key.h" #include "testing/gtest/include/gtest/gtest.h" namespace net { -class CookiePartitionKeyTest : public testing::TestWithParam<bool> { +class CookiePartitionKeyTest + : public testing::TestWithParam<std::tuple<bool, bool>> { protected: // testing::Test void SetUp() override { - if (PartitionedCookiesEnabled()) - scoped_feature_list_.InitAndEnableFeature(features::kPartitionedCookies); - testing::TestWithParam<bool>::SetUp(); + scoped_feature_list_[0].InitWithFeatureState(features::kPartitionedCookies, + PartitionedCookiesEnabled()); + scoped_feature_list_[1].InitWithFeatureState( + features::kNoncedPartitionedCookies, NoncedPartitionedCookiesEnabled()); } - bool PartitionedCookiesEnabled() { return GetParam(); } + bool PartitionedCookiesEnabled() { return std::get<0>(GetParam()); } + bool NoncedPartitionedCookiesEnabled() { return std::get<1>(GetParam()); } private: - base::test::ScopedFeatureList scoped_feature_list_; + base::test::ScopedFeatureList scoped_feature_list_[2]; }; INSTANTIATE_TEST_SUITE_P(/* no label */, CookiePartitionKeyTest, - testing::Bool()); + ::testing::Values(std::make_tuple(false, false), + std::make_tuple(false, true), + std::make_tuple(true, true))); TEST_P(CookiePartitionKeyTest, Serialization) { base::UnguessableToken nonce = base::UnguessableToken::Create(); @@ -261,7 +267,8 @@ EXPECT_NE(nonce1, nonce2); auto key1 = CookiePartitionKey::FromNetworkIsolationKey( NetworkIsolationKey(top_level_site, frame_site, &nonce1)); - bool partitioned_cookies_enabled = PartitionedCookiesEnabled(); + bool partitioned_cookies_enabled = + PartitionedCookiesEnabled() || NoncedPartitionedCookiesEnabled(); EXPECT_EQ(partitioned_cookies_enabled, key1.has_value()); if (!partitioned_cookies_enabled) return;
diff --git a/net/dns/dns_query.cc b/net/dns/dns_query.cc index d1aab2b..01d7bab 100644 --- a/net/dns/dns_query.cc +++ b/net/dns/dns_query.cc
@@ -87,11 +87,8 @@ // OPT header is the minimum amount of padding. DCHECK(padding_size >= OptRecordRdata::Opt::kHeaderSize); - std::unique_ptr<OptRecordRdata::Opt> opt = - std::make_unique<OptRecordRdata::Opt>( - dns_protocol::kEdnsPadding, - std::string(padding_size - OptRecordRdata::Opt::kHeaderSize, 0)); - merged_opt_rdata->AddOpt(std::move(opt)); + merged_opt_rdata->AddOpt(std::make_unique<OptRecordRdata::PaddingOpt>( + padding_size - OptRecordRdata::Opt::kHeaderSize)); } return merged_opt_rdata;
diff --git a/net/dns/dns_query_unittest.cc b/net/dns/dns_query_unittest.cc index 010140f7..b09d6c8 100644 --- a/net/dns/dns_query_unittest.cc +++ b/net/dns/dns_query_unittest.cc
@@ -124,7 +124,7 @@ base::StringPiece qname(kQNameData, sizeof(kQNameData)); OptRecordRdata opt_rdata; opt_rdata.AddOpt( - std::make_unique<OptRecordRdata::Opt>(255, "\xde\xad\xbe\xef")); + OptRecordRdata::UnknownOpt::CreateForTesting(255, "\xde\xad\xbe\xef")); DnsQuery q1(0xbeef, qname, dns_protocol::kTypeA, &opt_rdata); EXPECT_EQ(dns_protocol::kTypeA, q1.qtype());
diff --git a/net/dns/dns_response_unittest.cc b/net/dns/dns_response_unittest.cc index e68a204..6908103b 100644 --- a/net/dns/dns_response_unittest.cc +++ b/net/dns/dns_response_unittest.cc
@@ -1322,7 +1322,7 @@ OptRecordRdata opt_rdata; opt_rdata.AddOpt( - std::make_unique<OptRecordRdata::Opt>(255, "\xde\xad\xbe\xef")); + OptRecordRdata::UnknownOpt::CreateForTesting(255, "\xde\xad\xbe\xef")); absl::optional<DnsQuery> query; query.emplace(0x1234 /* id */, dns_name, dns_protocol::kTypeA, &opt_rdata);
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc index a4f9d37..db7bfd9 100644 --- a/net/dns/dns_transaction_unittest.cc +++ b/net/dns/dns_transaction_unittest.cc
@@ -983,9 +983,9 @@ OptRecordRdata expected_opt_rdata; transaction_factory_->AddEDNSOption( - std::make_unique<OptRecordRdata::Opt>(123, "\xbe\xef")); + OptRecordRdata::UnknownOpt::CreateForTesting(123, "\xbe\xef")); expected_opt_rdata.AddOpt( - std::make_unique<OptRecordRdata::Opt>(123, "\xbe\xef")); + OptRecordRdata::UnknownOpt::CreateForTesting(123, "\xbe\xef")); AddAsyncQueryAndResponse(0 /* id */, kT0HostName, kT0Qtype, kT0ResponseDatagram, std::size(kT0ResponseDatagram), @@ -1009,9 +1009,10 @@ for (auto& param : params) { transaction_factory_->AddEDNSOption( - std::make_unique<OptRecordRdata::Opt>(param.first, param.second)); - expected_opt_rdata.AddOpt( - std::make_unique<OptRecordRdata::Opt>(param.first, param.second)); + OptRecordRdata::UnknownOpt::CreateForTesting(param.first, + param.second)); + expected_opt_rdata.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( + param.first, param.second)); } AddAsyncQueryAndResponse(0 /* id */, kT0HostName, kT0Qtype,
diff --git a/net/dns/opt_record_rdata.cc b/net/dns/opt_record_rdata.cc index 6cca6f1..cb4fe256 100644 --- a/net/dns/opt_record_rdata.cc +++ b/net/dns/opt_record_rdata.cc
@@ -5,17 +5,18 @@ #include "net/dns/opt_record_rdata.h" #include <algorithm> +#include <memory> #include <numeric> #include <utility> #include "base/big_endian.h" -#include "base/check_op.h" +#include "base/check_is_test.h" +#include "base/containers/contains.h" #include "base/memory/ptr_util.h" +#include "base/numerics/safe_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" -#include "net/base/io_buffer.h" -#include "net/dns/dns_response.h" -#include "third_party/abseil-cpp/absl/types/optional.h" +#include "net/dns/public/dns_protocol.h" namespace net { @@ -30,8 +31,7 @@ } } // namespace -OptRecordRdata::Opt::Opt(uint16_t code, std::string data) - : code_(code), data_(std::move(data)) {} +OptRecordRdata::Opt::Opt(std::string data) : data_(std::move(data)) {} bool OptRecordRdata::Opt::operator==(const OptRecordRdata::Opt& other) const { return IsEqual(other); @@ -42,11 +42,11 @@ } bool OptRecordRdata::Opt::IsEqual(const OptRecordRdata::Opt& other) const { - return code_ == other.code_ && data() == other.data(); + return GetCode() == other.GetCode() && data() == other.data(); } OptRecordRdata::EdeOpt::EdeOpt(uint16_t info_code, std::string extra_text) - : Opt(EdeOpt::kOptCode, SerializeEdeOpt(info_code, extra_text)), + : Opt(SerializeEdeOpt(info_code, extra_text)), info_code_(info_code), extra_text_(std::move(extra_text)) { CHECK(base::IsStringUTF8(extra_text_)); @@ -74,6 +74,10 @@ return std::make_unique<EdeOpt>(info_code, std::move(extra_text_str)); } +uint16_t OptRecordRdata::EdeOpt::GetCode() const { + return EdeOpt::kOptCode; +} + OptRecordRdata::EdeOpt::EdeInfoCode OptRecordRdata::EdeOpt::GetEnumFromInfoCode() const { return GetEnumFromInfoCode(info_code_); @@ -143,7 +147,35 @@ } } -OptRecordRdata::EdeOpt::EdeOpt() = default; +OptRecordRdata::PaddingOpt::PaddingOpt(std::string padding) + : Opt(std::move(padding)) {} + +OptRecordRdata::PaddingOpt::PaddingOpt(uint16_t padding_len) + : Opt(std::string(base::checked_cast<size_t>(padding_len), '\0')) {} + +OptRecordRdata::PaddingOpt::~PaddingOpt() = default; + +uint16_t OptRecordRdata::PaddingOpt::GetCode() const { + return PaddingOpt::kOptCode; +} + +OptRecordRdata::UnknownOpt::~UnknownOpt() = default; + +std::unique_ptr<OptRecordRdata::UnknownOpt> +OptRecordRdata::UnknownOpt::CreateForTesting(uint16_t code, std::string data) { + CHECK_IS_TEST(); + return base::WrapUnique( + new OptRecordRdata::UnknownOpt(code, std::move(data))); +} + +OptRecordRdata::UnknownOpt::UnknownOpt(uint16_t code, std::string data) + : Opt(std::move(data)), code_(code) { + CHECK(!base::Contains(kOptsWithDedicatedClasses, code)); +} + +uint16_t OptRecordRdata::UnknownOpt::GetCode() const { + return code_; +} OptRecordRdata::OptRecordRdata() = default; @@ -181,11 +213,17 @@ std::unique_ptr<Opt> opt; - if (opt_code == dns_protocol::kEdnsExtendedDnsError) { - opt = OptRecordRdata::EdeOpt::Create(std::move(opt_data)); - } else { - opt = - std::make_unique<OptRecordRdata::Opt>(opt_code, std::move(opt_data)); + switch (opt_code) { + case dns_protocol::kEdnsPadding: + opt = std::make_unique<OptRecordRdata::PaddingOpt>(std::move(opt_data)); + break; + case dns_protocol::kEdnsExtendedDnsError: + opt = OptRecordRdata::EdeOpt::Create(std::move(opt_data)); + break; + default: + opt = base::WrapUnique( + new OptRecordRdata::UnknownOpt(opt_code, std::move(opt_data))); + break; } // Confirm that opt is not null, which would be the result of a failed @@ -205,8 +243,9 @@ } bool OptRecordRdata::IsEqual(const RecordRdata* other) const { - if (other->Type() != Type()) + if (other->Type() != Type()) { return false; + } const OptRecordRdata* opt_other = static_cast<const OptRecordRdata*>(other); return opt_other->buf_ == buf_; } @@ -221,12 +260,12 @@ // Start writing from the end of the existing rdata. base::BigEndianWriter writer(buf_.data(), buf_.size()); CHECK(writer.Skip(orig_rdata_size)); - bool success = writer.WriteU16(opt->code()) && + bool success = writer.WriteU16(opt->GetCode()) && writer.WriteU16(opt_data.size()) && writer.WriteBytes(opt_data.data(), opt_data.size()); DCHECK(success); - opts_.emplace(opt->code(), std::move(opt)); + opts_.emplace(opt->GetCode(), std::move(opt)); } bool OptRecordRdata::ContainsOptCode(uint16_t opt_code) const { @@ -242,6 +281,16 @@ return opts; } +std::vector<const OptRecordRdata::PaddingOpt*> OptRecordRdata::GetPaddingOpts() + const { + std::vector<const OptRecordRdata::PaddingOpt*> opts; + auto range = opts_.equal_range(dns_protocol::kEdnsPadding); + for (auto it = range.first; it != range.second; ++it) { + opts.push_back(static_cast<const PaddingOpt*>(it->second.get())); + } + return opts; +} + std::vector<const OptRecordRdata::EdeOpt*> OptRecordRdata::GetEdeOpts() const { std::vector<const OptRecordRdata::EdeOpt*> opts; auto range = opts_.equal_range(dns_protocol::kEdnsExtendedDnsError);
diff --git a/net/dns/opt_record_rdata.h b/net/dns/opt_record_rdata.h index 14de53a..9c7c4bfb3 100644 --- a/net/dns/opt_record_rdata.h +++ b/net/dns/opt_record_rdata.h
@@ -12,8 +12,6 @@ #include <string> #include <vector> -#include "base/compiler_specific.h" -#include "base/logging.h" #include "base/strings/string_piece.h" #include "net/base/net_export.h" #include "net/dns/public/dns_protocol.h" @@ -24,12 +22,14 @@ // OPT record format (https://tools.ietf.org/html/rfc6891): class NET_EXPORT_PRIVATE OptRecordRdata : public RecordRdata { public: + static std::unique_ptr<OptRecordRdata> Create(base::StringPiece data); + class NET_EXPORT_PRIVATE Opt { public: static constexpr size_t kHeaderSize = 4; // sizeof(code) + sizeof(size) - Opt() = default; - Opt(uint16_t code, std::string data); + Opt() = delete; + explicit Opt(std::string data); Opt(const Opt& other) = delete; Opt& operator=(const Opt& other) = delete; @@ -40,12 +40,11 @@ bool operator==(const Opt& other) const; bool operator!=(const Opt& other) const; - uint16_t code() const { return code_; } + virtual uint16_t GetCode() const = 0; base::StringPiece data() const { return data_; } private: bool IsEqual(const Opt& other) const; - uint16_t code_; std::string data_; }; @@ -100,6 +99,7 @@ // Attempts to parse an EDE option from `data`. Returns nullptr on failure. static std::unique_ptr<EdeOpt> Create(std::string data); + uint16_t GetCode() const override; uint16_t info_code() const { return info_code_; } base::StringPiece extra_text() const { return extra_text_; } @@ -115,6 +115,60 @@ std::string extra_text_; }; + class NET_EXPORT_PRIVATE PaddingOpt : public Opt { + public: + static const uint16_t kOptCode = dns_protocol::kEdnsPadding; + + PaddingOpt() = delete; + // Construct a PaddingOpt with the specified padding string. + explicit PaddingOpt(std::string padding); + // Constructs PaddingOpt with '\0' character padding of specified length. + // Note: This padding_len only specifies the length of the data section. + // Users must take into account the header length `Opt::kHeaderSize` + explicit PaddingOpt(uint16_t padding_len); + + PaddingOpt(const PaddingOpt& other) = delete; + PaddingOpt& operator=(const PaddingOpt& other) = delete; + PaddingOpt(PaddingOpt&& other) = delete; + PaddingOpt& operator=(PaddingOpt&& other) = delete; + ~PaddingOpt() override; + + uint16_t GetCode() const override; + }; + + class NET_EXPORT_PRIVATE UnknownOpt : public Opt { + public: + UnknownOpt() = delete; + UnknownOpt(const UnknownOpt& other) = delete; + UnknownOpt& operator=(const UnknownOpt& other) = delete; + UnknownOpt(UnknownOpt&& other) = delete; + UnknownOpt& operator=(UnknownOpt&& other) = delete; + ~UnknownOpt() override; + + // Create UnknownOpt with option code and data. + // Cannot instantiate UnknownOpt directly in order to prevent Opt with + // dedicated class class (ex. EdeOpt) from being stored in UnknownOpt. + // object. + // This method must purely be used for testing. + // Only the parser can instantiate an UnknownOpt object (via friend + // classes). + static std::unique_ptr<UnknownOpt> CreateForTesting(uint16_t code, + std::string data); + + uint16_t GetCode() const override; + + private: + UnknownOpt(uint16_t code, std::string data); + + uint16_t code_; + + friend std::unique_ptr<OptRecordRdata> OptRecordRdata::Create( + base::StringPiece data); + }; + + static constexpr uint16_t kOptsWithDedicatedClasses[] = { + dns_protocol::kEdnsPadding, dns_protocol::kEdnsExtendedDnsError}; + static const uint16_t kType = dns_protocol::kTypeOPT; OptRecordRdata(); @@ -130,8 +184,6 @@ bool operator==(const RecordRdata& other) const; bool operator!=(const RecordRdata& other) const; - static std::unique_ptr<OptRecordRdata> Create(base::StringPiece data); - // Checks whether two OptRecordRdata objects are equal. This comparison takes // into account the order of insertion. Two OptRecordRdata objects with // identical Opt records inserted in a different order will not be equal. @@ -159,6 +211,9 @@ // Returns all EDE options in insertion order. std::vector<const EdeOpt*> GetEdeOpts() const; + // Returns all Padding options in insertion order. + std::vector<const PaddingOpt*> GetPaddingOpts() const; + private: // Opt objects are stored in a multimap; key is the opt code. std::multimap<uint16_t, const std::unique_ptr<const Opt>> opts_;
diff --git a/net/dns/opt_record_rdata_unittest.cc b/net/dns/opt_record_rdata_unittest.cc index 426560b8..7745bbcb 100644 --- a/net/dns/opt_record_rdata_unittest.cc +++ b/net/dns/opt_record_rdata_unittest.cc
@@ -61,10 +61,15 @@ // character will be truncated. // https://crbug.com/1348679 - ASSERT_EQ(*(rdata_obj->GetOpts()[0]), - OptRecordRdata::Opt(1, std::string("\xde\xad", 2))); - ASSERT_EQ(*(rdata_obj->GetOpts()[1]), - OptRecordRdata::Opt(255, std::string("\xde\xad\xbe\xef", 4))); + std::unique_ptr<OptRecordRdata::UnknownOpt> opt0 = + OptRecordRdata::UnknownOpt::CreateForTesting(1, + std::string("\xde\xad", 2)); + std::unique_ptr<OptRecordRdata::UnknownOpt> opt1 = + OptRecordRdata::UnknownOpt::CreateForTesting( + 255, std::string("\xde\xad\xbe\xef", 4)); + + ASSERT_EQ(*(rdata_obj->GetOpts()[0]), *(opt0.get())); + ASSERT_EQ(*(rdata_obj->GetOpts()[1]), *(opt1.get())); } TEST(OptRecordRdataTest, ParseOptRecordWithShorterSizeThanData) { @@ -101,19 +106,25 @@ ASSERT_THAT(rdata_obj, IsNull()); } -TEST(OptRecordRdataTest, AddOptToOptRecord) { - // This is just the rdata portion of an OPT record, rather than a complete - // record. - const uint8_t expected_rdata[] = { - 0x00, 0xFF, // OPT code - 0x00, 0x04, // OPT data size - 0xDE, 0xAD, 0xBE, 0xEF // OPT data - }; +TEST(OptRecordRdataTest, CreateEdeOpt) { + OptRecordRdata::EdeOpt opt0(22, std::string("Don Quixote")); - OptRecordRdata rdata; - rdata.AddOpt(std::make_unique<OptRecordRdata::Opt>( - 255, std::string("\xde\xad\xbe\xef", 4))); - EXPECT_THAT(rdata.buf(), ElementsAreArray(expected_rdata)); + ASSERT_EQ(opt0.data(), std::string("\x00\x16" + "Don Quixote", + 13)); + ASSERT_EQ(opt0.info_code(), 22u); + ASSERT_EQ(opt0.extra_text(), std::string("Don Quixote")); + + std::unique_ptr<OptRecordRdata::EdeOpt> opt1 = + OptRecordRdata::EdeOpt::Create(std::string("\x00\x08" + "Manhattan", + 11)); + + ASSERT_EQ(opt1->data(), std::string("\x00\x08" + "Manhattan", + 11)); + ASSERT_EQ(opt1->info_code(), 8u); + ASSERT_EQ(opt1->extra_text(), std::string("Manhattan")); } TEST(OptRecordRdataTest, TestEdeInfoCode) { @@ -146,13 +157,13 @@ 0x00, 0x0F, // OPT code (15 for EDE) 0x00, 0x05, // OPT data size (info code + extra text) 0x00, 0x0D, // EDE info code (13 for Cached Error) - 'U', 'S', 'A', // UTF-8 EDE extra text ("USA") + 'M', 'T', 'A', // UTF-8 EDE extra text ("MTA") // Third OPT (EDE record) 0x00, 0x0F, // OPT code (15 for EDE) 0x00, 0x06, // OPT data size (info code + extra text) 0x00, 0x10, // EDE info code (16 for Censored) - 'B', 'I', 'O', 'S' // UTF-8 EDE extra text ("BIOS") + 'M', 'B', 'T', 'A' // UTF-8 EDE extra text ("MBTA") }; base::StringPiece rdata_strpiece = MakeStringPiece(rdata, sizeof(rdata)); @@ -163,23 +174,17 @@ ASSERT_THAT(rdata_obj, NotNull()); ASSERT_EQ(rdata_obj->OptCount(), 3u); - // Test Non EDE (all opts in OPT format) - OptRecordRdata::Opt opt0(6, std::string("\xb0\xba\xfe\x77", 4)); - OptRecordRdata::Opt opt1(15, std::string("\x00\x0d" - "USA", - 5)); - OptRecordRdata::Opt opt2(15, std::string("\x00\x10" - "BIOS", - 6)); + // Test Unknown Opt + std::unique_ptr<OptRecordRdata::UnknownOpt> opt0 = + OptRecordRdata::UnknownOpt::CreateForTesting( + 6, std::string("\xb0\xba\xfe\x77", 4)); ASSERT_THAT(rdata_obj->GetOpts(), SizeIs(3)); - ASSERT_EQ(*rdata_obj->GetOpts()[0], opt0); - ASSERT_EQ(*rdata_obj->GetOpts()[1], opt1); - ASSERT_EQ(*rdata_obj->GetOpts()[2], opt2); + ASSERT_EQ(*rdata_obj->GetOpts()[0], *opt0.get()); // Test EDE - OptRecordRdata::EdeOpt edeOpt0(13, std::string("USA", 3)); - OptRecordRdata::EdeOpt edeOpt1(16, std::string("BIOS", 4)); + OptRecordRdata::EdeOpt edeOpt0(13, std::string("MTA", 3)); + OptRecordRdata::EdeOpt edeOpt1(16, std::string("MBTA", 4)); ASSERT_THAT(rdata_obj->GetEdeOpts(), SizeIs(2)); ASSERT_EQ(*rdata_obj->GetEdeOpts()[0], edeOpt0); @@ -189,8 +194,8 @@ ASSERT_EQ(rdata_obj->GetEdeOpts()[0]->data(), edeOpt0.data()); ASSERT_EQ(rdata_obj->GetEdeOpts()[1]->data(), edeOpt1.data()); - ASSERT_EQ(rdata_obj->GetEdeOpts()[0]->extra_text(), std::string("USA", 3)); - ASSERT_EQ(rdata_obj->GetEdeOpts()[1]->extra_text(), std::string("BIOS", 4)); + ASSERT_EQ(rdata_obj->GetEdeOpts()[0]->extra_text(), std::string("MTA", 3)); + ASSERT_EQ(rdata_obj->GetEdeOpts()[1]->extra_text(), std::string("MBTA", 4)); ASSERT_EQ(rdata_obj->GetEdeOpts()[0]->info_code(), edeOpt0.info_code()); ASSERT_EQ(rdata_obj->GetEdeOpts()[1]->info_code(), edeOpt1.info_code()); @@ -202,7 +207,7 @@ // `rdata_obj1` second opt has extra text "BIOO" // Note: rdata_obj0 and rdata_obj1 have 2 common Opts and 1 different one. OptRecordRdata rdata_obj0; - rdata_obj0.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj0.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 6, std::string("\xb0\xba\xfe\x77", 4))); rdata_obj0.AddOpt( std::make_unique<OptRecordRdata::EdeOpt>(13, std::string("USA", 3))); @@ -211,7 +216,7 @@ ASSERT_EQ(rdata_obj0.OptCount(), 3u); OptRecordRdata rdata_obj1; - rdata_obj1.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj1.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 6, std::string("\xb0\xba\xfe\x77", 4))); rdata_obj1.AddOpt( std::make_unique<OptRecordRdata::EdeOpt>(13, std::string("USA", 3))); @@ -300,10 +305,10 @@ // Check that an EDE record with an unknown info code is parsed correctly. TEST(OptRecordRdataTest, EdeRecordUnknownInfoCode) { const uint8_t rdata[] = { - 0x00, 0x0F, // OPT code (15 for EDE) - 0x00, 0x06, // OPT data size (info code + extra text) - 0x00, 0x44, // Info Code (68 doesn't exist) - 'R', '2', 'D', '2' // Extra Text ("R2D2") + 0x00, 0x0F, // OPT code (15 for EDE) + 0x00, 0x08, // OPT data size (info code + extra text) + 0x00, 0x44, // Info Code (68 doesn't exist) + 'B', 'O', 'S', 'T', 'O', 'N' // Extra Text ("BOSTON") }; base::StringPiece rdata_strpiece = MakeStringPiece(rdata, sizeof(rdata)); @@ -313,28 +318,87 @@ ASSERT_THAT(rdata_obj->GetEdeOpts(), SizeIs(1)); auto* opt = rdata_obj->GetEdeOpts()[0]; ASSERT_EQ(opt->data(), std::string("\x00\x44" - "R2D2", - 6)); + "BOSTON", + 8)); ASSERT_EQ(opt->info_code(), 68u); - ASSERT_EQ(opt->extra_text(), std::string("R2D2", 4)); + ASSERT_EQ(opt->extra_text(), std::string("BOSTON", 6)); ASSERT_EQ(opt->GetEnumFromInfoCode(), OptRecordRdata::EdeOpt::EdeInfoCode::kUnrecognizedErrorCode); } -TEST(OptRecordRdataTest, EqualityIsOptOrderInsensitive) { +TEST(OptRecordRdataTest, CreatePaddingOpt) { + std::unique_ptr<OptRecordRdata::PaddingOpt> opt0 = + std::make_unique<OptRecordRdata::PaddingOpt>(12); + + ASSERT_EQ(opt0->data(), std::string(12, '\0')); + ASSERT_THAT(opt0->data(), SizeIs(12u)); + + std::unique_ptr<OptRecordRdata::PaddingOpt> opt1 = + std::make_unique<OptRecordRdata::PaddingOpt>("MASSACHUSETTS"); + + ASSERT_EQ(opt1->data(), std::string("MASSACHUSETTS")); + ASSERT_THAT(opt1->data(), SizeIs(13u)); +} + +TEST(OptRecordRdataTest, ParsePaddingOpt) { + const uint8_t rdata[] = { + // First OPT + 0x00, 0x0C, // OPT code + 0x00, 0x07, // OPT data size + 0xB0, 0x03, // OPT data padding (Book of Boba Fett) + 0x0F, 0xB0, 0xBA, 0xFE, 0x77, + }; + + base::StringPiece rdata_strpiece = MakeStringPiece(rdata, sizeof(rdata)); + std::unique_ptr<OptRecordRdata> rdata_obj = + OptRecordRdata::Create(rdata_strpiece); + + ASSERT_THAT(rdata_obj, NotNull()); + ASSERT_EQ(rdata_obj->OptCount(), 1u); + ASSERT_THAT(rdata_obj->GetOpts(), SizeIs(1)); + ASSERT_THAT(rdata_obj->GetPaddingOpts(), SizeIs(1)); + + // Check elements + OptRecordRdata::PaddingOpt opt0( + std::string("\xb0\x03\x0f\xb0\xba\xfe\x77", 7)); + + ASSERT_EQ(*(rdata_obj->GetOpts()[0]), opt0); + ASSERT_EQ(*(rdata_obj->GetPaddingOpts()[0]), opt0); + ASSERT_THAT(opt0.data(), SizeIs(7u)); +} + +TEST(OptRecordRdataTest, AddOptToOptRecord) { + // This is just the rdata portion of an OPT record, rather than a complete + // record. + const uint8_t expected_rdata[] = { + 0x00, 0xFF, // OPT code + 0x00, 0x04, // OPT data size + 0xDE, 0xAD, 0xBE, 0xEF // OPT data + }; + + OptRecordRdata rdata; + rdata.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( + 255, std::string("\xde\xad\xbe\xef", 4))); + EXPECT_THAT(rdata.buf(), ElementsAreArray(expected_rdata)); +} + +// Test the OptRecordRdata equality operator. +// Equality must be order sensitive. If Opts are same but inserted in different +// order, test will fail epically. +TEST(OptRecordRdataTest, EqualityIsOptOrderSensitive) { // Control rdata OptRecordRdata rdata_obj0; - rdata_obj0.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj0.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 1, std::string("\xb0\xba\xfe\x77", 4))); - rdata_obj0.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj0.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 2, std::string("\xb1\x05\xf0\x0d", 4))); ASSERT_EQ(rdata_obj0.OptCount(), 2u); // Same as `rdata_obj0` OptRecordRdata rdata_obj1; - rdata_obj1.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj1.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 1, std::string("\xb0\xba\xfe\x77", 4))); - rdata_obj1.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj1.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 2, std::string("\xb1\x05\xf0\x0d", 4))); ASSERT_EQ(rdata_obj1.OptCount(), 2u); @@ -342,9 +406,9 @@ // Same contents as `rdata_obj0` & `rdata_obj1`, but different order OptRecordRdata rdata_obj2; - rdata_obj2.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj2.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 2, std::string("\xb1\x05\xf0\x0d", 4))); - rdata_obj2.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj2.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 1, std::string("\xb0\xba\xfe\x77", 4))); ASSERT_EQ(rdata_obj2.OptCount(), 2u); @@ -354,13 +418,13 @@ // Contains only `rdata_obj0` first opt // 2nd opt is added later OptRecordRdata rdata_obj3; - rdata_obj3.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj3.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 1, std::string("\xb0\xba\xfe\x77", 4))); ASSERT_EQ(rdata_obj3.OptCount(), 1u); ASSERT_FALSE(rdata_obj0.IsEqual(&rdata_obj3)); - rdata_obj3.AddOpt(std::make_unique<OptRecordRdata::Opt>( + rdata_obj3.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( 2, std::string("\xb1\x05\xf0\x0d", 4))); ASSERT_TRUE(rdata_obj0.IsEqual(&rdata_obj3)); @@ -375,12 +439,12 @@ // Sort by key, then by insertion order. TEST(OptRecordRdataTest, TestGetOptsOrder) { OptRecordRdata rdata_obj0; - rdata_obj0.AddOpt( - std::make_unique<OptRecordRdata::Opt>(10, std::string("\x33\x33", 2))); - rdata_obj0.AddOpt( - std::make_unique<OptRecordRdata::Opt>(5, std::string("\x11\x11", 2))); - rdata_obj0.AddOpt( - std::make_unique<OptRecordRdata::Opt>(5, std::string("\x22\x22", 2))); + rdata_obj0.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( + 10, std::string("\x33\x33", 2))); + rdata_obj0.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( + 5, std::string("\x11\x11", 2))); + rdata_obj0.AddOpt(OptRecordRdata::UnknownOpt::CreateForTesting( + 5, std::string("\x22\x22", 2))); ASSERT_EQ(rdata_obj0.OptCount(), 3u); auto opts = rdata_obj0.GetOpts();
diff --git a/net/dns/public/dns_protocol.h b/net/dns/public/dns_protocol.h index 7b9a972..f3d28de 100644 --- a/net/dns/public/dns_protocol.h +++ b/net/dns/public/dns_protocol.h
@@ -190,7 +190,7 @@ // DNS EDNS(0) option codes (OPT) // // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-11 -static const uint16_t kEdnsPadding = 12; +static constexpr uint16_t kEdnsPadding = 12; static constexpr uint16_t kEdnsExtendedDnsError = 15; // DNS header flags.
diff --git a/net/filter/brotli_source_stream.cc b/net/filter/brotli_source_stream.cc index 5e708779..82dd4cc 100644 --- a/net/filter/brotli_source_stream.cc +++ b/net/filter/brotli_source_stream.cc
@@ -80,19 +80,20 @@ // SourceStream implementation std::string GetTypeAsString() const override { return kBrotli; } - int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool /*upstream_eof_reached*/) override { + base::expected<size_t, Error> FilterData( + IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool /*upstream_eof_reached*/) override { if (decoding_status_ == DecodingStatus::DECODING_DONE) { *consumed_bytes = input_buffer_size; - return OK; + return 0; } if (decoding_status_ != DecodingStatus::DECODING_IN_PROGRESS) - return ERR_CONTENT_DECODING_FAILED; + return base::unexpected(ERR_CONTENT_DECODING_FAILED); const uint8_t* next_in = base::bit_cast<uint8_t*>(input_buffer->data()); size_t available_in = input_buffer_size; @@ -105,8 +106,8 @@ size_t bytes_used = input_buffer_size - available_in; size_t bytes_written = output_buffer_size - available_out; - CHECK_GE(bytes_used, 0u); - CHECK_GE(bytes_written, 0u); + CHECK_GE(input_buffer_size, available_in); + CHECK_GE(output_buffer_size, available_out); produced_bytes_ += bytes_written; consumed_bytes_ += bytes_used; @@ -129,7 +130,7 @@ // If the decompressor threw an error, fail synchronously. default: decoding_status_ = DecodingStatus::DECODING_ERROR; - return ERR_CONTENT_DECODING_FAILED; + return base::unexpected(ERR_CONTENT_DECODING_FAILED); } }
diff --git a/net/filter/filter_source_stream.cc b/net/filter/filter_source_stream.cc index ae08a47..16b46ed 100644 --- a/net/filter/filter_source_stream.cc +++ b/net/filter/filter_source_stream.cc
@@ -56,7 +56,7 @@ } output_buffer_ = read_buffer; - output_buffer_size_ = read_buffer_size; + output_buffer_size_ = base::checked_cast<size_t>(read_buffer_size); int rv = DoLoop(OK); if (rv == ERR_IO_PENDING) @@ -152,30 +152,40 @@ DCHECK(output_buffer_); DCHECK(drainable_input_buffer_); - int consumed_bytes = 0; - int bytes_output = FilterData(output_buffer_.get(), output_buffer_size_, - drainable_input_buffer_.get(), - drainable_input_buffer_->BytesRemaining(), - &consumed_bytes, upstream_end_reached_); - DCHECK_LE(consumed_bytes, drainable_input_buffer_->BytesRemaining()); - DCHECK(bytes_output != 0 || - consumed_bytes == drainable_input_buffer_->BytesRemaining()); + size_t consumed_bytes = 0; + base::expected<size_t, Error> bytes_output = FilterData( + output_buffer_.get(), output_buffer_size_, drainable_input_buffer_.get(), + drainable_input_buffer_->BytesRemaining(), &consumed_bytes, + upstream_end_reached_); + const auto bytes_remaining = + base::checked_cast<size_t>(drainable_input_buffer_->BytesRemaining()); + if (bytes_output.has_value() && bytes_output.value() == 0) { + DCHECK_EQ(consumed_bytes, bytes_remaining); + } else { + DCHECK_LE(consumed_bytes, bytes_remaining); + } // FilterData() is not allowed to return ERR_IO_PENDING. - DCHECK_NE(ERR_IO_PENDING, bytes_output); + if (!bytes_output.has_value()) + DCHECK_NE(ERR_IO_PENDING, bytes_output.error()); if (consumed_bytes > 0) drainable_input_buffer_->DidConsume(consumed_bytes); // Received data or encountered an error. - if (bytes_output != 0) - return bytes_output; + if (!bytes_output.has_value()) { + CHECK_LT(bytes_output.error(), 0); + return bytes_output.error(); + } + if (bytes_output.value() != 0) + return base::checked_cast<int>(bytes_output.value()); + // If no data is returned, continue reading if |this| needs more input. if (NeedMoreData()) { DCHECK_EQ(0, drainable_input_buffer_->BytesRemaining()); next_state_ = STATE_READ_DATA; } - return bytes_output; + return 0; } void FilterSourceStream::OnIOComplete(int result) {
diff --git a/net/filter/filter_source_stream.h b/net/filter/filter_source_stream.h index 6450a55f..40af692 100644 --- a/net/filter/filter_source_stream.h +++ b/net/filter/filter_source_stream.h
@@ -9,6 +9,7 @@ #include <string> #include "base/memory/ref_counted.h" +#include "base/types/expected.h" #include "net/base/completion_once_callback.h" #include "net/base/net_errors.h" #include "net/base/net_export.h" @@ -76,12 +77,13 @@ // with |upstream_eof_reached| = true. // TODO(xunjieli): consider allowing asynchronous response via callback // to support off-thread decompression. - virtual int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool upstream_eof_reached) = 0; + virtual base::expected<size_t, Error> FilterData( + IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool upstream_eof_reached) = 0; // Returns a string representation of the type of this FilterSourceStream. // This is for UMA logging. @@ -110,7 +112,7 @@ // Not null if there is a pending Read. scoped_refptr<IOBuffer> output_buffer_; - int output_buffer_size_ = 0; + size_t output_buffer_size_ = 0; CompletionOnceCallback callback_; // Reading from |upstream_| has returned 0 byte or an error code.
diff --git a/net/filter/filter_source_stream_unittest.cc b/net/filter/filter_source_stream_unittest.cc index 70679cd..16e4079 100644 --- a/net/filter/filter_source_stream_unittest.cc +++ b/net/filter/filter_source_stream_unittest.cc
@@ -42,12 +42,12 @@ // Writes contents of |buffer_| to |output_buffer| and returns the number of // bytes written or an error code. Additionally removes consumed data from // |buffer_|. - int WriteBufferToOutput(IOBuffer* output_buffer, int output_buffer_size) { - size_t bytes_to_filter = - std::min(buffer_.length(), static_cast<size_t>(output_buffer_size)); + size_t WriteBufferToOutput(IOBuffer* output_buffer, + size_t output_buffer_size) { + size_t bytes_to_filter = std::min(buffer_.length(), output_buffer_size); memcpy(output_buffer->data(), buffer_.data(), bytes_to_filter); buffer_.erase(0, bytes_to_filter); - return base::checked_cast<int>(bytes_to_filter); + return bytes_to_filter; } // Buffer used by subclasses to hold data that is yet to be passed to the @@ -72,12 +72,12 @@ NeedsAllInputFilterSourceStream& operator=( const NeedsAllInputFilterSourceStream&) = delete; - int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool upstream_eof_reached) override { + base::expected<size_t, Error> FilterData(IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool upstream_eof_reached) override { buffer_.append(input_buffer->data(), input_buffer_size); EXPECT_GE(expected_input_bytes_, input_buffer_size); expected_input_bytes_ -= input_buffer_size; @@ -86,13 +86,13 @@ // Keep returning 0 bytes read until all input has been consumed. return 0; } - EXPECT_EQ(0, expected_input_bytes_); + EXPECT_EQ(0u, expected_input_bytes_); return WriteBufferToOutput(output_buffer, output_buffer_size); } private: // Expected remaining bytes to be received from |upstream|. - int expected_input_bytes_; + size_t expected_input_bytes_; }; // A FilterSourceStream that repeat every input byte by |multiplier| amount of @@ -106,13 +106,14 @@ MultiplySourceStream(const MultiplySourceStream&) = delete; MultiplySourceStream& operator=(const MultiplySourceStream&) = delete; - int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool /*upstream_eof_reached*/) override { - for (int i = 0; i < input_buffer_size; i++) { + base::expected<size_t, Error> FilterData( + IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool /*upstream_eof_reached*/) override { + for (size_t i = 0; i < input_buffer_size; i++) { for (int j = 0; j < multiplier_; j++) buffer_.append(input_buffer->data() + i, 1); } @@ -134,12 +135,13 @@ PassThroughFilterSourceStream& operator=( const PassThroughFilterSourceStream&) = delete; - int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool /*upstream_eof_reached*/) override { + base::expected<size_t, Error> FilterData( + IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool /*upstream_eof_reached*/) override { buffer_.append(input_buffer->data(), input_buffer_size); *consumed_bytes = input_buffer_size; return WriteBufferToOutput(output_buffer, output_buffer_size); @@ -156,15 +158,16 @@ ThrottleSourceStream(const ThrottleSourceStream&) = delete; ThrottleSourceStream& operator=(const ThrottleSourceStream&) = delete; - int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool /*upstream_eof_reached*/) override { + base::expected<size_t, Error> FilterData( + IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool /*upstream_eof_reached*/) override { buffer_.append(input_buffer->data(), input_buffer_size); *consumed_bytes = input_buffer_size; - int bytes_to_read = std::min(1, static_cast<int>(buffer_.size())); + size_t bytes_to_read = std::min(size_t{1}, buffer_.size()); memcpy(output_buffer->data(), buffer_.data(), bytes_to_read); buffer_.erase(0, bytes_to_read); return bytes_to_read; @@ -182,24 +185,25 @@ NoOutputSourceStream(const NoOutputSourceStream&) = delete; NoOutputSourceStream& operator=(const NoOutputSourceStream&) = delete; - int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool /*upstream_eof_reached*/) override { + base::expected<size_t, Error> FilterData( + IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool /*upstream_eof_reached*/) override { + EXPECT_GE(expected_input_size_, input_buffer_size); expected_input_size_ -= input_buffer_size; *consumed_bytes = input_buffer_size; - EXPECT_LE(0, expected_input_size_); consumed_all_input_ = (expected_input_size_ == 0); - return OK; + return 0; } bool consumed_all_input() const { return consumed_all_input_; } private: // Expected remaining bytes to be received from |upstream|. - int expected_input_size_; + size_t expected_input_size_; bool consumed_all_input_ = false; }; @@ -212,13 +216,14 @@ ErrorFilterSourceStream(const ErrorFilterSourceStream&) = delete; ErrorFilterSourceStream& operator=(const ErrorFilterSourceStream&) = delete; - int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool /*upstream_eof_reached*/) override { - return ERR_CONTENT_DECODING_FAILED; + base::expected<size_t, Error> FilterData( + IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool /*upstream_eof_reached*/) override { + return base::unexpected(ERR_CONTENT_DECODING_FAILED); } std::string GetTypeAsString() const override { return ""; } };
diff --git a/net/filter/gzip_source_stream.cc b/net/filter/gzip_source_stream.cc index b9c124a..2c73deb3 100644 --- a/net/filter/gzip_source_stream.cc +++ b/net/filter/gzip_source_stream.cc
@@ -84,16 +84,17 @@ } } -int GzipSourceStream::FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool upstream_end_reached) { +base::expected<size_t, Error> GzipSourceStream::FilterData( + IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool upstream_end_reached) { *consumed_bytes = 0; char* input_data = input_buffer->data(); - int input_data_size = input_buffer_size; - int bytes_out = 0; + size_t input_data_size = input_buffer_size; + size_t bytes_out = 0; bool state_compressed_entered = false; while (input_data_size > 0 && bytes_out < output_buffer_size) { InputState state = input_state_; @@ -103,7 +104,7 @@ input_state_ = STATE_SNIFFING_DEFLATE_HEADER; break; } - DCHECK_LT(0, input_data_size); + DCHECK_GT(input_data_size, 0u); input_state_ = STATE_GZIP_HEADER; break; } @@ -120,12 +121,12 @@ } else if (status == GZipHeader::COMPLETE_HEADER) { // If there is a valid header, there should also be a valid footer. gzip_footer_bytes_left_ = kGzipFooterBytes; - int bytes_consumed = end - input_data; + size_t bytes_consumed = static_cast<size_t>(end - input_data); input_data += bytes_consumed; input_data_size -= bytes_consumed; input_state_ = STATE_COMPRESSED_BODY; } else if (status == GZipHeader::INVALID_HEADER) { - return ERR_CONTENT_DECODING_FAILED; + return base::unexpected(ERR_CONTENT_DECODING_FAILED); } break; } @@ -146,7 +147,7 @@ // calls needs to be replayed. if (ret != Z_STREAM_END && ret != Z_OK) { if (!InsertZlibHeader()) - return ERR_CONTENT_DECODING_FAILED; + return base::unexpected(ERR_CONTENT_DECODING_FAILED); input_state_ = STATE_REPLAY_DATA; // |replay_state_| should still have its initial value. @@ -154,7 +155,7 @@ break; } - int bytes_used = input_data_size - zlib_stream_.get()->avail_in; + size_t bytes_used = input_data_size - zlib_stream_.get()->avail_in; bytes_out = output_buffer_size - zlib_stream_.get()->avail_out; // If any bytes are output, enough total bytes have been received, or at // the end of the stream, assume the response had a valid Zlib header. @@ -188,10 +189,10 @@ // |replay_data_| and |input_buffer| much simpler than the alternative // operations, though it's not pretty. input_state_ = replay_state_; - int bytes_used; + size_t bytes_used; scoped_refptr<IOBuffer> replay_buffer = base::MakeRefCounted<WrappedIOBuffer>(replay_data_.data()); - int result = + base::expected<size_t, Error> result = FilterData(output_buffer, output_buffer_size, replay_buffer.get(), replay_data_.size(), &bytes_used, upstream_end_reached); replay_data_.erase(0, bytes_used); @@ -199,16 +200,14 @@ replay_state_ = input_state_; input_state_ = STATE_REPLAY_DATA; - // On error, or if bytes were read, just return result immediately. // Could continue consuming data in the success case, but simplest not // to. - if (result != 0) + if (!result.has_value() || result.value() != 0) return result; break; } case STATE_COMPRESSED_BODY: { DCHECK(!state_compressed_entered); - DCHECK_LE(0, input_data_size); state_compressed_entered = true; zlib_stream_.get()->next_in = base::bit_cast<Bytef*>(input_data); @@ -219,9 +218,9 @@ int ret = inflate(zlib_stream_.get(), Z_NO_FLUSH); if (ret != Z_STREAM_END && ret != Z_OK) - return ERR_CONTENT_DECODING_FAILED; + return base::unexpected(ERR_CONTENT_DECODING_FAILED); - int bytes_used = input_data_size - zlib_stream_.get()->avail_in; + size_t bytes_used = input_data_size - zlib_stream_.get()->avail_in; bytes_out = output_buffer_size - zlib_stream_.get()->avail_out; input_data_size -= bytes_used; input_data += bytes_used; @@ -233,8 +232,7 @@ break; } case STATE_GZIP_FOOTER: { - size_t to_read = std::min(gzip_footer_bytes_left_, - base::checked_cast<size_t>(input_data_size)); + size_t to_read = std::min(gzip_footer_bytes_left_, input_data_size); gzip_footer_bytes_left_ -= to_read; input_data_size -= to_read; input_data += to_read;
diff --git a/net/filter/gzip_source_stream.h b/net/filter/gzip_source_stream.h index 80633e4..625b096 100644 --- a/net/filter/gzip_source_stream.h +++ b/net/filter/gzip_source_stream.h
@@ -75,12 +75,12 @@ // SourceStream implementation std::string GetTypeAsString() const override; - int FilterData(IOBuffer* output_buffer, - int output_buffer_size, - IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool upstream_end_reached) override; + base::expected<size_t, Error> FilterData(IOBuffer* output_buffer, + size_t output_buffer_size, + IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool upstream_end_reached) override; // Inserts a zlib header to the data stream before calling zlib inflate. // This is used to work around server bugs. The function returns true on
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index ad1a431a..ae568d4 100644 --- a/net/http/transport_security_state_static.pins +++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@ # hash function for preloaded entries again (we have already done so once). # -# Last updated: 2022-08-15 12:55 UTC +# Last updated: 2022-08-16 12:56 UTC PinsListTimestamp -1660568124 +1660654562 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/server/http_connection.cc b/net/server/http_connection.cc index 180e0a4..b57e1a3 100644 --- a/net/server/http_connection.cc +++ b/net/server/http_connection.cc
@@ -27,6 +27,7 @@ void HttpConnection::ReadIOBuffer::SetCapacity(int capacity) { DCHECK_LE(GetSize(), capacity); + data_ = nullptr; base_->SetCapacity(capacity); data_ = base_->data(); } @@ -81,6 +82,8 @@ int new_capacity = GetCapacity() / kCapacityIncreaseFactor; if (new_capacity < kMinimumBufSize) new_capacity = kMinimumBufSize; + // this avoids the pointer to dangle until `SetCapacity` gets called. + data_ = nullptr; // realloc() within GrowableIOBuffer::SetCapacity() could move data even // when size is reduced. If unconsumed_size == 0, i.e. no data exists in // the buffer, free internal buffer first to guarantee no data move. @@ -129,6 +132,7 @@ if (size < GetSizeToWrite()) { data_ += size; } else { // size == GetSizeToWrite(). Updates data_ to next pending data. + data_ = nullptr; pending_data_.pop(); data_ = IsEmpty() ? nullptr : const_cast<char*>(pending_data_.front()->data());
diff --git a/remoting/codec/webrtc_video_encoder_gpu.cc b/remoting/codec/webrtc_video_encoder_gpu.cc index 8f65162..430db0b3 100644 --- a/remoting/codec/webrtc_video_encoder_gpu.cc +++ b/remoting/codec/webrtc_video_encoder_gpu.cc
@@ -22,7 +22,6 @@ #include "base/threading/sequenced_task_runner_handle.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" -#include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "gpu/config/gpu_driver_bug_workarounds.h" #include "gpu/config/gpu_preferences.h" @@ -219,7 +218,6 @@ std::unique_ptr<webrtc::DesktopFrame> frame, const FrameParams& params, WebrtcVideoEncoder::EncodeCallback done) { - TRACE_EVENT0("media", "WebrtcVideoEncoderGpu::Core::Encode"); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); bitrate_filter_.SetFrameSize(frame->size().width(), frame->size().height());
diff --git a/services/audio/output_device_mixer_impl.cc b/services/audio/output_device_mixer_impl.cc index d099f7c..205390b 100644 --- a/services/audio/output_device_mixer_impl.cc +++ b/services/audio/output_device_mixer_impl.cc
@@ -251,7 +251,7 @@ double volume_ = kDefaultVolume; - const raw_ptr<OutputDeviceMixerImpl, DanglingUntriaged> mixer_; + const raw_ptr<OutputDeviceMixerImpl> mixer_; // Callback to notify the audio output client of the device change. Note that // all the device change events are initially routed to MixerManager which @@ -345,7 +345,10 @@ void Close() final { DCHECK_CALLED_ON_VALID_SEQUENCE(owning_sequence_); if (mixer_) { - mixer_->CloseStream(mix_track_); + // `CloseStream` destroys `mix_track_`. Use `ExtractAsDangling` to clear + // the underlying pointer and return another raw_ptr instance that is + // allowed to dangle. + mixer_->CloseStream(mix_track_.ExtractAsDangling()); } // To match the typical usage pattern of AudioOutputStream. @@ -361,8 +364,7 @@ // MixableOutputStream becomes a no-op. base::WeakPtr<OutputDeviceMixerImpl> const mixer_ GUARDED_BY_CONTEXT(owning_sequence_); - const raw_ptr<MixTrack, DanglingUntriaged> - mix_track_; // Valid only when |mixer_| is valid. + raw_ptr<MixTrack> mix_track_; // Valid only when |mixer_| is valid. }; // Logs mixing statistics upon the destruction. Should be created when mixing
diff --git a/services/viz/public/cpp/gpu/context_provider_command_buffer.h b/services/viz/public/cpp/gpu/context_provider_command_buffer.h index 399b1ec4f..67f7bf8 100644 --- a/services/viz/public/cpp/gpu/context_provider_command_buffer.h +++ b/services/viz/public/cpp/gpu/context_provider_command_buffer.h
@@ -165,13 +165,15 @@ std::unique_ptr<gpu::CommandBufferHelper> helper_; std::unique_ptr<gpu::TransferBuffer> transfer_buffer_; - // Owned by either gles2_impl_ or raster_interface_, not both. - raw_ptr<gpu::ImplementationBase, DanglingUntriaged> impl_; std::unique_ptr<gpu::gles2::GLES2Implementation> gles2_impl_; std::unique_ptr<gpu::gles2::GLES2TraceImplementation> trace_impl_; std::unique_ptr<gpu::raster::RasterInterface> raster_interface_; std::unique_ptr<gpu::webgpu::WebGPUInterface> webgpu_interface_; + // Owned by one of gles2_impl_, raster_interface_, or webgpu_interface_. It + // must be declared last and cleared first. + raw_ptr<gpu::ImplementationBase> impl_; + std::unique_ptr<skia_bindings::GrContextForGLES2Interface> gr_context_; #if BUILDFLAG(SKIA_USE_DAWN) std::unique_ptr<skia_bindings::GrContextForWebGPUInterface>
diff --git a/storage/browser/quota/quota_manager_impl.cc b/storage/browser/quota/quota_manager_impl.cc index 262ca6f..d3f07607 100644 --- a/storage/browser/quota/quota_manager_impl.cc +++ b/storage/browser/quota/quota_manager_impl.cc
@@ -1804,7 +1804,7 @@ proxy_->InvalidateQuotaManagerImpl(base::PassKey<QuotaManagerImpl>()); if (database_) - db_runner_->DeleteSoon(FROM_HERE, database_.get()); + db_runner_->DeleteSoon(FROM_HERE, database_.ExtractAsDangling().get()); } QuotaManagerImpl::EvictionContext::EvictionContext() = default;
diff --git a/storage/browser/quota/quota_manager_impl.h b/storage/browser/quota/quota_manager_impl.h index 012348a..e15fff7 100644 --- a/storage/browser/quota/quota_manager_impl.h +++ b/storage/browser/quota/quota_manager_impl.h
@@ -770,7 +770,7 @@ // QuotaManagerImpl creates `database_` and later schedules it for deletion on // `db_runner_`. Thus, `database_` may outlive `this`. - raw_ptr<QuotaDatabase, DanglingUntriaged> database_ = nullptr; + raw_ptr<QuotaDatabase> database_ = nullptr; bool is_bootstrapping_database_ = false; // Queued callbacks to QuotaDatabase that will run after database bootstrap is
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index a0ecb9b..1c4075d9 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -5753,21 +5753,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5242.0", + "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -5780,7 +5780,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "isolate_profile_data": true, @@ -5918,21 +5918,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -5944,7 +5944,7 @@ }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "args": [ @@ -6064,21 +6064,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -6090,7 +6090,7 @@ }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "isolate_profile_data": true,
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 634875df..331a27a6 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -99190,21 +99190,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5242.0", + "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -99212,7 +99212,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "isolate_profile_data": true, @@ -99325,28 +99325,28 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "args": [ @@ -99446,28 +99446,28 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "isolate_profile_data": true, @@ -100805,20 +100805,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5242.0", + "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -100832,7 +100832,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "merge": { @@ -100970,20 +100970,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -100996,7 +100996,7 @@ }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "args": [ @@ -101116,20 +101116,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -101142,7 +101142,7 @@ }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "merge": { @@ -102638,20 +102638,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5242.0", + "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -102665,7 +102665,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "merge": { @@ -102803,20 +102803,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -102829,7 +102829,7 @@ }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "args": [ @@ -102949,20 +102949,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -102975,7 +102975,7 @@ }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "merge": { @@ -103710,20 +103710,20 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5242.0", + "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -103736,7 +103736,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" } ] },
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index f01f7cb..31b91eb 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -20820,21 +20820,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5242.0", + "name": "interactive_ui_tests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -20847,7 +20847,7 @@ }, "test": "interactive_ui_tests", "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "isolate_profile_data": true, @@ -20985,21 +20985,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -21011,7 +21011,7 @@ }, "test": "lacros_chrome_browsertests", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "args": [ @@ -21131,21 +21131,21 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome" ], "isolate_profile_data": true, "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5242.0", + "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 106.0.5243.0", "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v106.0.5242.0", - "revision": "version:106.0.5242.0" + "location": "lacros_version_skew_tests_v106.0.5243.0", + "revision": "version:106.0.5243.0" } ], "dimension_sets": [ @@ -21157,7 +21157,7 @@ }, "test": "lacros_chrome_browsertests_run_in_series", "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/", - "variant_id": "Lacros version skew testing ash 106.0.5242.0" + "variant_id": "Lacros version skew testing ash 106.0.5243.0" }, { "isolate_profile_data": true,
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index db43b654..08c663a8 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -22,15 +22,15 @@ }, 'LACROS_VERSION_SKEW_CANARY': { 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5242.0/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v106.0.5243.0/test_ash_chrome', ], - 'identifier': 'Lacros version skew testing ash 106.0.5242.0', + 'identifier': 'Lacros version skew testing ash 106.0.5243.0', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v106.0.5242.0', - 'revision': 'version:106.0.5242.0', + 'location': 'lacros_version_skew_tests_v106.0.5243.0', + 'revision': 'version:106.0.5243.0', }, ], },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 3da1ca1..23747e6e 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -2256,6 +2256,27 @@ ] } ], + "CSSOverflowForReplacedElements": [ + { + "platforms": [ + "android", + "android_webview", + "android_weblayer", + "windows", + "mac", + "chromeos", + "chromeos_lacros" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "CSSOverflowForReplacedElements" + ] + } + ] + } + ], "CWPCollectsETM": [ { "platforms": [ @@ -4472,6 +4493,24 @@ ] } ], + "ForwardMemoryPressureEventsToGpuProcess": [ + { + "platforms": [ + "mac", + "linux", + "chromeos", + "chromeos_lacros" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ForwardMemoryPressureEventsToGpuProcess" + ] + } + ] + } + ], "GMSCoreEmoji": [ { "platforms": [ @@ -4848,52 +4887,6 @@ ] } ], - "HappinessTrackingSurveysForDesktopPrivacyGuide": [ - { - "platforms": [ - "linux", - "windows", - "mac" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "en_site_id": "EwTBYAUeU0ugnJ3q1cK0VNYBFfQr", - "probability": "1.0", - "settings-time": "5s", - "survey": "privacy-guide" - }, - "enable_features": [ - "HappinessTrackingSurveysForDesktopPrivacyGuide" - ] - } - ] - } - ], - "HappinessTrackingSurveysForDesktopSettingsPrivacy": [ - { - "platforms": [ - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "params": { - "en_site_id": "JcjxgSDnh0ugnJ3q1cK0UVkwDj1o", - "no-guide": "true", - "probability": "1.0", - "survey": "settings-privacy" - }, - "enable_features": [ - "HappinessTrackingSurveysForDesktopSettingsPrivacy" - ] - } - ] - } - ], "HappinessTrackingSystemPerformance": [ { "platforms": [ @@ -7507,6 +7500,47 @@ ] } ], + "PrivacyGuideHats": [ + { + "platforms": [ + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "PrivacyGuide", + "params": { + "en_site_id": "EwTBYAUeU0ugnJ3q1cK0VNYBFfQr", + "probability": "1.0", + "settings-time": "5s", + "survey": "privacy-guide" + }, + "enable_features": [ + "HappinessTrackingSurveysForDesktopPrivacyGuide" + ], + "disable_features": [ + "HappinessTrackingSurveysForDesktopSettingsPrivacy" + ] + }, + { + "name": "PrivacySettings", + "params": { + "en_site_id": "JcjxgSDnh0ugnJ3q1cK0UVkwDj1o", + "no-guide": "true", + "probability": "1.0", + "survey": "settings-privacy" + }, + "enable_features": [ + "HappinessTrackingSurveysForDesktopSettingsPrivacy" + ], + "disable_features": [ + "HappinessTrackingSurveysForDesktopPrivacyGuide" + ] + } + ] + } + ], "PrivacyPreservingPrefetchProxy": [ { "platforms": [
diff --git a/third_party/blink/public/mojom/frame/pending_beacon.mojom b/third_party/blink/public/mojom/frame/pending_beacon.mojom index 2d9019b..607107afa 100644 --- a/third_party/blink/public/mojom/frame/pending_beacon.mojom +++ b/third_party/blink/public/mojom/frame/pending_beacon.mojom
@@ -24,13 +24,9 @@ // side `PendingBeacon` object. // `url` is the target url for the beacon. // `method` is the method used to send the beacon. - // `timeout` is the timeout after running the page hide event on the current - // document after which the beacon will be sent (or zero to not send after - // page hide, instead only send on document discard). CreateBeacon(pending_receiver<blink.mojom.PendingBeacon> receiver, url.mojom.Url url, - BeaconMethod method, - mojo_base.mojom.TimeDelta timeout); + BeaconMethod method); };
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h index 787171d..8d1720b 100644 --- a/third_party/blink/public/platform/web_runtime_features.h +++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -163,6 +163,8 @@ BLINK_PLATFORM_EXPORT static void EnableSharedWorker(bool); BLINK_PLATFORM_EXPORT static void EnableTextFragmentAnchor(bool); BLINK_PLATFORM_EXPORT static void EnableCSSSelectorFragmentAnchor(bool); + BLINK_PLATFORM_EXPORT static void EnableTopicsAPI(bool); + BLINK_PLATFORM_EXPORT static bool IsTopicsAPIEnabled(); BLINK_PLATFORM_EXPORT static void EnableTouchDragAndContextMenu(bool enable); BLINK_PLATFORM_EXPORT static void EnableTouchEventFeatureDetection(bool); BLINK_PLATFORM_EXPORT static void EnableSpeculationRulesPrefetchProxy(bool);
diff --git a/third_party/blink/public/strings/translations/blink_strings_am.xtb b/third_party/blink/public/strings/translations/blink_strings_am.xtb index 3785f14d..0ced567 100644 --- a/third_party/blink/public/strings/translations/blink_strings_am.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_am.xtb
@@ -27,7 +27,7 @@ <translation id="2031987842108996681">ቀይ ሰርጥ</translation> <translation id="2060505056492490888">«<ph name="DOT" />» በ«<ph name="INVALIDDOMAIN" />» ውስጥ በተሳሳተ ቦታ ላይ ነው የገባው።</translation> <translation id="2148716181193084225">ዛሬ</translation> -<translation id="2226276347425096477">እባክዎ ይህ ጽሑፍ ወደ <ph name="MAX_CHARACTERS" /> ወይም ከዚያ በታች ቁምፊዎች ያሳጥሩት (በአሁኑ ጊዜ <ph name="CURRENT_LENGTH" /> ቁምፊዎችን እየተጠቀሙ ነዎት)።</translation> +<translation id="2226276347425096477">እባክዎ ይህ ጽሁፍ ወደ <ph name="MAX_CHARACTERS" /> ወይም ከዚያ በታች ቁምፊዎች ያሳጥሩት (በአሁኑ ጊዜ <ph name="CURRENT_LENGTH" /> ቁምፊዎችን እየተጠቀሙ ነዎት)።</translation> <translation id="2246498165605549352">አካባቢያዊ ፋይል</translation> <translation id="2247351761944213033">ሳምንት <ph name="WEEKNUMBER" />፣ <ph name="YEAR" /></translation> <translation id="2277199496770840904">ትራክ <ph name="NUMBER" /></translation> @@ -57,7 +57,7 @@ <translation id="3732799496749320381">ሚሜ</translation> <translation id="3754210790023674521">ከሥዕል-ውስጥ-ሥዕል ውጣ</translation> <translation id="3757388668994797779"><ph name="QUANTITY" /> ጊባ</translation> -<translation id="3822383571486410024">እባክዎ ይህን ጽሑፍ ወደ <ph name="MIN_CHARACTERS" /> ቁምፊዎች ወይም ከዚያ በላይ ያራዝሙት (አሁን እየተጠቀሙ ያሉት <ph name="CURRENT_LENGTH" />ቁምፊዎችን ነው)።</translation> +<translation id="3822383571486410024">እባክዎ ይህን ጽሁፍ ወደ <ph name="MIN_CHARACTERS" /> ቁምፊዎች ወይም ከዚያ በላይ ያራዝሙት (አሁን እየተጠቀሙ ያሉት <ph name="CURRENT_LENGTH" />ቁምፊዎችን ነው)።</translation> <translation id="383465348367842624">ከ«<ph name="ATSIGN" />» በፊት የሚመጣ ክፍል የ«<ph name="INVALIDCHARACTER" />» ምልክት መያዝ የለበትም።</translation> <translation id="3846214748874656680">ከሙሉ ማያገጽ ውጣ</translation> <translation id="4103419683916926126">ሚሊሰኮንዶች</translation> @@ -132,7 +132,7 @@ <translation id="6919891270253167948">1.5</translation> <translation id="6941933287844615239">ማህደረ መረጃን አውርድ</translation> <translation id="698788488269350478">ተዘርግቷል።</translation> -<translation id="6989848892321993519">እባክዎ ይህን ጽሑፍ ወደ <ph name="MIN_CHARACTERS" /> ወይም ከዚያ በላይ ቁምፊዎች ያራዝሙት (አሁን እየተጠቀሙ ያሉት 1 ቁምፊ ነው)።</translation> +<translation id="6989848892321993519">እባክዎ ይህን ጽሁፍ ወደ <ph name="MIN_CHARACTERS" /> ወይም ከዚያ በላይ ቁምፊዎች ያራዝሙት (አሁን እየተጠቀሙ ያሉት 1 ቁምፊ ነው)።</translation> <translation id="709897737746224366">እባክዎ የተጠየቀውን ቅርጸት ያዛምዱ።</translation> <translation id="7102274145889307184">የአሁኑ አካባቢ</translation> <translation id="7263440858009898357">እባክዎ በዝርዝሩ ውስጥ አንድ ንጥል ይምረጡ።</translation>
diff --git a/third_party/blink/renderer/core/css/properties/computed_style_utils.cc b/third_party/blink/renderer/core/css/properties/computed_style_utils.cc index 8c1d0ff..b75c34a2d 100644 --- a/third_party/blink/renderer/core/css/properties/computed_style_utils.cc +++ b/third_party/blink/renderer/core/css/properties/computed_style_utils.cc
@@ -126,7 +126,8 @@ const ComputedStyle& style, const StyleColor& color, EBorderStyle border_style, - bool visited_link) { + bool visited_link, + bool* is_current_color) { Color current_color; if (visited_link) { current_color = style.GetInternalVisitedCurrentColor(); @@ -140,7 +141,8 @@ } else { current_color = style.GetCurrentColor(); } - return color.Resolve(current_color, style.UsedColorScheme()); + return color.Resolve(current_color, style.UsedColorScheme(), + is_current_color); } const CSSValue* ComputedStyleUtils::BackgroundImageOrWebkitMaskImage(
diff --git a/third_party/blink/renderer/core/css/properties/computed_style_utils.h b/third_party/blink/renderer/core/css/properties/computed_style_utils.h index 8b4f683..51d6383 100644 --- a/third_party/blink/renderer/core/css/properties/computed_style_utils.h +++ b/third_party/blink/renderer/core/css/properties/computed_style_utils.h
@@ -50,7 +50,8 @@ static const blink::Color BorderSideColor(const ComputedStyle&, const StyleColor&, EBorderStyle, - bool visited_link); + bool visited_link, + bool* is_current_color); static CSSValue* ZoomAdjustedPixelValueForLength(const Length&, const ComputedStyle&); static const CSSValue* BackgroundImageOrWebkitMaskImage(
diff --git a/third_party/blink/renderer/core/css/properties/css_property_methods.json5 b/third_party/blink/renderer/core/css/properties/css_property_methods.json5 index 7868292..4df1844 100644 --- a/third_party/blink/renderer/core/css/properties/css_property_methods.json5 +++ b/third_party/blink/renderer/core/css/properties/css_property_methods.json5
@@ -37,7 +37,7 @@ { name: "ColorIncludingFallback", return_type: "const blink::Color", - parameters: "(bool, const ComputedStyle&)", + parameters: "(bool, const ComputedStyle&, bool* is_current_color = nullptr)", }, { name: "InitialValue",
diff --git a/third_party/blink/renderer/core/css/properties/longhand.h b/third_party/blink/renderer/core/css/properties/longhand.h index ec90a61..ea457462 100644 --- a/third_party/blink/renderer/core/css/properties/longhand.h +++ b/third_party/blink/renderer/core/css/properties/longhand.h
@@ -47,8 +47,10 @@ else ApplyInitial(state); } - virtual const blink::Color ColorIncludingFallback(bool, const ComputedStyle&) - const { + virtual const blink::Color ColorIncludingFallback( + bool, + const ComputedStyle&, + bool* is_current_color = nullptr) const { NOTREACHED(); return Color(); }
diff --git a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc index a73c2c79..8585593 100644 --- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc +++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
@@ -586,15 +586,16 @@ const blink::Color BackgroundColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor background_color = style.BackgroundColor(); if (style.ShouldForceColor(background_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBackgroundColor()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } return background_color.Resolve(style.GetCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), is_current_color); } const CSSValue* BackgroundColor::CSSValueFromComputedStyleInternal( @@ -821,15 +822,17 @@ const blink::Color BorderBottomColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor border_bottom_color = style.BorderBottomColor(); if (style.ShouldForceColor(border_bottom_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBorderColor()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } - return ComputedStyleUtils::BorderSideColor( - style, border_bottom_color, style.BorderBottomStyle(), visited_link); + return ComputedStyleUtils::BorderSideColor(style, border_bottom_color, + style.BorderBottomStyle(), + visited_link, is_current_color); } const CSSValue* BorderBottomColor::CSSValueFromComputedStyleInternal( @@ -1083,15 +1086,17 @@ const blink::Color BorderLeftColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor border_left_color = style.BorderLeftColor(); if (style.ShouldForceColor(border_left_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBorderColor()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } - return ComputedStyleUtils::BorderSideColor( - style, border_left_color, style.BorderLeftStyle(), visited_link); + return ComputedStyleUtils::BorderSideColor(style, border_left_color, + style.BorderLeftStyle(), + visited_link, is_current_color); } const CSSValue* BorderLeftColor::CSSValueFromComputedStyleInternal( @@ -1142,15 +1147,17 @@ const blink::Color BorderRightColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor border_right_color = style.BorderRightColor(); if (style.ShouldForceColor(border_right_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBorderColor()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } return ComputedStyleUtils::BorderSideColor(style, border_right_color, - style.BorderRightStyle(), false); + style.BorderRightStyle(), false, + is_current_color); } const CSSValue* BorderRightColor::CSSValueFromComputedStyleInternal( @@ -1215,15 +1222,17 @@ const blink::Color BorderTopColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor border_top_color = style.BorderTopColor(); if (style.ShouldForceColor(border_top_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBorderColor()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } - return ComputedStyleUtils::BorderSideColor( - style, border_top_color, style.BorderTopStyle(), visited_link); + return ComputedStyleUtils::BorderSideColor(style, border_top_color, + style.BorderTopStyle(), + visited_link, is_current_color); } const CSSValue* BorderTopColor::CSSValueFromComputedStyleInternal( @@ -1389,7 +1398,8 @@ const blink::Color CaretColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleAutoColor auto_color = style.CaretColor(); // TODO(rego): We may want to adjust the caret color if it's the same as @@ -1397,8 +1407,9 @@ StyleColor result = auto_color.IsAutoColor() ? StyleColor::CurrentColor() : auto_color.ToStyleColor(); if (style.ShouldForceColor(result)) - return style.GetInternalForcedCurrentColor(); - return result.Resolve(style.GetCurrentColor(), style.UsedColorScheme()); + return style.GetInternalForcedCurrentColor(is_current_color); + return result.Resolve(style.GetCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* CaretColor::CSSValueFromComputedStyleInternal( @@ -1549,15 +1560,15 @@ IsQuirksModeBehavior(context.Mode())); } -const blink::Color Color::ColorIncludingFallback( - bool visited_link, - const ComputedStyle& style) const { +const blink::Color Color::ColorIncludingFallback(bool visited_link, + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); if (style.ShouldForceColor(style.GetColor())) { return To<Longhand>(GetCSSPropertyInternalForcedColor()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } - return style.GetCurrentColor(); + return style.GetCurrentColor(is_current_color); } const CSSValue* Color::CSSValueFromComputedStyleInternal( @@ -1796,13 +1807,14 @@ const blink::Color ColumnRuleColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor column_rule_color = style.ColumnRuleColor(); if (style.ShouldForceColor(column_rule_color)) - return style.GetInternalForcedCurrentColor(); + return style.GetInternalForcedCurrentColor(is_current_color); return column_rule_color.Resolve(style.GetCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), is_current_color); } const CSSValue* ColumnRuleColor::CSSValueFromComputedStyleInternal( @@ -2681,15 +2693,16 @@ return ComputedStyleUtils::ValueForSVGPaint(style.FillPaint(), style); } -const blink::Color Fill::ColorIncludingFallback( - bool visited_link, - const ComputedStyle& style) const { +const blink::Color Fill::ColorIncludingFallback(bool visited_link, + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); DCHECK(style.FillPaint().HasColor()); const StyleColor& fill_color = style.FillPaint().GetColor(); if (style.ShouldForceColor(fill_color)) - return style.GetInternalForcedCurrentColor(); - return fill_color.Resolve(style.GetCurrentColor(), style.UsedColorScheme()); + return style.GetInternalForcedCurrentColor(is_current_color); + return fill_color.Resolve(style.GetCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* FillOpacity::ParseSingleValue( @@ -2816,11 +2829,12 @@ const blink::Color FloodColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { StyleColor flood_color = style.FloodColor(); if (style.ShouldForceColor(flood_color)) - return style.GetInternalForcedCurrentColor(); - return style.ResolvedColor(flood_color); + return style.GetInternalForcedCurrentColor(is_current_color); + return style.ResolvedColor(flood_color, is_current_color); } const CSSValue* FloodColor::CSSValueFromComputedStyleInternal( @@ -3274,13 +3288,14 @@ const blink::Color InternalVisitedColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); if (style.ShouldForceColor(style.InternalVisitedColor())) { return To<Longhand>(GetCSSPropertyInternalForcedVisitedColor()) - .ColorIncludingFallback(true, style); + .ColorIncludingFallback(true, style, is_current_color); } - return style.GetInternalVisitedCurrentColor(); + return style.GetInternalVisitedCurrentColor(is_current_color); } const CSSValue* InternalVisitedColor::ParseSingleValue( @@ -3747,16 +3762,18 @@ const blink::Color InternalVisitedBackgroundColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_background_color = style.InternalVisitedBackgroundColor(); if (style.ShouldForceColor(visited_background_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBackgroundColor()) - .ColorIncludingFallback(true, style); + .ColorIncludingFallback(true, style, is_current_color); } blink::Color color = visited_background_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); // TODO: Technically someone could explicitly specify the color // transparent, but for now we'll just assume that if the background color @@ -3766,8 +3783,9 @@ // unvisited background color if specified than it does to return black. // This behavior matches what Firefox 4 does as well. if (color == blink::Color::kTransparent) { - return style.BackgroundColor().Resolve(style.GetCurrentColor(), - style.UsedColorScheme()); + // Overwrite is_current_color based on the unvisited background color. + return style.BackgroundColor().Resolve( + style.GetCurrentColor(), style.UsedColorScheme(), is_current_color); } return color; @@ -3783,15 +3801,17 @@ const blink::Color InternalVisitedBorderLeftColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_border_left_color = style.InternalVisitedBorderLeftColor(); if (style.ShouldForceColor(visited_border_left_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBorderColor()) - .ColorIncludingFallback(true, style); + .ColorIncludingFallback(true, style, is_current_color); } return visited_border_left_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedBorderLeftColor::ParseSingleValue( @@ -3804,15 +3824,17 @@ const blink::Color InternalVisitedBorderTopColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_border_top_color = style.InternalVisitedBorderTopColor(); if (style.ShouldForceColor(visited_border_top_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBorderColor()) - .ColorIncludingFallback(true, style); + .ColorIncludingFallback(true, style, is_current_color); } return visited_border_top_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedBorderTopColor::ParseSingleValue( @@ -3825,15 +3847,16 @@ const blink::Color InternalVisitedCaretColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleAutoColor auto_color = style.InternalVisitedCaretColor(); StyleColor result = auto_color.IsAutoColor() ? StyleColor::CurrentColor() : auto_color.ToStyleColor(); if (style.ShouldForceColor(result)) - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); return result.Resolve(style.GetInternalVisitedCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), is_current_color); } const CSSValue* InternalVisitedCaretColor::ParseSingleValue( @@ -3846,16 +3869,18 @@ const blink::Color InternalVisitedBorderRightColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_border_right_color = style.InternalVisitedBorderRightColor(); if (style.ShouldForceColor(visited_border_right_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBorderColor()) - .ColorIncludingFallback(true, style); + .ColorIncludingFallback(true, style, is_current_color); } return visited_border_right_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedBorderRightColor::ParseSingleValue( @@ -3868,16 +3893,18 @@ const blink::Color InternalVisitedBorderBottomColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_border_bottom_color = style.InternalVisitedBorderBottomColor(); if (style.ShouldForceColor(visited_border_bottom_color)) { return To<Longhand>(GetCSSPropertyInternalForcedBorderColor()) - .ColorIncludingFallback(true, style); + .ColorIncludingFallback(true, style, is_current_color); } return visited_border_bottom_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedBorderBottomColor::ParseSingleValue( @@ -3929,7 +3956,8 @@ const blink::Color InternalVisitedFill::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); const SVGPaint& paint = style.InternalVisitedFillPaint(); @@ -3937,24 +3965,26 @@ // paint, https://bugs.webkit.org/show_bug.cgi?id=70006 if (!paint.HasColor()) { return To<Longhand>(GetCSSPropertyFill()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } const StyleColor& visited_fill_color = paint.GetColor(); if (style.ShouldForceColor(visited_fill_color)) - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); return visited_fill_color.Resolve(style.GetInternalVisitedCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), is_current_color); } const blink::Color InternalVisitedColumnRuleColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_column_rule_color = style.InternalVisitedColumnRuleColor(); if (style.ShouldForceColor(visited_column_rule_color)) - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); return visited_column_rule_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedColumnRuleColor::ParseSingleValue( @@ -3966,15 +3996,17 @@ const blink::Color InternalVisitedOutlineColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_outline_color = style.InternalVisitedOutlineColor(); if (style.ShouldForceColor(visited_outline_color)) { return To<Longhand>(GetCSSPropertyInternalForcedOutlineColor()) - .ColorIncludingFallback(true, style); + .ColorIncludingFallback(true, style, is_current_color); } return visited_outline_color.Resolve(style.GetInternalVisitedCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedOutlineColor::ParseSingleValue( @@ -3994,7 +4026,8 @@ const blink::Color InternalVisitedStroke::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); const SVGPaint& paint = style.InternalVisitedStrokePaint(); @@ -4002,25 +4035,28 @@ // paint, https://bugs.webkit.org/show_bug.cgi?id=70006 if (!paint.HasColor()) { return To<Longhand>(GetCSSPropertyStroke()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } const StyleColor& visited_stroke_color = paint.GetColor(); if (style.ShouldForceColor(visited_stroke_color)) - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); return visited_stroke_color.Resolve(style.GetInternalVisitedCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), + is_current_color); } const blink::Color InternalVisitedTextDecorationColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_decoration_color = style.DecorationColorIncludingFallback(visited_link); if (style.ShouldForceColor(visited_decoration_color)) - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); return visited_decoration_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedTextDecorationColor::ParseSingleValue( @@ -4032,14 +4068,16 @@ const blink::Color InternalVisitedTextEmphasisColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_text_emphasis_color = style.InternalVisitedTextEmphasisColor(); if (style.ShouldForceColor(visited_text_emphasis_color)) - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); return visited_text_emphasis_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedTextEmphasisColor::ParseSingleValue( @@ -4051,13 +4089,15 @@ const blink::Color InternalVisitedTextFillColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_text_fill_color = style.InternalVisitedTextFillColor(); if (style.ShouldForceColor(visited_text_fill_color)) - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); return visited_text_fill_color.Resolve(style.GetInternalVisitedCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedTextFillColor::ParseSingleValue( @@ -4069,13 +4109,15 @@ const blink::Color InternalVisitedTextStrokeColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); StyleColor visited_text_stroke_color = style.InternalVisitedTextStrokeColor(); if (style.ShouldForceColor(visited_text_stroke_color)) - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); return visited_text_stroke_color.Resolve( - style.GetInternalVisitedCurrentColor(), style.UsedColorScheme()); + style.GetInternalVisitedCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* InternalVisitedTextStrokeColor::ParseSingleValue( @@ -4087,25 +4129,35 @@ const blink::Color InternalForcedBackgroundColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { blink::Color forced_current_color; int alpha; + bool alpha_is_current_color; if (visited_link) { - forced_current_color = style.GetInternalForcedVisitedCurrentColor(); + forced_current_color = style.GetInternalForcedVisitedCurrentColor( + /* No is_current_color because we might not be forced_current_color */); alpha = style.InternalVisitedBackgroundColor() .Resolve(style.GetInternalVisitedCurrentColor(), - style.UsedColorScheme()) + style.UsedColorScheme(), &alpha_is_current_color) .Alpha(); } else { - forced_current_color = style.GetInternalForcedCurrentColor(); + forced_current_color = style.GetInternalForcedCurrentColor( + /* No is_current_color because we might not be forced_current_color */); alpha = style.BackgroundColor() - .Resolve(style.GetCurrentColor(), style.UsedColorScheme()) + .Resolve(style.GetCurrentColor(), style.UsedColorScheme(), + &alpha_is_current_color) .Alpha(); } - return style.InternalForcedBackgroundColor().ResolveWithAlpha( + bool result_is_current_color; + blink::Color result = style.InternalForcedBackgroundColor().ResolveWithAlpha( forced_current_color, style.UsedColorScheme(), alpha, - /* is_forced_color */ true); + &result_is_current_color, /* is_forced_color */ true); + + if (is_current_color) + *is_current_color = alpha_is_current_color || result_is_current_color; + return result; } const CSSValue* @@ -4129,13 +4181,15 @@ const blink::Color InternalForcedBorderColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { + // Don’t pass is_current_color here because we might not be current_color blink::Color current_color = visited_link ? style.GetInternalForcedVisitedCurrentColor() : style.GetInternalForcedCurrentColor(); - return style.InternalForcedBorderColor().Resolve(current_color, - style.UsedColorScheme()); + return style.InternalForcedBorderColor().Resolve( + current_color, style.UsedColorScheme(), is_current_color); } const CSSValue* InternalForcedBorderColor::CSSValueFromComputedStyleInternal( @@ -4186,9 +4240,10 @@ const blink::Color InternalForcedColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); - return style.GetInternalForcedCurrentColor(); + return style.GetInternalForcedCurrentColor(is_current_color); } const CSSValue* InternalForcedColor::CSSValueFromComputedStyleInternal( @@ -4210,13 +4265,15 @@ const blink::Color InternalForcedOutlineColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { + // No is_current_color here because we might not be current_color blink::Color current_color = visited_link ? style.GetInternalForcedVisitedCurrentColor() : style.GetInternalForcedCurrentColor(); - return style.InternalForcedOutlineColor().Resolve(current_color, - style.UsedColorScheme()); + return style.InternalForcedOutlineColor().Resolve( + current_color, style.UsedColorScheme(), is_current_color); } const CSSValue* InternalForcedOutlineColor::CSSValueFromComputedStyleInternal( @@ -4267,9 +4324,10 @@ const blink::Color InternalForcedVisitedColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(visited_link); - return style.GetInternalForcedVisitedCurrentColor(); + return style.GetInternalForcedVisitedCurrentColor(is_current_color); } const CSSValue* InternalForcedVisitedColor::ParseSingleValue( @@ -4411,11 +4469,12 @@ const blink::Color LightingColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { StyleColor lighting_color = style.LightingColor(); if (style.ShouldForceColor(lighting_color)) - return style.GetInternalForcedCurrentColor(); - return style.ResolvedColor(lighting_color); + return style.GetInternalForcedCurrentColor(is_current_color); + return style.ResolvedColor(lighting_color, is_current_color); } const CSSValue* LightingColor::CSSValueFromComputedStyleInternal( @@ -5205,15 +5264,16 @@ const blink::Color OutlineColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor outline_color = style.OutlineColor(); if (style.ShouldForceColor(outline_color)) { return To<Longhand>(GetCSSPropertyInternalForcedOutlineColor()) - .ColorIncludingFallback(false, style); + .ColorIncludingFallback(false, style, is_current_color); } - return outline_color.Resolve(style.GetCurrentColor(), - style.UsedColorScheme()); + return outline_color.Resolve(style.GetCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* OutlineColor::CSSValueFromComputedStyleInternal( @@ -6732,11 +6792,12 @@ const blink::Color StopColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { StyleColor stop_color = style.StopColor(); if (style.ShouldForceColor(stop_color)) - return style.GetInternalForcedCurrentColor(); - return style.ResolvedColor(stop_color); + return style.GetInternalForcedCurrentColor(is_current_color); + return style.ResolvedColor(stop_color, is_current_color); } const CSSValue* StopColor::CSSValueFromComputedStyleInternal( @@ -6777,13 +6838,15 @@ const blink::Color Stroke::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); DCHECK(style.StrokePaint().HasColor()); const StyleColor& stroke_color = style.StrokePaint().GetColor(); if (style.ShouldForceColor(stroke_color)) - return style.GetInternalForcedCurrentColor(); - return stroke_color.Resolve(style.GetCurrentColor(), style.UsedColorScheme()); + return style.GetInternalForcedCurrentColor(is_current_color); + return stroke_color.Resolve(style.GetCurrentColor(), style.UsedColorScheme(), + is_current_color); } const CSSValue* StrokeDasharray::ParseSingleValue( @@ -7004,14 +7067,15 @@ const blink::Color TextDecorationColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor decoration_color = style.DecorationColorIncludingFallback(visited_link); if (style.ShouldForceColor(decoration_color)) - return style.GetInternalForcedCurrentColor(); + return style.GetInternalForcedCurrentColor(is_current_color); return decoration_color.Resolve(style.GetCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), is_current_color); } const CSSValue* TextDecorationColor::CSSValueFromComputedStyleInternal( @@ -8382,13 +8446,15 @@ const blink::Color WebkitTapHighlightColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { StyleColor highlight_color = style.TapHighlightColor(); if (style.ShouldForceColor(highlight_color)) { - return visited_link ? style.GetInternalForcedVisitedCurrentColor() - : style.GetInternalForcedCurrentColor(); + return visited_link + ? style.GetInternalForcedVisitedCurrentColor(is_current_color) + : style.GetInternalForcedCurrentColor(is_current_color); } - return style.ResolvedColor(style.TapHighlightColor()); + return style.ResolvedColor(style.TapHighlightColor(), is_current_color); } const CSSValue* WebkitTapHighlightColor::CSSValueFromComputedStyleInternal( @@ -8433,13 +8499,14 @@ const blink::Color TextEmphasisColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor text_emphasis_color = style.TextEmphasisColor(); if (style.ShouldForceColor(text_emphasis_color)) - return style.GetInternalForcedCurrentColor(); + return style.GetInternalForcedCurrentColor(is_current_color); return text_emphasis_color.Resolve(style.GetCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), is_current_color); } const CSSValue* TextEmphasisColor::CSSValueFromComputedStyleInternal( @@ -8658,13 +8725,14 @@ const blink::Color WebkitTextFillColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor text_fill_color = style.TextFillColor(); if (style.ShouldForceColor(text_fill_color)) - return style.GetInternalForcedCurrentColor(); + return style.GetInternalForcedCurrentColor(is_current_color); return text_fill_color.Resolve(style.GetCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), is_current_color); } const CSSValue* WebkitTextFillColor::CSSValueFromComputedStyleInternal( @@ -8715,13 +8783,14 @@ const blink::Color WebkitTextStrokeColor::ColorIncludingFallback( bool visited_link, - const ComputedStyle& style) const { + const ComputedStyle& style, + bool* is_current_color) const { DCHECK(!visited_link); StyleColor text_stroke_color = style.TextStrokeColor(); if (style.ShouldForceColor(text_stroke_color)) - return style.GetInternalForcedCurrentColor(); + return style.GetInternalForcedCurrentColor(is_current_color); return text_stroke_color.Resolve(style.GetCurrentColor(), - style.UsedColorScheme()); + style.UsedColorScheme(), is_current_color); } const CSSValue* WebkitTextStrokeColor::CSSValueFromComputedStyleInternal(
diff --git a/third_party/blink/renderer/core/css/style_color.cc b/third_party/blink/renderer/core/css/style_color.cc index 26620519..4d22f7432 100644 --- a/third_party/blink/renderer/core/css/style_color.cc +++ b/third_party/blink/renderer/core/css/style_color.cc
@@ -11,7 +11,10 @@ Color StyleColor::Resolve(Color current_color, mojom::blink::ColorScheme color_scheme, + bool* is_current_color, bool is_forced_color) const { + if (is_current_color) + *is_current_color = IsCurrentColor(); if (IsCurrentColor()) return current_color; if (EffectiveColorKeyword() != CSSValueID::kInvalid || @@ -23,8 +26,10 @@ Color StyleColor::ResolveWithAlpha(Color current_color, mojom::blink::ColorScheme color_scheme, int alpha, + bool* is_current_color, bool is_forced_color) const { - Color color = Resolve(current_color, color_scheme, is_forced_color); + Color color = + Resolve(current_color, color_scheme, is_current_color, is_forced_color); return Color(color.Red(), color.Green(), color.Blue(), alpha); }
diff --git a/third_party/blink/renderer/core/css/style_color.h b/third_party/blink/renderer/core/css/style_color.h index c8db004..3567d43a 100644 --- a/third_party/blink/renderer/core/css/style_color.h +++ b/third_party/blink/renderer/core/css/style_color.h
@@ -80,6 +80,7 @@ Color Resolve(Color current_color, mojom::blink::ColorScheme color_scheme, + bool* is_current_color = nullptr, bool is_forced_color = false) const; // Resolve and override the resolved color's alpha channel as specified by @@ -87,6 +88,7 @@ Color ResolveWithAlpha(Color current_color, mojom::blink::ColorScheme color_scheme, int alpha, + bool* is_current_color = nullptr, bool is_forced_color = false) const; bool IsNumeric() const {
diff --git a/third_party/blink/renderer/core/frame/build.gni b/third_party/blink/renderer/core/frame/build.gni index 9db2cde..cfba452 100644 --- a/third_party/blink/renderer/core/frame/build.gni +++ b/third_party/blink/renderer/core/frame/build.gni
@@ -144,6 +144,8 @@ "page_scale_constraints_set.h", "pending_beacon.cc", "pending_beacon.h", + "pending_beacon_dispatcher.cc", + "pending_beacon_dispatcher.h", "pending_post_beacon.cc", "pending_post_beacon.h", "pending_get_beacon.cc",
diff --git a/third_party/blink/renderer/core/frame/local_frame_ukm_aggregator.h b/third_party/blink/renderer/core/frame/local_frame_ukm_aggregator.h index 5934156e..43883e393 100644 --- a/third_party/blink/renderer/core/frame/local_frame_ukm_aggregator.h +++ b/third_party/blink/renderer/core/frame/local_frame_ukm_aggregator.h
@@ -111,7 +111,7 @@ // } // // |ukm_enum| should be an entry in LocalFrameUkmAggregator's enum of -// metric names (which in turn corresponds to names in from ukm.xml). +// metric names (which in turn corresponds to names from ukm.xml). #define SCOPED_UMA_AND_UKM_TIMER(aggregator, ukm_enum) \ auto scoped_ukm_hierarchical_timer = \ aggregator.GetScopedTimer(static_cast<size_t>(ukm_enum));
diff --git a/third_party/blink/renderer/core/frame/pending_beacon.cc b/third_party/blink/renderer/core/frame/pending_beacon.cc index be416c3..a067826 100644 --- a/third_party/blink/renderer/core/frame/pending_beacon.cc +++ b/third_party/blink/renderer/core/frame/pending_beacon.cc
@@ -5,10 +5,12 @@ #include "third_party/blink/renderer/core/frame/pending_beacon.h" #include "base/time/time.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/frame/pending_beacon.mojom-blink.h" #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/public/platform/web_url_request_util.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" +#include "third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h" #include "third_party/blink/renderer/core/loader/beacon_data.h" #include "third_party/blink/renderer/platform/exported/wrapped_resource_request.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h" @@ -17,45 +19,6 @@ namespace blink { -// Helper class to wrap a shared mojo remote to the frame's pending beacon host, -// such that all beacons can share the same remote to make calls to that host. -class PendingBeaconHostRemote - : public GarbageCollected<PendingBeaconHostRemote>, - public Supplement<ExecutionContext> { - public: - static const char kSupplementName[]; - explicit PendingBeaconHostRemote(ExecutionContext& ec) - : Supplement<ExecutionContext>(ec), remote_(&ec) { - // Using the MiscPlatformAPI task type as pending beacons are not yet - // associated with any specific task runner in the spec. - auto task_runner = ec.GetTaskRunner(TaskType::kMiscPlatformAPI); - - mojo::PendingReceiver<mojom::blink::PendingBeaconHost> host_receiver = - remote_.BindNewPipeAndPassReceiver(task_runner); - ec.GetBrowserInterfaceBroker().GetInterface(std::move(host_receiver)); - } - - static PendingBeaconHostRemote& From(ExecutionContext& ec) { - PendingBeaconHostRemote* remote = - Supplement<ExecutionContext>::From<PendingBeaconHostRemote>(ec); - if (!remote) { - remote = MakeGarbageCollected<PendingBeaconHostRemote>(ec); - ProvideTo(ec, remote); - } - return *remote; - } - - void Trace(Visitor* visitor) const override { - Supplement::Trace(visitor); - visitor->Trace(remote_); - } - - HeapMojoRemote<mojom::blink::PendingBeaconHost> remote_; -}; - -const char PendingBeaconHostRemote::kSupplementName[] = - "PendingBeaconHostRemote"; - PendingBeacon::PendingBeacon(ExecutionContext* ec, const String& url, const String& method, @@ -67,6 +30,8 @@ method_(method), background_timeout_(base::Milliseconds(background_timeout)), timeout_(base::Milliseconds(timeout)) { + // Creates a corresponding instance of PendingBeacon in the browser process + // and binds `remote_` to it. mojom::blink::BeaconMethod host_method; if (method == http_names::kGET) { host_method = mojom::blink::BeaconMethod::kGet; @@ -74,16 +39,15 @@ host_method = mojom::blink::BeaconMethod::kPost; } - // Using the MiscPlatformAPI task type as pending beacons are not yet - // associated with any specific task runner in the spec. - auto task_runner = ec->GetTaskRunner(TaskType::kMiscPlatformAPI); + auto task_runner = ec_->GetTaskRunner(PendingBeaconDispatcher::kTaskType); mojo::PendingReceiver<mojom::blink::PendingBeacon> beacon_receiver = remote_.BindNewPipeAndPassReceiver(task_runner); - KURL host_url = ec->CompleteURL(url); + KURL host_url = ec_->CompleteURL(url); - PendingBeaconHostRemote& host_remote = PendingBeaconHostRemote::From(*ec); - host_remote.remote_->CreateBeacon(std::move(beacon_receiver), host_url, - host_method, background_timeout_); + PendingBeaconDispatcher& dispatcher = + PendingBeaconDispatcher::FromOrAttachTo(*ec_); + dispatcher.CreateHostBeacon(std::move(beacon_receiver), host_url, + host_method); } void PendingBeacon::Trace(Visitor* visitor) const {
diff --git a/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.cc b/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.cc new file mode 100644 index 0000000..1456478 --- /dev/null +++ b/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.cc
@@ -0,0 +1,60 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h" + +#include <algorithm> + +#include "third_party/blink/public/platform/task_type.h" +#include "third_party/blink/renderer/core/execution_context/execution_context.h" +#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_counted_set.h" + +namespace blink { + +// static +const char PendingBeaconDispatcher::kSupplementName[] = + "PendingBeaconDispatcher"; + +PendingBeaconDispatcher::PendingBeaconDispatcher( + ExecutionContext& ec, + base::PassKey<PendingBeaconDispatcher> key) + : Supplement(ec), remote_(&ec) { + auto task_runner = ec.GetTaskRunner(kTaskType); + + mojo::PendingReceiver<mojom::blink::PendingBeaconHost> host_receiver = + remote_.BindNewPipeAndPassReceiver(task_runner); + ec.GetBrowserInterfaceBroker().GetInterface(std::move(host_receiver)); +} + +// static +PendingBeaconDispatcher& PendingBeaconDispatcher::FromOrAttachTo( + ExecutionContext& ec) { + PendingBeaconDispatcher* dispatcher = + Supplement::From<PendingBeaconDispatcher>(ec); + if (!dispatcher) { + dispatcher = MakeGarbageCollected<PendingBeaconDispatcher>( + ec, base::PassKey<PendingBeaconDispatcher>()); + ProvideTo(ec, dispatcher); + } + return *dispatcher; +} + +// static +PendingBeaconDispatcher* PendingBeaconDispatcher::From(ExecutionContext& ec) { + return Supplement::From<PendingBeaconDispatcher>(ec); +} + +void PendingBeaconDispatcher::CreateHostBeacon( + mojo::PendingReceiver<mojom::blink::PendingBeacon> receiver, + const KURL& url, + mojom::blink::BeaconMethod method) { + remote_->CreateBeacon(std::move(receiver), url, method); +} + +void PendingBeaconDispatcher::Trace(Visitor* visitor) const { + Supplement::Trace(visitor); + visitor->Trace(remote_); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h b/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h new file mode 100644 index 0000000..a8b2f7b --- /dev/null +++ b/third_party/blink/renderer/core/frame/pending_beacon_dispatcher.h
@@ -0,0 +1,86 @@ +// Copyright 2022 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 THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PENDING_BEACON_DISPATCHER_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PENDING_BEACON_DISPATCHER_H_ + +#include "base/types/pass_key.h" +#include "third_party/blink/public/mojom/frame/pending_beacon.mojom-blink.h" +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/platform/heap/garbage_collected.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h" +#include "third_party/blink/renderer/platform/supplementable.h" + +namespace blink { + +class ExecutionContext; +class KURL; + +// `PendingBeaconDispatcher` helps the caller connect to a `blink::Document`'s +// PendingBeaconHost by wrapping a shared HeapMojoRemote `remote_` that connects +// to a PendingBeaconHost instance running in the browser. +// +// Every PendingBeacon from the same Document should use this class to make +// calls to the corresponding PendingBeaconHost. +// +// PendingBeaconDispatcher is only created and attached to an ExecutionContext +// lazily by `PendingBeaconDispatcher::FromOrAttachTo()` if a PendingBeacon is +// ever created by users in that context (document). +// +// The lifetime of PendingBeaconDispatcher is the same as the ExecutionContext +// it is attached to. +// +// TODO(crbug.com/1293679): Implement dispatching beacons on timeout. +// TODO(crbug.com/1293679): Implement dispatching beacons on (page hidden + +// backgroundTimeout) msec. +class CORE_EXPORT PendingBeaconDispatcher + : public GarbageCollected<PendingBeaconDispatcher>, + public Supplement<ExecutionContext> { + public: + static const char kSupplementName[]; + // TODO(crbug.com/1293679): Update to proper TaskType once the spec finalized. + // Using the `TaskType::kMiscPlatformAPI` as pending beacons are not yet + // associated with any specific task runner in the spec. + // See also + // https://chromium.googlesource.com/chromium/src/+/main/third_party/blink/renderer/platform/scheduler/TaskSchedulingInBlink.md#task-types-and-task-sources + static constexpr TaskType kTaskType = TaskType::kMiscPlatformAPI; + + explicit PendingBeaconDispatcher(ExecutionContext& ec, + base::PassKey<PendingBeaconDispatcher> key); + + // Not copyable or movable + PendingBeaconDispatcher(const PendingBeaconDispatcher&) = delete; + PendingBeaconDispatcher& operator=(const PendingBeaconDispatcher&) = delete; + virtual ~PendingBeaconDispatcher() = default; + + void Trace(Visitor* visitor) const override; + + // Returns an instance of this class of `ec` if already stored in `ec`. + // Otherwise, constructs a new one attached to `ec` and returns it. + static PendingBeaconDispatcher& FromOrAttachTo(ExecutionContext& ec); + + // Returns a pointer to an instance of this class stored in `ec` if exists. + // Otherwise, returns nullptr. + static PendingBeaconDispatcher* From(ExecutionContext& ec); + + // Asks the PendingBeaconHost in the browser process to create and store a new + // PendingBeacon that holds `receiver`. The caller `beacon` will be able to + // communicate with it by sending messages to `receiver`. + // + // This method also retains an extra reference to `beacon` for later use in + // `ScheduleDispatchingBeacons()`. + void CreateHostBeacon( + mojo::PendingReceiver<mojom::blink::PendingBeacon> receiver, + const KURL& url, + mojom::blink::BeaconMethod method); + + private: + // Connects to a PendingBeaconHost running in browser process. + HeapMojoRemote<mojom::blink::PendingBeaconHost> remote_; +}; + +} // namespace blink + +#endif // #define + // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_PENDING_BEACON_DISPATCHER_H_
diff --git a/third_party/blink/renderer/core/layout/build.gni b/third_party/blink/renderer/core/layout/build.gni index 5956d7925..aaeb6d9 100644 --- a/third_party/blink/renderer/core/layout/build.gni +++ b/third_party/blink/renderer/core/layout/build.gni
@@ -559,6 +559,8 @@ "ng/ng_fragment_repeater.h", "ng/ng_fragmentation_utils.cc", "ng/ng_fragmentation_utils.h", + "ng/ng_frame_set_layout_algorithm.cc", + "ng/ng_frame_set_layout_algorithm.h", "ng/ng_ink_overflow.cc", "ng/ng_ink_overflow.h", "ng/ng_layout_algorithm.h",
diff --git a/third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h b/third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h index 54a1f8a..4d46b880 100644 --- a/third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h +++ b/third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h
@@ -27,6 +27,12 @@ const PhysicalSize& outer_size) : writing_direction_(writing_direction), outer_size_(outer_size) {} + WritingModeConverter(WritingDirectionMode writing_direction, + const LogicalSize& outer_size) + : writing_direction_(writing_direction), + outer_size_( + ToPhysicalSize(outer_size, writing_direction.GetWritingMode())) {} + // Construct without |outer_size|. Caller should call |SetOuterSize| before // conversions. explicit WritingModeConverter(WritingDirectionMode writing_direction)
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 41452e32..a642a6b 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
@@ -106,6 +106,8 @@ NGLogicalAnchorQuery anchor_query; NGAnchorEvaluatorImpl anchor_evaluator( anchor_query, container_converter, + /* offset_to_padding_box */ + PhysicalOffset(), /* self_writing_mode */ WritingMode::kHorizontalTb); const NGLogicalOutOfFlowInsets insets = ComputeOutOfFlowInsets( node.Style(), space.AvailableSize(), &anchor_evaluator); @@ -131,6 +133,8 @@ NGLogicalAnchorQuery anchor_query; NGAnchorEvaluatorImpl anchor_evaluator( anchor_query, container_converter, + /* offset_to_padding_box */ + PhysicalOffset(), /* self_writing_mode */ WritingMode::kHorizontalTb); const NGLogicalOutOfFlowInsets insets = ComputeOutOfFlowInsets( node.Style(), space.AvailableSize(), &anchor_evaluator);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_anchor_query.cc b/third_party/blink/renderer/core/layout/ng/ng_anchor_query.cc index c7ea163..361d8070 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_anchor_query.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_anchor_query.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/core/layout/ng/ng_anchor_query.h" #include "third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h" +#include "third_party/blink/renderer/core/layout/ng/ng_logical_link.h" #include "third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h" namespace blink { @@ -92,11 +93,75 @@ } } +void NGLogicalAnchorQuery::SetAsStitched( + base::span<const NGLogicalLink> children, + WritingDirectionMode writing_direction) { + // This struct is a variation of |NGAnchorReference|, using the stitched + // coordinate system for the block-fragmented out-of-flow positioned objects. + struct NGStitchedAnchorReference { + STACK_ALLOCATED(); + + public: + LogicalRect StitchedRect() const { + LogicalRect stitched_rect = reference.rect; + stitched_rect.offset.block_offset += first_container_stitched_offset; + return stitched_rect; + } + + NGLogicalAnchorReference StitchedAnchorReference() const { + return {StitchedRect(), reference.fragment}; + } + + void Unite(const LogicalRect& rect, const LogicalOffset& container_offset) { + // To unite fragments in the physical coordinate system as defined in the + // spec while keeping the |reference.rect| relative to the first + // container, make the |container_offset| relative to the first container. + const LogicalRect rect_in_first_container = + rect + (container_offset - first_container_offset); + reference.rect.Unite(rect_in_first_container); + } + + // The |reference| is relative to the first container, so that it can a) + // unite following fragments in the physical coordinate system, and b) + // compute the result in the stitched coordinate system. + NGLogicalAnchorReference reference; + LogicalOffset first_container_offset; + LayoutUnit first_container_stitched_offset; + }; + HashMap<AtomicString, NGStitchedAnchorReference> anchors; + LayoutUnit stitched_offset; + for (const NGLogicalLink& child : children) { + if (const NGPhysicalAnchorQuery* child_anchor_query = + child->AnchorQuery()) { + DCHECK_EQ(child->Style().GetWritingDirection(), writing_direction); + const WritingModeConverter converter(writing_direction, child->Size()); + for (const auto& it : *child_anchor_query) { + const LogicalRect rect = converter.ToLogical(it.value->rect); + const auto result = anchors.insert( + it.key, + NGStitchedAnchorReference{ + {rect, it.value->fragment}, child.offset, stitched_offset}); + if (!result.is_new_entry) + result.stored_value->value.Unite(rect, child.offset); + } + } + stitched_offset += child->Size() + .ConvertToLogical(writing_direction.GetWritingMode()) + .block_size; + } + + // Convert the united anchor references to the stitched coordinate system. + DCHECK(IsEmpty()); + for (const auto& it : anchors) + Set(it.key, it.value.StitchedAnchorReference()); +} + absl::optional<LayoutUnit> NGLogicalAnchorQuery::EvaluateAnchor( const AtomicString& anchor_name, AnchorValue anchor_value, LayoutUnit available_size, const WritingModeConverter& container_converter, + const PhysicalOffset& offset_to_padding_box, bool is_y_axis, bool is_right_or_bottom) const { const NGLogicalAnchorReference* reference = AnchorReference(anchor_name); @@ -109,22 +174,28 @@ case AnchorValue::kLeft: if (is_y_axis) return absl::nullopt; // Wrong axis. - value = anchor.X(); + // Make the offset relative to the padding box, because the containing + // block is formed by the padding edge. + // https://www.w3.org/TR/CSS21/visudet.html#containing-block-details + value = anchor.X() - offset_to_padding_box.left; break; case AnchorValue::kRight: if (is_y_axis) return absl::nullopt; // Wrong axis. - value = anchor.Right(); + // See |AnchorValue::kLeft|. + value = anchor.Right() - offset_to_padding_box.left; break; case AnchorValue::kTop: if (!is_y_axis) return absl::nullopt; // Wrong axis. - value = anchor.Y(); + // See |AnchorValue::kLeft|. + value = anchor.Y() - offset_to_padding_box.top; break; case AnchorValue::kBottom: if (!is_y_axis) return absl::nullopt; // Wrong axis. - value = anchor.Bottom(); + // See |AnchorValue::kLeft|. + value = anchor.Bottom() - offset_to_padding_box.top; break; default: NOTREACHED(); @@ -188,9 +259,9 @@ const AtomicString& anchor_name, AnchorValue anchor_value) const { has_anchor_functions_ = true; - return anchor_query_.EvaluateAnchor(anchor_name, anchor_value, - available_size_, container_converter_, - is_y_axis_, is_right_or_bottom_); + return anchor_query_.EvaluateAnchor( + anchor_name, anchor_value, available_size_, container_converter_, + offset_to_padding_box_, is_y_axis_, is_right_or_bottom_); } absl::optional<LayoutUnit> NGAnchorEvaluatorImpl::EvaluateAnchorSize(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_anchor_query.h b/third_party/blink/renderer/core/layout/ng/ng_anchor_query.h index bd38859b..f650a05 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_anchor_query.h +++ b/third_party/blink/renderer/core/layout/ng/ng_anchor_query.h
@@ -22,6 +22,7 @@ class NGLogicalAnchorQuery; class NGPhysicalFragment; class WritingModeConverter; +struct NGLogicalLink; struct CORE_EXPORT NGPhysicalAnchorReference : public GarbageCollected<NGPhysicalAnchorReference> { @@ -89,6 +90,8 @@ void SetFromPhysical(const NGPhysicalAnchorQuery& physical_query, const WritingModeConverter& converter, const LogicalOffset& additional_offset); + void SetAsStitched(base::span<const NGLogicalLink> children, + WritingDirectionMode writing_direction); // Evaluate the |anchor_name| for the |anchor_value|. Returns |nullopt| if // the query is invalid (e.g., no targets or wrong axis.) @@ -97,6 +100,7 @@ AnchorValue anchor_value, LayoutUnit available_size, const WritingModeConverter& container_converter, + const PhysicalOffset& offset_to_padding_box, bool is_y_axis, bool is_right_or_bottom) const; absl::optional<LayoutUnit> EvaluateSize(const AtomicString& anchor_name, @@ -116,9 +120,11 @@ public: NGAnchorEvaluatorImpl(const NGLogicalAnchorQuery& anchor_query, const WritingModeConverter& container_converter, + const PhysicalOffset& offset_to_padding_box, WritingMode self_writing_mode) : anchor_query_(anchor_query), container_converter_(container_converter), + offset_to_padding_box_(offset_to_padding_box), self_writing_mode_(self_writing_mode) {} // Returns true if this evaluator was invoked for `anchor()` or @@ -144,6 +150,7 @@ private: const NGLogicalAnchorQuery& anchor_query_; const WritingModeConverter& container_converter_; + PhysicalOffset offset_to_padding_box_; WritingMode self_writing_mode_; LayoutUnit available_size_; bool is_y_axis_ = false;
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 eb06f0fa..fe03cae4 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
@@ -153,6 +153,8 @@ void SetShouldRepeat(bool b) { space_.EnsureRareData()->should_repeat = b; } void SetIsInsideRepeatableContent(bool b) { + if (!b && !space_.rare_data_) + return; space_.EnsureRareData()->is_inside_repeatable_content = b; }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_frame_set_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_frame_set_layout_algorithm.cc new file mode 100644 index 0000000..94047db --- /dev/null +++ b/third_party/blink/renderer/core/layout/ng/ng_frame_set_layout_algorithm.cc
@@ -0,0 +1,23 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/layout/ng/ng_frame_set_layout_algorithm.h" + +namespace blink { + +NGFrameSetLayoutAlgorithm::NGFrameSetLayoutAlgorithm( + const NGLayoutAlgorithmParams& params) + : NGLayoutAlgorithm<NGBlockNode, NGBoxFragmentBuilder, NGBlockBreakToken>( + params) {} + +const NGLayoutResult* NGFrameSetLayoutAlgorithm::Layout() { + return container_builder_.ToBoxFragment(); +} + +MinMaxSizesResult NGFrameSetLayoutAlgorithm::ComputeMinMaxSizes( + const MinMaxSizesFloatInput&) { + return MinMaxSizesResult(MinMaxSizes(), false); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_frame_set_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_frame_set_layout_algorithm.h new file mode 100644 index 0000000..d37710b --- /dev/null +++ b/third_party/blink/renderer/core/layout/ng/ng_frame_set_layout_algorithm.h
@@ -0,0 +1,28 @@ +// Copyright 2022 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 THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_FRAME_SET_LAYOUT_ALGORITHM_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_FRAME_SET_LAYOUT_ALGORITHM_H_ + +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/core/layout/ng/ng_layout_algorithm.h" + +namespace blink { + +class NGBlockBreakToken; + +class CORE_EXPORT NGFrameSetLayoutAlgorithm + : public NGLayoutAlgorithm<NGBlockNode, + NGBoxFragmentBuilder, + NGBlockBreakToken> { + public: + explicit NGFrameSetLayoutAlgorithm(const NGLayoutAlgorithmParams& params); + + const NGLayoutResult* Layout() override; + MinMaxSizesResult ComputeMinMaxSizes(const MinMaxSizesFloatInput&) override; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_NG_FIELDSET_LAYOUT_ALGORITHM_H_
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 bccd05d2..ff7ca6f 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
@@ -1098,6 +1098,11 @@ container_builder_->BorderScrollbarPadding()) .block_size; + NGLogicalAnchorQuery stitched_anchor_query; + stitched_anchor_query.SetAsStitched( + container_builder_->Children(), + container_builder_->GetWritingDirection()); + HeapVector<HeapVector<NodeToLayout>> descendants_to_layout; ClearCollectionScope<HeapVector<HeapVector<NodeToLayout>>> descendants_to_layout_scope(&descendants_to_layout); @@ -1123,7 +1128,9 @@ } NodeInfo node_info = SetupNodeInfo(descendant); NodeToLayout node_to_layout = { - node_info, CalculateOffset(node_info, /* only_layout */ nullptr)}; + node_info, + CalculateOffset(node_info, /* only_layout */ nullptr, + /* is_first_run */ true, &stitched_anchor_query)}; node_to_layout.containing_block_fragment = descendant.containing_block.Fragment(); node_to_layout.offset_info.original_offset = @@ -1371,7 +1378,8 @@ NGOutOfFlowLayoutPart::OffsetInfo NGOutOfFlowLayoutPart::CalculateOffset( const NodeInfo& node_info, const LayoutBox* only_layout, - bool is_first_run) { + bool is_first_run, + const NGLogicalAnchorQuery* stitched_anchor_query) { const ComputedStyle* style = &node_info.node.Style(); // If `@position-fallback` exists, let |TryCalculateOffset| check if the @@ -1395,8 +1403,8 @@ const bool test_if_margin_box_fits = next_fallback_style; OffsetInfo offset_info; if (TryCalculateOffset(node_info, *style, only_layout, - test_if_margin_box_fits, is_first_run, - &offset_info)) { + stitched_anchor_query, test_if_margin_box_fits, + is_first_run, &offset_info)) { return offset_info; } @@ -1412,6 +1420,7 @@ const NodeInfo& node_info, const ComputedStyle& candidate_style, const LayoutBox* only_layout, + const NGLogicalAnchorQuery* stitched_anchor_query, bool test_if_margin_box_fits, bool is_first_run, OffsetInfo* const offset_info) { @@ -1444,14 +1453,29 @@ } } + absl::optional<NGAnchorEvaluatorImpl> anchor_evaluator_storage; const WritingModeConverter container_converter( container_writing_direction, node_info.container_physical_content_size); - NGAnchorEvaluatorImpl anchor_evaluator( - container_builder_->AnchorQuery(), container_converter, - candidate_writing_direction.GetWritingMode()); + if (stitched_anchor_query) { + // When the containing block is block-fragmented, the |container_builder_| + // is the fragmentainer, not the containing block, and the coordinate system + // is stitched. Use the given |anchor_query|. + anchor_evaluator_storage.emplace( + *stitched_anchor_query, container_converter, + container_converter.ToPhysical(node_info.container_info.rect).offset, + candidate_writing_direction.GetWritingMode()); + } else { + // Otherwise the |container_builder_| is the containing block. + anchor_evaluator_storage.emplace( + container_builder_->AnchorQuery(), container_converter, + container_converter.ToPhysical(node_info.container_info.rect).offset, + candidate_writing_direction.GetWritingMode()); + } + NGAnchorEvaluatorImpl* anchor_evaluator = &*anchor_evaluator_storage; + const NGLogicalOutOfFlowInsets insets = ComputeOutOfFlowInsets( candidate_style, node_info.constraint_space.AvailableSize(), - &anchor_evaluator); + anchor_evaluator); const LogicalSize computed_available_size = ComputeOutOfFlowAvailableSize(node_info.node, node_info.constraint_space, @@ -1465,7 +1489,7 @@ if (node_info.node.IsReplaced()) { replaced_size = ComputeReplacedSize( node_info.node, node_info.constraint_space, border_padding, - computed_available_size, ReplacedSizeMode::kNormal, &anchor_evaluator); + computed_available_size, ReplacedSizeMode::kNormal, anchor_evaluator); } NGLogicalOutOfFlowDimensions& node_dimensions = offset_info->node_dimensions; @@ -1473,7 +1497,7 @@ ComputeOutOfFlowInlineDimensions( node_info.node, candidate_style, node_info.constraint_space, insets, border_padding, node_info.static_position, computed_available_size, - replaced_size, container_writing_direction, &anchor_evaluator, + replaced_size, container_writing_direction, anchor_evaluator, &node_dimensions); // Check if the inline dimension fits. @@ -1495,7 +1519,7 @@ offset_info->initial_layout_result = ComputeOutOfFlowBlockDimensions( node_info.node, candidate_style, node_info.constraint_space, insets, border_padding, node_info.static_position, computed_available_size, - replaced_size, container_writing_direction, &anchor_evaluator, + replaced_size, container_writing_direction, anchor_evaluator, &node_dimensions); } @@ -1509,7 +1533,7 @@ } offset_info->disable_first_tier_cache |= - anchor_evaluator.HasAnchorFunctions(); + anchor_evaluator->HasAnchorFunctions(); offset_info->block_estimate = node_dimensions.size.block_size; // Calculate the offsets.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.h b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.h index 5d7c354..edde92e 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.h +++ b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.h
@@ -318,12 +318,15 @@ // TODO(almaher): We are calculating more than just the offset. Consider // changing this to a more accurate name. - OffsetInfo CalculateOffset(const NodeInfo& node_info, - const LayoutBox* only_layout, - bool is_first_run = true); + OffsetInfo CalculateOffset( + const NodeInfo& node_info, + const LayoutBox* only_layout, + bool is_first_run = true, + const NGLogicalAnchorQuery* stitched_anchor_query = nullptr); bool TryCalculateOffset(const NodeInfo& node_info, const ComputedStyle& style, const LayoutBox* only_layout, + const NGLogicalAnchorQuery* stitched_anchor_query, bool try_fit_container_rect, bool is_first_run, OffsetInfo* const offset_info);
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc index cd6ec52c..1aeb8c6 100644 --- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc
@@ -887,8 +887,16 @@ const LogicalSize& border_spacing) { const NGTableBreakTokenData* incoming_table_break_data = nullptr; LogicalBoxSides border_padding_sides_to_include; + const LayoutUnit fragmentainer_space_at_start = + FragmentainerSpaceAtBfcStart(ConstraintSpace()); LayoutUnit previously_consumed_block_size; LayoutUnit previously_consumed_table_box_block_size; + + // border-spacing that is to be added before the first table section (if any) + // in this fragment. We will omit this when resuming table box layout in a + // subsequent fragment. + LayoutUnit border_spacing_before_first_section = border_spacing.block_size; + bool is_past_table_box = false; if (BreakToken()) { previously_consumed_block_size = BreakToken()->ConsumedBlockSize(); @@ -900,8 +908,11 @@ minimal_table_grid_block_size -= incoming_table_break_data->consumed_table_box_block_size; is_past_table_box = incoming_table_break_data->is_past_table_box; - if (incoming_table_break_data->has_entered_table_box) + if (incoming_table_break_data->has_entered_table_box) { border_padding_sides_to_include.block_start = false; + + border_spacing_before_first_section = LayoutUnit(); + } if (is_past_table_box) border_padding_sides_to_include.block_end = false; } @@ -918,11 +929,6 @@ // The current layout position. LayoutUnit child_block_offset; - // border-spacing that was added before the first table section in this - // fragment. We may want to omit it in some cases, in which case it will be - // set to 0. - LayoutUnit border_spacing_before_first_section; - // border-spacing to add after the last table section in this fragment. We may // want to omit it in some cases, in which case it will be set to 0. LayoutUnit border_spacing_after_last_section; @@ -1128,8 +1134,7 @@ // We're done with the table box if it fits inside the fragmentainer. is_past_table_box = !ConstraintSpace().HasKnownFragmentainerBlockSize() || - table_box_extent->end <= - FragmentainerSpaceAtBfcStart(ConstraintSpace()); + table_box_extent->end <= fragmentainer_space_at_start; } LogicalSize available_size(container_builder_.InlineSize(), @@ -1164,9 +1169,6 @@ // box" starts. new_table_box_extent = BeginTableBoxLayout(child_block_offset, BlockStartBorderPadding()); - // Only include border-spacing if we're at the start of the section. - if (!IsResumingLayout(child_break_token)) - border_spacing_before_first_section = border_spacing.block_size; child_block_offset += BlockStartBorderPadding(); // We need to lay the section out before we can tell whether it should @@ -1379,10 +1381,17 @@ if (broke_inside) { if (ConstraintSpace().HasKnownFragmentainerBlockSize()) { table_box_extent->end = - std::max(table_box_extent->end, - FragmentainerSpaceAtBfcStart(ConstraintSpace())); + std::max(table_box_extent->end, fragmentainer_space_at_start); } border_spacing_after_last_section = LayoutUnit(); + } else if (ConstraintSpace().HasKnownFragmentainerBlockSize()) { + // Truncate trailing border-spacing to fit within the fragmentainer. + border_spacing_after_last_section = + std::min(border_spacing_after_last_section, + fragmentainer_space_at_start - child_block_offset - + border_padding.block_end); + border_spacing_after_last_section = + border_spacing_after_last_section.ClampNegativeToZero(); } if (!has_ended_table_box_layout) { @@ -1395,8 +1404,7 @@ // If the table box fits inside the fragmentainer, we're past it. is_past_table_box = !ConstraintSpace().HasKnownFragmentainerBlockSize() || - table_box_extent->end <= - FragmentainerSpaceAtBfcStart(ConstraintSpace()); + table_box_extent->end <= fragmentainer_space_at_start; } } } @@ -1432,9 +1440,9 @@ container_builder_.SetIsTableNGPart(); if (UNLIKELY(InvolvedInBlockFragmentation(container_builder_))) { - NGBreakStatus status = FinishFragmentation( - Node(), ConstraintSpace(), border_padding.block_end, - FragmentainerSpaceAtBfcStart(ConstraintSpace()), &container_builder_); + NGBreakStatus status = + FinishFragmentation(Node(), ConstraintSpace(), border_padding.block_end, + fragmentainer_space_at_start, &container_builder_); if (status == NGBreakStatus::kNeedsEarlierBreak) return container_builder_.Abort(NGLayoutResult::kNeedsEarlierBreak);
diff --git a/third_party/blink/renderer/core/paint/build.gni b/third_party/blink/renderer/core/paint/build.gni index b005dce..ebf2f76 100644 --- a/third_party/blink/renderer/core/paint/build.gni +++ b/third_party/blink/renderer/core/paint/build.gni
@@ -134,6 +134,8 @@ "ng/ng_text_fragment_painter.h", "ng/ng_text_painter.cc", "ng/ng_text_painter.h", + "ng/ng_text_painter_base.cc", + "ng/ng_text_painter_base.h", "nine_piece_image_grid.cc", "nine_piece_image_grid.h", "nine_piece_image_painter.cc",
diff --git a/third_party/blink/renderer/core/paint/highlight_painting_utils.cc b/third_party/blink/renderer/core/paint/highlight_painting_utils.cc index 7f1ab392..4887180 100644 --- a/third_party/blink/renderer/core/paint/highlight_painting_utils.cc +++ b/third_party/blink/renderer/core/paint/highlight_painting_utils.cc
@@ -33,10 +33,27 @@ node->GetLayoutObject()->IsLayoutReplaced(); } -Color ForcedSystemForegroundColor(PseudoId pseudo_id, - mojom::blink::ColorScheme color_scheme) { +mojom::blink::ColorScheme UsedColorScheme( + const ComputedStyle& originating_style, + const ComputedStyle* pseudo_style) { + return pseudo_style ? pseudo_style->UsedColorScheme() + : originating_style.UsedColorScheme(); +} + +Color PreviousLayerColor(const ComputedStyle& originating_style, + absl::optional<Color> previous_layer_color) { + if (previous_layer_color && + RuntimeEnabledFeatures::HighlightOverlayPaintingEnabled()) { + return *previous_layer_color; + } + return originating_style.VisitedDependentColor(GetCSSPropertyColor()); +} + +// Returns the forced foreground color for the given |pseudo|. +Color ForcedForegroundColor(PseudoId pseudo, + mojom::blink::ColorScheme color_scheme) { CSSValueID keyword = CSSValueID::kHighlighttext; - switch (pseudo_id) { + switch (pseudo) { case kPseudoIdTargetText: // TODO(futhark): According to the spec, the UA style should use Marktext. keyword = CSSValueID::kHighlighttext; @@ -47,6 +64,7 @@ case kPseudoIdHighlight: keyword = CSSValueID::kHighlighttext; break; + // TODO(crbug.com/1035708) add cases for ::{spelling,grammar}-error default: NOTREACHED(); break; @@ -54,10 +72,11 @@ return LayoutTheme::GetTheme().SystemColor(keyword, color_scheme); } -Color ForcedSystemBackgroundColor(PseudoId pseudo_id, - mojom::blink::ColorScheme color_scheme) { +// Returns the forced ‘background-color’ for the given |pseudo|. +Color ForcedBackgroundColor(PseudoId pseudo, + mojom::blink::ColorScheme color_scheme) { CSSValueID keyword = CSSValueID::kHighlight; - switch (pseudo_id) { + switch (pseudo) { case kPseudoIdTargetText: // TODO(futhark): According to the spec, the UA style should use Mark. keyword = CSSValueID::kHighlight; @@ -68,6 +87,7 @@ case kPseudoIdHighlight: keyword = CSSValueID::kHighlight; break; + // TODO(crbug.com/1035708) add cases for ::{spelling,grammar}-error default: NOTREACHED(); break; @@ -75,53 +95,69 @@ return LayoutTheme::GetTheme().SystemColor(keyword, color_scheme); } -Color HighlightThemeForegroundColor(const Document& document, - const ComputedStyle& style, - const CSSProperty& color_property, - Color previous_layer_color, - PseudoId pseudo_id) { - switch (pseudo_id) { +// Returns the forced background color if |property| is ‘background-color’, +// or the forced foreground color for all other properties (e.g. ‘color’, +// ‘text-decoration-color’, ‘-webkit-text-fill-color’). +Color ForcedColor(const ComputedStyle& originating_style, + const ComputedStyle* pseudo_style, + PseudoId pseudo, + const CSSProperty& property) { + mojom::blink::ColorScheme color_scheme = + UsedColorScheme(originating_style, pseudo_style); + if (property.IDEquals(CSSPropertyID::kBackgroundColor)) + return ForcedBackgroundColor(pseudo, color_scheme); + return ForcedForegroundColor(pseudo, color_scheme); +} + +// Returns the UA default ‘color’ for the given |pseudo|. +absl::optional<Color> DefaultForegroundColor( + const Document& document, + PseudoId pseudo, + mojom::blink::ColorScheme color_scheme) { + // TODO(crbug.com/1295264): unstyled custom highlights should not change + // the foreground color, but for now the best we can do is defaulting to + // transparent (pre-HighlightOverlayPainting with double painting). The + // correct behaviour is to use the ‘color’ of the next topmost active + // highlight (equivalent to 'currentColor'). + absl::optional<Color> previous_layer_color = + RuntimeEnabledFeatures::HighlightOverlayPaintingEnabled() + ? absl::nullopt + : absl::make_optional(Color::kTransparent); + + switch (pseudo) { case kPseudoIdSelection: if (!LayoutTheme::GetTheme().SupportsSelectionForegroundColors()) - return style.VisitedDependentColor(color_property); + return previous_layer_color; if (document.GetFrame()->Selection().FrameIsFocusedAndActive()) { return LayoutTheme::GetTheme().ActiveSelectionForegroundColor( - style.UsedColorScheme()); + color_scheme); } return LayoutTheme::GetTheme().InactiveSelectionForegroundColor( - style.UsedColorScheme()); + color_scheme); case kPseudoIdTargetText: return LayoutTheme::GetTheme().PlatformTextSearchColor( - false /* active match */, style.UsedColorScheme()); + false /* active match */, color_scheme); case kPseudoIdSpellingError: case kPseudoIdGrammarError: case kPseudoIdHighlight: - if (RuntimeEnabledFeatures::HighlightOverlayPaintingEnabled()) { - return previous_layer_color; - } else { - // TODO(crbug.com/1295264): unstyled custom highlights should not change - // the foreground color, but for now the best we can do is defaulting to - // transparent (pre-HighlightOverlayPainting with double painting). The - // correct behaviour is to use the ‘color’ of the next topmost active - // highlight (equivalent to 'currentColor'). - return Color::kTransparent; - } + return previous_layer_color; default: NOTREACHED(); - return Color(); + return absl::nullopt; } } -Color HighlightThemeBackgroundColor(const Document& document, - const ComputedStyle& style, - PseudoId pseudo_id) { - switch (pseudo_id) { +// Returns the UA default ‘background-color’ for the given |pseudo|. +Color DefaultBackgroundColor(const Document& document, + PseudoId pseudo, + mojom::blink::ColorScheme color_scheme) { + switch (pseudo) { case kPseudoIdSelection: return document.GetFrame()->Selection().FrameIsFocusedAndActive() ? LayoutTheme::GetTheme().ActiveSelectionBackgroundColor( - style.UsedColorScheme()) + color_scheme) : LayoutTheme::GetTheme().InactiveSelectionBackgroundColor( - style.UsedColorScheme()); + color_scheme); case kPseudoIdTargetText: return Color::FromRGBA32( shared_highlighting::kFragmentTextBackgroundColorARGB); @@ -135,6 +171,27 @@ } } +// Returns the UA default highlight color for a paired cascade |property|, +// that is, ‘color’ or ‘background-color’. Paired cascade only applies to those +// properties, not ‘-webkit-text-fill-color’ or ‘-webkit-text-stroke-color’. +Color DefaultHighlightColor(const Document& document, + const ComputedStyle& originating_style, + const ComputedStyle* pseudo_style, + PseudoId pseudo, + const CSSProperty& property, + absl::optional<Color> previous_layer_color) { + mojom::blink::ColorScheme color_scheme = + UsedColorScheme(originating_style, pseudo_style); + if (property.IDEquals(CSSPropertyID::kBackgroundColor)) + return DefaultBackgroundColor(document, pseudo, color_scheme); + DCHECK(property.IDEquals(CSSPropertyID::kColor)); + if (absl::optional<Color> result = + DefaultForegroundColor(document, pseudo, color_scheme)) { + return *result; + } + return PreviousLayerColor(originating_style, previous_layer_color); +} + // Returns highlight styles for the given node, inheriting from the originating // element only, like most impls did before highlights were added to css-pseudo. scoped_refptr<const ComputedStyle> @@ -181,58 +238,64 @@ return element->CachedStyleForPseudoElement(pseudo, pseudo_argument); } +bool UseForcedColors(const Document& document, + const ComputedStyle& originating_style, + const ComputedStyle* pseudo_style) { + if (!document.InForcedColorsMode()) + return false; + // TODO(crbug.com/1309835) simplify when valid_for_highlight_legacy is removed + if (pseudo_style) + return pseudo_style->ForcedColorAdjust() == EForcedColorAdjust::kAuto; + return originating_style.ForcedColorAdjust() == EForcedColorAdjust::kAuto; +} + // Paired cascade: when we encounter any highlight colors, we make all other // highlight color properties default to initial, rather than the UA default. // https://drafts.csswg.org/css-pseudo-4/#highlight-cascade -bool UseUaHighlightColors(PseudoId pseudo, const ComputedStyle& pseudo_style) { - return !pseudo_style.HasAuthorHighlightColors(); -} - -Color HighlightColor(const Document& document, - const ComputedStyle& style, - Node* node, - Color previous_layer_color, - PseudoId pseudo, - const CSSProperty& color_property, - PaintFlags paint_flags, - const AtomicString& pseudo_argument = g_null_atom) { - if (pseudo == kPseudoIdSelection) { - // If the element is unselectable, or we are only painting the selection, - // don't override the foreground color with the selection foreground color. - if ((node && !style.IsSelectable()) || - (paint_flags & PaintFlag::kSelectionDragImageOnly)) { - return style.VisitedDependentColor(color_property); - } +bool UseDefaultHighlightColors(const ComputedStyle* pseudo_style, + PseudoId pseudo, + const CSSProperty& property) { + switch (property.PropertyID()) { + case CSSPropertyID::kColor: + case CSSPropertyID::kBackgroundColor: + return !pseudo_style || (UsesHighlightPseudoInheritance(pseudo) && + !pseudo_style->HasAuthorHighlightColors()); + default: + return false; } - - scoped_refptr<const ComputedStyle> pseudo_style = - HighlightPaintingUtils::HighlightPseudoStyle(node, style, pseudo, - pseudo_argument); - - mojom::blink::ColorScheme color_scheme = style.UsedColorScheme(); - if (pseudo_style && (!UsesHighlightPseudoInheritance(pseudo) || - !UseUaHighlightColors(pseudo, *pseudo_style))) { - if (!document.InForcedColorsMode() || - pseudo_style->ForcedColorAdjust() != EForcedColorAdjust::kAuto) { - if (pseudo_style->VisitedDependentColorIsCurrentColor()) { - if (RuntimeEnabledFeatures::HighlightOverlayPaintingEnabled()) - return previous_layer_color; - else - return style.VisitedDependentColor(color_property); - } - return pseudo_style->VisitedDependentColor(color_property); - } - color_scheme = pseudo_style->UsedColorScheme(); - } - - if (document.InForcedColorsMode()) - return ForcedSystemForegroundColor(pseudo, color_scheme); - return HighlightThemeForegroundColor(document, style, color_property, - previous_layer_color, pseudo); } } // anonymous namespace +// Returns the used value of the given <color>-valued |property|, taking into +// account forced colors, default highlight colors, and ‘currentColor’ fallback. +Color HighlightPaintingUtils::ResolveColor( + const Document& document, + const ComputedStyle& originating_style, + const ComputedStyle* pseudo_style, + PseudoId pseudo, + const CSSProperty& property, + absl::optional<Color> previous_layer_color) { + if (UseForcedColors(document, originating_style, pseudo_style)) + return ForcedColor(originating_style, pseudo_style, pseudo, property); + if (UseDefaultHighlightColors(pseudo_style, pseudo, property)) { + return DefaultHighlightColor(document, originating_style, pseudo_style, + pseudo, property, previous_layer_color); + } + if (pseudo_style) { + bool is_current_color; + Color result = + pseudo_style->VisitedDependentColor(property, &is_current_color); + if (!is_current_color) + return result; + } + if (!property.IDEquals(CSSPropertyID::kColor)) { + return ResolveColor(document, originating_style, pseudo_style, pseudo, + GetCSSPropertyColor(), previous_layer_color); + } + return PreviousLayerColor(originating_style, previous_layer_color); +} + // Returns highlight styles for the given node, inheriting through the “tree” of // highlight pseudo styles mirroring the originating element tree. None of the // returned styles are influenced by originating elements or pseudo-elements. @@ -280,42 +343,23 @@ scoped_refptr<const ComputedStyle> pseudo_style = HighlightPseudoStyle(node, style, pseudo, pseudo_argument); - - mojom::blink::ColorScheme color_scheme = style.UsedColorScheme(); - if (pseudo_style && (!UsesHighlightPseudoInheritance(pseudo) || - !UseUaHighlightColors(pseudo, *pseudo_style))) { - if (!document.InForcedColorsMode() || - pseudo_style->ForcedColorAdjust() != EForcedColorAdjust::kAuto) { - Color highlight_color = - pseudo_style->VisitedDependentColor(GetCSSPropertyBackgroundColor()); - if (pseudo_style->IsBackgroundColorCurrentColor() && - pseudo_style->VisitedDependentColorIsCurrentColor()) { - if (RuntimeEnabledFeatures::HighlightOverlayPaintingEnabled() && - previous_layer_color.has_value()) { - highlight_color = previous_layer_color.value(); - } else { - highlight_color = style.VisitedDependentColor(GetCSSPropertyColor()); - } - } - if (pseudo == kPseudoIdSelection && NodeIsReplaced(node)) { - // Avoid that ::selection full obscures selected replaced elements like - // images. - return highlight_color.BlendWithWhite(); - } - return highlight_color; - } - color_scheme = pseudo_style->UsedColorScheme(); + Color result = + ResolveColor(document, style, pseudo_style.get(), pseudo, + GetCSSPropertyBackgroundColor(), previous_layer_color); + if (pseudo == kPseudoIdSelection && NodeIsReplaced(node)) { + // Avoid that ::selection full obscures selected replaced elements like + // images. + return result.BlendWithWhite(); } - - if (document.InForcedColorsMode()) - return ForcedSystemBackgroundColor(pseudo, color_scheme); - return HighlightThemeBackgroundColor(document, style, pseudo); + return result; } absl::optional<AppliedTextDecoration> -HighlightPaintingUtils::HighlightTextDecoration( +HighlightPaintingUtils::SelectionTextDecoration( + const Document& document, const ComputedStyle& style, - const ComputedStyle& pseudo_style) { + const ComputedStyle& pseudo_style, + absl::optional<Color> previous_layer_color) { const Vector<AppliedTextDecoration>& style_decorations = style.AppliedTextDecorations(); const Vector<AppliedTextDecoration>& pseudo_style_decorations = @@ -334,68 +378,51 @@ } highlight_text_decoration.value().SetColor( - pseudo_style.VisitedDependentColor(GetCSSPropertyTextDecorationColor())); + ResolveColor(document, style, &pseudo_style, kPseudoIdSelection, + GetCSSPropertyTextDecorationColor(), previous_layer_color)); return highlight_text_decoration; } -Color HighlightPaintingUtils::HighlightForegroundColor( - const Document& document, - const ComputedStyle& style, - Node* node, - Color previous_layer_color, - PseudoId pseudo, - PaintFlags paint_flags, - const AtomicString& pseudo_argument) { - return HighlightColor(document, style, node, previous_layer_color, pseudo, - GetCSSPropertyWebkitTextFillColor(), paint_flags, - pseudo_argument); -} - -Color HighlightPaintingUtils::HighlightEmphasisMarkColor( - const Document& document, - const ComputedStyle& style, - Node* node, - Color previous_layer_color, - PseudoId pseudo, - PaintFlags paint_flags, - const AtomicString& pseudo_argument) { - return HighlightColor(document, style, node, previous_layer_color, pseudo, - GetCSSPropertyTextEmphasisColor(), paint_flags, - pseudo_argument); -} - TextPaintStyle HighlightPaintingUtils::HighlightPaintingStyle( const Document& document, const ComputedStyle& style, Node* node, PseudoId pseudo, - const TextPaintStyle& text_style, + const TextPaintStyle& previous_layer_text_style, const PaintInfo& paint_info, const AtomicString& pseudo_argument) { - TextPaintStyle highlight_style = text_style; - bool uses_text_as_clip = paint_info.phase == PaintPhase::kTextClip; + TextPaintStyle highlight_style = previous_layer_text_style; const PaintFlags paint_flags = paint_info.GetPaintFlags(); + bool uses_text_as_clip = paint_info.phase == PaintPhase::kTextClip; + bool ignored_selection = pseudo == kPseudoIdSelection && + ((node && !style.IsSelectable()) || + (paint_flags & PaintFlag::kSelectionDragImageOnly)); // Each highlight overlay’s shadows are completely independent of any shadows // specified on the originating element (or the other highlight overlays). highlight_style.shadow = nullptr; - if (!uses_text_as_clip) { - highlight_style.fill_color = - HighlightForegroundColor(document, style, node, text_style.fill_color, - pseudo, paint_flags, pseudo_argument); - highlight_style.emphasis_mark_color = HighlightEmphasisMarkColor( - document, style, node, text_style.emphasis_mark_color, pseudo, - paint_flags, pseudo_argument); + scoped_refptr<const ComputedStyle> pseudo_style = + HighlightPseudoStyle(node, style, pseudo, pseudo_argument); + Color previous_layer_current_color = previous_layer_text_style.current_color; + + if (!uses_text_as_clip && !ignored_selection) { + highlight_style.current_color = + ResolveColor(document, style, pseudo_style.get(), pseudo, + GetCSSPropertyColor(), previous_layer_current_color); + highlight_style.fill_color = ResolveColor( + document, style, pseudo_style.get(), pseudo, + GetCSSPropertyWebkitTextFillColor(), previous_layer_current_color); + highlight_style.emphasis_mark_color = ResolveColor( + document, style, pseudo_style.get(), pseudo, + GetCSSPropertyTextEmphasisColor(), previous_layer_current_color); + highlight_style.stroke_color = ResolveColor( + document, style, pseudo_style.get(), pseudo, + GetCSSPropertyWebkitTextStrokeColor(), previous_layer_current_color); } - if (scoped_refptr<const ComputedStyle> pseudo_style = - HighlightPseudoStyle(node, style, pseudo, pseudo_argument)) { - highlight_style.stroke_color = - uses_text_as_clip ? Color::kBlack - : pseudo_style->VisitedDependentColor( - GetCSSPropertyWebkitTextStrokeColor()); + if (pseudo_style) { highlight_style.stroke_width = pseudo_style->TextStrokeWidth(); // TODO(crbug.com/1164461) For now, don't paint text shadows for ::highlight // because some details of how this will be standardized aren't yet @@ -405,8 +432,8 @@ highlight_style.shadow = uses_text_as_clip ? nullptr : pseudo_style->TextShadow(); } - highlight_style.selection_text_decoration = - HighlightTextDecoration(style, *pseudo_style); + highlight_style.selection_text_decoration = SelectionTextDecoration( + document, style, *pseudo_style, previous_layer_current_color); } // Text shadows are disabled when printing. http://crbug.com/258321 @@ -417,8 +444,10 @@ } absl::optional<Color> HighlightPaintingUtils::HighlightTextDecorationColor( + const Document& document, const ComputedStyle& style, Node* node, + absl::optional<Color> previous_layer_color, PseudoId pseudo) { DCHECK(pseudo == kPseudoIdSpellingError || pseudo == kPseudoIdGrammarError); @@ -427,8 +456,9 @@ if (scoped_refptr<const ComputedStyle> pseudo_style = HighlightPseudoStyle(node, style, pseudo)) { - return pseudo_style->VisitedDependentColor( - GetCSSPropertyTextDecorationColor()); + return ResolveColor(document, style, pseudo_style.get(), pseudo, + GetCSSPropertyTextDecorationColor(), + previous_layer_color); } return absl::nullopt;
diff --git a/third_party/blink/renderer/core/paint/highlight_painting_utils.h b/third_party/blink/renderer/core/paint/highlight_painting_utils.h index 4f431e69..687568c 100644 --- a/third_party/blink/renderer/core/paint/highlight_painting_utils.h +++ b/third_party/blink/renderer/core/paint/highlight_painting_utils.h
@@ -16,6 +16,7 @@ namespace blink { class Color; +class CSSProperty; class Document; class ComputedStyle; class Node; @@ -26,9 +27,17 @@ STATIC_ONLY(HighlightPaintingUtils); public: - static absl::optional<AppliedTextDecoration> HighlightTextDecoration( + static Color ResolveColor(const Document&, + const ComputedStyle& originating_style, + const ComputedStyle* pseudo_style, + PseudoId pseudo, + const CSSProperty& property, + absl::optional<Color> previous_layer_color); + static absl::optional<AppliedTextDecoration> SelectionTextDecoration( + const Document& document, const ComputedStyle& style, - const ComputedStyle& pseudo_style); + const ComputedStyle& pseudo_style, + absl::optional<Color> previous_layer_color); static Color HighlightBackgroundColor( const Document&, const ComputedStyle&, @@ -36,32 +45,20 @@ absl::optional<Color> previous_layer_color, PseudoId, const AtomicString& pseudo_argument = g_null_atom); - static Color HighlightForegroundColor( - const Document&, - const ComputedStyle&, - Node*, - Color previous_layer_color, - PseudoId, - PaintFlags, - const AtomicString& pseudo_argument = g_null_atom); - static Color HighlightEmphasisMarkColor( - const Document&, - const ComputedStyle&, - Node*, - Color previous_layer_color, - PseudoId, - PaintFlags, - const AtomicString& pseudo_argument = g_null_atom); static TextPaintStyle HighlightPaintingStyle( const Document&, const ComputedStyle&, Node*, PseudoId, - const TextPaintStyle& text_style, + const TextPaintStyle& previous_layer_text_style, const PaintInfo&, const AtomicString& pseudo_argument = g_null_atom); - static absl::optional<Color> - HighlightTextDecorationColor(const ComputedStyle&, Node*, PseudoId); + static absl::optional<Color> HighlightTextDecorationColor( + const Document&, + const ComputedStyle&, + Node*, + absl::optional<Color> previous_layer_color, + PseudoId); static scoped_refptr<const ComputedStyle> HighlightPseudoStyle( Node* node,
diff --git a/third_party/blink/renderer/core/paint/highlight_painting_utils_test.cc b/third_party/blink/renderer/core/paint/highlight_painting_utils_test.cc index 6a20e85..3c7d1bc 100644 --- a/third_party/blink/renderer/core/paint/highlight_painting_utils_test.cc +++ b/third_party/blink/renderer/core/paint/highlight_painting_utils_test.cc
@@ -19,6 +19,20 @@ #include "third_party/blink/renderer/platform/graphics/paint/paint_controller.h" namespace blink { +namespace { + +Color SelectionWebkitTextFillColor(const Document& document, + Node* node, + const ComputedStyle& originating_style) { + scoped_refptr<const ComputedStyle> pseudo_style = + HighlightPaintingUtils::HighlightPseudoStyle(node, originating_style, + kPseudoIdSelection); + return HighlightPaintingUtils::ResolveColor( + document, originating_style, pseudo_style.get(), kPseudoIdSelection, + GetCSSPropertyWebkitTextFillColor(), Color::kBlack); +} + +} // namespace class HighlightPaintingUtilsTest : public SimTest {}; @@ -41,7 +55,6 @@ auto* body = GetDocument().body(); auto* text_node = body->firstChild(); - PaintFlags flags = PaintFlag::kNoFlag; Compositor().BeginFrame(); @@ -58,16 +71,14 @@ EXPECT_FALSE(body_style.GetCachedPseudoElementStyle(kPseudoIdSelection)); EXPECT_FALSE(GetPage().IsActive()); - EXPECT_EQ(Color(255, 0, 0), HighlightPaintingUtils::HighlightForegroundColor( - GetDocument(), text_style, text_node, - Color::kBlack, kPseudoIdSelection, flags)); + EXPECT_EQ(Color(255, 0, 0), + SelectionWebkitTextFillColor(GetDocument(), text_node, text_style)); // Focus the window. GetPage().SetActive(true); Compositor().BeginFrame(); - EXPECT_EQ(Color(0, 128, 0), HighlightPaintingUtils::HighlightForegroundColor( - GetDocument(), text_style, text_node, - Color::kBlack, kPseudoIdSelection, flags)); + EXPECT_EQ(Color(0, 128, 0), + SelectionWebkitTextFillColor(GetDocument(), text_node, text_style)); const ComputedStyle* active_style = body_style.GetCachedPseudoElementStyle(kPseudoIdSelection); EXPECT_TRUE(active_style); @@ -75,9 +86,8 @@ // Unfocus the window. GetPage().SetActive(false); Compositor().BeginFrame(); - EXPECT_EQ(Color(255, 0, 0), HighlightPaintingUtils::HighlightForegroundColor( - GetDocument(), text_style, text_node, - Color::kBlack, kPseudoIdSelection, flags)); + EXPECT_EQ(Color(255, 0, 0), + SelectionWebkitTextFillColor(GetDocument(), text_node, text_style)); EXPECT_EQ(active_style, body_style.GetCachedPseudoElementStyle(kPseudoIdSelection)); } @@ -100,7 +110,6 @@ auto* body = GetDocument().body(); auto* text_node = body->firstChild(); - PaintFlags flags = PaintFlag::kNoFlag; Compositor().BeginFrame(); @@ -120,25 +129,22 @@ EXPECT_TRUE(active_style); EXPECT_FALSE(GetPage().IsActive()); - EXPECT_EQ(Color(0, 128, 0), HighlightPaintingUtils::HighlightForegroundColor( - GetDocument(), text_style, text_node, - Color::kBlack, kPseudoIdSelection, flags)); + EXPECT_EQ(Color(0, 128, 0), + SelectionWebkitTextFillColor(GetDocument(), text_node, text_style)); // Focus the window. GetPage().SetActive(true); Compositor().BeginFrame(); - EXPECT_EQ(Color(0, 128, 0), HighlightPaintingUtils::HighlightForegroundColor( - GetDocument(), text_style, text_node, - Color::kBlack, kPseudoIdSelection, flags)); + EXPECT_EQ(Color(0, 128, 0), + SelectionWebkitTextFillColor(GetDocument(), text_node, text_style)); EXPECT_EQ(active_style, body_style.GetCachedPseudoElementStyle(kPseudoIdSelection)); // Unfocus the window. GetPage().SetActive(false); Compositor().BeginFrame(); - EXPECT_EQ(Color(0, 128, 0), HighlightPaintingUtils::HighlightForegroundColor( - GetDocument(), text_style, text_node, - Color::kBlack, kPseudoIdSelection, flags)); + EXPECT_EQ(Color(0, 128, 0), + SelectionWebkitTextFillColor(GetDocument(), text_node, text_style)); EXPECT_EQ(active_style, body_style.GetCachedPseudoElementStyle(kPseudoIdSelection)); }
diff --git a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc index cd3d447..8fb5bd5 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.cc
@@ -264,7 +264,7 @@ const ComputedStyle& style, const absl::optional<AffineTransform>& rotation) { const Color color = SelectionBackgroundColor(document, style, node, - selection_style_.fill_color); + selection_style_.current_color); AutoDarkMode auto_dark_mode( PaintAutoDarkMode(style, DarkModeFilter::ElementRole::kBackground)); @@ -287,13 +287,15 @@ // Paint the selected text only. void NGHighlightPainter::SelectionPaintState::PaintSelectedText( NGTextPainter& text_painter, + const NGTextFragmentPaintInfo& fragment_paint_info, unsigned length, const TextPaintStyle& text_style, DOMNodeId node_id, const AutoDarkMode& auto_dark_mode) { - text_painter.PaintSelectedText( - selection_status_.start, selection_status_.end, length, text_style, - selection_style_, RectInWritingModeSpace(), node_id, auto_dark_mode); + text_painter.PaintSelectedText(fragment_paint_info, selection_status_.start, + selection_status_.end, length, text_style, + selection_style_, RectInWritingModeSpace(), + node_id, auto_dark_mode); } // Paint the given text range in the given style, suppressing the text proper @@ -301,28 +303,28 @@ void NGHighlightPainter::SelectionPaintState:: PaintSuppressingTextProperWhereSelected( NGTextPainter& text_painter, - unsigned start_offset, - unsigned end_offset, + const NGTextFragmentPaintInfo& fragment_paint_info, unsigned length, const TextPaintStyle& text_style, DOMNodeId node_id, const AutoDarkMode& auto_dark_mode) { // First paint the shadows for the whole range. if (text_style.shadow) { - text_painter.Paint(start_offset, end_offset, length, text_style, node_id, + text_painter.Paint(fragment_paint_info, length, text_style, node_id, auto_dark_mode, NGTextPainter::kShadowsOnly); } // Then paint the text proper for any unselected parts in storage order, so // that they’re always on top of the shadows. - if (start_offset < selection_status_.start) { - text_painter.Paint(start_offset, selection_status_.start, length, - text_style, node_id, auto_dark_mode, - NGTextPainter::kTextProperOnly); + if (fragment_paint_info.from < selection_status_.start) { + text_painter.Paint( + fragment_paint_info.WithEndOffset(selection_status_.start), length, + text_style, node_id, auto_dark_mode, NGTextPainter::kTextProperOnly); } - if (selection_status_.end < end_offset) { - text_painter.Paint(selection_status_.end, end_offset, length, text_style, - node_id, auto_dark_mode, NGTextPainter::kTextProperOnly); + if (selection_status_.end < fragment_paint_info.to) { + text_painter.Paint( + fragment_paint_info.WithStartOffset(selection_status_.end), length, + text_style, node_id, auto_dark_mode, NGTextPainter::kTextProperOnly); } } @@ -488,9 +490,10 @@ text_style.stroke_width = style_.TextStrokeWidth(); text_style.color_scheme = style_.UsedColorScheme(); } - text_painter_.Paint(paint_start_offset, paint_end_offset, - paint_end_offset - paint_start_offset, text_style, - kInvalidDOMNodeId, foreground_auto_dark_mode_); + text_painter_.Paint( + fragment_paint_info_.Slice(paint_start_offset, paint_end_offset), + paint_end_offset - paint_start_offset, text_style, + kInvalidDOMNodeId, foreground_auto_dark_mode_); } break; case DocumentMarker::kComposition: @@ -569,12 +572,13 @@ decoration_rect, selection_); decoration_painter.Begin(NGTextDecorationPainter::kOriginating); - decoration_painter.PaintExceptLineThrough(); + decoration_painter.PaintExceptLineThrough( + fragment_paint_info_.Slice(paint_start_offset, paint_end_offset)); - text_painter_.Paint(paint_start_offset, paint_end_offset, - paint_end_offset - paint_start_offset, - final_text_style, kInvalidDOMNodeId, - foreground_auto_dark_mode_); + text_painter_.Paint( + fragment_paint_info_.Slice(paint_start_offset, paint_end_offset), + paint_end_offset - paint_start_offset, final_text_style, + kInvalidDOMNodeId, foreground_auto_dark_mode_); decoration_painter.PaintOnlyLineThrough(); } break; @@ -687,7 +691,8 @@ MarkerRectForForeground(fragment_item_, text, paint_start_offset, paint_end_offset), HighlightPaintingUtils::HighlightTextDecorationColor( - style_, node_, + layout_object_->GetDocument(), style_, node_, + originating_text_style_.current_color, marker_type == DocumentMarker::kSpelling ? kPseudoIdSpellingError : kPseudoIdGrammarError)); } @@ -698,7 +703,7 @@ // First paint the shadows for the whole range. if (text_style.shadow) { - text_painter_.Paint(fragment_paint_info_.from, fragment_paint_info_.to, + text_painter_.Paint(fragment_paint_info_, fragment_paint_info_.to - fragment_paint_info_.from, text_style, node_id, foreground_auto_dark_mode_, NGTextPainter::kShadowsOnly); @@ -711,8 +716,9 @@ continue; PaintDecorationsExceptLineThrough(part); - text_painter_.Paint(part.from, part.to, part.to - part.from, text_style, - node_id, foreground_auto_dark_mode_, + text_painter_.Paint(fragment_paint_info_.Slice(part.from, part.to), + part.to - part.from, text_style, node_id, + foreground_auto_dark_mode_, NGTextPainter::kTextProperOnly); PaintDecorationsOnlyLineThrough(part); PaintSpellingGrammarDecorations(part); @@ -764,7 +770,7 @@ const StringView text = cursor_.CurrentText(); Color background_color = HighlightPaintingUtils::HighlightBackgroundColor( - document, style_, node_, layer.text_style.fill_color, + document, style_, node_, layer.text_style.current_color, layer.id.PseudoId(), layer.id.PseudoArgument()); // TODO(dazabani@igalia.com) paint rects pixel-snapped in physical space, @@ -775,8 +781,9 @@ if (layer.text_style.shadow) { text_painter_.Paint( - clamped_start, clamped_end, length, layer.text_style, node_id, - foreground_auto_dark_mode_, TextPainterBase::kShadowsOnly); + fragment_paint_info_.Slice(clamped_start, clamped_end), length, + layer.text_style, node_id, foreground_auto_dark_mode_, + TextPainterBase::kShadowsOnly); } } } @@ -806,8 +813,9 @@ // paint with clipping (NGTextPainter::PaintSelectedText) PaintDecorationsExceptLineThrough(part); - text_painter_.Paint(part.from, part.to, part.to - part.from, - layer.text_style, node_id, foreground_auto_dark_mode_, + text_painter_.Paint(fragment_paint_info_.Slice(part.from, part.to), + part.to - part.from, layer.text_style, node_id, + foreground_auto_dark_mode_, TextPainterBase::kTextProperOnly); PaintDecorationsOnlyLineThrough(part); PaintSpellingGrammarDecorations(part); @@ -824,7 +832,7 @@ } selection_->PaintSelectedText( - text_painter_, fragment_paint_info_.to - fragment_paint_info_.from, + text_painter_, fragment_paint_info_, fragment_paint_info_.Length(), originating_text_style, node_id, foreground_auto_dark_mode_); for (const HighlightPart& part : parts_) { @@ -903,17 +911,25 @@ ClipToPartDecorations(part); } - if (decoration_layer_id.type == HighlightLayerType::kOriginating && - part.layer.type != HighlightLayerType::kOriginating) { - wtf_size_t part_layer_index = layers_.Find(part.layer); - decoration_layer.decoration_info->SetHighlightOverrideColor( - layers_[part_layer_index].text_style.fill_color); + if (part.layer.type != HighlightLayerType::kOriginating) { + if (decoration_layer_id.type == HighlightLayerType::kOriginating) { + wtf_size_t part_layer_index = layers_.Find(part.layer); + decoration_layer.decoration_info->SetHighlightOverrideColor( + layers_[part_layer_index].text_style.current_color); + } else { + decoration_layer.decoration_info->SetHighlightOverrideColor( + HighlightPaintingUtils::ResolveColor( + layout_object_->GetDocument(), style_, + decoration_layer.style.get(), decoration_layer.id.PseudoId(), + GetCSSPropertyTextDecorationColor(), + layers_[decoration_layer_index - 1].text_style.current_color)); + } } text_painter_.PaintDecorationsExceptLineThrough( - fragment_item_, paint_info_, *decoration_layer.style, - decoration_layer.text_style, *decoration_layer.decoration_info, - lines_to_paint, decoration_rect_); + fragment_paint_info_.Slice(part.from, part.to), fragment_item_, + paint_info_, *decoration_layer.style, decoration_layer.text_style, + *decoration_layer.decoration_info, lines_to_paint, decoration_rect_); } } @@ -947,11 +963,19 @@ ClipToPartDecorations(part); } - if (decoration_layer_id.type == HighlightLayerType::kOriginating && - part.layer.type != HighlightLayerType::kOriginating) { - wtf_size_t part_layer_index = layers_.Find(part.layer); - decoration_layer.decoration_info->SetHighlightOverrideColor( - layers_[part_layer_index].text_style.fill_color); + if (part.layer.type != HighlightLayerType::kOriginating) { + if (decoration_layer_id.type == HighlightLayerType::kOriginating) { + wtf_size_t part_layer_index = layers_.Find(part.layer); + decoration_layer.decoration_info->SetHighlightOverrideColor( + layers_[part_layer_index].text_style.current_color); + } else { + decoration_layer.decoration_info->SetHighlightOverrideColor( + HighlightPaintingUtils::ResolveColor( + layout_object_->GetDocument(), style_, + decoration_layer.style.get(), decoration_layer.id.PseudoId(), + GetCSSPropertyTextDecorationColor(), + layers_[decoration_layer_index - 1].text_style.current_color)); + } } text_painter_.PaintDecorationsOnlyLineThrough( @@ -993,7 +1017,8 @@ : DocumentMarker::kGrammar, *marker_rect, HighlightPaintingUtils::HighlightTextDecorationColor( - style_, node_, + layout_object_->GetDocument(), style_, node_, + layers_[i - 1].text_style.current_color, decoration_layer_id.type == HighlightLayerType::kSpelling ? kPseudoIdSpellingError : kPseudoIdGrammarError));
diff --git a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h index 1d99f7a..b952f40 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_highlight_painter.h
@@ -85,6 +85,7 @@ const absl::optional<AffineTransform>& rotation); void PaintSelectedText(NGTextPainter& text_painter, + const NGTextFragmentPaintInfo&, unsigned length, const TextPaintStyle& text_style, DOMNodeId node_id, @@ -92,8 +93,7 @@ void PaintSuppressingTextProperWhereSelected( NGTextPainter& text_painter, - unsigned start_offset, - unsigned end_offset, + const NGTextFragmentPaintInfo&, unsigned length, const TextPaintStyle& text_style, DOMNodeId node_id,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc index bcfd08e..e91adc6 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.cc
@@ -9,6 +9,7 @@ #include "third_party/blink/renderer/core/paint/paint_auto_dark_mode.h" #include "third_party/blink/renderer/core/paint/paint_info.h" #include "third_party/blink/renderer/core/style/computed_style.h" +#include "third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h" #include "third_party/blink/renderer/platform/graphics/graphics_context.h" #include "third_party/blink/renderer/platform/graphics/graphics_context_state_saver.h" @@ -17,12 +18,12 @@ NGTextCombinePainter::NGTextCombinePainter(GraphicsContext& context, const ComputedStyle& style, const PhysicalRect& text_frame_rect) - : TextPainterBase(context, - style.GetFont(), - text_frame_rect.offset, - text_frame_rect, - /* inline_context */ nullptr, - /* horizontal */ false), + : NGTextPainterBase(context, + style.GetFont(), + text_frame_rect.offset, + text_frame_rect, + /* inline_context */ nullptr, + /* horizontal */ false), style_(style) {} NGTextCombinePainter::~NGTextCombinePainter() = default; @@ -87,7 +88,8 @@ style.GetTextEmphasisMark() != TextEmphasisMark::kNone; } -void NGTextCombinePainter::ClipDecorationsStripe(float upper, +void NGTextCombinePainter::ClipDecorationsStripe(const NGTextFragmentPaintInfo&, + float upper, float stripe_width, float dilation) { // Nothing to do. @@ -105,7 +107,8 @@ const auto& applied_text_decorations = style_.AppliedTextDecorations(); // Paint text decorations except line through - PaintDecorationsExceptLineThrough(decoration_offset, decoration_info, + PaintDecorationsExceptLineThrough(NGTextFragmentPaintInfo{}, + decoration_offset, decoration_info, ~TextDecorationLine::kNone, paint_info, applied_text_decorations, text_style);
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.h b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.h index 3444e36..5b1cf44 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_text_combine_painter.h
@@ -5,7 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_NG_NG_TEXT_COMBINE_PAINTER_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_NG_NG_TEXT_COMBINE_PAINTER_H_ -#include "third_party/blink/renderer/core/paint/text_painter_base.h" +#include "third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h" #include "third_party/blink/renderer/platform/graphics/dom_node_id.h" namespace blink { @@ -16,7 +16,7 @@ // The painter for painting text decorations and emphasis marks for // LayoutNGTextCombine. -class NGTextCombinePainter final : public TextPainterBase { +class NGTextCombinePainter final : public NGTextPainterBase { public: NGTextCombinePainter(GraphicsContext& context, const ComputedStyle& style, @@ -29,11 +29,13 @@ static bool ShouldPaint(const LayoutNGTextCombine& text_combine); - private: - void ClipDecorationsStripe(float upper, + protected: + void ClipDecorationsStripe(const NGTextFragmentPaintInfo&, + float upper, float stripe_width, float dilation) override; + private: void PaintDecorations(const PaintInfo& paint_info, const TextPaintStyle& text_style); void PaintEmphasisMark(const TextPaintStyle& text_style,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.cc index ea7ab3a..860f501e 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.cc
@@ -114,7 +114,8 @@ step_ = kExcept; } -void NGTextDecorationPainter::PaintExceptLineThrough() { +void NGTextDecorationPainter::PaintExceptLineThrough( + const NGTextFragmentPaintInfo& fragment_paint_info) { DCHECK(step_ == kExcept); // Clipping the canvas unnecessarily is expensive, so avoid doing it if the @@ -125,8 +126,8 @@ ClipIfNeeded(state_saver); text_painter_.PaintDecorationsExceptLineThrough( - text_item_, paint_info_, style_, text_style_, *decoration_info_, - ~TextDecorationLine::kNone, decoration_rect_); + fragment_paint_info, text_item_, paint_info_, style_, text_style_, + *decoration_info_, ~TextDecorationLine::kNone, decoration_rect_); } step_ = kOnly;
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h b/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h index 6cb4139f..a79bef6 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_text_decoration_painter.h
@@ -53,7 +53,7 @@ enum Phase { kOriginating, kSelection }; void Begin(Phase phase); - void PaintExceptLineThrough(); + void PaintExceptLineThrough(const NGTextFragmentPaintInfo&); void PaintOnlyLineThrough(); private:
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc index 481bbf0..774389c 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_text_fragment_painter.cc
@@ -326,9 +326,8 @@ ? text_combine->AdjustTextTopForPaint(physical_box.offset.top) : physical_box.offset.top + ascent); - NGTextPainter text_painter(context, font, fragment_paint_info, visual_rect, - text_origin, physical_box, inline_context_, - is_horizontal); + NGTextPainter text_painter(context, font, visual_rect, text_origin, + physical_box, inline_context_, is_horizontal); NGTextDecorationPainter decoration_painter(text_painter, text_item, paint_info, style, text_style, rotated_box, selection); @@ -417,28 +416,25 @@ AutoDarkMode auto_dark_mode( PaintAutoDarkMode(style, DarkModeFilter::ElementRole::kForeground)); - const unsigned length = fragment_paint_info.to - fragment_paint_info.from; - const unsigned start_offset = fragment_paint_info.from; - const unsigned end_offset = fragment_paint_info.to; NGHighlightPainter::Case highlight_case = highlight_painter.PaintCase(); switch (highlight_case) { case NGHighlightPainter::kNoHighlights: // Fast path: just paint the text, including its decorations. decoration_painter.Begin(NGTextDecorationPainter::kOriginating); - decoration_painter.PaintExceptLineThrough(); - text_painter.Paint(start_offset, end_offset, length, text_style, node_id, - auto_dark_mode); + decoration_painter.PaintExceptLineThrough(fragment_paint_info); + text_painter.Paint(fragment_paint_info, fragment_paint_info.Length(), + text_style, node_id, auto_dark_mode); decoration_painter.PaintOnlyLineThrough(); break; case NGHighlightPainter::kFastSpellingGrammar: - text_painter.Paint(start_offset, end_offset, length, text_style, node_id, - auto_dark_mode); + text_painter.Paint(fragment_paint_info, fragment_paint_info.Length(), + text_style, node_id, auto_dark_mode); highlight_painter.FastPaintSpellingGrammarDecorations(); break; case NGHighlightPainter::kFastSelection: highlight_painter.Selection()->PaintSuppressingTextProperWhereSelected( - text_painter, start_offset, end_offset, length, text_style, node_id, - auto_dark_mode); + text_painter, fragment_paint_info, fragment_paint_info.Length(), + text_style, node_id, auto_dark_mode); break; case NGHighlightPainter::kOverlay: // Slow path: paint suppressing text proper where highlighted, then @@ -450,10 +446,10 @@ case NGHighlightPainter::kOldSelection: // Slow path: paint suppressing text proper where ::selection active. decoration_painter.Begin(NGTextDecorationPainter::kOriginating); - decoration_painter.PaintExceptLineThrough(); + decoration_painter.PaintExceptLineThrough(fragment_paint_info); highlight_painter.Selection()->PaintSuppressingTextProperWhereSelected( - text_painter, start_offset, end_offset, length, text_style, node_id, - auto_dark_mode); + text_painter, fragment_paint_info, fragment_paint_info.Length(), + text_style, node_id, auto_dark_mode); decoration_painter.PaintOnlyLineThrough(); break; case NGHighlightPainter::kSelectionOnly: @@ -481,14 +477,16 @@ switch (highlight_case) { case NGHighlightPainter::kFastSelection: highlight_painter.Selection()->PaintSelectedText( - text_painter, length, text_style, node_id, auto_dark_mode); + text_painter, fragment_paint_info, fragment_paint_info.Length(), + text_style, node_id, auto_dark_mode); break; case NGHighlightPainter::kSelectionOnly: case NGHighlightPainter::kOldSelection: decoration_painter.Begin(NGTextDecorationPainter::kSelection); - decoration_painter.PaintExceptLineThrough(); + decoration_painter.PaintExceptLineThrough(fragment_paint_info); highlight_painter.Selection()->PaintSelectedText( - text_painter, length, text_style, node_id, auto_dark_mode); + text_painter, fragment_paint_info, fragment_paint_info.Length(), + text_style, node_id, auto_dark_mode); decoration_painter.PaintOnlyLineThrough(); break; case NGHighlightPainter::kOverlay:
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc index 8f97976..b086141 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter.cc
@@ -25,6 +25,7 @@ #include "third_party/blink/renderer/core/style/shadow_list.h" #include "third_party/blink/renderer/core/svg/svg_element.h" #include "third_party/blink/renderer/platform/fonts/font.h" +#include "third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h" #include "third_party/blink/renderer/platform/fonts/shaping/shape_result_view.h" #include "third_party/blink/renderer/platform/graphics/graphics_context.h" #include "third_party/blink/renderer/platform/graphics/graphics_context_state_saver.h" @@ -170,8 +171,7 @@ } // namespace -void NGTextPainter::Paint(unsigned start_offset, - unsigned end_offset, +void NGTextPainter::Paint(const NGTextFragmentPaintInfo& fragment_paint_info, unsigned length, const TextPaintStyle& text_style, DOMNodeId node_id, @@ -181,13 +181,13 @@ UpdateGraphicsContext(graphics_context_, text_style, state_saver, shadow_mode); // TODO(layout-dev): Handle combine text here or elsewhere. - PaintInternal<kPaintText>(start_offset, end_offset, length, node_id, + PaintInternal<kPaintText>(fragment_paint_info, length, node_id, auto_dark_mode); if (!emphasis_mark_.IsEmpty()) { if (text_style.emphasis_mark_color != text_style.fill_color) graphics_context_.SetFillColor(text_style.emphasis_mark_color); - PaintInternal<kPaintEmphasisMark>(start_offset, end_offset, length, node_id, + PaintInternal<kPaintEmphasisMark>(fragment_paint_info, length, node_id, auto_dark_mode); } } @@ -196,15 +196,17 @@ // 1. Paint glyphs inside of |selection_rect| using |selection_style|, and // outside using |text_style|. // 2. Paint parts of a ligature glyph. -void NGTextPainter::PaintSelectedText(unsigned start_offset, - unsigned end_offset, - unsigned length, - const TextPaintStyle& text_style, - const TextPaintStyle& selection_style, - const PhysicalRect& selection_rect, - DOMNodeId node_id, - const AutoDarkMode& auto_dark_mode) { - if (!fragment_paint_info_.shape_result) +void NGTextPainter::PaintSelectedText( + const NGTextFragmentPaintInfo& fragment_paint_info, + unsigned selection_start, + unsigned selection_end, + unsigned length, + const TextPaintStyle& text_style, + const TextPaintStyle& selection_style, + const PhysicalRect& selection_rect, + DOMNodeId node_id, + const AutoDarkMode& auto_dark_mode) { + if (!fragment_paint_info.shape_result) return; // Use fast path if all glyphs fit in |selection_rect|. |visual_rect_| is the @@ -219,21 +221,21 @@ // selection_rect is in the scaled coordinate system and visual_rect_ is // in the unscaled coordinate system. Checks text offsets too. if (snapped_selection_rect.Contains(visual_rect_) || - (start_offset == fragment_paint_info_.from && - end_offset == fragment_paint_info_.to)) { + (selection_start == fragment_paint_info.from && + selection_end == fragment_paint_info.to)) { absl::optional<base::AutoReset<bool>> is_painting_selection_reset; if (NGTextPainter::SvgTextPaintState* state = GetSvgState()) is_painting_selection_reset.emplace(&state->is_painting_selection_, true); - Paint(start_offset, end_offset, length, selection_style, node_id, - auto_dark_mode); + Paint(fragment_paint_info.Slice(selection_start, selection_end), length, + selection_style, node_id, auto_dark_mode); return; } // Adjust start/end offset when they are in the middle of a ligature. e.g., // when |start_offset| is between a ligature of "fi", it needs to be adjusted // to before "f". - fragment_paint_info_.shape_result->ExpandRangeToIncludePartialGlyphs( - &start_offset, &end_offset); + fragment_paint_info.shape_result->ExpandRangeToIncludePartialGlyphs( + &selection_start, &selection_end); // Because only a part of the text glyph can be selected, we need to draw // the selection twice. First, draw the glyphs outside the selection area, @@ -242,8 +244,8 @@ { GraphicsContextStateSaver state_saver(graphics_context_); graphics_context_.ClipOut(float_selection_rect); - Paint(start_offset, end_offset, length, text_style, node_id, auto_dark_mode, - kTextProperOnly); + Paint(fragment_paint_info.Slice(selection_start, selection_end), length, + text_style, node_id, auto_dark_mode, kTextProperOnly); } // Then draw the glyphs inside the selection area, with the selection style. { @@ -252,12 +254,13 @@ is_painting_selection_reset.emplace(&state->is_painting_selection_, true); GraphicsContextStateSaver state_saver(graphics_context_); graphics_context_.Clip(float_selection_rect); - Paint(start_offset, end_offset, length, selection_style, node_id, - auto_dark_mode); + Paint(fragment_paint_info.Slice(selection_start, selection_end), length, + selection_style, node_id, auto_dark_mode); } } void NGTextPainter::PaintDecorationsExceptLineThrough( + const NGTextFragmentPaintInfo& fragment_paint_info, const NGFragmentItem& text_item, const PaintInfo& paint_info, const ComputedStyle& style, @@ -280,12 +283,12 @@ 1, text_item.SvgScalingFactor() / decoration_info.ScalingFactor()); } PaintSvgDecorationsExceptLineThrough( - decoration_offset, decoration_info, lines_to_paint, paint_info, - style.AppliedTextDecorations(), text_style); + fragment_paint_info, decoration_offset, decoration_info, lines_to_paint, + paint_info, style.AppliedTextDecorations(), text_style); } else { - TextPainterBase::PaintDecorationsExceptLineThrough( - decoration_offset, decoration_info, lines_to_paint, paint_info, - style.AppliedTextDecorations(), text_style, nullptr); + NGTextPainterBase::PaintDecorationsExceptLineThrough( + fragment_paint_info, decoration_offset, decoration_info, lines_to_paint, + paint_info, style.AppliedTextDecorations(), text_style, nullptr); } } @@ -317,19 +320,16 @@ } template <NGTextPainter::PaintInternalStep step> -void NGTextPainter::PaintInternalFragment(unsigned from, - unsigned to, - DOMNodeId node_id, - const AutoDarkMode& auto_dark_mode) { - DCHECK(from <= fragment_paint_info_.text.length()); - DCHECK(to <= fragment_paint_info_.text.length()); - - fragment_paint_info_.from = from; - fragment_paint_info_.to = to; +void NGTextPainter::PaintInternalFragment( + const NGTextFragmentPaintInfo& fragment_paint_info, + DOMNodeId node_id, + const AutoDarkMode& auto_dark_mode) { + DCHECK(fragment_paint_info.from <= fragment_paint_info.text.length()); + DCHECK(fragment_paint_info.to <= fragment_paint_info.text.length()); if (step == kPaintEmphasisMark) { graphics_context_.DrawEmphasisMarks( - font_, fragment_paint_info_, emphasis_mark_, + font_, fragment_paint_info, emphasis_mark_, gfx::PointF(text_origin_) + gfx::Vector2dF(0, emphasis_mark_offset_), auto_dark_mode); } else { @@ -337,9 +337,10 @@ if (svg_text_paint_state_.has_value()) { AutoDarkMode svg_text_auto_dark_mode(DarkModeFilter::ElementRole::kSVG, auto_dark_mode.enabled); - PaintSvgTextFragment(node_id, svg_text_auto_dark_mode); + PaintSvgTextFragment(fragment_paint_info, node_id, + svg_text_auto_dark_mode); } else { - graphics_context_.DrawText(font_, fragment_paint_info_, + graphics_context_.DrawText(font_, fragment_paint_info, gfx::PointF(text_origin_), node_id, auto_dark_mode); } @@ -348,8 +349,8 @@ // for all whitespace characters as defined in the spec definition of // whitespace. See https://w3c.github.io/paint-timing/#non-empty // In particular 0xb and 0xc are not checked. - if (!fragment_paint_info_.text.SubstringContainsOnlyWhitespaceOrEmpty(from, - to)) + if (!fragment_paint_info.text.SubstringContainsOnlyWhitespaceOrEmpty( + fragment_paint_info.from, fragment_paint_info.to)) graphics_context_.GetPaintController().SetTextPainted(); if (!font_.ShouldSkipDrawing()) @@ -358,48 +359,53 @@ } template <NGTextPainter::PaintInternalStep Step> -void NGTextPainter::PaintInternal(unsigned start_offset, - unsigned end_offset, - unsigned truncation_point, - DOMNodeId node_id, - const AutoDarkMode& auto_dark_mode) { +void NGTextPainter::PaintInternal( + const NGTextFragmentPaintInfo& fragment_paint_info, + unsigned truncation_point, + DOMNodeId node_id, + const AutoDarkMode& auto_dark_mode) { // TODO(layout-dev): We shouldn't be creating text fragments without text. - if (!fragment_paint_info_.shape_result) + if (!fragment_paint_info.shape_result) return; - if (start_offset <= end_offset) { - PaintInternalFragment<Step>(start_offset, end_offset, node_id, - auto_dark_mode); + if (fragment_paint_info.from <= fragment_paint_info.to) { + PaintInternalFragment<Step>(fragment_paint_info, node_id, auto_dark_mode); } else { - if (end_offset > 0) { - PaintInternalFragment<Step>(ellipsis_offset_, end_offset, node_id, - auto_dark_mode); + if (fragment_paint_info.to > 0) { + PaintInternalFragment<Step>( + fragment_paint_info.WithStartOffset(ellipsis_offset_), node_id, + auto_dark_mode); } - if (start_offset < truncation_point) { - PaintInternalFragment<Step>(start_offset, truncation_point, node_id, - auto_dark_mode); + if (fragment_paint_info.from < truncation_point) { + PaintInternalFragment<Step>( + fragment_paint_info.WithEndOffset(truncation_point), node_id, + auto_dark_mode); } } } -void NGTextPainter::ClipDecorationsStripe(float upper, - float stripe_width, - float dilation) { - if (fragment_paint_info_.from >= fragment_paint_info_.to || - !fragment_paint_info_.shape_result) +void NGTextPainter::ClipDecorationsStripe( + const NGTextFragmentPaintInfo& fragment_paint_info, + float upper, + float stripe_width, + float dilation) { + if (fragment_paint_info.from >= fragment_paint_info.to || + !fragment_paint_info.shape_result) return; Vector<Font::TextIntercept> text_intercepts; font_.GetTextIntercepts( - fragment_paint_info_, graphics_context_.DeviceScaleFactor(), + fragment_paint_info, graphics_context_.DeviceScaleFactor(), graphics_context_.FillFlags(), std::make_tuple(upper, upper + stripe_width), text_intercepts); DecorationsStripeIntercepts(upper, stripe_width, dilation, text_intercepts); } -void NGTextPainter::PaintSvgTextFragment(DOMNodeId node_id, - const AutoDarkMode& auto_dark_mode) { +void NGTextPainter::PaintSvgTextFragment( + const NGTextFragmentPaintInfo& fragment_paint_info, + DOMNodeId node_id, + const AutoDarkMode& auto_dark_mode) { const NGTextPainter::SvgTextPaintState& state = svg_text_paint_state_.value(); if (state.IsPaintingTextMatch()) { cc::PaintFlags fill_flags; @@ -415,11 +421,11 @@ stroke_flags.setLooper(nullptr); stroke_flags.setColor(state.TextMatchColor().Rgb()); } - graphics_context_.DrawText(font_, fragment_paint_info_, + graphics_context_.DrawText(font_, fragment_paint_info, gfx::PointF(text_origin_), fill_flags, node_id, auto_dark_mode); if (should_paint_stroke) { - graphics_context_.DrawText(font_, fragment_paint_info_, + graphics_context_.DrawText(font_, fragment_paint_info, gfx::PointF(text_origin_), stroke_flags, node_id, auto_dark_mode); } @@ -457,7 +463,7 @@ cc::PaintFlags flags; if (SetupPaintForSvgText(state, graphics_context_, style_to_paint, SvgPaintMode::kText, *resource_mode, flags)) { - graphics_context_.DrawText(font_, fragment_paint_info_, + graphics_context_.DrawText(font_, fragment_paint_info, gfx::PointF(text_origin_), flags, node_id, auto_dark_mode); } @@ -466,6 +472,7 @@ } void NGTextPainter::PaintSvgDecorationsExceptLineThrough( + const NGTextFragmentPaintInfo& fragment_paint_info, const TextDecorationOffsetBase& decoration_offset, TextDecorationInfo& decoration_info, TextDecorationLine lines_to_paint, @@ -505,9 +512,9 @@ if (SetupPaintForSvgText(state, graphics_context_, style_to_paint, SvgPaintMode::kTextDecoration, *resource_mode, flags)) { - TextPainterBase::PaintDecorationsExceptLineThrough( - decoration_offset, decoration_info, lines_to_paint, paint_info, - decorations, text_style, &flags); + NGTextPainterBase::PaintDecorationsExceptLineThrough( + fragment_paint_info, decoration_offset, decoration_info, + lines_to_paint, paint_info, decorations, text_style, &flags); } } }
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter.h b/third_party/blink/renderer/core/paint/ng/ng_text_painter.h index 743b71c..170b843 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_text_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter.h
@@ -7,7 +7,7 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/ng/ng_style_variant.h" -#include "third_party/blink/renderer/core/paint/text_painter_base.h" +#include "third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h" #include "third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h" #include "third_party/blink/renderer/platform/graphics/dom_node_id.h" @@ -24,7 +24,7 @@ // Operates on NGPhysicalTextFragments and only paints text and decorations. // Border painting etc is handled by the NGTextFragmentPainter class. // TODO(layout-dev): Does this distinction make sense? -class CORE_EXPORT NGTextPainter : public TextPainterBase { +class CORE_EXPORT NGTextPainter : public NGTextPainterBase { STACK_ALLOCATED(); public: @@ -65,51 +65,48 @@ NGTextPainter(GraphicsContext& context, const Font& font, - const NGTextFragmentPaintInfo& fragment_paint_info, const gfx::Rect& visual_rect, const PhysicalOffset& text_origin, const PhysicalRect& text_frame_rect, NGInlinePaintContext* inline_context, bool horizontal) - : TextPainterBase(context, - font, - text_origin, - text_frame_rect, - inline_context, - horizontal), - fragment_paint_info_(fragment_paint_info), + : NGTextPainterBase(context, + font, + text_origin, + text_frame_rect, + inline_context, + horizontal), visual_rect_(visual_rect) { DCHECK(inline_context_); } ~NGTextPainter() = default; - void ClipDecorationsStripe(float upper, - float stripe_width, - float dilation) override; - void Paint(unsigned start_offset, - unsigned end_offset, - unsigned length, + void Paint(const NGTextFragmentPaintInfo& fragment_paint_info, + unsigned truncation_point, const TextPaintStyle&, DOMNodeId, const AutoDarkMode& auto_dark_mode, ShadowMode = kBothShadowsAndTextProper); - void PaintSelectedText(unsigned start_offset, - unsigned end_offset, - unsigned length, + void PaintSelectedText(const NGTextFragmentPaintInfo& fragment_paint_info, + unsigned selection_start, + unsigned selection_end, + unsigned truncation_point, const TextPaintStyle& text_style, const TextPaintStyle& selection_style, const PhysicalRect& selection_rect, DOMNodeId node_id, const AutoDarkMode& auto_dark_mode); - void PaintDecorationsExceptLineThrough(const NGFragmentItem& text_item, - const PaintInfo& paint_info, - const ComputedStyle& style, - const TextPaintStyle& text_style, - TextDecorationInfo& decoration_info, - TextDecorationLine lines_to_paint, - const PhysicalRect& decoration_rect); + void PaintDecorationsExceptLineThrough( + const NGTextFragmentPaintInfo& fragment_paint_info, + const NGFragmentItem& text_item, + const PaintInfo& paint_info, + const ComputedStyle& style, + const TextPaintStyle& text_style, + TextDecorationInfo& decoration_info, + TextDecorationLine lines_to_paint, + const PhysicalRect& decoration_rect); void PaintDecorationsOnlyLineThrough(const NGFragmentItem& text_item, const PaintInfo& paint_info, @@ -127,23 +124,29 @@ Color text_match_color); SvgTextPaintState* GetSvgState(); + protected: + void ClipDecorationsStripe(const NGTextFragmentPaintInfo&, + float upper, + float stripe_width, + float dilation) override; + private: template <PaintInternalStep step> - void PaintInternalFragment(unsigned from, - unsigned to, + void PaintInternalFragment(const NGTextFragmentPaintInfo&, DOMNodeId node_id, const AutoDarkMode& auto_dark_mode); template <PaintInternalStep step> - void PaintInternal(unsigned start_offset, - unsigned end_offset, + void PaintInternal(const NGTextFragmentPaintInfo&, unsigned truncation_point, DOMNodeId node_id, const AutoDarkMode& auto_dark_mode); - void PaintSvgTextFragment(DOMNodeId node_id, + void PaintSvgTextFragment(const NGTextFragmentPaintInfo&, + DOMNodeId node_id, const AutoDarkMode& auto_dark_mode); void PaintSvgDecorationsExceptLineThrough( + const NGTextFragmentPaintInfo&, const TextDecorationOffsetBase& decoration_offset, TextDecorationInfo& decoration_info, TextDecorationLine lines_to_paint, @@ -156,7 +159,6 @@ const Vector<AppliedTextDecoration>& decorations, const TextPaintStyle& text_style); - NGTextFragmentPaintInfo fragment_paint_info_; const gfx::Rect visual_rect_; absl::optional<SvgTextPaintState> svg_text_paint_state_; };
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.cc b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.cc new file mode 100644 index 0000000..0477a20 --- /dev/null +++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.cc
@@ -0,0 +1,107 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h" + +#include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/layout/text_decoration_offset_base.h" +#include "third_party/blink/renderer/core/paint/applied_decoration_painter.h" +#include "third_party/blink/renderer/core/paint/box_painter_base.h" +#include "third_party/blink/renderer/core/paint/highlight_painting_utils.h" +#include "third_party/blink/renderer/core/paint/paint_info.h" +#include "third_party/blink/renderer/core/paint/text_decoration_info.h" +#include "third_party/blink/renderer/core/style/computed_style.h" +#include "third_party/blink/renderer/core/style/shadow_list.h" +#include "third_party/blink/renderer/platform/fonts/font.h" +#include "third_party/blink/renderer/platform/fonts/text_run_paint_info.h" +#include "third_party/blink/renderer/platform/geometry/length_functions.h" +#include "third_party/blink/renderer/platform/graphics/graphics_context.h" +#include "third_party/blink/renderer/platform/graphics/graphics_context_state_saver.h" +#include "third_party/blink/renderer/platform/wtf/text/character_names.h" + +namespace blink { + +// We have two functions to paint text decoations, because we should paint +// text and decorations in following order: +// 1. Paint text decorations except line through +// 2. Paint text +// 3. Paint line throguh +void NGTextPainterBase::PaintDecorationsExceptLineThrough( + const NGTextFragmentPaintInfo& fragment_paint_info, + const TextDecorationOffsetBase& decoration_offset, + TextDecorationInfo& decoration_info, + TextDecorationLine lines_to_paint, + const PaintInfo& paint_info, + const Vector<AppliedTextDecoration>& decorations, + const TextPaintStyle& text_style, + const cc::PaintFlags* flags) { + // Updating the graphics context and looping through applied decorations is + // expensive, so avoid doing it if there are no decorations of the given + // |lines_to_paint|, or the only decoration was a ‘line-through’. + if (!decoration_info.HasAnyLine(lines_to_paint & + ~TextDecorationLine::kLineThrough)) + return; + + GraphicsContext& context = paint_info.context; + GraphicsContextStateSaver state_saver(context); + UpdateGraphicsContext(context, text_style, state_saver); + + for (wtf_size_t applied_decoration_index = 0; + applied_decoration_index < decorations.size(); + ++applied_decoration_index) { + decoration_info.SetDecorationIndex(applied_decoration_index); + context.SetStrokeThickness(decoration_info.ResolvedThickness()); + + if (decoration_info.HasSpellingOrGrammerError() && + EnumHasFlags(lines_to_paint, TextDecorationLine::kSpellingError | + TextDecorationLine::kGrammarError)) { + decoration_info.SetSpellingOrGrammarErrorLineData(decoration_offset); + // We ignore "text-decoration-skip-ink: auto" for spelling and grammar + // error markers. + AppliedDecorationPainter decoration_painter(context, decoration_info); + decoration_painter.Paint(flags); + continue; + } + + if (decoration_info.HasUnderline() && decoration_info.FontData() && + EnumHasFlags(lines_to_paint, TextDecorationLine::kUnderline)) { + decoration_info.SetUnderlineLineData(decoration_offset); + PaintDecorationUnderOrOverLine(fragment_paint_info, context, + decoration_info, + TextDecorationLine::kUnderline, flags); + } + + if (decoration_info.HasOverline() && decoration_info.FontData() && + EnumHasFlags(lines_to_paint, TextDecorationLine::kOverline)) { + decoration_info.SetOverlineLineData(decoration_offset); + PaintDecorationUnderOrOverLine(fragment_paint_info, context, + decoration_info, + TextDecorationLine::kOverline, flags); + } + } +} + +void NGTextPainterBase::PaintDecorationUnderOrOverLine( + const NGTextFragmentPaintInfo& fragment_paint_info, + GraphicsContext& context, + TextDecorationInfo& decoration_info, + TextDecorationLine line, + const cc::PaintFlags* flags) { + AppliedDecorationPainter decoration_painter(context, decoration_info); + if (decoration_info.TargetStyle().TextDecorationSkipInk() == + ETextDecorationSkipInk::kAuto) { + // In order to ignore intersects less than 0.5px, inflate by -0.5. + gfx::RectF decoration_bounds = decoration_info.Bounds(); + decoration_bounds.Inset(gfx::InsetsF::VH(0.5, 0)); + ClipDecorationsStripe( + fragment_paint_info, + decoration_info.InkSkipClipUpper(decoration_bounds.y()), + decoration_bounds.height(), + std::min(decoration_info.ResolvedThickness(), + kDecorationClipMaxDilation)); + } + decoration_painter.Paint(flags); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h new file mode 100644 index 0000000..7a86e0b --- /dev/null +++ b/third_party/blink/renderer/core/paint/ng/ng_text_painter_base.h
@@ -0,0 +1,78 @@ +// Copyright 2022 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 THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_NG_NG_TEXT_PAINTER_BASE_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_NG_NG_TEXT_PAINTER_BASE_H_ + +#include "cc/paint/paint_flags.h" +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/core/paint/text_painter_base.h" +#include "third_party/blink/renderer/core/style/applied_text_decoration.h" +#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" + +namespace blink { + +class Font; +class GraphicsContext; +class NGInlinePaintContext; +class TextDecorationInfo; +class TextDecorationOffsetBase; +struct NGTextFragmentPaintInfo; +struct PaintInfo; +struct PhysicalOffset; +struct PhysicalRect; +struct TextPaintStyle; + +// LayoutNG-specific base class for text painting. Augments TextPainterBase with +// functionality to be shared between NGTextPainter and NGTextCombinePainter. +class CORE_EXPORT NGTextPainterBase : public TextPainterBase { + STACK_ALLOCATED(); + + public: + NGTextPainterBase(GraphicsContext& context, + const Font& font, + const PhysicalOffset& text_origin, + const PhysicalRect& text_frame_rect, + NGInlinePaintContext* inline_context, + bool horizontal) + : TextPainterBase(context, + font, + text_origin, + text_frame_rect, + inline_context, + horizontal) {} + ~NGTextPainterBase() = default; + + protected: + // We have two functions to paint text decoations, because we should paint + // text and decorations in following order: + // 1. Paint text decorations except line through + // 2. Paint text + // 3. Paint line through + void PaintDecorationsExceptLineThrough( + const NGTextFragmentPaintInfo& fragment_paint_info, + const TextDecorationOffsetBase& decoration_offset, + TextDecorationInfo& decoration_info, + TextDecorationLine lines_to_paint, + const PaintInfo& paint_info, + const Vector<AppliedTextDecoration>& decorations, + const TextPaintStyle& text_style, + const cc::PaintFlags* flags = nullptr); + + void PaintDecorationUnderOrOverLine( + const NGTextFragmentPaintInfo& fragment_paint_info, + GraphicsContext& context, + TextDecorationInfo& decoration_info, + TextDecorationLine line, + const cc::PaintFlags* flags = nullptr); + + virtual void ClipDecorationsStripe(const NGTextFragmentPaintInfo&, + float upper, + float stripe_width, + float dilation) = 0; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_TEXT_PAINTER_BASE_H_
diff --git a/third_party/blink/renderer/core/paint/text_decoration_info.h b/third_party/blink/renderer/core/paint/text_decoration_info.h index 58a3b43c..b9ae2736 100644 --- a/third_party/blink/renderer/core/paint/text_decoration_info.h +++ b/third_party/blink/renderer/core/paint/text_decoration_info.h
@@ -148,7 +148,10 @@ gfx::RectF WavyPaintRect() const; gfx::RectF WavyTileRect() const; - // Overrides the line color with the given topmost active highlight ‘color’. + // Overrides the line color with the given topmost active highlight ‘color’ + // (for originating decorations being painted in highlight overlays), or the + // highlight ‘text-decoration-color’ resolved with the correct ‘currentColor’ + // (for decorations introduced by highlight pseudos). void SetHighlightOverrideColor(const absl::optional<Color>&); private:
diff --git a/third_party/blink/renderer/core/paint/text_painter.cc b/third_party/blink/renderer/core/paint/text_painter.cc index 3f91893..a7bc6d3 100644 --- a/third_party/blink/renderer/core/paint/text_painter.cc +++ b/third_party/blink/renderer/core/paint/text_painter.cc
@@ -217,4 +217,24 @@ DecorationsStripeIntercepts(upper, stripe_width, dilation, text_intercepts); } +void TextPainter::PaintDecorationUnderOrOverLine( + GraphicsContext& context, + TextDecorationInfo& decoration_info, + TextDecorationLine line, + const cc::PaintFlags* flags) { + AppliedDecorationPainter decoration_painter(context, decoration_info); + if (decoration_info.TargetStyle().TextDecorationSkipInk() == + ETextDecorationSkipInk::kAuto) { + // In order to ignore intersects less than 0.5px, inflate by -0.5. + gfx::RectF decoration_bounds = decoration_info.Bounds(); + decoration_bounds.Inset(gfx::InsetsF::VH(0.5, 0)); + ClipDecorationsStripe( + decoration_info.InkSkipClipUpper(decoration_bounds.y()), + decoration_bounds.height(), + std::min(decoration_info.ResolvedThickness(), + kDecorationClipMaxDilation)); + } + decoration_painter.Paint(flags); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/text_painter.h b/third_party/blink/renderer/core/paint/text_painter.h index decceca..12e0489 100644 --- a/third_party/blink/renderer/core/paint/text_painter.h +++ b/third_party/blink/renderer/core/paint/text_painter.h
@@ -40,9 +40,6 @@ combined_text_ = combined_text; } - void ClipDecorationsStripe(float upper, - float stripe_width, - float dilation) override; void Paint(unsigned start_offset, unsigned end_offset, unsigned length, @@ -75,6 +72,13 @@ DOMNodeId node_id, const AutoDarkMode& auto_dark_mode); + void ClipDecorationsStripe(float upper, float stripe_width, float dilation); + + void PaintDecorationUnderOrOverLine(GraphicsContext& context, + TextDecorationInfo& decoration_info, + TextDecorationLine line, + const cc::PaintFlags* flags = nullptr); + const TextRun& run_; LayoutTextCombine* combined_text_ = nullptr; };
diff --git a/third_party/blink/renderer/core/paint/text_painter_base.cc b/third_party/blink/renderer/core/paint/text_painter_base.cc index 8fcb1d9..6d83469 100644 --- a/third_party/blink/renderer/core/paint/text_painter_base.cc +++ b/third_party/blink/renderer/core/paint/text_painter_base.cc
@@ -22,17 +22,6 @@ namespace blink { -namespace { - -// We usually use the text decoration thickness to determine how far -// ink-skipped text decorations should be away from the glyph -// contours. Cap this at 5 CSS px in each direction when thickness -// growths larger than that. A value of 13 closely matches FireFox' -// implementation. -constexpr float kDecorationClipMaxDilation = 13; - -} // anonymous namespace - TextPainterBase::TextPainterBase(GraphicsContext& context, const Font& font, const PhysicalOffset& text_origin, @@ -219,58 +208,6 @@ } } -void TextPainterBase::PaintDecorationsExceptLineThrough( - const TextDecorationOffsetBase& decoration_offset, - TextDecorationInfo& decoration_info, - TextDecorationLine lines_to_paint, - const PaintInfo& paint_info, - const Vector<AppliedTextDecoration>& decorations, - const TextPaintStyle& text_style, - const cc::PaintFlags* flags) { - // Updating the graphics context and looping through applied decorations is - // expensive, so avoid doing it if there are no decorations of the given - // |lines_to_paint|, or the only decoration was a ‘line-through’. - if (!decoration_info.HasAnyLine(lines_to_paint & - ~TextDecorationLine::kLineThrough)) - return; - - GraphicsContext& context = paint_info.context; - GraphicsContextStateSaver state_saver(context); - UpdateGraphicsContext(context, text_style, state_saver); - - for (wtf_size_t applied_decoration_index = 0; - applied_decoration_index < decorations.size(); - ++applied_decoration_index) { - decoration_info.SetDecorationIndex(applied_decoration_index); - context.SetStrokeThickness(decoration_info.ResolvedThickness()); - - if (decoration_info.HasSpellingOrGrammerError() && - EnumHasFlags(lines_to_paint, TextDecorationLine::kSpellingError | - TextDecorationLine::kGrammarError)) { - decoration_info.SetSpellingOrGrammarErrorLineData(decoration_offset); - // We ignore "text-decoration-skip-ink: auto" for spelling and grammar - // error markers. - AppliedDecorationPainter decoration_painter(context, decoration_info); - decoration_painter.Paint(flags); - continue; - } - - if (decoration_info.HasUnderline() && decoration_info.FontData() && - EnumHasFlags(lines_to_paint, TextDecorationLine::kUnderline)) { - decoration_info.SetUnderlineLineData(decoration_offset); - PaintDecorationUnderOrOverLine(context, decoration_info, - TextDecorationLine::kUnderline, flags); - } - - if (decoration_info.HasOverline() && decoration_info.FontData() && - EnumHasFlags(lines_to_paint, TextDecorationLine::kOverline)) { - decoration_info.SetOverlineLineData(decoration_offset); - PaintDecorationUnderOrOverLine(context, decoration_info, - TextDecorationLine::kOverline, flags); - } - } -} - void TextPainterBase::PaintDecorationsOnlyLineThrough( TextDecorationInfo& decoration_info, const PaintInfo& paint_info, @@ -306,26 +243,6 @@ } } -void TextPainterBase::PaintDecorationUnderOrOverLine( - GraphicsContext& context, - TextDecorationInfo& decoration_info, - TextDecorationLine line, - const cc::PaintFlags* flags) { - AppliedDecorationPainter decoration_painter(context, decoration_info); - if (decoration_info.TargetStyle().TextDecorationSkipInk() == - ETextDecorationSkipInk::kAuto) { - // In order to ignore intersects less than 0.5px, inflate by -0.5. - gfx::RectF decoration_bounds = decoration_info.Bounds(); - decoration_bounds.Inset(gfx::InsetsF::VH(0.5, 0)); - ClipDecorationsStripe( - decoration_info.InkSkipClipUpper(decoration_bounds.y()), - decoration_bounds.height(), - std::min(decoration_info.ResolvedThickness(), - kDecorationClipMaxDilation)); - } - decoration_painter.Paint(flags); -} - void TextPainterBase::PaintEmphasisMarkForCombinedText( const TextPaintStyle& text_style, const Font& emphasis_mark_font,
diff --git a/third_party/blink/renderer/core/paint/text_painter_base.h b/third_party/blink/renderer/core/paint/text_painter_base.h index 96b2848..e34bbb6 100644 --- a/third_party/blink/renderer/core/paint/text_painter_base.h +++ b/third_party/blink/renderer/core/paint/text_painter_base.h
@@ -8,6 +8,8 @@ #include "cc/paint/paint_flags.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/geometry/physical_rect.h" +#include "third_party/blink/renderer/core/paint/applied_decoration_painter.h" +#include "third_party/blink/renderer/core/paint/paint_info.h" #include "third_party/blink/renderer/core/paint/text_decoration_info.h" #include "third_party/blink/renderer/core/paint/text_paint_style.h" #include "third_party/blink/renderer/core/style/applied_text_decoration.h" @@ -15,6 +17,7 @@ #include "third_party/blink/renderer/platform/fonts/font.h" #include "third_party/blink/renderer/platform/graphics/color.h" #include "third_party/blink/renderer/platform/graphics/draw_looper_builder.h" +#include "third_party/blink/renderer/platform/graphics/graphics_context_state_saver.h" #include "third_party/blink/renderer/platform/transforms/affine_transform.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h" @@ -25,11 +28,19 @@ class ComputedStyle; class Document; class GraphicsContext; -class GraphicsContextStateSaver; class NGInlinePaintContext; class Node; -class TextDecorationOffsetBase; -struct PaintInfo; + +namespace { + +// We usually use the text decoration thickness to determine how far +// ink-skipped text decorations should be away from the glyph +// contours. Cap this at 5 CSS px in each direction when thickness +// growths larger than that. A value of 13 closely matches FireFox' +// implementation. +constexpr float kDecorationClipMaxDilation = 13; + +} // anonymous namespace // Base class for text painting. Has no dependencies on the layout tree and thus // provides functionality and definitions that can be shared between both legacy @@ -48,10 +59,6 @@ const NGInlinePaintContext* InlineContext() const { return inline_context_; } - virtual void ClipDecorationsStripe(float upper, - float stripe_width, - float dilation) = 0; - void SetEmphasisMark(const AtomicString&, TextEmphasisPosition); void SetEllipsisOffset(int offset) { ellipsis_offset_ = offset; } @@ -67,11 +74,6 @@ mojom::blink::ColorScheme color_scheme, ShadowMode = kBothShadowsAndTextProper); - void PaintDecorationUnderOrOverLine(GraphicsContext&, - TextDecorationInfo&, - TextDecorationLine line, - const cc::PaintFlags* flags = nullptr); - static Color TextColorForWhiteBackground(Color); static TextPaintStyle TextPaintingStyle(const Document&, const ComputedStyle&, @@ -99,18 +101,6 @@ float dilation, const Vector<Font::TextIntercept>& text_intercepts); - // We have two functions to paint text decoations, because we should paint - // text and decorations in following order: - // 1. Paint text decorations except line through - // 2. Paint text - // 3. Paint line throguh - void PaintDecorationsExceptLineThrough(const TextDecorationOffsetBase&, - TextDecorationInfo&, - TextDecorationLine lines_to_paint, - const PaintInfo&, - const Vector<AppliedTextDecoration>&, - const TextPaintStyle& text_style, - const cc::PaintFlags* flags = nullptr); void PaintDecorationsOnlyLineThrough(TextDecorationInfo&, const PaintInfo&, const Vector<AppliedTextDecoration>&,
diff --git a/third_party/blink/renderer/core/script/classic_pending_script.h b/third_party/blink/renderer/core/script/classic_pending_script.h index 01bc595..194e6da 100644 --- a/third_party/blink/renderer/core/script/classic_pending_script.h +++ b/third_party/blink/renderer/core/script/classic_pending_script.h
@@ -86,6 +86,8 @@ not_streamed_reason_ = reason; } + // Check if this script is eligible for DelayAsyncScriptExecution + // (see crbug/1340837). bool IsEligibleForDelay() const override; private: @@ -138,6 +140,8 @@ const bool is_external_; ReadyState ready_state_; bool integrity_failure_; + // Describes if this script is eligible for DelayAsyncScriptExecution + // (see crbug/1340837). const bool is_eligible_for_delay_; // The request is intervened by document.write() intervention.
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc index e1495c75..731ceaad 100644 --- a/third_party/blink/renderer/core/style/computed_style.cc +++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -2393,12 +2393,13 @@ return visited_link ? InternalVisitedTextFillColor() : TextFillColor(); } -Color ComputedStyle::VisitedDependentColor( - const CSSProperty& color_property) const { +Color ComputedStyle::VisitedDependentColor(const CSSProperty& color_property, + bool* is_current_color) const { DCHECK(!color_property.IsVisited()); Color unvisited_color = - To<Longhand>(color_property).ColorIncludingFallback(false, *this); + To<Longhand>(color_property) + .ColorIncludingFallback(false, *this, is_current_color); if (InsideLink() != EInsideLink::kInsideVisitedLink) return unvisited_color; @@ -2411,26 +2412,34 @@ if (const CSSProperty* visited = color_property.GetVisitedProperty()) visited_property = visited; + // Overwrite is_current_color based on the visited color. Color visited_color = - To<Longhand>(*visited_property).ColorIncludingFallback(true, *this); + To<Longhand>(*visited_property) + .ColorIncludingFallback(true, *this, is_current_color); // Take the alpha from the unvisited color, but get the RGB values from the // visited color. + // + // Ideally we would set the |is_current_color| flag to true if the unvisited + // color is ‘currentColor’, because the result depends on the unvisited alpha, + // to tell the highlight painter to resolve the color again with a different + // current color, but that’s not possible with the current interface. + // + // In reality, the highlight painter just throws away the whole color and + // falls back to the layer or next layer or originating ‘color’, so setting + // the flag when the unvisited color is ‘currentColor’ would break tests like + // css/css-pseudo/selection-link-001 and css/css-pseudo/target-text-008. + // TODO(dazabani@igalia.com) improve behaviour where unvisited is currentColor return Color(visited_color.Red(), visited_color.Green(), visited_color.Blue(), unvisited_color.Alpha()); } -bool ComputedStyle::VisitedDependentColorIsCurrentColor() const { - if (InsideLink() == EInsideLink::kInsideVisitedLink) - return InternalVisitedColorIsCurrentColor(); - return ColorIsCurrentColor(); -} - -Color ComputedStyle::ResolvedColor(const StyleColor& color) const { +Color ComputedStyle::ResolvedColor(const StyleColor& color, + bool* is_current_color) const { bool visited_link = (InsideLink() == EInsideLink::kInsideVisitedLink); Color current_color = visited_link ? GetInternalVisitedCurrentColor() : GetCurrentColor(); - return color.Resolve(current_color, UsedColorScheme()); + return color.Resolve(current_color, UsedColorScheme(), is_current_color); } bool ComputedStyle::ShouldForceColor(const StyleColor& unforced_color) const { @@ -2605,29 +2614,38 @@ SetChildHasExplicitInheritance(); } -Color ComputedStyle::GetCurrentColor() const { +Color ComputedStyle::GetCurrentColor(bool* is_current_color) const { DCHECK(!GetColor().IsCurrentColor()); + if (is_current_color) + *is_current_color = ColorIsCurrentColor(); return GetColor().Resolve(Color(), UsedColorScheme()); } -Color ComputedStyle::GetInternalVisitedCurrentColor() const { +Color ComputedStyle::GetInternalVisitedCurrentColor( + bool* is_current_color) const { DCHECK(!InternalVisitedColor().IsCurrentColor()); + if (is_current_color) + *is_current_color = InternalVisitedColorIsCurrentColor(); return InternalVisitedColor().Resolve(Color(), UsedColorScheme()); } -Color ComputedStyle::GetInternalForcedCurrentColor() const { +Color ComputedStyle::GetInternalForcedCurrentColor( + bool* is_current_color) const { DCHECK(!InternalForcedColor().IsCurrentColor()); if (GetColor().IsSystemColorIncludingDeprecated()) - return GetCurrentColor(); + return GetCurrentColor(is_current_color); return InternalForcedColor().Resolve(Color(), UsedColorScheme(), + is_current_color, /* is_forced_color */ true); } -Color ComputedStyle::GetInternalForcedVisitedCurrentColor() const { +Color ComputedStyle::GetInternalForcedVisitedCurrentColor( + bool* is_current_color) const { DCHECK(!InternalForcedVisitedColor().IsCurrentColor()); if (InternalVisitedColor().IsSystemColorIncludingDeprecated()) - return GetInternalVisitedCurrentColor(); + return GetInternalVisitedCurrentColor(is_current_color); return InternalForcedVisitedColor().Resolve(Color(), UsedColorScheme(), + is_current_color, /* is_forced_color */ true); }
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h index eed973f2..0873b0c 100644 --- a/third_party/blink/renderer/core/style/computed_style.h +++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -2720,9 +2720,6 @@ AccessBackgroundLayers().FillUnsetProperties(); } } - bool IsBackgroundColorCurrentColor() const { - return BackgroundColor().IsCurrentColor(); - } bool HasBackgroundRelatedColorReferencingCurrentColor() const { if (BackgroundColor().IsCurrentColor() || InternalVisitedBackgroundColor().IsCurrentColor() || @@ -2747,8 +2744,8 @@ // Color utility functions. CORE_EXPORT Color - VisitedDependentColor(const CSSProperty& color_property) const; - CORE_EXPORT bool VisitedDependentColorIsCurrentColor() const; + VisitedDependentColor(const CSSProperty& color_property, + bool* is_current_color = nullptr) const; // -webkit-appearance utility functions. bool HasEffectiveAppearance() const { @@ -3130,17 +3127,19 @@ CORE_EXPORT bool CustomPropertiesEqual(const Vector<AtomicString>& properties, const ComputedStyle& other) const; - Color GetCurrentColor() const; - Color GetInternalVisitedCurrentColor() const; - Color GetInternalForcedCurrentColor() const; - Color GetInternalForcedVisitedCurrentColor() const; + Color GetCurrentColor(bool* is_current_color = nullptr) const; + Color GetInternalVisitedCurrentColor(bool* is_current_color = nullptr) const; + Color GetInternalForcedCurrentColor(bool* is_current_color = nullptr) const; + Color GetInternalForcedVisitedCurrentColor( + bool* is_current_color = nullptr) const; // Helper for resolving a StyleColor which may contain currentColor or a // system color keyword. This is intended for cases where a given property // consists of a StyleColor plus additional information. For <color> // properties, prefer VisitedDependentColor() or // Longhand::ColorIncludingFallback() instead. - Color ResolvedColor(const StyleColor& color) const; + Color ResolvedColor(const StyleColor& color, + bool* is_current_color = nullptr) const; static bool ShadowListHasCurrentColor(const ShadowList*);
diff --git a/third_party/blink/renderer/modules/direct_sockets/socket.cc b/third_party/blink/renderer/modules/direct_sockets/socket.cc index f0ed195..063f4472c 100644 --- a/third_party/blink/renderer/modules/direct_sockets/socket.cc +++ b/third_party/blink/renderer/modules/direct_sockets/socket.cc
@@ -175,12 +175,13 @@ writable_stream_wrapper_->HasPendingWrite(); } -void Socket::ResolveOrRejectClosed(bool error) { - if (error) { - closed_resolver_->Reject(); - } else { - closed_resolver_->Resolve(); - } +void Socket::ResolveClosed() { + closed_resolver_->Resolve(); + closed_resolver_ = nullptr; +} + +void Socket::RejectClosed(ScriptValue exception) { + closed_resolver_->Reject(exception); closed_resolver_ = nullptr; }
diff --git a/third_party/blink/renderer/modules/direct_sockets/socket.h b/third_party/blink/renderer/modules/direct_sockets/socket.h index ebd3a6d..2e1c1ed4 100644 --- a/third_party/blink/renderer/modules/direct_sockets/socket.h +++ b/third_party/blink/renderer/modules/direct_sockets/socket.h
@@ -7,6 +7,7 @@ #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" +#include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_state_observer.h" #include "third_party/blink/renderer/modules/direct_sockets/direct_sockets_service_mojo_remote.h" @@ -53,8 +54,11 @@ bool Initialized() const; bool HasPendingActivity() const; - // Resolves or rejects |closed| promise. - void ResolveOrRejectClosed(bool error); + // Resolves |closed| promise. + void ResolveClosed(); + + // Rejects |closed| promise with the given |exception|. + void RejectClosed(ScriptValue exception); // Closes |service_| and resets |feature_handle_for_scheduler_|. void CloseServiceAndResetFeatureHandle();
diff --git a/third_party/blink/renderer/modules/direct_sockets/stream_wrapper.h b/third_party/blink/renderer/modules/direct_sockets/stream_wrapper.h index 2b1748e9..f6a51be4 100644 --- a/third_party/blink/renderer/modules/direct_sockets/stream_wrapper.h +++ b/third_party/blink/renderer/modules/direct_sockets/stream_wrapper.h
@@ -37,7 +37,7 @@ class MODULES_EXPORT StreamWrapper : public GarbageCollectedMixin { public: - using CloseOnceCallback = base::OnceCallback<void(bool error)>; + using CloseOnceCallback = base::OnceCallback<void(ScriptValue exception)>; enum class State { kOpen, kAborted, kClosed };
diff --git a/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper.cc b/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper.cc index de03ad1..ea7e1c9 100644 --- a/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper.cc +++ b/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper.cc
@@ -139,7 +139,7 @@ } ResetPipe(); - std::move(on_close_).Run(/*error=*/false); + std::move(on_close_).Run(ScriptValue()); return; } @@ -153,16 +153,24 @@ SetState(State::kClosed); if (!data_pipe_) { Controller()->Close(); - std::move(on_close_).Run(/*error=*/false); + std::move(on_close_).Run(ScriptValue()); } return; } SetState(State::kAborted); - auto* exception = MakeGarbageCollected<DOMException>( - DOMExceptionCode::kNetworkError, String{"Stream aborted by the remote: " + - net::ErrorToString(error_code)}); + auto* script_state = GetScriptState(); + // Scope is needed because there's no ScriptState* on the call stack for + // ScriptValue::From. + ScriptState::Scope scope{script_state}; + + auto exception = ScriptValue::From( + script_state, + V8ThrowDOMException::CreateOrDie(script_state->GetIsolate(), + DOMExceptionCode::kNetworkError, + String{"Stream aborted by the remote: " + + net::ErrorToString(error_code)})); if (data_pipe_) { pending_exception_ = exception; @@ -170,7 +178,7 @@ } Controller()->Error(exception); - std::move(on_close_).Run(/*error=*/true); + std::move(on_close_).Run(exception); } void TCPReadableStreamWrapper::ResetPipe() { @@ -189,8 +197,8 @@ DCHECK_EQ(result, MOJO_RESULT_OK); DCHECK(data_pipe_); DCHECK(on_close_); - DCHECK(!(pending_exception_ && graceful_peer_shutdown_)); - if (pending_exception_ || graceful_peer_shutdown_) { + DCHECK(!(!pending_exception_.IsEmpty() && graceful_peer_shutdown_)); + if (!pending_exception_.IsEmpty() || graceful_peer_shutdown_) { DCHECK_NE(GetState(), State::kOpen); } else { DCHECK_EQ(GetState(), State::kOpen); @@ -199,18 +207,18 @@ ResetPipe(); - if (pending_exception_) { + if (!pending_exception_.IsEmpty()) { Controller()->Error(pending_exception_); SetState(State::kAborted); - std::move(on_close_).Run(/*error=*/true); + std::move(on_close_).Run(pending_exception_); - pending_exception_ = nullptr; + pending_exception_.Clear(); } else if (graceful_peer_shutdown_) { Controller()->Close(); SetState(State::kClosed); - std::move(on_close_).Run(/*error=*/false); + std::move(on_close_).Run(ScriptValue()); } }
diff --git a/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper.h b/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper.h index 6a012df4..e4c8e29 100644 --- a/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper.h +++ b/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper.h
@@ -67,7 +67,8 @@ // Indicates whether peer closed gracefully (EOF). bool graceful_peer_shutdown_ = false; - Member<DOMException> pending_exception_; + // Stores a v8::Local<v8::Value> V8DOMException inside. + ScriptValue pending_exception_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper_unittest.cc b/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper_unittest.cc index 357ed7a..8a6ce566 100644 --- a/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper_unittest.cc +++ b/third_party/blink/renderer/modules/direct_sockets/tcp_readable_stream_wrapper_unittest.cc
@@ -129,7 +129,9 @@ void Trace(Visitor* visitor) const { visitor->Trace(stream_wrapper_); } private: - void Close(bool error) { close_called_with_ = error; } + void Close(ScriptValue exception) { + close_called_with_ = !exception.IsEmpty(); + } absl::optional<bool> close_called_with_; mojo::ScopedDataPipeProducerHandle data_pipe_producer_;
diff --git a/third_party/blink/renderer/modules/direct_sockets/tcp_socket.cc b/third_party/blink/renderer/modules/direct_sockets/tcp_socket.cc index 1e7fe26..a03877d 100644 --- a/third_party/blink/renderer/modules/direct_sockets/tcp_socket.cc +++ b/third_party/blink/renderer/modules/direct_sockets/tcp_socket.cc
@@ -5,7 +5,6 @@ #include "third_party/blink/renderer/modules/direct_sockets/tcp_socket.h" #include "base/barrier_callback.h" -#include "base/functional/identity.h" #include "base/metrics/histogram_functions.h" #include "net/base/net_errors.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h" @@ -138,7 +137,7 @@ mojo::ScopedDataPipeConsumerHandle receive_stream, mojo::ScopedDataPipeProducerHandle send_stream) { if (result == net::OK && peer_addr) { - auto close_callback = base::BarrierCallback<bool>( + auto close_callback = base::BarrierCallback<ScriptValue>( /*num_callbacks=*/2, WTF::Bind(&TCPSocket::OnBothStreamsClosed, WrapWeakPersistent(this))); @@ -230,16 +229,22 @@ return Socket::HasPendingActivity(); } -void TCPSocket::OnBothStreamsClosed(std::vector<bool> args) { +void TCPSocket::OnBothStreamsClosed(std::vector<ScriptValue> args) { DCHECK_EQ(args.size(), 2U); - // At least one callback was invoked with error = true. - bool error = base::ranges::any_of(args, base::identity()); + + // Finds first actual exception and rejects |closed| with it. + // If neither of the streams was errored, resolves |closed|. + if (auto it = base::ranges::find_if( + args, [](ScriptValue exception) { return !exception.IsEmpty(); }); + it != args.end()) { + RejectClosed(*it); + } else { + ResolveClosed(); + } + CloseServiceAndResetFeatureHandle(); tcp_socket_.reset(); socket_observer_.reset(); - - CloseServiceAndResetFeatureHandle(); - ResolveOrRejectClosed(error); } } // namespace blink
diff --git a/third_party/blink/renderer/modules/direct_sockets/tcp_socket.h b/third_party/blink/renderer/modules/direct_sockets/tcp_socket.h index 9c0081135..9db69ead 100644 --- a/third_party/blink/renderer/modules/direct_sockets/tcp_socket.h +++ b/third_party/blink/renderer/modules/direct_sockets/tcp_socket.h
@@ -95,7 +95,7 @@ void OnReadError(int32_t net_error) override; void OnWriteError(int32_t net_error) override; - void OnBothStreamsClosed(std::vector<bool> args); + void OnBothStreamsClosed(std::vector<ScriptValue> args); HeapMojoRemote<network::mojom::blink::TCPConnectedSocket> tcp_socket_; HeapMojoReceiver<network::mojom::blink::SocketObserver, TCPSocket>
diff --git a/third_party/blink/renderer/modules/direct_sockets/tcp_writable_stream_wrapper.cc b/third_party/blink/renderer/modules/direct_sockets/tcp_writable_stream_wrapper.cc index 25200215..2fcfccda 100644 --- a/third_party/blink/renderer/modules/direct_sockets/tcp_writable_stream_wrapper.cc +++ b/third_party/blink/renderer/modules/direct_sockets/tcp_writable_stream_wrapper.cc
@@ -245,7 +245,7 @@ } ResetPipe(); - std::move(on_close_).Run(/*error=*/false); + std::move(on_close_).Run(/*exception=*/ScriptValue()); } void TCPWritableStreamWrapper::ErrorStream(int32_t error_code) { @@ -256,29 +256,32 @@ auto message = String{"Stream aborted by the remote: " + net::ErrorToString(error_code)}; - auto* exception = MakeGarbageCollected<DOMException>( - DOMExceptionCode::kNetworkError, message); + + auto* script_state = write_promise_resolver_ + ? write_promise_resolver_->GetScriptState() + : GetScriptState(); + // Scope is needed because there's no ScriptState* on the call stack for + // ScriptValue::From. + ScriptState::Scope scope{script_state}; + + auto exception = ScriptValue::From( + script_state, V8ThrowDOMException::CreateOrDie( + script_state->GetIsolate(), + DOMExceptionCode::kNetworkError, message)); // Can be already reset due to HandlePipeClosed() called previously. if (data_pipe_) { ResetPipe(); } - auto* script_state = GetScriptState(); - DCHECK(script_state->ContextIsValid()); - - ScriptState::Scope scope{script_state}; if (write_promise_resolver_) { - write_promise_resolver_->RejectWithDOMException( - DOMExceptionCode::kNetworkError, message); + write_promise_resolver_->Reject(exception); write_promise_resolver_ = nullptr; } else { - auto* script_state = GetScriptState(); - Controller()->error(script_state, - ScriptValue::From(script_state, exception)); + Controller()->error(script_state, exception); } - std::move(on_close_).Run(/*error=*/true); + std::move(on_close_).Run(exception); } void TCPWritableStreamWrapper::ResetPipe() {
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_readable_stream_wrapper.cc b/third_party/blink/renderer/modules/direct_sockets/udp_readable_stream_wrapper.cc index bcbf57b..cf6accff 100644 --- a/third_party/blink/renderer/modules/direct_sockets/udp_readable_stream_wrapper.cc +++ b/third_party/blink/renderer/modules/direct_sockets/udp_readable_stream_wrapper.cc
@@ -8,6 +8,7 @@ #include "base/notreached.h" #include "base/time/time.h" #include "net/base/net_errors.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h" #include "third_party/blink/renderer/bindings/core/v8/v8_underlying_source.h" #include "third_party/blink/renderer/bindings/core/v8/v8_union_arraybuffer_arraybufferview.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_udp_message.h" @@ -21,6 +22,7 @@ #include "third_party/blink/renderer/modules/direct_sockets/stream_wrapper.h" #include "third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" +#include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_deque.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -90,7 +92,7 @@ } SetState(State::kClosed); - std::move(on_close_).Run(/*error=*/false); + std::move(on_close_).Run(/*exception=*/ScriptValue()); } void UDPReadableStreamWrapper::ErrorStream(int32_t error_code) { @@ -99,12 +101,21 @@ } SetState(State::kAborted); - auto* exception = MakeGarbageCollected<DOMException>( - DOMExceptionCode::kNetworkError, String{"Stream aborted by the remote: " + - net::ErrorToString(error_code)}); + auto* script_state = GetScriptState(); + // Scope is needed because there's no ScriptState* on the call stack for + // ScriptValue::From. + ScriptState::Scope scope{script_state}; + + auto exception = ScriptValue::From( + script_state, + V8ThrowDOMException::CreateOrDie(script_state->GetIsolate(), + DOMExceptionCode::kNetworkError, + String{"Stream aborted by the remote: " + + net::ErrorToString(error_code)})); + Controller()->Error(exception); - std::move(on_close_).Run(/*error=*/true); + std::move(on_close_).Run(exception); } } // namespace blink
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_socket.cc b/third_party/blink/renderer/modules/direct_sockets/udp_socket.cc index ee8b675..84d9cbe 100644 --- a/third_party/blink/renderer/modules/direct_sockets/udp_socket.cc +++ b/third_party/blink/renderer/modules/direct_sockets/udp_socket.cc
@@ -6,6 +6,7 @@ #include "base/barrier_callback.h" #include "base/metrics/histogram_functions.h" +#include "base/ranges/algorithm.h" #include "net/base/net_errors.h" #include "third_party/blink/public/mojom/direct_sockets/direct_sockets.mojom-blink.h" #include "third_party/blink/public/platform/task_type.h" @@ -115,7 +116,7 @@ const absl::optional<net::IPEndPoint>& local_addr, const absl::optional<net::IPEndPoint>& peer_addr) { if (result == net::OK && peer_addr) { - auto close_callback = base::BarrierCallback<bool>( + auto close_callback = base::BarrierCallback<ScriptValue>( /*num_callbacks=*/2, WTF::Bind(&UDPSocket::OnBothStreamsClosed, WrapWeakPersistent(this))); @@ -227,13 +228,19 @@ writable_stream_wrapper_->ErrorStream(net::ERR_CONNECTION_ABORTED); } -void UDPSocket::OnBothStreamsClosed(std::vector<bool> args) { +void UDPSocket::OnBothStreamsClosed(std::vector<ScriptValue> args) { DCHECK_EQ(args.size(), 2U); - // At least one callback was invoked with error = true. - bool error = base::ranges::any_of(args, base::identity()); + // Finds first actual exception and rejects |closed| with it. + // If neither of the streams was errored, resolves |closed|. + if (auto it = base::ranges::find_if( + args, [](ScriptValue exception) { return !exception.IsEmpty(); }); + it != args.end()) { + RejectClosed(*it); + } else { + ResolveClosed(); + } CloseServiceAndResetFeatureHandle(); - ResolveOrRejectClosed(error); socket_listener_.reset();
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_socket.h b/third_party/blink/renderer/modules/direct_sockets/udp_socket.h index 416974a..292d34d7 100644 --- a/third_party/blink/renderer/modules/direct_sockets/udp_socket.h +++ b/third_party/blink/renderer/modules/direct_sockets/udp_socket.h
@@ -90,7 +90,7 @@ void CloseOnError(); - void OnBothStreamsClosed(std::vector<bool> args); + void OnBothStreamsClosed(std::vector<ScriptValue> args); const Member<UDPSocketMojoRemote> udp_socket_; HeapMojoReceiver<network::mojom::blink::UDPSocketListener, UDPSocket>
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.cc b/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.cc index 57ccf43..2a46ce06 100644 --- a/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.cc +++ b/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.cc
@@ -45,19 +45,20 @@ } bool UDPWritableStreamWrapper::HasPendingWrite() const { - return !!send_resolver_; + return !!write_promise_resolver_; } void UDPWritableStreamWrapper::Trace(Visitor* visitor) const { visitor->Trace(udp_socket_); - visitor->Trace(send_resolver_); + visitor->Trace(write_promise_resolver_); WritableStreamWrapper::Trace(visitor); } void UDPWritableStreamWrapper::OnAbortSignal() { - if (send_resolver_) { - send_resolver_->Reject(Controller()->signal()->reason(GetScriptState())); - send_resolver_ = nullptr; + if (write_promise_resolver_) { + write_promise_resolver_->Reject( + Controller()->signal()->reason(GetScriptState())); + write_promise_resolver_ = nullptr; } } @@ -80,33 +81,34 @@ DOMArrayPiece array_piece(message->data()); base::span<const uint8_t> data{array_piece.Bytes(), array_piece.ByteLength()}; - DCHECK(!send_resolver_); - send_resolver_ = MakeGarbageCollected<ScriptPromiseResolver>( + DCHECK(!write_promise_resolver_); + write_promise_resolver_ = MakeGarbageCollected<ScriptPromiseResolver>( GetScriptState(), exception_state.GetContext()); - // Why not just return send_resolver_->Promise()? + // Why not just return write_promise_resolver_->Promise()? // In view of the async nature of the write handler, the callback might get // executed earlier than the function return statement. There are two // concerns related to that behavior: - // -- send_resolver_ will be set to nullptr and the above call with crash; - // -- send_resover_->Reject() will be called earlier than - // send_resolver_->Promise(), and the resulting promise will be dummy + // -- write_promise_resolver_ will be set to nullptr and the above call with + // crash; + // -- write_promise_resolver_->Reject() will be called earlier than + // write_promise_resolver_->Promise(), and the resulting promise will be dummy // (i.e. fulfilled by default). - ScriptPromise promise = send_resolver_->Promise(); + ScriptPromise promise = write_promise_resolver_->Promise(); udp_socket_->get()->Send(data, WTF::Bind(&UDPWritableStreamWrapper::OnSend, WrapWeakPersistent(this))); return promise; } void UDPWritableStreamWrapper::OnSend(int32_t result) { - if (send_resolver_) { + if (write_promise_resolver_) { if (result == net::Error::OK) { - send_resolver_->Resolve(); - send_resolver_ = nullptr; + write_promise_resolver_->Resolve(); + write_promise_resolver_ = nullptr; } else { ErrorStream(result); } - DCHECK(!send_resolver_); + DCHECK(!write_promise_resolver_); } } @@ -115,9 +117,9 @@ return; } SetState(State::kClosed); - DCHECK(!send_resolver_); + DCHECK(!write_promise_resolver_); - std::move(on_close_).Run(/*error=*/false); + std::move(on_close_).Run(/*exception=*/ScriptValue()); } void UDPWritableStreamWrapper::ErrorStream(int32_t error_code) { @@ -126,28 +128,28 @@ } SetState(State::kAborted); - auto* script_state = GetScriptState(); - DCHECK(script_state->ContextIsValid()); - - auto message = - String{"Stream aborted by the remote: " + net::ErrorToString(error_code)}; - - ScriptState::Scope scope{script_state}; + auto* script_state = write_promise_resolver_ + ? write_promise_resolver_->GetScriptState() + : GetScriptState(); // Scope is needed because there's no ScriptState* on the call stack for - // either RejectWithDOMException or ScriptValue::From. - if (send_resolver_) { - send_resolver_->RejectWithDOMException(DOMExceptionCode::kNetworkError, - message); - send_resolver_ = nullptr; + // ScriptValue::From. + ScriptState::Scope scope{script_state}; + + auto exception = ScriptValue::From( + script_state, + V8ThrowDOMException::CreateOrDie(script_state->GetIsolate(), + DOMExceptionCode::kNetworkError, + String{"Stream aborted by the remote: " + + net::ErrorToString(error_code)})); + + if (write_promise_resolver_) { + write_promise_resolver_->Reject(exception); + write_promise_resolver_ = nullptr; } else { - Controller()->error( - script_state, - ScriptValue::From(script_state, - MakeGarbageCollected<DOMException>( - DOMExceptionCode::kNetworkError, message))); + Controller()->error(script_state, exception); } - std::move(on_close_).Run(/*error=*/true); + std::move(on_close_).Run(exception); } } // namespace blink
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.h b/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.h index 30dd459..e957fc24 100644 --- a/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.h +++ b/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper.h
@@ -48,7 +48,7 @@ CloseOnceCallback on_close_; const Member<UDPSocketMojoRemote> udp_socket_; - Member<ScriptPromiseResolver> send_resolver_; + Member<ScriptPromiseResolver> write_promise_resolver_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper_unittest.cc b/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper_unittest.cc index 83616cb..c5941f1 100644 --- a/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper_unittest.cc +++ b/third_party/blink/renderer/modules/direct_sockets/udp_writable_stream_wrapper_unittest.cc
@@ -85,7 +85,9 @@ bool CloseCalledWith(bool error) { return close_called_with_ == error; } private: - void Close(bool error) { close_called_with_ = error; } + void Close(ScriptValue exception) { + close_called_with_ = !exception.IsEmpty(); + } absl::optional<bool> close_called_with_; std::unique_ptr<FakeDirectUDPSocket> fake_udp_socket_;
diff --git a/third_party/blink/renderer/modules/mediarecorder/vea_encoder.cc b/third_party/blink/renderer/modules/mediarecorder/vea_encoder.cc index 43868e3..1c36f27b 100644 --- a/third_party/blink/renderer/modules/mediarecorder/vea_encoder.cc +++ b/third_party/blink/renderer/modules/mediarecorder/vea_encoder.cc
@@ -11,7 +11,6 @@ #include "base/metrics/histogram_macros.h" #include "base/synchronization/waitable_event.h" #include "base/task/sequenced_task_runner.h" -#include "base/trace_event/trace_event.h" #include "media/base/bind_to_current_loop.h" #include "media/base/bitrate.h" #include "media/base/bitstream_buffer.h" @@ -199,7 +198,6 @@ void VEAEncoder::EncodeOnEncodingTaskRunner(scoped_refptr<VideoFrame> frame, base::TimeTicks capture_timestamp) { - TRACE_EVENT0("media", "VEAEncoder::EncodeOnEncodingTaskRunner"); DVLOG(3) << __func__; DCHECK_CALLED_ON_VALID_SEQUENCE(encoding_sequence_checker_); @@ -249,7 +247,6 @@ vea_requested_input_coded_size_ != frame->coded_size() || input_visible_size_.width() < kVEAEncoderMinResolutionWidth || input_visible_size_.height() < kVEAEncoderMinResolutionHeight)) { - TRACE_EVENT0("media", "VEAEncoder::EncodeOnEncodingTaskRunner::Copy"); // Create SharedMemory backed input buffers as necessary. These SharedMemory // instances will be shared with GPU process. const size_t desired_mapped_size = media::VideoFrame::AllocationSize(
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_track_impl.cc b/third_party/blink/renderer/modules/mediastream/media_stream_track_impl.cc index a28b900bd..45861cd 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_track_impl.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_track_impl.cc
@@ -185,13 +185,6 @@ MediaStreamVideoSource::ConstraintsOnceCallback(), original->Enabled()); } -void DidSetMediaStreamTrackEnabled(MediaStreamComponent* component) { - auto* native_track = - MediaStreamTrackPlatform::GetTrack(WebMediaStreamTrack(component)); - if (native_track) - native_track->SetEnabled(component->Enabled()); -} - void DidCloneMediaStreamTrack(MediaStreamComponent* clone) { DCHECK(clone); DCHECK(clone->Source()); @@ -341,11 +334,6 @@ SendLogMessage( String::Format("%s({enabled=%s})", __func__, enabled ? "true" : "false")); - - if (Ended()) - return; - - DidSetMediaStreamTrackEnabled(component_.Get()); } bool MediaStreamTrackImpl::muted() const {
diff --git a/third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.cc b/third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.cc index 82dc307..51e41afa 100644 --- a/third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.cc +++ b/third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.cc
@@ -63,6 +63,39 @@ } } +void MockMojoMediaStreamDispatcherHost::GetOpenDevice( + int32_t request_id, + const base::UnguessableToken&, + const base::UnguessableToken&, + GetOpenDeviceCallback callback) { + request_id_ = request_id; + ++request_stream_counter_; + + if (do_not_run_cb_) { + get_open_device_cb_ = std::move(callback); + } else { + blink::mojom::blink::StreamDevicesSetPtr stream_devices_set = + blink::mojom::blink::StreamDevicesSet::New(); + stream_devices_set->stream_devices.emplace_back(stream_devices_.Clone()); + if (stream_devices_.video_device) { + std::move(callback).Run(mojom::blink::MediaStreamRequestResult::OK, + mojom::blink::GetOpenDeviceResponse::New( + String("dummy") + String::Number(request_id_), + *stream_devices_.video_device, + /*pan_tilt_zoom_allowed=*/false)); + } else if (stream_devices_.audio_device) { + std::move(callback).Run(mojom::blink::MediaStreamRequestResult::OK, + mojom::blink::GetOpenDeviceResponse::New( + String("dummy") + String::Number(request_id_), + *stream_devices_.audio_device, + /*pan_tilt_zoom_allowed=*/false)); + } else { + std::move(callback).Run( + mojom::blink::MediaStreamRequestResult::INVALID_STATE, nullptr); + } + } +} + void MockMojoMediaStreamDispatcherHost::CancelRequest(int32_t request_id) { EXPECT_EQ(request_id, request_id_); }
diff --git a/third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.h b/third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.h index a41ae1e6d..b01672f 100644 --- a/third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.h +++ b/third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.h
@@ -63,11 +63,10 @@ uint32_t, CropCallback)); #endif - MOCK_METHOD4(GetOpenDevice, - void(int32_t request_id, - const base::UnguessableToken&, - const base::UnguessableToken&, - GetOpenDeviceCallback)); + void GetOpenDevice(int32_t request_id, + const base::UnguessableToken&, + const base::UnguessableToken&, + GetOpenDeviceCallback) override; void ResetSessionId() { session_id_ = base::UnguessableToken::Create(); } void DoNotRunCallback() { do_not_run_cb_ = true; } @@ -81,6 +80,10 @@ return stream_devices_; } + void SetStreamDevices(const blink::mojom::blink::StreamDevices& devices) { + stream_devices_ = devices; + } + private: int request_id_ = -1; int request_stream_counter_ = 0; @@ -90,6 +93,7 @@ bool do_not_run_cb_ = false; blink::mojom::blink::StreamDevices stream_devices_; GenerateStreamsCallback generate_stream_cb_; + GetOpenDeviceCallback get_open_device_cb_; mojo::Receiver<mojom::blink::MediaStreamDispatcherHost> receiver_{this}; };
diff --git a/third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.cc b/third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.cc index 52901d5..3d16f9b9 100644 --- a/third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.cc +++ b/third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.cc
@@ -246,6 +246,11 @@ observers_.clear(); } +void TransferredMediaStreamTrack::SetComponentImplementation( + MediaStreamComponent* component) { + transferred_component_->SetImplementation(component); +} + void TransferredMediaStreamTrack::SetConstraints( const MediaConstraints& constraints) { if (track_) {
diff --git a/third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.h b/third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.h index 91bd186..ec4b2ef 100644 --- a/third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.h +++ b/third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.h
@@ -60,6 +60,7 @@ bool HasImplementation() const { return !!track_; } void SetImplementation(MediaStreamTrack* track); + void SetComponentImplementation(MediaStreamComponent* component); void SetConstraints(const MediaConstraints&) override;
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_client_test.cc b/third_party/blink/renderer/modules/mediastream/user_media_client_test.cc index b2253da..8016dac0b 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_client_test.cc +++ b/third_party/blink/renderer/modules/mediastream/user_media_client_test.cc
@@ -31,6 +31,7 @@ #include "third_party/blink/public/platform/web_vector.h" #include "third_party/blink/public/web/modules/mediastream/web_media_stream_device_observer.h" #include "third_party/blink/public/web/web_heap.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/core/loader/empty_clients.h" #include "third_party/blink/renderer/core/testing/dummy_page_holder.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_constraints_util.h" @@ -39,6 +40,7 @@ #include "third_party/blink/renderer/modules/mediastream/mock_constraint_factory.h" #include "third_party/blink/renderer/modules/mediastream/mock_media_stream_video_source.h" #include "third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.h" +#include "third_party/blink/renderer/modules/mediastream/transferred_media_stream_track.h" #include "third_party/blink/renderer/modules/mediastream/user_media_request.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_processor_options.h" @@ -550,6 +552,17 @@ RequestUserMediaForTest(user_media_request); } + void CallGetOpenDevice( + const base::UnguessableToken& session_id, + TransferredMediaStreamTrack* transferred_media_stream_track) { + UserMediaRequest* user_media_request = UserMediaRequest::CreateForTesting( + CreateDefaultConstraints(), CreateDefaultConstraints()); + + user_media_request->SetTransferData(session_id, + transferred_media_stream_track); + RequestUserMediaForTest(user_media_request); + } + private: RequestState* state_; }; @@ -748,6 +761,69 @@ EXPECT_TRUE(mixed_desc); } +TEST_F(UserMediaClientTest, GetOpenDeviceVideo) { + V8TestingScope scope; + MediaStreamTrack::TransferredValues data{ + .session_id = base::UnguessableToken::Create(), + .kind = "video", + .id = "transferred_id", + .label = "label", + .enabled = true, + .muted = false, + .content_hint = WebMediaStreamTrack::ContentHintType::kNone, + .ready_state = MediaStreamSource::kReadyStateLive}; + TransferredMediaStreamTrack* transferred_media_stream_track = + MakeGarbageCollected<TransferredMediaStreamTrack>( + scope.GetExecutionContext(), data); + + blink::mojom::blink::StreamDevices stream_devices; + stream_devices.video_device = + MediaStreamDevice(mojom::blink::MediaStreamType::DISPLAY_VIDEO_CAPTURE, + data.session_id.ToString(), "usb video camera"); + stream_devices.video_device.value().set_session_id(data.session_id); + mock_dispatcher_host_.SetStreamDevices(stream_devices); + + user_media_client_impl_->CallGetOpenDevice(data.session_id, + transferred_media_stream_track); + StartMockedVideoSource(); + + EXPECT_EQ(kRequestSucceeded, request_state()); + EXPECT_EQ("usb video camera", + transferred_media_stream_track->Component()->GetSourceName()); +} + +TEST_F(UserMediaClientTest, GetOpenDeviceAudio) { + EXPECT_CALL(mock_dispatcher_host_, OnStreamStarted(_)); + + V8TestingScope scope; + MediaStreamTrack::TransferredValues data{ + .session_id = base::UnguessableToken::Create(), + .kind = "audio", + .id = "transferred_id", + .label = "label", + .enabled = true, + .muted = false, + .content_hint = WebMediaStreamTrack::ContentHintType::kNone, + .ready_state = MediaStreamSource::kReadyStateLive}; + TransferredMediaStreamTrack* transferred_media_stream_track = + MakeGarbageCollected<TransferredMediaStreamTrack>( + scope.GetExecutionContext(), data); + + blink::mojom::blink::StreamDevices stream_devices; + stream_devices.audio_device = + MediaStreamDevice(mojom::blink::MediaStreamType::DISPLAY_AUDIO_CAPTURE, + data.session_id.ToString(), "microphone"); + stream_devices.audio_device.value().set_session_id(data.session_id); + mock_dispatcher_host_.SetStreamDevices(stream_devices); + + user_media_client_impl_->CallGetOpenDevice(data.session_id, + transferred_media_stream_track); + + EXPECT_EQ(kRequestSucceeded, request_state()); + EXPECT_EQ("microphone", + transferred_media_stream_track->Component()->GetSourceName()); +} + // Test that the same source object is used if two MediaStreams are generated // using the same source. TEST_F(UserMediaClientTest, GenerateTwoMediaStreamsWithSameSource) {
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc index 890d8d1e..f5630fe 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc +++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
@@ -1639,7 +1639,12 @@ if (!device) return nullptr; MediaStreamSource* source = InitializeVideoSourceObject(*device); - return current_request_info_->CreateAndStartVideoTrack(source); + MediaStreamComponent* component = + current_request_info_->CreateAndStartVideoTrack(source); + if (current_request_info_->request()->IsTransferredTrackRequest()) { + current_request_info_->request()->SetTransferredTrackComponent(component); + } + return component; } MediaStreamComponent* UserMediaProcessor::CreateAudioTrack( @@ -1672,6 +1677,9 @@ MakeGarbageCollected<MediaStreamComponentImpl>( source, std::make_unique<MediaStreamAudioTrack>(true /* is_local_track */)); + if (current_request_info_->request()->IsTransferredTrackRequest()) { + current_request_info_->request()->SetTransferredTrackComponent(component); + } current_request_info_->StartAudioTrack(component, is_pending); // At this point the source has started, and its audio parameters have been
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_request.cc b/third_party/blink/renderer/modules/mediastream/user_media_request.cc index e95035d6..5cce683f 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_request.cc +++ b/third_party/blink/renderer/modules/mediastream/user_media_request.cc
@@ -663,6 +663,11 @@ } } +void UserMediaRequest::SetTransferredTrackComponent( + MediaStreamComponent* component) { + transferred_track_->SetComponentImplementation(component); +} + void UserMediaRequest::Trace(Visitor* visitor) const { visitor->Trace(client_); visitor->Trace(callbacks_);
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_request.h b/third_party/blink/renderer/modules/mediastream/user_media_request.h index b22fb91..56b837e 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_request.h +++ b/third_party/blink/renderer/modules/mediastream/user_media_request.h
@@ -165,6 +165,8 @@ bool IsTransferredTrackRequest() const { return !!transferred_track_session_id_; } + void SetTransferredTrackComponent(MediaStreamComponent* component); + void Trace(Visitor*) const override; private:
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.cc b/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.cc index 487af24..e461d8d 100644 --- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.cc +++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.cc
@@ -87,6 +87,24 @@ return checked_byte_length.ValueOrDie(); } +bool ValidateClampOptions(const MLClampOptions* options, + ExceptionState& exception_state) { + // The generated code of MLClampOptions uses blink::ToRestrictedFloat to + // convert the min/max value to a single precision float. It will throw on + // non-finite values. + if (options->hasMinValue() && options->hasMaxValue()) { + if (options->minValue() > options->maxValue()) { + exception_state.ThrowDOMException( + DOMExceptionCode::kDataError, + String::Format("The min value (%f) should be less than or equal to " + "the max value (%f).", + options->minValue(), options->maxValue())); + return false; + } + } + return true; +} + } // namespace // static @@ -154,20 +172,28 @@ MLOperand* MLGraphBuilder::clamp(const MLOperand* input, const MLClampOptions* options, ExceptionState& exception_state) { - // TODO(crbug.com/1273291): Implement this on operating systems to access - // hardware acceleration. - exception_state.ThrowDOMException(DOMExceptionCode::kNotSupportedError, - "Not implemented"); - return nullptr; + if (!ValidateClampOptions(options, exception_state)) { + return nullptr; + } + auto* clamp = MakeGarbageCollected<MLOperator>( + this, MLOperator::OperatorKind::kClamp, options); + // According to WebNN spec + // https://www.w3.org/TR/webnn/#api-mlgraphbuilder-clamp, the output tensor of + // clamp has the same type and dimensions as its input. + auto* output = MLOperand::CreateOutput(this, input->Type(), + std::move(input->Dimensions()), clamp); + clamp->Connect({input}, {output}); + return output; } MLOperator* MLGraphBuilder::clamp(const MLClampOptions* options, ExceptionState& exception_state) { - // TODO(crbug.com/1273291): Implement this on operating systems to access - // hardware acceleration. - exception_state.ThrowDOMException(DOMExceptionCode::kNotSupportedError, - "Not implemented"); - return nullptr; + if (!ValidateClampOptions(options, exception_state)) { + return nullptr; + } + // Create the clamp operator that would be used as an activation function. + return MakeGarbageCollected<MLOperator>( + this, MLOperator::OperatorKind::kClamp, options); } MLOperand* MLGraphBuilder::conv2d(const MLOperand* input,
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_operator.cc b/third_party/blink/renderer/modules/ml/webnn/ml_operator.cc index 576138d..f39e3a9a 100644 --- a/third_party/blink/renderer/modules/ml/webnn/ml_operator.cc +++ b/third_party/blink/renderer/modules/ml/webnn/ml_operator.cc
@@ -5,17 +5,53 @@ #include "third_party/blink/renderer/modules/ml/webnn/ml_operator.h" #include "third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.h" +#include "third_party/blink/renderer/modules/ml/webnn/ml_operand.h" namespace blink { -MLOperator::MLOperator(MLGraphBuilder* graph_builder) - : graph_builder_(graph_builder) {} +MLOperator::MLOperator(MLGraphBuilder* builder, + OperatorKind kind, + const bindings::DictionaryBase* options) + : builder_(builder), kind_(kind), options_(options) {} MLOperator::~MLOperator() = default; void MLOperator::Trace(Visitor* visitor) const { - visitor->Trace(graph_builder_); + visitor->Trace(builder_); + visitor->Trace(options_); + visitor->Trace(inputs_); + visitor->Trace(outputs_); ScriptWrappable::Trace(visitor); } +MLOperator::OperatorKind MLOperator::Kind() const { + return kind_; +} + +const bindings::DictionaryBase* MLOperator::Options() const { + return options_; +} + +bool MLOperator::IsConnected() const { + return is_connected_; +} + +const HeapVector<Member<const MLOperand>>& MLOperator::Inputs() const { + return inputs_; +} + +const HeapVector<Member<const MLOperand>>& MLOperator::Outputs() const { + return outputs_; +} + +void MLOperator::Connect(HeapVector<Member<const MLOperand>> inputs, + HeapVector<Member<const MLOperand>> outputs) { + DCHECK(!is_connected_); + DCHECK(!inputs.IsEmpty()); + DCHECK(!outputs.IsEmpty()); + inputs_ = std::move(inputs); + outputs_ = std::move(outputs); + is_connected_ = true; +} + } // namespace blink
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_operator.h b/third_party/blink/renderer/modules/ml/webnn/ml_operator.h index db7e95b1..2c91271 100644 --- a/third_party/blink/renderer/modules/ml/webnn/ml_operator.h +++ b/third_party/blink/renderer/modules/ml/webnn/ml_operator.h
@@ -5,19 +5,28 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_ML_WEBNN_ML_OPERATOR_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_ML_WEBNN_ML_OPERATOR_H_ +#include "third_party/blink/renderer/platform/bindings/dictionary_base.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" +#include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h" #include "third_party/blink/renderer/platform/heap/member.h" #include "third_party/blink/renderer/platform/heap/visitor.h" namespace blink { class MLGraphBuilder; +class MLOperand; class MLOperator final : public ScriptWrappable { DEFINE_WRAPPERTYPEINFO(); public: - explicit MLOperator(MLGraphBuilder* graph_builder); + enum OperatorKind { + // Keep the order as the same as build methods of MLGraphBuilder. + kClamp + }; + MLOperator(MLGraphBuilder* builder, + OperatorKind kind, + const bindings::DictionaryBase* options = nullptr); MLOperator(const MLOperator&) = delete; MLOperator& operator=(const MLOperator&) = delete; @@ -26,8 +35,34 @@ void Trace(Visitor* visitor) const override; + OperatorKind Kind() const; + const bindings::DictionaryBase* Options() const; + bool IsConnected() const; + const HeapVector<Member<const MLOperand>>& Inputs() const; + const HeapVector<Member<const MLOperand>>& Outputs() const; + + // According to WebNN programming model + // https://www.w3.org/TR/webnn/#programming-model, neural networks are + // represented as computational graphs of mathematical operators (nodes) + // connected by operands (edges). This method connects the operator with its + // input and output operands during a computational graph building session. An + // operator is only allowed to be connected once. + void Connect(HeapVector<Member<const MLOperand>> inputs, + HeapVector<Member<const MLOperand>> outputs); + private: - Member<MLGraphBuilder> graph_builder_; + Member<MLGraphBuilder> builder_; + OperatorKind kind_; + // The correct type of options_ depends on OperatorKind. For example, if the + // OperatorKind is kClamp, options_ could static_cast to MLClampOptions. + Member<const bindings::DictionaryBase> options_; + // is_conneted_ indicates whether the operator is connected with operands. + // According to WebNN spec https://www.w3.org/TR/webnn/#api-mloperator, an + // operator without operand connections could be used as an activation + // function that is fused into another operator. + bool is_connected_{false}; + HeapVector<Member<const MLOperand>> inputs_; + HeapVector<Member<const MLOperand>> outputs_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc index 1184d00..3a4526bd 100644 --- a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc
@@ -2741,15 +2741,14 @@ NADCTypedArrayView<GLfloat> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform1fv", location, v, - 1, src_offset, src_length)) + GLfloat* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform1fv", location, v, 1, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform1fv( - location->Location(), - src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset), - v.Data() + src_offset); + ContextGL()->Uniform1fv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform1fv( @@ -2757,14 +2756,14 @@ Vector<GLfloat>& v, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform1fv", location, v.data(), v.size(), 1, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->Uniform1fv(location->Location(), - src_length ? src_length : (v.size() - src_offset), - v.data() + src_offset); + ContextGL()->Uniform1fv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform2fv( @@ -2772,16 +2771,14 @@ NADCTypedArrayView<GLfloat> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform2fv", location, v, - 2, src_offset, src_length)) + GLfloat* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform2fv", location, v, 2, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform2fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) >> - 1, - v.Data() + src_offset); + ContextGL()->Uniform2fv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform2fv( @@ -2789,15 +2786,14 @@ Vector<GLfloat>& v, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform2fv", location, v.data(), v.size(), 2, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->Uniform2fv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) >> 1, - v.data() + src_offset); + ContextGL()->Uniform2fv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform3fv( @@ -2805,16 +2801,14 @@ NADCTypedArrayView<GLfloat> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform3fv", location, v, - 3, src_offset, src_length)) + GLfloat* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform3fv", location, v, 3, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform3fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) / - 3, - v.Data() + src_offset); + ContextGL()->Uniform3fv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform3fv( @@ -2822,15 +2816,14 @@ Vector<GLfloat>& v, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform3fv", location, v.data(), v.size(), 3, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->Uniform3fv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) / 3, - v.data() + src_offset); + ContextGL()->Uniform3fv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform4fv( @@ -2838,16 +2831,14 @@ NADCTypedArrayView<GLfloat> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform4fv", location, v, - 4, src_offset, src_length)) + GLfloat* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform4fv", location, v, 4, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform4fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) >> - 2, - v.Data() + src_offset); + ContextGL()->Uniform4fv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform4fv( @@ -2855,15 +2846,14 @@ Vector<GLfloat>& v, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform4fv", location, v.data(), v.size(), 4, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->Uniform4fv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) >> 2, - v.data() + src_offset); + ContextGL()->Uniform4fv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform1iv( @@ -2871,15 +2861,14 @@ NADCTypedArrayView<GLint> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform1iv", location, v, - 1, src_offset, src_length)) + GLint* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform1iv", location, v, 1, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform1iv( - location->Location(), - src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset), - v.Data() + src_offset); + ContextGL()->Uniform1iv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform1iv( @@ -2887,14 +2876,14 @@ Vector<GLint>& v, GLuint src_offset, GLuint src_length) { + GLint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform1iv", location, v.data(), v.size(), 1, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->Uniform1iv(location->Location(), - src_length ? src_length : (v.size() - src_offset), - v.data() + src_offset); + ContextGL()->Uniform1iv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform2iv( @@ -2902,16 +2891,14 @@ NADCTypedArrayView<GLint> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform2iv", location, v, - 2, src_offset, src_length)) + GLint* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform2iv", location, v, 2, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform2iv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) >> - 1, - v.Data() + src_offset); + ContextGL()->Uniform2iv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform2iv( @@ -2919,15 +2906,14 @@ Vector<GLint>& v, GLuint src_offset, GLuint src_length) { + GLint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform2iv", location, v.data(), v.size(), 2, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->Uniform2iv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) >> 1, - v.data() + src_offset); + ContextGL()->Uniform2iv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform3iv( @@ -2935,16 +2921,14 @@ NADCTypedArrayView<GLint> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform3iv", location, v, - 3, src_offset, src_length)) + GLint* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform3iv", location, v, 3, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform3iv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) / - 3, - v.Data() + src_offset); + ContextGL()->Uniform3iv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform3iv( @@ -2952,15 +2936,14 @@ Vector<GLint>& v, GLuint src_offset, GLuint src_length) { + GLint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform3iv", location, v.data(), v.size(), 3, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->Uniform3iv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) / 3, - v.data() + src_offset); + ContextGL()->Uniform3iv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform4iv( @@ -2968,16 +2951,14 @@ NADCTypedArrayView<GLint> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform4iv", location, v, - 4, src_offset, src_length)) + GLint* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform4iv", location, v, 4, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform4iv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) >> - 2, - v.Data() + src_offset); + ContextGL()->Uniform4iv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform4iv( @@ -2985,15 +2966,14 @@ Vector<GLint>& v, GLuint src_offset, GLuint src_length) { + GLint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform4iv", location, v.data(), v.size(), 4, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->Uniform4iv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) >> 2, - v.data() + src_offset); + ContextGL()->Uniform4iv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform1uiv( @@ -3001,15 +2981,14 @@ NADCTypedArrayView<GLuint> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform1uiv", location, v, - 1, src_offset, src_length)) + GLuint* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform1uiv", location, v, 1, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform1uiv( - location->Location(), - src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset), - v.Data() + src_offset); + ContextGL()->Uniform1uiv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform1uiv( @@ -3017,15 +2996,15 @@ Vector<GLuint>& value, GLuint src_offset, GLuint src_length) { + GLuint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform1uiv", location, value.data(), - value.size(), 1, src_offset, src_length)) + value.size(), 1, src_offset, src_length, &data, + &length)) return; - ContextGL()->Uniform1uiv( - location->Location(), - src_length ? src_length : (value.size() - src_offset), - value.data() + src_offset); + ContextGL()->Uniform1uiv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform2uiv( @@ -3033,16 +3012,14 @@ NADCTypedArrayView<GLuint> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform2uiv", location, v, - 2, src_offset, src_length)) + GLuint* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform2uiv", location, v, 2, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform2uiv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) >> - 1, - v.Data() + src_offset); + ContextGL()->Uniform2uiv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform2uiv( @@ -3050,15 +3027,15 @@ Vector<GLuint>& value, GLuint src_offset, GLuint src_length) { + GLuint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform2uiv", location, value.data(), - value.size(), 2, src_offset, src_length)) + value.size(), 2, src_offset, src_length, &data, + &length)) return; - ContextGL()->Uniform2uiv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) >> 1, - value.data() + src_offset); + ContextGL()->Uniform2uiv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform3uiv( @@ -3066,16 +3043,14 @@ NADCTypedArrayView<GLuint> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform3uiv", location, v, - 3, src_offset, src_length)) + GLuint* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform3uiv", location, v, 3, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform3uiv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) / - 3, - v.Data() + src_offset); + ContextGL()->Uniform3uiv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform3uiv( @@ -3083,15 +3058,15 @@ Vector<GLuint>& value, GLuint src_offset, GLuint src_length) { + GLuint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform3uiv", location, value.data(), - value.size(), 3, src_offset, src_length)) + value.size(), 3, src_offset, src_length, &data, + &length)) return; - ContextGL()->Uniform3uiv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) / 3, - value.data() + src_offset); + ContextGL()->Uniform3uiv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform4uiv( @@ -3099,16 +3074,14 @@ NADCTypedArrayView<GLuint> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformParameters("uniform4uiv", location, v, - 4, src_offset, src_length)) + GLuint* data; + GLuint length; + if (isContextLost() || + !ValidateUniformParameters("uniform4uiv", location, v, 4, src_offset, + src_length, &data, &length)) return; - ContextGL()->Uniform4uiv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) >> - 2, - v.Data() + src_offset); + ContextGL()->Uniform4uiv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniform4uiv( @@ -3116,15 +3089,15 @@ Vector<GLuint>& value, GLuint src_offset, GLuint src_length) { + GLuint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform4uiv", location, value.data(), - value.size(), 4, src_offset, src_length)) + value.size(), 4, src_offset, src_length, &data, + &length)) return; - ContextGL()->Uniform4uiv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) >> 2, - value.data() + src_offset); + ContextGL()->Uniform4uiv(location->Location(), length, data); } void WebGL2RenderingContextBase::uniformMatrix2fv( @@ -3133,32 +3106,29 @@ NADCTypedArrayView<GLfloat> v, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; + if (isContextLost() || !ValidateUniformMatrixParameters( + "uniformMatrix2fv", location, transpose, v, 4, + src_offset, src_length, &data, &length)) + return; + ContextGL()->UniformMatrix2fv(location->Location(), length, transpose, data); +} + +void WebGL2RenderingContextBase::uniformMatrix2fv( + const WebGLUniformLocation* location, + GLboolean transpose, + Vector<GLfloat>& v, + GLuint src_offset, + GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix2fv", location, transpose, - v, 4, src_offset, src_length)) + v.data(), v.size(), 4, src_offset, + src_length, &data, &length)) return; - ContextGL()->UniformMatrix2fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) >> - 2, - transpose, v.Data() + src_offset); -} - -void WebGL2RenderingContextBase::uniformMatrix2fv( - const WebGLUniformLocation* location, - GLboolean transpose, - Vector<GLfloat>& v, - GLuint src_offset, - GLuint src_length) { - if (isContextLost() || !ValidateUniformMatrixParameters( - "uniformMatrix2fv", location, transpose, v.data(), - v.size(), 4, src_offset, src_length)) - return; - ContextGL()->UniformMatrix2fv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) >> 2, transpose, - v.data() + src_offset); + ContextGL()->UniformMatrix2fv(location->Location(), length, transpose, data); } void WebGL2RenderingContextBase::uniformMatrix3fv( @@ -3167,32 +3137,29 @@ NADCTypedArrayView<GLfloat> v, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; + if (isContextLost() || !ValidateUniformMatrixParameters( + "uniformMatrix3fv", location, transpose, v, 9, + src_offset, src_length, &data, &length)) + return; + ContextGL()->UniformMatrix3fv(location->Location(), length, transpose, data); +} + +void WebGL2RenderingContextBase::uniformMatrix3fv( + const WebGLUniformLocation* location, + GLboolean transpose, + Vector<GLfloat>& v, + GLuint src_offset, + GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix3fv", location, transpose, - v, 9, src_offset, src_length)) + v.data(), v.size(), 9, src_offset, + src_length, &data, &length)) return; - ContextGL()->UniformMatrix3fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) / - 9, - transpose, v.Data() + src_offset); -} - -void WebGL2RenderingContextBase::uniformMatrix3fv( - const WebGLUniformLocation* location, - GLboolean transpose, - Vector<GLfloat>& v, - GLuint src_offset, - GLuint src_length) { - if (isContextLost() || !ValidateUniformMatrixParameters( - "uniformMatrix3fv", location, transpose, v.data(), - v.size(), 9, src_offset, src_length)) - return; - ContextGL()->UniformMatrix3fv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) / 9, transpose, - v.data() + src_offset); + ContextGL()->UniformMatrix3fv(location->Location(), length, transpose, data); } void WebGL2RenderingContextBase::uniformMatrix4fv( @@ -3201,16 +3168,13 @@ NADCTypedArrayView<GLfloat> v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || - !ValidateUniformMatrixParameters("uniformMatrix4fv", location, transpose, - v, 16, src_offset, src_length)) + GLfloat* data; + GLuint length; + if (isContextLost() || !ValidateUniformMatrixParameters( + "uniformMatrix4fv", location, transpose, v, 16, + src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix4fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(v.Size()) - src_offset)) >> - 4, - transpose, v.Data() + src_offset); + ContextGL()->UniformMatrix4fv(location->Location(), length, transpose, data); } void WebGL2RenderingContextBase::uniformMatrix4fv( @@ -3219,14 +3183,14 @@ Vector<GLfloat>& v, GLuint src_offset, GLuint src_length) { - if (isContextLost() || !ValidateUniformMatrixParameters( - "uniformMatrix4fv", location, transpose, v.data(), - v.size(), 16, src_offset, src_length)) + GLfloat* data; + GLuint length; + if (isContextLost() || + !ValidateUniformMatrixParameters("uniformMatrix4fv", location, transpose, + v.data(), v.size(), 16, src_offset, + src_length, &data, &length)) return; - ContextGL()->UniformMatrix4fv( - location->Location(), - (src_length ? src_length : (v.size() - src_offset)) >> 4, transpose, - v.data() + src_offset); + ContextGL()->UniformMatrix4fv(location->Location(), length, transpose, data); } void WebGL2RenderingContextBase::uniformMatrix2x3fv( @@ -3235,16 +3199,14 @@ NADCTypedArrayView<GLfloat> value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters( "uniformMatrix2x3fv", location, transpose, value, - 6, src_offset, src_length)) + 6, src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix2x3fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(value.Size()) - src_offset)) / - 6, - transpose, value.Data() + src_offset); + ContextGL()->UniformMatrix2x3fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix2x3fv( @@ -3253,15 +3215,15 @@ Vector<GLfloat>& value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix2x3fv", location, transpose, value.data(), value.size(), 6, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix2x3fv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) / 6, transpose, - value.data() + src_offset); + ContextGL()->UniformMatrix2x3fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix3x2fv( @@ -3270,16 +3232,14 @@ NADCTypedArrayView<GLfloat> value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters( "uniformMatrix3x2fv", location, transpose, value, - 6, src_offset, src_length)) + 6, src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix3x2fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(value.Size()) - src_offset)) / - 6, - transpose, value.Data() + src_offset); + ContextGL()->UniformMatrix3x2fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix3x2fv( @@ -3288,15 +3248,15 @@ Vector<GLfloat>& value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix3x2fv", location, transpose, value.data(), value.size(), 6, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix3x2fv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) / 6, transpose, - value.data() + src_offset); + ContextGL()->UniformMatrix3x2fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix2x4fv( @@ -3305,16 +3265,14 @@ NADCTypedArrayView<GLfloat> value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters( "uniformMatrix2x4fv", location, transpose, value, - 8, src_offset, src_length)) + 8, src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix2x4fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(value.Size()) - src_offset)) >> - 3, - transpose, value.Data() + src_offset); + ContextGL()->UniformMatrix2x4fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix2x4fv( @@ -3323,15 +3281,15 @@ Vector<GLfloat>& value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix2x4fv", location, transpose, value.data(), value.size(), 8, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix2x4fv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) >> 3, transpose, - value.data() + src_offset); + ContextGL()->UniformMatrix2x4fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix4x2fv( @@ -3340,16 +3298,14 @@ NADCTypedArrayView<GLfloat> value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters( "uniformMatrix4x2fv", location, transpose, value, - 8, src_offset, src_length)) + 8, src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix4x2fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(value.Size()) - src_offset)) >> - 3, - transpose, value.Data() + src_offset); + ContextGL()->UniformMatrix4x2fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix4x2fv( @@ -3358,15 +3314,15 @@ Vector<GLfloat>& value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix4x2fv", location, transpose, value.data(), value.size(), 8, - src_offset, src_length)) + src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix4x2fv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) >> 3, transpose, - value.data() + src_offset); + ContextGL()->UniformMatrix4x2fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix3x4fv( @@ -3375,16 +3331,14 @@ NADCTypedArrayView<GLfloat> value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters( "uniformMatrix3x4fv", location, transpose, value, - 12, src_offset, src_length)) + 12, src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix3x4fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(value.Size()) - src_offset)) / - 12, - transpose, value.Data() + src_offset); + ContextGL()->UniformMatrix3x4fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix3x4fv( @@ -3393,15 +3347,15 @@ Vector<GLfloat>& value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || - !ValidateUniformMatrixParameters("uniformMatrix3x4fv", location, - transpose, value.data(), value.size(), - 12, src_offset, src_length)) + !ValidateUniformMatrixParameters( + "uniformMatrix3x4fv", location, transpose, value.data(), value.size(), + 12, src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix3x4fv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) / 12, transpose, - value.data() + src_offset); + ContextGL()->UniformMatrix3x4fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix4x3fv( @@ -3410,16 +3364,14 @@ NADCTypedArrayView<GLfloat> value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters( "uniformMatrix4x3fv", location, transpose, value, - 12, src_offset, src_length)) + 12, src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix4x3fv( - location->Location(), - (src_length ? src_length - : (base::checked_cast<GLuint>(value.Size()) - src_offset)) / - 12, - transpose, value.Data() + src_offset); + ContextGL()->UniformMatrix4x3fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniformMatrix4x3fv( @@ -3428,15 +3380,15 @@ Vector<GLfloat>& value, GLuint src_offset, GLuint src_length) { + GLfloat* data; + GLuint length; if (isContextLost() || - !ValidateUniformMatrixParameters("uniformMatrix4x3fv", location, - transpose, value.data(), value.size(), - 12, src_offset, src_length)) + !ValidateUniformMatrixParameters( + "uniformMatrix4x3fv", location, transpose, value.data(), value.size(), + 12, src_offset, src_length, &data, &length)) return; - ContextGL()->UniformMatrix4x3fv( - location->Location(), - (src_length ? src_length : (value.size() - src_offset)) / 12, transpose, - value.data() + src_offset); + ContextGL()->UniformMatrix4x3fv(location->Location(), length, transpose, + data); } void WebGL2RenderingContextBase::uniform1fv(
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc index f0c4252..a5c2521 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -6479,22 +6479,26 @@ void WebGLRenderingContextBase::uniform1fv(const WebGLUniformLocation* location, NADCTypedArrayView<GLfloat> v) { + GLfloat* data; + GLuint length; if (isContextLost() || - !ValidateUniformParameters("uniform1fv", location, v, 1, 0, v.Size())) + !ValidateUniformParameters("uniform1fv", location, v, 1, 0, v.Size(), + &data, &length)) return; - ContextGL()->Uniform1fv(location->Location(), - base::checked_cast<GLuint>(v.Size()), v.Data()); + ContextGL()->Uniform1fv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform1fv(const WebGLUniformLocation* location, Vector<GLfloat>& v) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform1fv", location, v.data(), v.size(), 1, - 0, v.size())) + 0, v.size(), &data, &length)) return; - ContextGL()->Uniform1fv(location->Location(), v.size(), v.data()); + ContextGL()->Uniform1fv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform1i(const WebGLUniformLocation* location, @@ -6513,22 +6517,26 @@ void WebGLRenderingContextBase::uniform1iv(const WebGLUniformLocation* location, NADCTypedArrayView<GLint> v) { + GLint* data; + GLuint length; if (isContextLost() || - !ValidateUniformParameters("uniform1iv", location, v, 1, 0, v.Size())) + !ValidateUniformParameters("uniform1iv", location, v, 1, 0, v.Size(), + &data, &length)) return; - ContextGL()->Uniform1iv(location->Location(), - base::checked_cast<GLuint>(v.Size()), v.Data()); + ContextGL()->Uniform1iv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform1iv(const WebGLUniformLocation* location, Vector<GLint>& v) { + GLint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform1iv", location, v.data(), v.size(), 1, - 0, v.size())) + 0, v.size(), &data, &length)) return; - ContextGL()->Uniform1iv(location->Location(), v.size(), v.data()); + ContextGL()->Uniform1iv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform2f(const WebGLUniformLocation* location, @@ -6548,22 +6556,26 @@ void WebGLRenderingContextBase::uniform2fv(const WebGLUniformLocation* location, NADCTypedArrayView<GLfloat> v) { + GLfloat* data; + GLuint length; if (isContextLost() || - !ValidateUniformParameters("uniform2fv", location, v, 2, 0, v.Size())) + !ValidateUniformParameters("uniform2fv", location, v, 2, 0, v.Size(), + &data, &length)) return; - ContextGL()->Uniform2fv(location->Location(), - base::checked_cast<GLuint>(v.Size()) >> 1, v.Data()); + ContextGL()->Uniform2fv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform2fv(const WebGLUniformLocation* location, Vector<GLfloat>& v) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform2fv", location, v.data(), v.size(), 2, - 0, v.size())) + 0, v.size(), &data, &length)) return; - ContextGL()->Uniform2fv(location->Location(), v.size() >> 1, v.data()); + ContextGL()->Uniform2fv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform2i(const WebGLUniformLocation* location, @@ -6583,22 +6595,26 @@ void WebGLRenderingContextBase::uniform2iv(const WebGLUniformLocation* location, NADCTypedArrayView<GLint> v) { + GLint* data; + GLuint length; if (isContextLost() || - !ValidateUniformParameters("uniform2iv", location, v, 2, 0, v.Size())) + !ValidateUniformParameters("uniform2iv", location, v, 2, 0, v.Size(), + &data, &length)) return; - ContextGL()->Uniform2iv(location->Location(), - base::checked_cast<GLuint>(v.Size()) >> 1, v.Data()); + ContextGL()->Uniform2iv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform2iv(const WebGLUniformLocation* location, Vector<GLint>& v) { + GLint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform2iv", location, v.data(), v.size(), 2, - 0, v.size())) + 0, v.size(), &data, &length)) return; - ContextGL()->Uniform2iv(location->Location(), v.size() >> 1, v.data()); + ContextGL()->Uniform2iv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform3f(const WebGLUniformLocation* location, @@ -6619,22 +6635,26 @@ void WebGLRenderingContextBase::uniform3fv(const WebGLUniformLocation* location, NADCTypedArrayView<GLfloat> v) { + GLfloat* data; + GLuint length; if (isContextLost() || - !ValidateUniformParameters("uniform3fv", location, v, 3, 0, v.Size())) + !ValidateUniformParameters("uniform3fv", location, v, 3, 0, v.Size(), + &data, &length)) return; - ContextGL()->Uniform3fv(location->Location(), - base::checked_cast<GLuint>(v.Size()) / 3, v.Data()); + ContextGL()->Uniform3fv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform3fv(const WebGLUniformLocation* location, Vector<GLfloat>& v) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform3fv", location, v.data(), v.size(), 3, - 0, v.size())) + 0, v.size(), &data, &length)) return; - ContextGL()->Uniform3fv(location->Location(), v.size() / 3, v.data()); + ContextGL()->Uniform3fv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform3i(const WebGLUniformLocation* location, @@ -6655,22 +6675,26 @@ void WebGLRenderingContextBase::uniform3iv(const WebGLUniformLocation* location, NADCTypedArrayView<GLint> v) { + GLint* data; + GLuint length; if (isContextLost() || - !ValidateUniformParameters("uniform3iv", location, v, 3, 0, v.Size())) + !ValidateUniformParameters("uniform3iv", location, v, 3, 0, v.Size(), + &data, &length)) return; - ContextGL()->Uniform3iv(location->Location(), - base::checked_cast<GLuint>(v.Size()) / 3, v.Data()); + ContextGL()->Uniform3iv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform3iv(const WebGLUniformLocation* location, Vector<GLint>& v) { + GLint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform3iv", location, v.data(), v.size(), 3, - 0, v.size())) + 0, v.size(), &data, &length)) return; - ContextGL()->Uniform3iv(location->Location(), v.size() / 3, v.data()); + ContextGL()->Uniform3iv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform4f(const WebGLUniformLocation* location, @@ -6692,22 +6716,26 @@ void WebGLRenderingContextBase::uniform4fv(const WebGLUniformLocation* location, NADCTypedArrayView<GLfloat> v) { + GLfloat* data; + GLuint length; if (isContextLost() || - !ValidateUniformParameters("uniform4fv", location, v, 4, 0, v.Size())) + !ValidateUniformParameters("uniform4fv", location, v, 4, 0, v.Size(), + &data, &length)) return; - ContextGL()->Uniform4fv(location->Location(), - base::checked_cast<GLuint>(v.Size()) >> 2, v.Data()); + ContextGL()->Uniform4fv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform4fv(const WebGLUniformLocation* location, Vector<GLfloat>& v) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform4fv", location, v.data(), v.size(), 4, - 0, v.size())) + 0, v.size(), &data, &length)) return; - ContextGL()->Uniform4fv(location->Location(), v.size() >> 2, v.data()); + ContextGL()->Uniform4fv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform4i(const WebGLUniformLocation* location, @@ -6729,97 +6757,104 @@ void WebGLRenderingContextBase::uniform4iv(const WebGLUniformLocation* location, NADCTypedArrayView<GLint> v) { + GLint* data; + GLuint length; if (isContextLost() || - !ValidateUniformParameters("uniform4iv", location, v, 4, 0, v.Size())) + !ValidateUniformParameters("uniform4iv", location, v, 4, 0, v.Size(), + &data, &length)) return; - ContextGL()->Uniform4iv(location->Location(), - base::checked_cast<GLuint>(v.Size()) >> 2, v.Data()); + ContextGL()->Uniform4iv(location->Location(), length, data); } void WebGLRenderingContextBase::uniform4iv(const WebGLUniformLocation* location, Vector<GLint>& v) { + GLint* data; + GLuint length; if (isContextLost() || !ValidateUniformParameters("uniform4iv", location, v.data(), v.size(), 4, - 0, v.size())) + 0, v.size(), &data, &length)) return; - ContextGL()->Uniform4iv(location->Location(), v.size() >> 2, v.data()); + ContextGL()->Uniform4iv(location->Location(), length, data); } void WebGLRenderingContextBase::uniformMatrix2fv( const WebGLUniformLocation* location, GLboolean transpose, NADCTypedArrayView<GLfloat> v) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix2fv", location, transpose, - v, 4, 0, v.Size())) + v, 4, 0, v.Size(), &data, &length)) return; - ContextGL()->UniformMatrix2fv(location->Location(), - base::checked_cast<GLuint>(v.Size()) >> 2, - transpose, v.Data()); + ContextGL()->UniformMatrix2fv(location->Location(), length, transpose, data); } void WebGLRenderingContextBase::uniformMatrix2fv( const WebGLUniformLocation* location, GLboolean transpose, Vector<GLfloat>& v) { - if (isContextLost() || - !ValidateUniformMatrixParameters("uniformMatrix2fv", location, transpose, - v.data(), v.size(), 4, 0, v.size())) + GLfloat* data; + GLuint length; + if (isContextLost() || !ValidateUniformMatrixParameters( + "uniformMatrix2fv", location, transpose, v.data(), + v.size(), 4, 0, v.size(), &data, &length)) return; - ContextGL()->UniformMatrix2fv(location->Location(), v.size() >> 2, transpose, - v.data()); + ContextGL()->UniformMatrix2fv(location->Location(), length, transpose, data); } void WebGLRenderingContextBase::uniformMatrix3fv( const WebGLUniformLocation* location, GLboolean transpose, NADCTypedArrayView<GLfloat> v) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix3fv", location, transpose, - v, 9, 0, v.Size())) + v, 9, 0, v.Size(), &data, &length)) return; - ContextGL()->UniformMatrix3fv(location->Location(), - base::checked_cast<GLuint>(v.Size()) / 9, - transpose, v.Data()); + ContextGL()->UniformMatrix3fv(location->Location(), length, transpose, data); } void WebGLRenderingContextBase::uniformMatrix3fv( const WebGLUniformLocation* location, GLboolean transpose, Vector<GLfloat>& v) { - if (isContextLost() || - !ValidateUniformMatrixParameters("uniformMatrix3fv", location, transpose, - v.data(), v.size(), 9, 0, v.size())) + GLfloat* data; + GLuint length; + if (isContextLost() || !ValidateUniformMatrixParameters( + "uniformMatrix3fv", location, transpose, v.data(), + v.size(), 9, 0, v.size(), &data, &length)) return; - ContextGL()->UniformMatrix3fv(location->Location(), v.size() / 9, transpose, - v.data()); + ContextGL()->UniformMatrix3fv(location->Location(), length, transpose, data); } void WebGLRenderingContextBase::uniformMatrix4fv( const WebGLUniformLocation* location, GLboolean transpose, NADCTypedArrayView<GLfloat> v) { + GLfloat* data; + GLuint length; if (isContextLost() || !ValidateUniformMatrixParameters("uniformMatrix4fv", location, transpose, - v, 16, 0, v.Size())) + v, 16, 0, v.Size(), &data, &length)) return; - ContextGL()->UniformMatrix4fv(location->Location(), - base::checked_cast<GLuint>(v.Size()) >> 4, - transpose, v.Data()); + ContextGL()->UniformMatrix4fv(location->Location(), length, transpose, data); } void WebGLRenderingContextBase::uniformMatrix4fv( const WebGLUniformLocation* location, GLboolean transpose, Vector<GLfloat>& v) { - if (isContextLost() || - !ValidateUniformMatrixParameters("uniformMatrix4fv", location, transpose, - v.data(), v.size(), 16, 0, v.size())) + GLfloat* data; + GLuint length; + if (isContextLost() || !ValidateUniformMatrixParameters( + "uniformMatrix4fv", location, transpose, v.data(), + v.size(), 16, 0, v.size(), &data, &length)) return; - ContextGL()->UniformMatrix4fv(location->Location(), v.size() >> 4, transpose, - v.data()); + ContextGL()->UniformMatrix4fv(location->Location(), length, transpose, data); } void WebGLRenderingContextBase::useProgram(WebGLProgram* program) { @@ -8185,107 +8220,6 @@ } } -bool WebGLRenderingContextBase::ValidateUniformParameters( - const char* function_name, - const WebGLUniformLocation* location, - void* v, - GLsizei size, - GLsizei required_min_size, - GLuint src_offset, - GLuint src_length) { - return ValidateUniformMatrixParameters(function_name, location, false, v, - size, required_min_size, src_offset, - src_length); -} - -bool WebGLRenderingContextBase::ValidateUniformMatrixParameters( - const char* function_name, - const WebGLUniformLocation* location, - GLboolean transpose, - const NADCTypedArrayView<GLfloat>& v, - GLsizei required_min_size, - GLuint src_offset, - size_t src_length) { - if (v.IsEmpty()) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, "no array"); - return false; - } - if (!base::CheckedNumeric<GLuint>(src_length).IsValid()) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, - "src_length exceeds the maximum supported length"); - return false; - } - return ValidateUniformMatrixParameters( - function_name, location, transpose, v.Data(), v.Size(), required_min_size, - src_offset, static_cast<GLuint>(src_length)); -} - -bool WebGLRenderingContextBase::ValidateUniformMatrixParameters( - const char* function_name, - const WebGLUniformLocation* location, - GLboolean transpose, - void* v, - size_t size, - GLsizei required_min_size, - GLuint src_offset, - GLuint src_length) { - DCHECK(size >= 0 && required_min_size > 0); - if (!location) - return false; - if (location->Program() != current_program_) { - SynthesizeGLError(GL_INVALID_OPERATION, function_name, - "location is not from current program"); - return false; - } - if (!v) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, "no array"); - return false; - } - if (!base::CheckedNumeric<GLsizei>(size).IsValid()) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, - "array exceeds the maximum supported size"); - return false; - } - if (transpose && !IsWebGL2()) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, "transpose not FALSE"); - return false; - } - if (src_offset >= static_cast<GLuint>(size)) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, "invalid srcOffset"); - return false; - } - GLsizei actual_size = static_cast<GLsizei>(size) - src_offset; - if (src_length > 0) { - if (src_length > static_cast<GLuint>(actual_size)) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, - "invalid srcOffset + srcLength"); - return false; - } - actual_size = src_length; - } - if (actual_size < required_min_size || (actual_size % required_min_size)) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, "invalid size"); - return false; - } - // By design the command buffer has an internal (signed) 32-bit - // limit, so ensure that the amount of data passed down to it - // doesn't exceed what it can handle. Only integer or float typed - // arrays can be passed into the uniform*v or uniformMatrix*v - // functions; each has 4-byte elements. - base::CheckedNumeric<int32_t> total_size(actual_size); - total_size *= 4; - // Add on a fixed constant to account for internal metadata in the - // command buffer. - constexpr int32_t kExtraCommandSize = 1024; - total_size += kExtraCommandSize; - if (!total_size.IsValid()) { - SynthesizeGLError(GL_INVALID_VALUE, function_name, - "size * elementSize, plus a constant, is too large"); - return false; - } - return true; -} - WebGLBuffer* WebGLRenderingContextBase::ValidateBufferDataTarget( const char* function_name, GLenum target) {
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h index 13f85d2..1b2adfd 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h
@@ -50,6 +50,7 @@ #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h" #include "third_party/blink/renderer/modules/webgl/webgl_extension_name.h" #include "third_party/blink/renderer/modules/webgl/webgl_texture.h" +#include "third_party/blink/renderer/modules/webgl/webgl_uniform_location.h" #include "third_party/blink/renderer/modules/webgl/webgl_vertex_array_object_base.h" #include "third_party/blink/renderer/platform/bindings/name_client.h" #include "third_party/blink/renderer/platform/bindings/no_alloc_direct_call_host.h" @@ -112,7 +113,6 @@ class WebGLRenderbuffer; class WebGLShader; class WebGLShaderPrecisionFormat; -class WebGLUniformLocation; class WebGLVertexArrayObjectBase; class XRSystem; @@ -1561,28 +1561,119 @@ virtual bool ValidateCapability(const char* function_name, GLenum); // Helper function to validate input parameters for uniform functions. + template <typename T> bool ValidateUniformParameters(const char* function_name, - const WebGLUniformLocation*, - void*, - GLsizei, - GLsizei mod, + const WebGLUniformLocation* location, + T* v, + GLsizei size, + GLsizei required_min_size, GLuint src_offset, - GLuint src_length); + GLuint src_length, + T** out_data, + GLuint* out_length) { + return ValidateUniformMatrixParameters(function_name, location, false, v, + size, required_min_size, src_offset, + src_length, out_data, out_length); + } + + template <typename T> bool ValidateUniformMatrixParameters(const char* function_name, - const WebGLUniformLocation*, + const WebGLUniformLocation* location, GLboolean transpose, - const NADCTypedArrayView<GLfloat>&, - GLsizei mod, + const NADCTypedArrayView<GLfloat>& v, + GLsizei required_min_size, GLuint src_offset, - size_t src_length); + size_t src_length, + T** out_data, + GLuint* out_length) { + *out_data = nullptr; + *out_length = 0; + if (v.IsEmpty()) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, "no array"); + return false; + } + if (!base::CheckedNumeric<GLuint>(src_length).IsValid()) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, + "src_length exceeds the maximum supported length"); + return false; + } + return ValidateUniformMatrixParameters( + function_name, location, transpose, v.Data(), v.Size(), + required_min_size, src_offset, static_cast<GLuint>(src_length), + out_data, out_length); + } + + template <typename T> bool ValidateUniformMatrixParameters(const char* function_name, - const WebGLUniformLocation*, + const WebGLUniformLocation* location, GLboolean transpose, - void*, + T* v, size_t size, - GLsizei mod, + GLsizei required_min_size, GLuint src_offset, - GLuint src_length); + GLuint src_length, + T** out_data, + GLuint* out_length) { + *out_data = nullptr; + *out_length = 0; + DCHECK(size >= 0 && required_min_size > 0); + if (!location) + return false; + if (location->Program() != current_program_) { + SynthesizeGLError(GL_INVALID_OPERATION, function_name, + "location is not from current program"); + return false; + } + if (!v) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, "no array"); + return false; + } + if (!base::CheckedNumeric<GLsizei>(size).IsValid()) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, + "array exceeds the maximum supported size"); + return false; + } + if (transpose && !IsWebGL2()) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, "transpose not FALSE"); + return false; + } + if (src_offset >= static_cast<GLuint>(size)) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, "invalid srcOffset"); + return false; + } + GLsizei actual_size = static_cast<GLsizei>(size) - src_offset; + if (src_length > 0) { + if (src_length > static_cast<GLuint>(actual_size)) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, + "invalid srcOffset + srcLength"); + return false; + } + actual_size = src_length; + } + if (actual_size < required_min_size || (actual_size % required_min_size)) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, "invalid size"); + return false; + } + // By design the command buffer has an internal (signed) 32-bit + // limit, so ensure that the amount of data passed down to it + // doesn't exceed what it can handle. Only integer or float typed + // arrays can be passed into the uniform*v or uniformMatrix*v + // functions; each has 4-byte elements. + base::CheckedNumeric<int32_t> total_size(actual_size); + total_size *= 4; + // Add on a fixed constant to account for internal metadata in the + // command buffer. + constexpr int32_t kExtraCommandSize = 1024; + total_size += kExtraCommandSize; + if (!total_size.IsValid()) { + SynthesizeGLError(GL_INVALID_VALUE, function_name, + "size * elementSize, plus a constant, is too large"); + return false; + } + *out_data = v + src_offset; + *out_length = actual_size / required_min_size; + return true; + } template <typename T> bool ValidateUniformParameters(const char* function_name, @@ -1590,7 +1681,9 @@ const NADCTypedArrayView<T>& v, GLsizei required_min_size, GLuint src_offset, - size_t src_length) { + size_t src_length, + T** out_data, + GLuint* out_length) { GLuint length; if (!base::CheckedNumeric<GLuint>(src_length).AssignIfValid(&length)) { SynthesizeGLError(GL_INVALID_VALUE, function_name, @@ -1608,7 +1701,7 @@ } return ValidateUniformMatrixParameters( function_name, location, false, v.Data(), array_length, - required_min_size, src_offset, length); + required_min_size, src_offset, length, out_data, out_length); } // Helper function to validate the target for bufferData and
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn index 60d390de..a991873 100644 --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -619,6 +619,7 @@ "fonts/generic_font_family_settings.h", "fonts/glyph_metrics_map.h", "fonts/lock_for_parallel_text_shaping.h", + "fonts/ng_text_fragment_paint_info.cc", "fonts/ng_text_fragment_paint_info.h", "fonts/opentype/font_format_check.cc", "fonts/opentype/font_format_check.h",
diff --git a/third_party/blink/renderer/platform/exported/mediastream/web_media_stream_source.cc b/third_party/blink/renderer/platform/exported/mediastream/web_media_stream_source.cc index c2688ff..5d6fa10 100644 --- a/third_party/blink/renderer/platform/exported/mediastream/web_media_stream_source.cc +++ b/third_party/blink/renderer/platform/exported/mediastream/web_media_stream_source.cc
@@ -36,7 +36,6 @@ #include "base/memory/ptr_util.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" -#include "third_party/blink/renderer/platform/mediastream/media_constraints.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h" #include "third_party/blink/renderer/platform/wtf/vector.h"
diff --git a/third_party/blink/renderer/platform/exported/mediastream/web_media_stream_track.cc b/third_party/blink/renderer/platform/exported/mediastream/web_media_stream_track.cc index 6859e73..79f90c8 100644 --- a/third_party/blink/renderer/platform/exported/mediastream/web_media_stream_track.cc +++ b/third_party/blink/renderer/platform/exported/mediastream/web_media_stream_track.cc
@@ -32,7 +32,6 @@ #include "third_party/blink/public/platform/web_audio_source_provider.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" -#include "third_party/blink/renderer/platform/mediastream/media_constraints.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_component.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h"
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc index 323bfe6d..1ef15a3b 100644 --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -321,6 +321,14 @@ RuntimeEnabledFeatures::SetUserActivationSameOriginVisibilityEnabled(enable); } +void WebRuntimeFeatures::EnableTopicsAPI(bool enable) { + RuntimeEnabledFeatures::SetTopicsAPIEnabled(enable); +} + +bool WebRuntimeFeatures::IsTopicsAPIEnabled() { + return RuntimeEnabledFeatures::TopicsAPIEnabledByRuntimeFlag(); +} + void WebRuntimeFeatures::EnableTouchDragAndContextMenu(bool enable) { RuntimeEnabledFeatures::SetTouchDragAndContextMenuEnabled(enable); }
diff --git a/third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.cc b/third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.cc new file mode 100644 index 0000000..3e40225 --- /dev/null +++ b/third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.cc
@@ -0,0 +1,31 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h" + +namespace blink { + +NGTextFragmentPaintInfo NGTextFragmentPaintInfo::Slice(unsigned from, + unsigned to) const { + DCHECK_LE(this->from, from); + DCHECK_LE(from, to); + DCHECK_LE(to, this->to); + return {text, from, to, shape_result}; +} + +NGTextFragmentPaintInfo NGTextFragmentPaintInfo::WithStartOffset( + unsigned from) const { + DCHECK_LE(this->from, from); + DCHECK_LE(from, this->to); + return {text, from, to, shape_result}; +} + +NGTextFragmentPaintInfo NGTextFragmentPaintInfo::WithEndOffset( + unsigned to) const { + DCHECK_LE(this->from, to); + DCHECK_LE(to, this->to); + return {text, from, to, shape_result}; +} + +} // namespace blink
diff --git a/third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h b/third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h index d42fc22c..820124a 100644 --- a/third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h +++ b/third_party/blink/renderer/platform/fonts/ng_text_fragment_paint_info.h
@@ -14,6 +14,11 @@ // Bridge struct for painting text. Encapsulates info needed by the paint code. struct PLATFORM_EXPORT NGTextFragmentPaintInfo { + NGTextFragmentPaintInfo Slice(unsigned from, unsigned to) const; + NGTextFragmentPaintInfo WithStartOffset(unsigned from) const; + NGTextFragmentPaintInfo WithEndOffset(unsigned to) const; + unsigned Length() const { return to - from; } + // The string to paint. May include surrounding context. const StringView text;
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc index c24bf8e..6ccc4bcf 100644 --- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc +++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
@@ -158,6 +158,7 @@ case AVIF_PIXEL_FORMAT_YUV444: return kYUV444Formats[has_alpha][depth_index]; case AVIF_PIXEL_FORMAT_NONE: + case AVIF_PIXEL_FORMAT_COUNT: NOTREACHED(); return media::PIXEL_FORMAT_UNKNOWN; } @@ -300,6 +301,7 @@ case AVIF_PIXEL_FORMAT_YUV400: return cc::YUVSubsampling::kUnknown; case AVIF_PIXEL_FORMAT_NONE: + case AVIF_PIXEL_FORMAT_COUNT: NOTREACHED(); return cc::YUVSubsampling::kUnknown; }
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_component_impl.cc b/third_party/blink/renderer/platform/mediastream/media_stream_component_impl.cc index 2311036..6044cd3 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_component_impl.cc +++ b/third_party/blink/renderer/platform/mediastream/media_stream_component_impl.cc
@@ -130,6 +130,15 @@ return platform_track_->GetCaptureHandle(); } +void MediaStreamComponentImpl::SetEnabled(bool enabled) { + enabled_ = enabled; + // TODO(https://crbug.com/1302689): Change to a DCHECK(platform_track) once + // the platform_track is always set in the constructor. + if (platform_track_) { + platform_track_->SetEnabled(enabled_); + } +} + void MediaStreamComponentImpl::SetContentHint( WebMediaStreamTrack::ContentHintType hint) { switch (hint) {
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h b/third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h index c0b15767..9697aa80 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h +++ b/third_party/blink/renderer/platform/mediastream/media_stream_component_impl.h
@@ -91,7 +91,7 @@ } bool Remote() const override { return Source()->Remote(); } bool Enabled() const override { return enabled_; } - void SetEnabled(bool enabled) override { enabled_ = enabled; } + void SetEnabled(bool enabled) override; WebMediaStreamTrack::ContentHintType ContentHint() override { return content_hint_; }
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_source.cc b/third_party/blink/renderer/platform/mediastream/media_stream_source.cc index 8a049e8..66c8116ea 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_source.cc +++ b/third_party/blink/renderer/platform/mediastream/media_stream_source.cc
@@ -34,6 +34,7 @@ #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" #include "third_party/blink/renderer/platform/audio/audio_bus.h" #include "third_party/blink/renderer/platform/heap/persistent.h" +#include "third_party/blink/renderer/platform/mediastream/media_constraints.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h" #include "third_party/blink/renderer/platform/mediastream/webaudio_destination_consumer.h" #include "third_party/blink/renderer/platform/wtf/functional.h" @@ -341,7 +342,6 @@ audio_consumer_.reset(); } platform_source_.reset(); - constraints_.Reset(); } } // namespace blink
diff --git a/third_party/blink/renderer/platform/mediastream/media_stream_source.h b/third_party/blink/renderer/platform/mediastream/media_stream_source.h index 3b425c14..2a256888 100644 --- a/third_party/blink/renderer/platform/mediastream/media_stream_source.h +++ b/third_party/blink/renderer/platform/mediastream/media_stream_source.h
@@ -44,7 +44,6 @@ #include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_set.h" #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h" #include "third_party/blink/renderer/platform/heap/prefinalizer.h" -#include "third_party/blink/renderer/platform/mediastream/media_constraints.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_track_platform.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" @@ -195,7 +194,6 @@ std::unique_ptr<ConsumerWrapper> audio_consumer_ GUARDED_BY(audio_consumer_lock_); std::unique_ptr<WebPlatformMediaStreamSource> platform_source_; - MediaConstraints constraints_; Capabilities capabilities_; absl::optional<EchoCancellationMode> echo_cancellation_mode_; absl::optional<bool> auto_gain_control_;
diff --git a/third_party/blink/renderer/platform/mediastream/transferred_media_stream_component.cc b/third_party/blink/renderer/platform/mediastream/transferred_media_stream_component.cc index b2200b4..ad55826 100644 --- a/third_party/blink/renderer/platform/mediastream/transferred_media_stream_component.cc +++ b/third_party/blink/renderer/platform/mediastream/transferred_media_stream_component.cc
@@ -14,6 +14,11 @@ const TransferredValues& data) : data_(data) {} +void TransferredMediaStreamComponent::SetImplementation( + MediaStreamComponent* component) { + component_ = component; +} + MediaStreamComponent* TransferredMediaStreamComponent::Clone( std::unique_ptr<MediaStreamTrackPlatform> cloned_platform_track) const { if (component_) {
diff --git a/third_party/blink/renderer/platform/mediastream/transferred_media_stream_component.h b/third_party/blink/renderer/platform/mediastream/transferred_media_stream_component.h index e15c15d6..902d5bd 100644 --- a/third_party/blink/renderer/platform/mediastream/transferred_media_stream_component.h +++ b/third_party/blink/renderer/platform/mediastream/transferred_media_stream_component.h
@@ -37,6 +37,8 @@ TransferredMediaStreamComponent& operator=( const TransferredMediaStreamComponent&) = delete; + void SetImplementation(MediaStreamComponent* component); + MediaStreamComponent* Clone( std::unique_ptr<MediaStreamTrackPlatform> cloned_platform_track = nullptr) const override;
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc index 352c523..1834721 100644 --- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc +++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.cc
@@ -23,7 +23,6 @@ #include "base/thread_annotations.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h" -#include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "media/base/bind_to_current_loop.h" @@ -1315,7 +1314,6 @@ } void RTCVideoEncoder::Impl::EncodeOneFrame() { - TRACE_EVENT0("media,webrtc", "RTCVideoEncoder::Impl::EncodeOneFrame"); DVLOG(3) << "Impl::EncodeOneFrame()"; DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(input_next_frame_); @@ -1359,8 +1357,6 @@ } if (requires_copy_or_scale) { - TRACE_EVENT0("media,webrtc", - "RTCVideoEncoder::Impl::EncodeOneFrame::CopyOrScale"); const base::TimeDelta timestamp = frame ? frame->timestamp() : base::Milliseconds(next_frame->ntp_time_ms()); @@ -1466,8 +1462,6 @@ } void RTCVideoEncoder::Impl::EncodeOneFrameWithNativeInput() { - TRACE_EVENT0("media,webrtc", - "RTCVideoEncoder::Impl::EncodeOneFrameWithNativeInput"); DVLOG(3) << "Impl::EncodeOneFrameWithNativeInput()"; DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(input_buffers_.IsEmpty() && input_buffers_free_.IsEmpty());
diff --git a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py index 457f7ff..2cb715b 100644 --- a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py +++ b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations.py
@@ -26,9 +26,11 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +import contextlib import json import logging import optparse +import re import traceback from blinkpy.common import exit_codes @@ -50,57 +52,61 @@ _log = logging.getLogger(__name__) +@contextlib.contextmanager +def _capture_parse_error(failures): + try: + yield + except ParseError as error: + messages = str(error).strip().split('\n\n') + # Filename is already included in the individual error messages. + exclude_pattern = re.compile( + 'Parsing file .* produced following errors') + failures.extend(message for message in messages + if not exclude_pattern.fullmatch(message)) + + def lint(host, options): - # lint against three major ports. This is a tradeoff between presubmit - # check speed and the completeness of the check. - full_port_names_to_lint = ["%s-%s" % (cls.port_name, cls.SUPPORTED_VERSIONS[-1]) - for cls in [LinuxPort, MacPort, WinPort]] - ports_to_lint = [ - host.port_factory.get(name) for name in full_port_names_to_lint - ] + # The checks and list of expectation files are generally not + # platform-dependent. Still, we need a port to identify test types and + # manipulate virtual test paths. + port = host.port_factory.get() # Add all extra expectation files to be linted. options.additional_expectations.extend( list(PRODUCTS_TO_EXPECTATION_FILE_PATHS.values()) + [ANDROID_DISABLED_TESTS] + [ - host.filesystem.join(ports_to_lint[0].web_tests_dir(), + host.filesystem.join(port.web_tests_dir(), 'WPTOverrideExpectations'), - host.filesystem.join(ports_to_lint[0].web_tests_dir(), - 'WebGPUExpectations'), + host.filesystem.join(port.web_tests_dir(), 'WebGPUExpectations'), ]) - - # In general, the set of TestExpectation files should be the same for - # all ports. However, the method used to list expectations files is - # in Port, and the TestExpectations constructor takes a Port. - # Perhaps this function could be changed to just use one Port - # (the default Port for this host) and it would work the same. - failures = [] warnings = [] all_system_specifiers = set() - all_build_specifiers = set(ports_to_lint[0].ALL_BUILD_TYPES) + all_build_specifiers = set(port.ALL_BUILD_TYPES) - for port in ports_to_lint: - expectations_dict = port.all_expectations_dict() - for path in port.extra_expectations_files(): - if host.filesystem.exists(path): - expectations_dict[path] = host.filesystem.read_text_file(path) + expectations_dict = port.all_expectations_dict() + for path in port.extra_expectations_files(): + if host.filesystem.exists(path): + expectations_dict[path] = host.filesystem.read_text_file(path) - for path, content in expectations_dict.items(): - # Create a TestExpectations instance and see if an exception is raised - try: - test_expectations = TestExpectations( - port, expectations_dict={path: content}) - # Check each expectation for issues - f, w = _check_expectations(host, port, path, - test_expectations, options) - failures += f - warnings += w - except ParseError as error: - _log.error(str(error)) - failures.append(str(error)) - _log.error('') + # Needed for checking if a test is a slow test. Construction is somewhat + # expensive because it parses the main `TestExpectations` file, so reuse it + # across all files checked. + all_test_expectations = None + with _capture_parse_error(failures): + all_test_expectations = TestExpectations(port) + + for path, content in expectations_dict.items(): + # Create a TestExpectations instance and see if an exception is raised + with _capture_parse_error(failures): + test_expectations = TestExpectations( + port, expectations_dict={path: content}) + # Check each expectation for issues + f, w = _check_expectations(host, port, path, test_expectations, + options, all_test_expectations) + failures += f + warnings += w return failures, warnings @@ -122,7 +128,6 @@ host.filesystem.basename(path), exp.lineno, exp.test) if not port.test_exists(test_name): failures.append(possible_error) - _log.error(possible_error) return failures, warnings @@ -142,9 +147,7 @@ ("%s:%d Expectation '%s' is for a directory, however " "the name in the expectation does not have a glob in the end") % (host.filesystem.basename(path), exp.lineno, test_name)) - _log.error(error) failures.append(error) - _log.error('') return failures @@ -199,33 +202,36 @@ host.filesystem.basename(path), exp.lineno, exp.test, base_test, base_exp.lineno) # TODO(crbug.com/1080691): Change to error once it's fixed. - _log.warning(error) failures.append(error) return failures -def _check_not_slow_and_timeout(host, port, path, expectations): + +def _check_not_slow_and_timeout(host, port, path, expectations, + all_test_expectations): # only do check for web tests, so that we don't impact test coverage # for other test suites if (not path.endswith('TestExpectations') and not path.endswith('SlowTests')): return [] + # Not all default expectation files could be parsed, so this check cannot + # run. + if not all_test_expectations: + return [] rv = [] - test_expectations = TestExpectations(host.port_factory.get()) - for i in range(len(expectations)): - exp = expectations[i] - if (ResultType.Timeout in exp.results and - len(exp.results) == 1 and - (test_expectations.get_expectations(exp.test).is_slow_test or - port.is_slow_wpt_test(exp.test))): + for exp in expectations: + if (ResultType.Timeout in exp.results and len(exp.results) == 1 and + (all_test_expectations.get_expectations(exp.test).is_slow_test + or port.is_slow_wpt_test(exp.test))): error = "{}:{} '{}' is a [ Slow ] and [ Timeout ] test: you must add [ Skip ] (see crrev.com/c/3381301).".format( host.filesystem.basename(path), exp.lineno, exp.test) - _log.warning(error) rv.append(error) + return rv + def _check_never_fix_tests(host, port, path, expectations): if not path.endswith('NeverFixTests'): return [] @@ -253,7 +259,6 @@ and exp.results != set([ResultType.Skip])): error = "{}:{} Only one of [ Skip ] and [ Pass ] is allowed".format( host.filesystem.basename(path), exp.lineno) - _log.error(error) failures.append(error) continue if exp.is_default_pass or exp.results != set([ResultType.Pass]): @@ -266,19 +271,21 @@ "{}:{} {}: The [ Pass ] entry must override a previous [ Skip ]" " entry with a more specific test name or tags".format( host.filesystem.basename(path), exp.lineno, exp.test)) - _log.error(error) failures.append(error) return failures -def _check_expectations(host, port, path, test_expectations, options): +def _check_expectations(host, port, path, test_expectations, options, + all_test_expectations): # Check for original expectation lines (from get_updated_lines) instead of # expectations filtered for the current port (test_expectations). expectations = test_expectations.get_updated_lines(path) failures, warnings = _check_test_existence( host, port, path, expectations) failures.extend(_check_directory_glob(host, port, path, expectations)) - failures.extend(_check_not_slow_and_timeout(host, port, path, expectations)) + failures.extend( + _check_not_slow_and_timeout(host, port, path, expectations, + all_test_expectations)) failures.extend(_check_never_fix_tests(host, port, path, expectations)) failures.extend( _check_stable_webexposed_not_disabled(host, path, expectations)) @@ -302,7 +309,6 @@ "because it protects against API changes.".format( host.filesystem.basename(path), exp.lineno, exp.to_string()) failures.append(error) - _log.error(error) return failures @@ -325,7 +331,6 @@ if normalized_bases[i].startswith(normalized_bases[j]): failure = 'Base "{}" starts with "{}" in the same virtual suite "{}", so is redundant.'.format( normalized_bases[i], normalized_bases[j], prefix) - _log.error(failure) failures.append(failure) # A virtual test suite needs either @@ -338,7 +343,6 @@ if not base: failure = 'Base value in virtual suite "{}" should not be an empty string'.format( prefix) - _log.error(failure) failures.append(failure) continue base_comps = base.split(port.TEST_PATH_SEPARATOR) @@ -348,7 +352,6 @@ elif not fs.isdir(absolute_base): failure = 'Base "{}" in virtual suite "{}" must refer to a real file or directory'.format( base, prefix) - _log.error(failure) failures.append(failure) continue comps = [web_tests_dir] + suite_comps + base_comps + ['README.txt'] @@ -357,11 +360,8 @@ and not fs.exists(path_to_readme_txt)): failure = '"{}" and "{}" are both missing (each virtual suite must have one).'.format( path_to_readme_txt, path_to_readme_md) - _log.error(failure) failures.append(failure) - if failures: - _log.error('') return failures @@ -387,19 +387,15 @@ line = line.split('#')[0].strip() if not line: continue - failure = '' if line in parsed_lines: - failure = '%s:%d duplicate with line %d: %s' % \ - (smoke_tests_file, line_number, parsed_lines[line], line) + failures.append( + '%s:%d duplicate with line %d: %s' % + (smoke_tests_file, line_number, parsed_lines[line], line)) elif not port.test_exists(line): - failure = '%s:%d Test does not exist: %s' % (smoke_tests_file, - line_number, line) - if failure: - _log.error(failure) - failures.append(failure) + failures.append('%s:%d Test does not exist: %s' % + (smoke_tests_file, line_number, line)) parsed_lines[line] = line_number - if failures: - _log.error('') + return failures @@ -418,6 +414,14 @@ with open(options.json, 'w') as f: json.dump(failures, f) + # Dedup identical errors/warnings. + for failure in sorted(set(failures)): + _log.error(failure) + _log.error('') + for warning in sorted(set(warnings)): + _log.warning(warning) + _log.warning('') + if failures: _log.error('Lint failed.') return 1
diff --git a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py index 72dd1b3..e9b8862 100644 --- a/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py +++ b/third_party/blink/tools/blinkpy/web_tests/lint_test_expectations_unittest.py
@@ -27,10 +27,12 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. import optparse +import textwrap import unittest from blinkpy.common import exit_codes from blinkpy.common.host_mock import MockHost +from blinkpy.common.path_finder import PathFinder from blinkpy.common.system.log_testing import LoggingTestCase from blinkpy.web_tests import lint_test_expectations from blinkpy.web_tests.port.android import PRODUCTS_TO_EXPECTATION_FILE_PATHS @@ -102,14 +104,24 @@ class LintTest(LoggingTestCase): - @unittest.skip( - 'crbug.com/986447, re-enable after merging crrev.com/c/1918294') def test_lint_test_files(self): options = optparse.Values({ 'additional_expectations': [], 'platform': 'test-mac-mac10.10' }) host = MockHost() + path_finder = PathFinder(host.filesystem) + host.filesystem.write_text_file( + path_finder.path_from_web_tests('TestExpectations'), + textwrap.dedent("""\ + # results: [ Pass Failure ] + passes/text.html [ Pass ] + failures/flaky/text.html [ Failure Pass ] + """)) + host.filesystem.write_text_file( + path_finder.path_from_web_tests('NeverFixTests'), '') + host.filesystem.write_text_file( + path_finder.path_from_web_tests('VirtualTestSuites'), '[]') host.port_factory.all_port_names = lambda platform=None: [platform] @@ -135,7 +147,7 @@ self.assertTrue(failures) self.assertEqual(warnings, []) - all_logs = ''.join(self.logMessages()) + all_logs = ''.join(failures) self.assertIn('foo', all_logs) self.assertIn('bar', all_logs) @@ -160,7 +172,7 @@ self.assertTrue(failures) self.assertEqual(warnings, []) - all_logs = ''.join(self.logMessages()) + all_logs = ''.join(failures) self.assertIn('LeakExpectations', all_logs) def test_lint_flag_specific_expectation_errors(self): @@ -181,7 +193,7 @@ self.assertTrue(failures) self.assertEqual(warnings, []) - all_logs = ''.join(self.logMessages()) + all_logs = ''.join(failures) self.assertIn('flag-specific', all_logs) self.assertIn('does/not/exist', all_logs) self.assertNotIn('noproblem', all_logs) @@ -210,10 +222,10 @@ self.assertTrue(failures) self.assertEqual(warnings, []) - all_logs = ''.join(self.logMessages()) + all_logs = ''.join(failures) self.assertIn('conflict', all_logs) - def test_lint_exsistence(self): + def test_lint_existence(self): options = optparse.Values({ 'additional_expectations': [], 'platform': 'test', @@ -259,7 +271,7 @@ self.assertTrue(failures) self.assertEqual(warnings, []) - self.assertEquals(len(failures), 18) + self.assertEquals(len(failures), 6) expected_non_existence = [ 'test1/*', 'test2/bar.html', @@ -268,9 +280,8 @@ 'virtual/bar/*', 'virtual/bar/test2/foo.html', ] - for i in range(len(failures)): - self.assertIn('Test does not exist', failures[i]) - self.assertIn(expected_non_existence[i%6], failures[i]) + for pattern, failure in zip(expected_non_existence, failures): + self.assertIn('Test does not exist: %s' % pattern, failure) def test_only_wpt_in_android_override_files(self): options = optparse.Values({ @@ -317,7 +328,7 @@ self.assertTrue(failures) self.assertEqual(warnings, []) - all_logs = ''.join(self.logMessages()) + all_logs = ''.join(failures) self.assertIn('directory', all_logs) def test_virtual_test_redundant_expectation(self): @@ -363,7 +374,7 @@ failures, warnings = lint_test_expectations.lint(host, options) self.assertEqual(failures, []) - self.assertEquals(len(warnings), 3) + self.assertEquals(len(warnings), 1) self.assertRegexpMatches(warnings[0], ':5 .*redundant with.* line 4$') def test_never_fix_tests(self): @@ -401,7 +412,7 @@ failures, warnings = lint_test_expectations.lint(host, options) self.assertEqual(warnings, []) - self.assertEquals(len(failures), 12) + self.assertEquals(len(failures), 4) self.assertRegexpMatches(failures[0], ':7 .*must override') self.assertRegexpMatches(failures[1], ':8 .*must override') self.assertRegexpMatches(failures[2], ':9 Only one of') @@ -443,15 +454,10 @@ host.port_factory.get = lambda platform=None, options=None: port host.port_factory.all_port_names = lambda platform=None: [port.name()] - failures, warnings = lint_test_expectations.lint(host, options) - print(failures) - self.assertEqual(6, len(failures)) - for i in range(3): - self.assertRegexpMatches(failures[0 + 2 * i], - ".*virtual/stable/webexposed/test2/.*") - self.assertRegexpMatches( - failures[1 + 2 * i], - ".*virtual/stable/webexposed/api\\.html.*") + (fail1, fail2), warnings = lint_test_expectations.lint(host, options) + self.assertRegexpMatches(fail1, '.*virtual/stable/webexposed/test2/.*') + self.assertRegexpMatches(fail2, + r'.*virtual/stable/webexposed/api\.html.*') class CheckVirtualSuiteTest(unittest.TestCase): @@ -548,22 +554,38 @@ lint_test_expectations.lint = lambda host, options: ([], ['test warning']) res = lint_test_expectations.main(['--platform', 'test'], self.stderr) - self.assertEqual('Lint succeeded with warnings.', - self.stderr.getvalue().strip()) + self.assertEqual( + textwrap.dedent("""\ + test warning + + Lint succeeded with warnings. + """), self.stderr.getvalue()) self.assertEqual(res, 2) def test_failure(self): lint_test_expectations.lint = lambda host, options: (['test failure'], []) res = lint_test_expectations.main(['--platform', 'test'], self.stderr) - self.assertEqual('Lint failed.', self.stderr.getvalue().strip()) + self.assertEqual( + textwrap.dedent("""\ + test failure + + Lint failed. + """), self.stderr.getvalue()) self.assertEqual(res, 1) - def test_failure_with_warning(self): - lint_test_expectations.lint = lambda host, options: (['test failure'], - ['test warning']) + def test_failures_with_warnings(self): + lint_test_expectations.lint = lambda host, options: ( + ['test failure', 'test failure'], ['test warning', 'test warning']) res = lint_test_expectations.main(['--platform', 'test'], self.stderr) - self.assertEqual('Lint failed.', self.stderr.getvalue().strip()) + self.assertEqual( + textwrap.dedent("""\ + test failure + + test warning + + Lint failed. + """), self.stderr.getvalue()) self.assertEqual(res, 1) def test_interrupt(self):
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index 18cbe03..ba1f4015 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -316,6 +316,7 @@ crbug.com/829028 external/wpt/css/css-break/relpos-inline-hit-testing.html [ Failure ] crbug.com/829028 external/wpt/css/css-break/relpos-inline.html [ Failure ] crbug.com/829028 external/wpt/css/css-break/ruby-003.html [ Failure ] +crbug.com/1078927 external/wpt/css/css-break/table/border-spacing-at-breaks.tentative.html [ Failure ] crbug.com/1078927 external/wpt/css/css-break/table/break-after-table-cell.html [ Failure ] crbug.com/1078927 external/wpt/css/css-break/table/break-after-table-cell-child.html [ Failure ] crbug.com/1078927 external/wpt/css/css-break/table/break-avoidance-001.html [ Failure ] @@ -347,6 +348,7 @@ crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/inline-block.tentative.html [ Failure ] crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/multicol.tentative.html [ Failure ] crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/multiple-row-groups.tentative.html [ Failure ] +crbug.com/1078927 external/wpt/css/css-break/table/repeated-section/repeated-header-border-spacing.tentative.html [ Failure ] crbug.com/1078927 external/wpt/css/css-break/table/specified-block-size-007.html [ Failure ] crbug.com/1078927 external/wpt/css/css-break/table/table-border-005.html [ Failure ] crbug.com/1078927 external/wpt/css/css-break/table/table-border-006.html [ Failure ] @@ -1939,6 +1941,8 @@ crbug.com/1147859 external/wpt/css/css-highlight-api/painting/custom-highlight-painting-text-shadow.tentative.html [ Failure ] crbug.com/1147859 external/wpt/css/css-pseudo/highlight-painting-003.html [ Failure ] crbug.com/1147859 external/wpt/css/css-pseudo/highlight-painting-currentcolor-004.html [ Failure ] +crbug.com/1147859 external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001.html [ Failure ] +crbug.com/1147859 external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002.html [ Failure ] crbug.com/1147859 external/wpt/css/css-pseudo/highlight-painting-soft-hyphens-001.html [ Failure ] crbug.com/1147859 external/wpt/css/css-pseudo/highlight-paired-cascade-004.html [ Failure ] crbug.com/1147859 external/wpt/css/css-pseudo/target-text-001.html [ Failure ]
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests index b48c20b0..f489040 100644 --- a/third_party/blink/web_tests/SlowTests +++ b/third_party/blink/web_tests/SlowTests
@@ -69,9 +69,6 @@ webkit.org/b/90488 [ Debug ] inspector-protocol/* [ Slow ] webkit.org/b/90488 [ Debug ] http/tests/inspector-protocol/* [ Slow ] -# Attribution Reporting tests are slow on Windows -crbug.com/1306848 [ Win ] http/tests/inspector-protocol/attribution-reporting/* [ Slow ] - # DevTools tests cause flakes on slow hardware in Release as well. crbug.com/1063051 [ Release ] http/tests/devtools/* [ Slow ] crbug.com/420008 virtual/threaded/http/tests/devtools/tracing/* [ Slow ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 4423c8f..0c80f0e 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1544,6 +1544,7 @@ # CSS Text failures crbug.com/316409 external/wpt/css/css-text/text-justify/text-justify-and-trailing-spaces-003.html [ Failure ] crbug.com/750990 external/wpt/css/css-text/text-transform/text-transform-upperlower-105.html [ Failure ] +crbug.com/906369 external/wpt/css/css-text/text-transform/text-transform-capitalize-018.html [ Failure Pass ] crbug.com/906369 external/wpt/css/css-text/text-transform/text-transform-capitalize-026.html [ Failure ] crbug.com/906369 external/wpt/css/css-text/text-transform/text-transform-capitalize-028.html [ Failure ] crbug.com/602434 external/wpt/css/css-text/text-transform/text-transform-tailoring-001.html [ Failure ] @@ -1649,7 +1650,6 @@ crbug.com/1078927 fragmentation/fragmented-rowspan.html [ Failure ] crbug.com/1078927 fragmentation/no-repeating-table-header-after-sections.html [ Failure ] crbug.com/1352931 fragmentation/repeating-thead-under-repeating-thead.html [ Failure ] -crbug.com/1335870 fragmentation/single-line-cells-multiple-tables-repeating-thead-with-border-spacing-at-top-of-row.html [ Failure ] crbug.com/1078927 fragmentation/table-overlapping-rowspan.html [ Failure ] ### With LayoutNGPrinting enabled: @@ -1852,9 +1852,13 @@ crbug.com/1035708 external/wpt/css/css-pseudo/target-text-dynamic-002.html [ Failure ] crbug.com/1035708 external/wpt/css/css-pseudo/target-text-dynamic-003.html [ Failure ] crbug.com/1035708 external/wpt/css/css-pseudo/target-text-dynamic-004.html [ Failure ] -crbug.com/1147859 external/wpt/css/css-pseudo/highlight-currentcolor-root-implicit-default-001.html [ Failure ] -crbug.com/1350469 external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001.html [ Failure ] -crbug.com/1350469 external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002.html [ Failure ] +crbug.com/1024156 external/wpt/css/css-pseudo/highlight-currentcolor-root-implicit-default-001.html [ Failure ] +crbug.com/1024156 virtual/css-highlight-inheritance/external/wpt/css/css-pseudo/highlight-currentcolor-root-implicit-default-001.html [ Pass ] +crbug.com/1147859 [ Mac ] external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001.html [ Failure ] +crbug.com/1147859 [ Mac ] external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002.html [ Failure ] +crbug.com/1350475 external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-001.html [ Failure ] +crbug.com/1350475 external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-002.html [ Failure ] +crbug.com/1351020 [ Mac ] external/wpt/compat/webkit-text-fill-color-property-002.html [ Failure ] # CSS highlight painting (HighlightOverlayPainting) crbug.com/1147859 [ Mac ] external/wpt/css/css-highlight-api/painting/custom-highlight-painting-text-decoration-001.html [ Failure ] @@ -3280,7 +3284,6 @@ # ====== New tests from wpt-importer added here ====== crbug.com/626703 [ Mac11 ] external/wpt/fullscreen/api/document-fullscreen-enabled-cross-origin.sub.html [ Timeout ] crbug.com/626703 external/wpt/custom-elements/form-associated/ElementInternals-target-element-is-held-strongly.html [ Timeout ] -crbug.com/626703 [ Mac11-arm64 ] external/wpt/html/browsers/browsing-the-web/remote-context-helper-tests/navigation-same-document.window.html [ Failure Timeout ] crbug.com/626703 external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-construct-xml-parser.xhtml [ Crash ] crbug.com/626703 [ Linux ] external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-reactions-xml-parser.xhtml [ Crash ] crbug.com/626703 [ Mac10.15 ] external/wpt/custom-elements/throw-on-dynamic-markup-insertion-counter-reactions-xml-parser.xhtml [ Crash ] @@ -3294,29 +3297,10 @@ crbug.com/626703 [ Mac11 ] virtual/fenced-frame-mparch/wpt_internal/fenced_frame/background-sync.https.html [ Timeout ] crbug.com/626703 [ Mac11 ] virtual/fenced-frame-shadow-dom/wpt_internal/fenced_frame/background-sync.https.html [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/fullscreen/api/document-fullscreen-enabled-cross-origin.sub.html [ Timeout ] -crbug.com/626703 [ Win10.20h2 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/debug-key.sub.https.html?include=trigger [ Failure Timeout ] -crbug.com/626703 [ Mac11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html?method=img&eligible [ Skip Timeout ] -crbug.com/626703 [ Win11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/trigger-data-sanitization.sub.https.html?source-type=navigation [ Failure Timeout ] crbug.com/626703 [ Mac11-arm64 ] virtual/fenced-frame-mparch/wpt_internal/fenced_frame/key-scrolling.https.html [ Failure Timeout ] -crbug.com/626703 virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/trigger-registration.sub.https.html?method=xhr [ Pass Timeout ] -crbug.com/626703 virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/trigger-registration.sub.https.html?method=xhr&eligible=trigger [ Pass Timeout ] -crbug.com/626703 virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/trigger-registration.sub.https.html?method=fetch&eligible=trigger [ Pass Timeout ] -crbug.com/626703 virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/trigger-registration.sub.https.html?method=img [ Pass Timeout ] -crbug.com/626703 virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/trigger-registration.sub.https.html?method=img&eligible [ Pass Timeout ] -crbug.com/626703 virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/trigger-registration.sub.https.html?method=script [ Pass Timeout ] -crbug.com/626703 virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/trigger-registration.sub.https.html?method=script&eligible [ Pass Timeout ] crbug.com/626703 [ Mac11 ] virtual/document-transition/wpt_internal/document-transition/commit-timeout-crash.html [ Timeout ] -crbug.com/626703 [ Win11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html?method=a [ Skip Timeout ] -crbug.com/626703 [ Win11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html?method=fetch&eligible=event-source [ Skip Timeout ] -crbug.com/626703 [ Win11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html?method=script&eligible [ Skip Timeout ] crbug.com/626703 [ Win10.20h2 ] wpt_internal/geolocation-api/watchPosition-page-visibility.https.html [ Timeout ] -crbug.com/626703 [ Win11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/debug-key-test.sub.https.html?include=source [ Timeout ] -crbug.com/626703 [ Win11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/simple-event-level-report-test.sub.https.html [ Timeout ] -crbug.com/626703 [ Win11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-priority-test.sub.https.html [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/fetch/api/response/response-clone.any.serviceworker.html [ Timeout ] -crbug.com/626703 [ Mac12 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/navigation-source-trigger-data-cardinality-test.sub.https.html [ Timeout ] -crbug.com/626703 [ Mac11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/simple-event-level-report-test.sub.https.html [ Timeout ] -crbug.com/626703 [ Mac11 ] virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/simple-aggregatable-report-test.sub.https.html [ Timeout ] crbug.com/626703 [ Linux ] external/wpt/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.https.any.worker.html [ Crash Failure ] crbug.com/626703 [ Linux ] external/wpt/service-workers/cache-storage/crashtests/cache-response-clone.https.html [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/service-workers/cache-storage/crashtests/cache-response-clone.https.html [ Timeout ] @@ -5094,6 +5078,9 @@ crbug.com/1317067 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-user-click-during-pageshow.html [ Timeout ] crbug.com/1317067 external/wpt/html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-user-click-during-load.html [ Timeout ] +# Flaky on Mac, it seems, both 10.5 and 11 Arm. +crbug.com/1350611 [ Mac ] external/wpt/html/browsers/browsing-the-web/remote-context-helper-tests/navigation-same-document.window.html [ Failure Pass ] + # Tests time out, and also give different results. crbug.com/1299834 external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-screenx.html [ Skip Timeout ] crbug.com/1299834 external/wpt/html/browsers/the-window-object/open-close/open-features-non-integer-innerheight.html [ Skip Timeout ] @@ -5275,6 +5262,9 @@ crbug.com/1107572 [ Mac ] http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidations.js [ Failure Pass ] crbug.com/1107572 [ Mac ] http/tests/devtools/tracing/timeline-style/timeline-style-recalc-with-invalidator-invalidations.js [ Failure Pass ] +# Temporarily disable to land DevTools changes. +crbug.com/1309310 http/tests/devtools/copy-network-request.js [ Failure Pass ] + # Sheriff 2020-07-22 crbug.com/1107722 [ Mac ] virtual/threaded/http/tests/devtools/tracing/timeline-misc/timeline-event-causes.js [ Failure Pass ] crbug.com/1107722 [ Mac ] http/tests/devtools/tracing/timeline-js/timeline-script-id.js [ Failure Pass ] @@ -6808,7 +6798,6 @@ crbug.com/1327764 inspector-protocol/overlay/overlay-persistent-overlays.js [ Failure Pass ] # Sheriff 2022-05-26 -crbug.com/1322004 http/tests/inspector-protocol/attribution-reporting/insecure-subresource.js [ Pass Timeout ] crbug.com/1329596 virtual/gpu-rasterization/images/jpeg-with-non-interleaved-dc-channels.html [ Failure Pass ] # Sheriff 2022-05-30 @@ -6876,9 +6865,6 @@ # Sheriff 2022-06-30 crbug.com/1340781 fullscreen/full-screen-table-section.html [ Skip ] -# Sheriff 2022-07-04 -crbug.com/1340981 virtual/attribution-reporting-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html [ Timeout ] - # Sheriff 2022-07-05 crbug.com/1340763 external/wpt/pointerevents/pointerevent_capture_mouse.html [ Failure Pass ] crbug.com/1341090 external/wpt/webmessaging/with-ports/021.html [ Failure Pass ] @@ -6995,7 +6981,6 @@ crbug.com/1310202 [ Win ] wpt_internal/navigation-api/ordering-and-transition/navigate-cross-document-double.html [ Failure Pass Timeout ] # Sheriff 2022-08-12 -crbug.com/1350611 [ Mac10.15 ] external/wpt/html/browsers/browsing-the-web/remote-context-helper-tests/navigation-same-document.window.html [ Failure Pass ] crbug.com/1352248 virtual/disable-frequency-capping-for-overlay-popup-detection/http/tests/subresource_filter/overlay_popup_ad/overlay-popup-non-ad-followed-by-ad.html [ Failure Pass ] crbug.com/1352543 [ Linux ] http/tests/devtools/elements/styles-3/styles-disable-then-delete.js [ Failure Pass ] crbug.com/1352545 [ Linux ] external/wpt/html/cross-origin-opener-policy/coop-sandbox-redirects-cuts-opener.https.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/Version b/third_party/blink/web_tests/external/Version index 3c30a208..2be48ae 100644 --- a/third_party/blink/web_tests/external/Version +++ b/third_party/blink/web_tests/external/Version
@@ -1 +1 @@ -Version: 6c73ed5ac9660688ccbfe86d28e835a9c886bfca +Version: bcdff15b0e933ac8e785aad2c7a5f6a4ca85fd1f
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json index 4efa25fd..bdb1b66 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -4426,6 +4426,15 @@ ] } }, + "popups": { + "popup-manual-crash.tentative.html": [ + "b3430a451333c4ce8a6b808472f4da83b14b2dd1", + [ + null, + {} + ] + ] + }, "scripting-1": { "the-template-element": { "template-element": { @@ -240093,7 +240102,7 @@ ] ], "popup-appearance.tentative.html": [ - "e118ced76d1ea6dab0f193f4a9d4722d151c378c", + "84421317e5a1c092064df022f38d432fcfea2152", [ null, [ @@ -316864,7 +316873,7 @@ [] ], "popup-appearance-ref.tentative.html": [ - "4133fdb0c97f655b5393c2d6f4566d0f694fbfd5", + "95f43dba293b466fdc6fb86db61050b1dc436b0c", [] ], "popup-backdrop-appearance-ref.tentative.html": [ @@ -391053,7 +391062,7 @@ ] ], "contain-intrinsic-size-028.html": [ - "baab21b2bd53ef28d988b9c813c3bacfe7448f3c", + "ce85df83c116feafa8bde2386fb4207608c1ea9e", [ null, {} @@ -391081,7 +391090,7 @@ ] ], "contain-intrinsic-size-logical-003.html": [ - "59ae8328f2dfaba25094bdf90cf6c0bc1abbdee0", + "9ea282acbfce175c22bb0e025d8048b1cdd6c6e5", [ null, {} @@ -406929,6 +406938,15 @@ {} ] ], + "no-focus-events-at-clicking-editable-content-in-link.html": [ + "dc08636c467fdfa23caedc2cccb1e5f570a90b82", + [ + null, + { + "testdriver": true + } + ] + ], "non-cancelable-when-passive": { "non-passive-mousewheel-event-listener-on-body.html": [ "4c40291aa0a7159f3f5569f8535730fa4b20f52f", @@ -480927,7 +480945,7 @@ ] ], "popup-invoking-attribute.tentative.html": [ - "751a0a8d620050dfb9550e272b1fae309fd457ab", + "10a8cc82beadb75776c620016db7b6f046bd0714", [ null, { @@ -480944,7 +480962,7 @@ ] ], "popup-light-dismiss.tentative.html": [ - "75539b08cfe26b7b2080747147a99d5283e6ce75", + "7f8f32b645e8b4acf94c7b05f724d51b6d7c6365", [ null, {
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/table/border-spacing-at-breaks.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-break/table/border-spacing-at-breaks.tentative.html new file mode 100644 index 0000000..67588f28 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-break/table/border-spacing-at-breaks.tentative.html
@@ -0,0 +1,22 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-break-3/#box-splitting"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:4; gap:0; column-fill:auto; width:100px; height:100px; background:red;"> + <div style="display:table; width:100%; border-spacing:0 10px;"> + <div style="display:table-row;"> + <div style="width:100%; height:85px; background:green;"></div> + </div> + <div style="display:table-row;"> + <div style="width:25px; height:100px; background:green;"> + <div style="margin-left:-25px; width:25px; height:10px; background:green;"></div> + <div style="height:85px;"></div> + <div style="margin-left:-25px; width:25px; height:5px; background:green;"></div> + </div> + </div> + <div style="display:table-row-group;"> + <div style="width:25px; height:200px; background:green;"></div> + </div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/table/final-border-spacing-at-fragmentainer-boundary.html b/third_party/blink/web_tests/external/wpt/css/css-break/table/final-border-spacing-at-fragmentainer-boundary.html new file mode 100644 index 0000000..2e0540d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-break/table/final-border-spacing-at-fragmentainer-boundary.html
@@ -0,0 +1,15 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-break-3/#box-splitting"> +<link rel="match" href="../../reference/ref-filled-green-100px-square.xht"> +<p style="position:relative; z-index:1;">Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="display:flow-root; margin-top:-20px;"> + <div style="position:relative; height:20px; background:white;"></div> + <div style="width:100px; overflow-x:clip;"> + <div style="columns:2; gap:0; column-fill:auto; width:200px; height:100px;"> + <div style="display:table; margin-top:-20px; border-spacing:0 20px; background:red;"> + <div style="width:100px; height:100px; background:green;"></div> + </div> + </div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-break/table/repeated-section/repeated-header-border-spacing.tentative.html b/third_party/blink/web_tests/external/wpt/css/css-break/table/repeated-section/repeated-header-border-spacing.tentative.html new file mode 100644 index 0000000..7471c34 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-break/table/repeated-section/repeated-header-border-spacing.tentative.html
@@ -0,0 +1,19 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-tables-3/#repeated-headers"> +<link rel="match" href="../../../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:4; gap:0; column-fill:auto; width:100px; height:100px; background:red;"> + <div style="position:absolute; width:25px; height:10px; background:green;"></div> + <div style="display:table; width:100%; border-spacing:0 10px;"> + <div style="display:table-header-group; break-inside:avoid;"> + <div style="height:10px;"> + <div style="height:20px; background:green;"></div> + </div> + </div> + <div style="display:table-row-group;"> + <div style="height:310px; background:green;"></div> + </div> + </div> +</div> +
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001-ref.html index 47a0280..93e2002 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001-ref.html
@@ -22,9 +22,6 @@ text-decoration-line: underline; text-decoration-color: currentcolor; } -#textshadow-currentcolor > span { - text-shadow: currentcolor 2px 2px; -} #color-currentcolor-backgroundcolor-currentcolor > span { color: currentcolor; background-color: currentcolor; @@ -43,7 +40,6 @@ <div id="color-currentcolor" class="highlight_reftest"><span>example</span> - color-currentcolor</div> <div id="backgroundcolor-currentcolor" class="highlight_reftest"><span>example</span> - backgroundcolor-currentcolor</div> <div id="textdecorationcolor-currentcolor" class="highlight_reftest"><span>example</span> - textdecorationcolor-currentcolor</div> -<div id="textshadow-currentcolor" class="highlight_reftest"><span>example</span> - textshadow-currentcolor</div> <div id="color-currentcolor-backgroundcolor-currentcolor" class="highlight_reftest"><span>example</span> - color-currentcolor-backgroundcolor-currentcolor</div> <div id="color-currentcolor-backgroundcolor-blue" class="highlight_reftest"><span>example</span> - color-currentcolor-backgroundcolor-blue</div> <div id="color-blue-backgroundcolor-currentcolor" class="highlight_reftest"><span>example</span> - color-blue-backgroundcolor-currentcolor</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001.html index 94e7e9b..8f347f1 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-001.html
@@ -24,9 +24,6 @@ text-decoration-line: underline; text-decoration-color: currentcolor; } -::highlight(textshadow-currentcolor) { - text-shadow: currentcolor 2px 2px; -} ::highlight(color-currentcolor-backgroundcolor-currentcolor) { color: currentcolor; background-color: currentcolor; @@ -45,7 +42,6 @@ <div id="color-currentcolor" class="highlight_reftest">example - color-currentcolor</div> <div id="backgroundcolor-currentcolor" class="highlight_reftest">example - backgroundcolor-currentcolor</div> <div id="textdecorationcolor-currentcolor" class="highlight_reftest">example - textdecorationcolor-currentcolor</div> -<div id="textshadow-currentcolor" class="highlight_reftest">example - textshadow-currentcolor</div> <div id="color-currentcolor-backgroundcolor-currentcolor" class="highlight_reftest">example - color-currentcolor-backgroundcolor-currentcolor</div> <div id="color-currentcolor-backgroundcolor-blue" class="highlight_reftest">example - color-currentcolor-backgroundcolor-blue</div> <div id="color-blue-backgroundcolor-currentcolor" class="highlight_reftest">example - color-blue-backgroundcolor-currentcolor</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002-ref.html index 19556f6..11ca501 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002-ref.html
@@ -26,9 +26,6 @@ text-decoration-line: underline; text-decoration-color: currentcolor; } -#textshadow-currentcolor > span > span { - text-shadow: currentcolor 2px 2px; -} #color-currentcolor-backgroundcolor-currentcolor > span > span { color: currentcolor; background-color: currentcolor; @@ -47,7 +44,6 @@ <div id="color-currentcolor" class="highlight_reftest"><span><span>ex</span>ample</span> - color-currentcolor</div> <div id="backgroundcolor-currentcolor" class="highlight_reftest"><span><span>ex</span>ample</span> - backgroundcolor-currentcolor</div> <div id="textdecorationcolor-currentcolor" class="highlight_reftest"><span><span>ex</span>ample</span> - textdecorationcolor-currentcolor</div> -<div id="textshadow-currentcolor" class="highlight_reftest"><span><span>ex</span>ample</span> - textshadow-currentcolor</div> <div id="color-currentcolor-backgroundcolor-currentcolor" class="highlight_reftest"><span><span>ex</span>ample</span> - color-currentcolor-backgroundcolor-currentcolor</div> <div id="color-currentcolor-backgroundcolor-blue" class="highlight_reftest"><span><span>ex</span>ample</span> - color-currentcolor-backgroundcolor-blue</div> <div id="color-blue-backgroundcolor-currentcolor" class="highlight_reftest"><span><span>ex</span>ample</span> - color-blue-backgroundcolor-currentcolor</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002.html index 7dbc624..bd5d5f4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-properties-002.html
@@ -28,9 +28,6 @@ text-decoration-line: underline; text-decoration-color: currentcolor; } -::highlight(textshadow-currentcolor) { - text-shadow: currentcolor 2px 2px; -} ::highlight(color-currentcolor-backgroundcolor-currentcolor) { color: currentcolor; background-color: currentcolor; @@ -49,7 +46,6 @@ <div id="color-currentcolor" class="highlight_reftest">example - color-currentcolor</div> <div id="backgroundcolor-currentcolor" class="highlight_reftest">example - backgroundcolor-currentcolor</div> <div id="textdecorationcolor-currentcolor" class="highlight_reftest">example - textdecorationcolor-currentcolor</div> -<div id="textshadow-currentcolor" class="highlight_reftest">example - textshadow-currentcolor</div> <div id="color-currentcolor-backgroundcolor-currentcolor" class="highlight_reftest">example - color-currentcolor-backgroundcolor-currentcolor</div> <div id="color-currentcolor-backgroundcolor-blue" class="highlight_reftest">example - color-currentcolor-backgroundcolor-blue</div> <div id="color-blue-backgroundcolor-currentcolor" class="highlight_reftest">example - color-blue-backgroundcolor-currentcolor</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-001-ref.html new file mode 100644 index 0000000..d6ee33c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-001-ref.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html><meta charset="utf-8"> +<link rel="stylesheet" href="support/highlights.css"> +<style> +div { + color: lime; + background: green; + margin: 10px; +} +#textshadow-currentcolor > span { + text-shadow: currentcolor 2px 2px; +} +</style> + +<div id="textshadow-currentcolor" class="highlight_reftest"><span>example</span> - textshadow-currentcolor</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-001.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-001.html new file mode 100644 index 0000000..141556f93 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-001.html
@@ -0,0 +1,33 @@ +<!DOCTYPE html><meta charset="utf-8"> +<title>CSS Pseudo-Elements Test: Custom Highlights currentcolor painting single layer</title> +<meta name="assert" content="Checks the painting for highlight pseudos (using ::highlight), when ‘text-shadow’ contains a shadow with ‘currentColor’ (and ‘color’ is also ‘currentColor’, via implicit defaulting up to the root). The color of the text shadow should equal the originating element ‘color’."> +<link rel="author" title="Delan Azabani" href="mailto:dazabani@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-pseudo/#highlight-text"> +<link rel="match" href="highlight-currentcolor-painting-text-shadow-001-ref.html"> +<link rel="stylesheet" href="support/highlights.css"> +<style> +div { + color: lime; + background: green; + margin: 10px; +} +::highlight(textshadow-currentcolor) { + text-shadow: currentcolor 2px 2px; +} +</style> + +<div id="textshadow-currentcolor" class="highlight_reftest">example - textshadow-currentcolor</div> + +<script> + function range(node, start, end) { + let range = new Range(); + range.setStart(node, start); + range.setEnd(node, end); + return range; + } + + const divs = document.getElementsByTagName("div"); + for (let div of divs) { + CSS.highlights.set(div.id, new Highlight(range(div.firstChild, 0, 7))); + } +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-002-ref.html new file mode 100644 index 0000000..fb2696a5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-002-ref.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html><meta charset="utf-8"> +<link rel="stylesheet" href="support/highlights.css"> +<style> +div { + color: lime; + background: green; + margin: 10px; +} +div > span { + color: yellow; + background: maroon; +} +#textshadow-currentcolor > span > span { + text-shadow: currentcolor 2px 2px; +} +</style> + +<div id="textshadow-currentcolor" class="highlight_reftest"><span><span>ex</span>ample</span> - textshadow-currentcolor</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-002.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-002.html new file mode 100644 index 0000000..77858729 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-currentcolor-painting-text-shadow-002.html
@@ -0,0 +1,43 @@ +<!DOCTYPE html><meta charset="utf-8"> +<title>CSS Pseudo-Elements Test: Custom Highlights currentcolor painting two layers</title> +<meta name="assert" content="Checks the painting for highlight pseudos (using ::highlight), when other properties are set to ‘currentColor’ (and ‘color’ is also ‘currentColor’, via implicit defaulting up to the root), and there is another active highlight below. The color of each property should equal the underlying highlight ‘color’."> +<link rel="author" title="Delan Azabani" href="mailto:dazabani@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-pseudo/#highlight-text"> +<link rel="match" href="highlight-currentcolor-painting-text-shadow-002-ref.html"> +<link rel="stylesheet" href="support/highlights.css"> +<style> +div { + color: lime; + background: green; + margin: 10px; +} +::highlight(below) { + color: yellow; + background: maroon; +} +::highlight(textshadow-currentcolor) { + text-shadow: currentcolor 2px 2px; +} +</style> + +<div id="textshadow-currentcolor" class="highlight_reftest">example - textshadow-currentcolor</div> + +<script> + function range(node, start, end) { + let range = new Range(); + range.setStart(node, start); + range.setEnd(node, end); + return range; + } + + const divs = document.getElementsByTagName("div"); + let ranges = []; + for (let div of divs) { + ranges.push(range(div.firstChild, 0, 7)); + } + CSS.highlights.set("below", new Highlight(...ranges)); + + for (let div of divs) { + CSS.highlights.set(div.id, new Highlight(range(div.firstChild, 0, 2))); + } +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003.html index e4f061f..b09ef52d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003.html
@@ -25,7 +25,7 @@ overlay (originating, ::grammar-error, ::spelling-error, ::target-text, ::selection). */ - * { + *, *::selection { text-decoration-skip-ink: none; text-decoration-skip: none; }
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-028.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-028.html index baab21b..ce85df8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-028.html +++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-028.html
@@ -116,4 +116,24 @@ data-expected-client-width="40" data-expected-client-height="0"></canvas> <canvas class="test cis-both vertical" width="40" height="20" data-expected-client-width="40" data-expected-client-height="50"></canvas> + + <hr> + + <iframe class="test cis-none" + data-expected-client-width="0" data-expected-client-height="150"></iframe> + <iframe class="test cis-height" + data-expected-client-width="0" data-expected-client-height="150"></iframe> + <iframe class="test cis-width" + data-expected-client-width="100" data-expected-client-height="150"></iframe> + <iframe class="test cis-both" + data-expected-client-width="100" data-expected-client-height="150"></iframe> + + <iframe class="test cis-none vertical" + data-expected-client-width="300" data-expected-client-height="0"></iframe> + <iframe class="test cis-height vertical" + data-expected-client-width="300" data-expected-client-height="50"></iframe> + <iframe class="test cis-width vertical" + data-expected-client-width="300" data-expected-client-height="0"></iframe> + <iframe class="test cis-both vertical" + data-expected-client-width="300" data-expected-client-height="50"></iframe> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-logical-003.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-logical-003.html index 59ae832..9ea282a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-logical-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/contain-intrinsic-size/contain-intrinsic-size-logical-003.html
@@ -120,4 +120,24 @@ data-expected-client-height="100" data-expected-client-width="0"></canvas> <canvas class="test cis-both vertical" width="40" height="20" data-expected-client-height="100" data-expected-client-width="50"></canvas> + + <hr> + + <iframe class="test cis-none" + data-expected-client-width="0" data-expected-client-height="0"></iframe> + <iframe class="test cis-block" + data-expected-client-width="0" data-expected-client-height="50"></iframe> + <iframe class="test cis-inline" + data-expected-client-width="100" data-expected-client-height="0"></iframe> + <iframe class="test cis-both" + data-expected-client-width="100" data-expected-client-height="50"></iframe> + + <iframe class="test cis-none vertical" + data-expected-client-height="0" data-expected-client-width="0"></iframe> + <iframe class="test cis-block vertical" + data-expected-client-height="0" data-expected-client-width="50"></iframe> + <iframe class="test cis-inline vertical" + data-expected-client-height="100" data-expected-client-width="0"></iframe> + <iframe class="test cis-both vertical" + data-expected-client-height="100" data-expected-client-width="50"></iframe> </body>
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/no-focus-events-at-clicking-editable-content-in-link.html b/third_party/blink/web_tests/external/wpt/dom/events/no-focus-events-at-clicking-editable-content-in-link.html new file mode 100644 index 0000000..dc08636 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/dom/events/no-focus-events-at-clicking-editable-content-in-link.html
@@ -0,0 +1,80 @@ +<!doctype html> +<html> +<head> +<meta chareset="utf-8"> +<title>Clicking editable content in link shouldn't cause redundant focus related events</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +</head> +<body> +<a href="#"><span contenteditable>Hello</span></a> +<a href="#" contenteditable><span>Hello</span></a> +<script> +function promiseTicks() { + return new Promise(resolve => { + requestAnimationFrame(() => { + requestAnimationFrame(resolve); + }); + }); +} + +async function clickElementAndCollectFocusEvents(x, y, options) { + await promiseTicks(); + let events = []; + for (const eventType of ["focus", "blur", "focusin", "focusout"]) { + document.addEventListener(eventType, event => { + events.push(`type: ${event.type}, target: ${event.target.nodeName}`); + }, {capture: true}); + } + + const waitForClickEvent = new Promise(resolve => { + addEventListener("click", resolve, {capture: true, once: true}); + }); + + await new test_driver + .Actions() + .pointerMove(x, y, options) + .pointerDown() + .pointerUp() + .send(); + + await waitForClickEvent; + await promiseTicks(); + return events; +} + +promise_test(async t => { + document.activeElement?.blur(); + const editingHost = document.querySelector("span[contenteditable]"); + editingHost.blur(); + const focusEvents = + await clickElementAndCollectFocusEvents(5, 5, {origin: editingHost}); + assert_array_equals( + focusEvents, + [ + "type: focus, target: SPAN", + "type: focusin, target: SPAN", + ], + "Click event shouldn't cause redundant focus events"); +}, "Click editable element in link"); + +promise_test(async t => { + document.activeElement?.blur(); + const editingHost = document.querySelector("a[contenteditable]"); + editingHost.blur(); + const focusEvents = + await clickElementAndCollectFocusEvents(5, 5, {origin: editingHost}); + assert_array_equals( + focusEvents, + [ + "type: focus, target: A", + "type: focusin, target: A", + ], + "Click event shouldn't cause redundant focus events"); +}, "Click editable link"); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/threaded/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/threaded/printing/composited-thead-tfoot-repeat-expected.png deleted file mode 100644 index e9f476e2..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/virtual/threaded/printing/composited-thead-tfoot-repeat-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png index 4d35fba..7aa6dfa 100644 --- a/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png +++ b/third_party/blink/web_tests/flag-specific/highdpi/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2-expected.html b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2-expected.html index 7dfa64ef..3967b0e 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2-expected.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2-expected.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2.html b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2.html index 622e4b6..de6a20c4 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-2.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr, tfoot { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3-expected.html b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3-expected.html index 7dfa64ef..3967b0e 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3-expected.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3-expected.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3.html b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3.html index f552b3e..fe0db07c 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-3.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr, tfoot { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4-expected.html b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4-expected.html index 58f2d78c..578f8ef7 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4-expected.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4-expected.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4.html b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4.html index 0a1b3f2d4..2fd1f8ad 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-4.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr, tfoot { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-expected.html b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-expected.html index 02b88e620..ad17940 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-expected.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row-expected.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } .header { font-weight: bold;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html index 103b834..bd51439 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-multiple-tables-caption-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr, tfoot { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2-expected.html b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2-expected.html index dea40dcd..c2f7f00 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2-expected.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2-expected.html
@@ -2,10 +2,12 @@ <style> table { font-size: 16px; + border-spacing: 0; } td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2.html b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2.html index 18ca3f0..d016d00 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-starts-middle-of-page-break-after-avoid-2.html
@@ -2,10 +2,12 @@ <style> table { font-size: 16px; + border-spacing: 0; } td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2-expected.html b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2-expected.html index e35d9ad..6920dc02 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2-expected.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2-expected.html
@@ -3,10 +3,12 @@ table { font-size: 16px; break-inside: avoid; + border-spacing: 0; } td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2.html b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2.html index 2ac06c20..e0d800b 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-starts-middle-of-page-break-after-avoid-2.html
@@ -2,10 +2,12 @@ <style> table { font-size: 16px; + border-spacing: 0; } td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr, tfoot { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row-expected.html b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row-expected.html index 079f5e4..869add04 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row-expected.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row-expected.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html index 5939f34d..72414d9e 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-tfoot-with-border-spacing-at-top-of-row.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr, tfoot { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row-expected.html b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row-expected.html index 976dfbc..73760df2 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row-expected.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row-expected.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row.html b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row.html index 8e05216b..902b6b1 100644 --- a/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row.html +++ b/third_party/blink/web_tests/fragmentation/single-line-cells-repeating-thead-with-border-spacing-at-top-of-row.html
@@ -1,8 +1,12 @@ <!DOCTYPE html> <style> +table { + border-spacing: 0; +} td, th { background-color: #ddd; border: 1px solid black; + padding: 2px; } thead, tr { break-inside: avoid;
diff --git a/third_party/blink/web_tests/platform/generic/virtual/anonymous-iframe-origin-trial/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window-expected.txt b/third_party/blink/web_tests/platform/generic/virtual/anonymous-iframe-origin-trial/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window-expected.txt new file mode 100644 index 0000000..22168ff --- /dev/null +++ b/third_party/blink/web_tests/platform/generic/virtual/anonymous-iframe-origin-trial/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +PASS cookies +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/generic/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window-expected.txt b/third_party/blink/web_tests/platform/generic/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window-expected.txt new file mode 100644 index 0000000..4802bdb --- /dev/null +++ b/third_party/blink/web_tests/platform/generic/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL cookies assert_false: Anonymous iframe is disabled by default expected false got true +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-ltr-expected.png b/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-ltr-expected.png index 660813d..ae477fb0 100644 --- a/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-ltr-expected.png +++ b/third_party/blink/web_tests/platform/linux/fast/block/basic/align-attribute-ltr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/linux/printing/composited-thead-tfoot-repeat-expected.png index e9f476e2..e995381 100644 --- a/third_party/blink/web_tests/platform/linux/printing/composited-thead-tfoot-repeat-expected.png +++ b/third_party/blink/web_tests/platform/linux/printing/composited-thead-tfoot-repeat-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/linux/printing/thead-repeats-at-top-of-each-page-expected.png index d2aa62f..e0b10ae7 100644 --- a/third_party/blink/web_tests/platform/linux/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/linux/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/linux/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 73306d6..322c3032 100644 --- a/third_party/blink/web_tests/platform/linux/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/linux/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png index ba9e1e33..5c77eae 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png new file mode 100644 index 0000000..e0b10ae7 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png new file mode 100644 index 0000000..322c3032 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/composited-thead-tfoot-repeat-expected.png index e9f476e2..e995381 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/composited-thead-tfoot-repeat-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/composited-thead-tfoot-repeat-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png index d2aa62f..e0b10ae7 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 73306d6..322c3032 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/printing/thead-repeats-at-top-of-each-page-expected.png index a63dfa4..82dbf417 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 88ff9c7..ed9fd88 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png index 7f15509..5b8e91d 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 3185a10d..e0c1a47b4 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png index a63dfa4..82dbf417 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 88ff9c7..ed9fd88 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac11/printing/thead-repeats-at-top-of-each-page-expected.png index 900c526f..deb8f57 100644 --- a/third_party/blink/web_tests/platform/mac-mac11/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac11/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac11/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 84b3b729..ccd3202 100644 --- a/third_party/blink/web_tests/platform/mac-mac11/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac11/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png index 4e36002..fa1b217f 100644 --- a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 9f67862..ee3619f2 100644 --- a/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac11/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac-mac11/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png index 900c526f..deb8f57 100644 --- a/third_party/blink/web_tests/platform/mac-mac11/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac11/virtual/threaded/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac-mac11/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 84b3b729..ccd3202 100644 --- a/third_party/blink/web_tests/platform/mac-mac11/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac11/virtual/threaded/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-expected.png b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-expected.png index 07a7b00..701911cc 100644 --- a/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-expected.png +++ b/third_party/blink/web_tests/platform/mac/fast/block/basic/align-attribute-ltr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/mac/printing/composited-thead-tfoot-repeat-expected.png index 797ef0d..38eb5c0 100644 --- a/third_party/blink/web_tests/platform/mac/printing/composited-thead-tfoot-repeat-expected.png +++ b/third_party/blink/web_tests/platform/mac/printing/composited-thead-tfoot-repeat-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac/printing/thead-repeats-at-top-of-each-page-expected.png index 16c25fe..429beef 100644 --- a/third_party/blink/web_tests/platform/mac/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/mac/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index a62089b..abe525e 100644 --- a/third_party/blink/web_tests/platform/mac/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/mac/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png index 4370b62..29bf81d 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png index 0936004..b4e0ce8 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index 7dfd7db..bb3f6e2 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/layout_ng_printing/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-ltr-expected.png b/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-ltr-expected.png index a3f5da5..08a1298c 100644 --- a/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-ltr-expected.png +++ b/third_party/blink/web_tests/platform/win/fast/block/basic/align-attribute-ltr-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/win/printing/composited-thead-tfoot-repeat-expected.png index 03b5322..f340501c 100644 --- a/third_party/blink/web_tests/platform/win/printing/composited-thead-tfoot-repeat-expected.png +++ b/third_party/blink/web_tests/platform/win/printing/composited-thead-tfoot-repeat-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/printing/thead-repeats-at-top-of-each-page-expected.png b/third_party/blink/web_tests/platform/win/printing/thead-repeats-at-top-of-each-page-expected.png index 2e18ed3..9cb3260 100644 --- a/third_party/blink/web_tests/platform/win/printing/thead-repeats-at-top-of-each-page-expected.png +++ b/third_party/blink/web_tests/platform/win/printing/thead-repeats-at-top-of-each-page-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png b/third_party/blink/web_tests/platform/win/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png index b27dbba4..50df96b 100644 --- a/third_party/blink/web_tests/platform/win/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png +++ b/third_party/blink/web_tests/platform/win/printing/thead-repeats-at-top-of-each-page-multiple-tables-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png b/third_party/blink/web_tests/platform/win/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png index f29e25a..eb72d881 100644 --- a/third_party/blink/web_tests/platform/win/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/layout_ng_printing/printing/composited-thead-tfoot-repeat-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/printing/composited-thead-tfoot-repeat.html b/third_party/blink/web_tests/printing/composited-thead-tfoot-repeat.html index fb0c4f57..70a3b61 100644 --- a/third_party/blink/web_tests/printing/composited-thead-tfoot-repeat.html +++ b/third_party/blink/web_tests/printing/composited-thead-tfoot-repeat.html
@@ -4,6 +4,9 @@ font-size: 30px; line-height: 50px; } +table { + border-spacing: 0; +} thead, tfoot { will-change: transform; }
diff --git a/third_party/blink/web_tests/printing/thead-repeats-at-top-of-each-page-multiple-tables.html b/third_party/blink/web_tests/printing/thead-repeats-at-top-of-each-page-multiple-tables.html index e567b69..18a875a 100644 --- a/third_party/blink/web_tests/printing/thead-repeats-at-top-of-each-page-multiple-tables.html +++ b/third_party/blink/web_tests/printing/thead-repeats-at-top-of-each-page-multiple-tables.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <title>crbug.com/631222: When printing, table header groups repeat at the top of each page that the table continues on.</title> <style> - table {font-family: Helvetica, Arial, Verdana; font-size: 24pt + table {font-family: Helvetica, Arial, Verdana; font-size: 24pt; border-spacing: 0; } @media print { thead {display: table-header-group;}
diff --git a/third_party/blink/web_tests/printing/thead-repeats-at-top-of-each-page.html b/third_party/blink/web_tests/printing/thead-repeats-at-top-of-each-page.html index 92c9faa1..32b623f 100644 --- a/third_party/blink/web_tests/printing/thead-repeats-at-top-of-each-page.html +++ b/third_party/blink/web_tests/printing/thead-repeats-at-top-of-each-page.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <title>crbug.com/24826: When printing, table header groups repeat at the top of each page.</title> <style> - table {font-family: Helvetica, Arial, Verdana; font-size: 24pt + table {font-family: Helvetica, Arial, Verdana; font-size: 24pt; border-spacing: 0; } @media print { thead {display: table-header-group;}
diff --git a/third_party/blink/web_tests/svg/text/selection-partial-gradient.html b/third_party/blink/web_tests/svg/text/selection-partial-gradient.html index 8e6d5f0..f0aa1c17 100644 --- a/third_party/blink/web_tests/svg/text/selection-partial-gradient.html +++ b/third_party/blink/web_tests/svg/text/selection-partial-gradient.html
@@ -1,6 +1,7 @@ <!DOCTYPE html> <style> text::selection { + background-color: transparent; fill: url(#green); } </style>
diff --git a/third_party/blink/web_tests/svg/text/selection-styles.xhtml b/third_party/blink/web_tests/svg/text/selection-styles.xhtml index 0653934..bd66273 100644 --- a/third_party/blink/web_tests/svg/text/selection-styles.xhtml +++ b/third_party/blink/web_tests/svg/text/selection-styles.xhtml
@@ -2,6 +2,7 @@ <head> <style> body, svg { margin: 0px; padding: 0px; } + text.test::selection { background-color: transparent; } text#solidFill::selection, #solidFillText { fill: blue; } text#solidStroke::selection, #solidStrokeText { fill: none; stroke:blue; stroke-width: 1px; } text#gradFill::selection, #gradFillText { fill: url(#grad1); } @@ -31,20 +32,20 @@ </defs> <g transform="translate(10,0)"> <!-- select with various style --> - <text y="30px" id="solidFill">Selected text should be filled with solid blue.</text> - <text y="60px" id="solidStroke">Selected text should be stroked with solid blue.</text> - <text y="90px" id="gradFill">Selected text should be filled with gradient.</text> - <text y="120px" id="gradStroke">Selected text should be stroked with gradient.</text> - <text y="150px" id="none">Selected text should get invisible.</text> - <text y="180px" id="compound">Selected text should have both gradient fill, solid stroke and background</text> + <text y="30px" id="solidFill" class="test">Selected text should be filled with solid blue.</text> + <text y="60px" id="solidStroke" class="test">Selected text should be stroked with solid blue.</text> + <text y="90px" id="gradFill" class="test">Selected text should be filled with gradient.</text> + <text y="120px" id="gradStroke" class="test">Selected text should be stroked with gradient.</text> + <text y="150px" id="none" class="test">Selected text should get invisible.</text> + <text y="180px" id="compound" class="test">Selected text should have both gradient fill, solid stroke and background</text> <!-- select various pre-styled texts with a style --> - <text y="240px" id="solidFillText" class="compound">Selected text should have both gradient fill, solid stroke and background</text> - <text y="270px" id="solidStrokeText" class="compound">Selected text should have both gradient fill, solid stroke and background</text> - <text y="300px" id="gradFillText" class="compound">Selected text should have both gradient fill, solid stroke and background</text> - <text y="330px" id="gradStrokeText" class="compound">Selected text should have both gradient fill, solid stroke and background</text> - <text y="360px" id="noneText" class="compound">Selected text should have both gradient fill, solid stroke and background</text> - <text y="390px" id="compoundText" class="compound">Selected text should have both gradient fill, solid stroke and background</text> + <text y="240px" id="solidFillText" class="test compound">Selected text should have both gradient fill, solid stroke and background</text> + <text y="270px" id="solidStrokeText" class="test compound">Selected text should have both gradient fill, solid stroke and background</text> + <text y="300px" id="gradFillText" class="test compound">Selected text should have both gradient fill, solid stroke and background</text> + <text y="330px" id="gradStrokeText" class="test compound">Selected text should have both gradient fill, solid stroke and background</text> + <text y="360px" id="noneText" class="test compound">Selected text should have both gradient fill, solid stroke and background</text> + <text y="390px" id="compoundText" class="test compound">Selected text should have both gradient fill, solid stroke and background</text> </g> </svg> </body> -</html> \ No newline at end of file +</html>
diff --git a/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-borders-001.html b/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-borders-001.html new file mode 100644 index 0000000..312e640 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-borders-001.html
@@ -0,0 +1,135 @@ +<!DOCTYPE html> +<link rel="help" href="https://tabatkins.github.io/specs/css-anchor-position/#anchor-pos"> +<link rel="author" href="mailto:kojii@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<style> +.cb { + position: relative; + border-bottom: 2px solid gray; +} +.not-positioned-cb { + transform: translate(0, 0); /* Make it a containing block. */ +} +.margins { margin: 5px 6px 7px 8px; } +.borders { border-width: 5px 6px 7px 8px; border-style: solid; } +.paddings { padding: 5px 6px 7px 8px; } +.spacer { + height: 9px; +} +.anchor1 { + anchor-name: --a1; + margin-left: 50px; + width: 31px; + height: 31px; + background: blue; +} +.target { + position: absolute; + left: anchor(--a1 left); + right: anchor(--a1 right); + top: anchor(--a1 top); + bottom: anchor(--a1 bottom); + background: orange; +} +</style> +<body onload="checkLayout('.target')"> + <!-- Margins/borders/paddings on the containing block. --> + <div class="cb margins"> + <div class="spacer"></div> + <div class="anchor1"></div> + <div class="target" + data-offset-x=50 data-offset-y=9 + data-expected-width=31 data-expected-height=31></div> + </div> + <div class="cb borders"> + <div class="spacer"></div> + <div class="anchor1"></div> + <div class="target" + data-offset-x=50 data-offset-y=9 + data-expected-width=31 data-expected-height=31></div> + </div> + <div class="cb paddings"> + <div class="spacer"></div> + <div class="anchor1"></div> + <div class="target" + data-offset-x=58 data-offset-y=14 + data-expected-width=31 data-expected-height=31></div> + </div> + + <!-- Margins/borders/paddings on the nested containing block. --> + <div class="cb"> + <div class="spacer"></div> + <div class="not-positioned-cb margins"> + <div class="anchor1"></div> + </div> + <div class="target" + data-offset-x=58 data-offset-y=14 + data-expected-width=31 data-expected-height=31></div> + </div> + <div class="cb"> + <div class="spacer"></div> + <div class="not-positioned-cb borders"> + <div class="anchor1"></div> + </div> + <div class="target" + data-offset-x=58 data-offset-y=14 + data-expected-width=31 data-expected-height=31></div> + </div> + <div class="cb"> + <div class="spacer"></div> + <div class="not-positioned-cb paddings"> + <div class="anchor1"></div> + </div> + <div class="target" + data-offset-x=58 data-offset-y=14 + data-expected-width=31 data-expected-height=31></div> + </div> + + <!-- Margins/borders/paddings on the anchor. --> + <div class="cb"> + <div class="spacer"></div> + <div class="anchor1 margins"></div> + <div class="target" + data-offset-x=50 data-offset-y=14 + data-expected-width=31 data-expected-height=31></div> + </div> + <div class="cb"> + <div class="spacer"></div> + <div class="anchor1 borders"></div> + <div class="target" + data-offset-x=50 data-offset-y=9 + data-expected-width=45 data-expected-height=43></div> + </div> + <div class="cb"> + <div class="spacer"></div> + <div class="anchor1 paddings"></div> + <div class="target" + data-offset-x=50 data-offset-y=9 + data-expected-width=45 data-expected-height=43></div> + </div> + + <!-- Margins/borders/paddings on the querying element. --> + <div class="cb"> + <div class="spacer"></div> + <div class="anchor1"></div> + <div class="target margins" + data-offset-x=58 data-offset-y=14 + data-expected-width=17 data-expected-height=19></div> + </div> + <div class="cb"> + <div class="spacer"></div> + <div class="anchor1"></div> + <div class="target borders" + data-offset-x=50 data-offset-y=9 + data-expected-width=31 data-expected-height=31></div> + </div> + <div class="cb"> + <div class="spacer"></div> + <div class="anchor1"></div> + <div class="target paddings" + data-offset-x=50 data-offset-y=9 + data-expected-width=31 data-expected-height=31></div> + </div> +</body>
diff --git a/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-borders-002.html b/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-borders-002.html new file mode 100644 index 0000000..965aa197b --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-borders-002.html
@@ -0,0 +1,85 @@ +<!DOCTYPE html> +<link rel="help" href="https://tabatkins.github.io/specs/css-anchor-position/#anchor-pos"> +<link rel="author" href="mailto:kojii@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +.cb { + position: relative; + border-bottom: 2px solid gray; +} +.not-positioned-cb { + transform: translate(0, 0); /* Make it a containing block. */ +} +.scroller { overflow: scroll; } +.borders { border-width: 5px 6px 7px 8px; border-style: solid; } +.spacer { + height: 9px; +} +.anchor1 { + anchor-name: --a1; + margin-right: 50px; + width: 31px; + height: 31px; + background: red; +} +.target { + position: absolute; + left: anchor(--a1 left); + right: anchor(--a1 right); + top: anchor(--a1 top); + bottom: anchor(--a1 bottom); + background: lime; +} +</style> +<body> + <div class="spacer"></div> + <div class="cb scroller" dir="rtl"> + <div class="spacer"></div> + <div class="anchor1"></div> + <div class="target"></div> + </div> + <div class="cb scroller borders" dir="rtl"> + <div class="spacer"></div> + <div class="anchor1"></div> + <div class="target"></div> + </div> + <div class="cb"> + <div class="scroller borders" dir="rtl"> + <div class="spacer"></div> + <div class="anchor1"></div> + </div> + <div class="target"></div> + </div> + <div class="cb scroller borders" dir="rtl"> + <div class="not-positioned-cb"> + <div class="spacer"></div> + <div class="anchor1"></div> + </div> + <div class="target"></div> + </div> + <div class="cb scroller borders" dir="rtl"> + <div class="not-positioned-cb scroller borders"> + <div class="spacer"></div> + <div class="anchor1"></div> + </div> + <div class="target"></div> + </div> +<script> +function getBoundingClientRectAsArray(element) { + const rect = element.getBoundingClientRect(); + return [rect.left, rect.top, rect.right, rect.bottom]; +} + +const anchors = document.getElementsByClassName('anchor1'); +const targets = document.getElementsByClassName('target'); +for (let i = 0; i < targets.length; ++i) { + test(() => { + const anchor = anchors[i]; + const target = targets[i]; + assert_array_equals(getBoundingClientRectAsArray(anchor), + getBoundingClientRectAsArray(target)); + }); +} +</script> +</body>
diff --git a/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-fragmentation-001.html b/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-multicol-001.html similarity index 100% rename from third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-fragmentation-001.html rename to third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-multicol-001.html
diff --git a/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-multicol-002.html b/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-multicol-002.html new file mode 100644 index 0000000..ac93cb56 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/css/css-anchor-position/anchor-position-multicol-002.html
@@ -0,0 +1,91 @@ +<!DOCTYPE html> +<link rel="help" href="https://tabatkins.github.io/specs/css-anchor-position/#propdef-anchor-name"> +<link rel="help" href="https://tabatkins.github.io/specs/css-anchor-position/#anchor-pos"> +<link rel="help" href="https://tabatkins.github.io/specs/css-anchor-position/#anchor-size"> +<link rel="author" href="mailto:kojii@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<style> +.cb { + transform: translate(0); /* Make it a containing block. */ + border-width: 5px 6px 7px 8px; + border-style: solid; + padding: 5px 6px 7px 8px; +} +.columns { + column-count: 4; + column-fill: auto; + column-gap: 10px; + column-width: 100px; + width: 320px; + height: 100px; +} +.spacer { + height: 10px; + background: pink; +} +.anchor1 { + anchor-name: --a1; + margin-left: 10px; + width: 50px; + height: 90px; + background: blue; +} +.target { + position: absolute; +} +.target1 { + left: anchor(--a1 left); + top: anchor(--a1 top); + width: anchor-size(--a1 width); + height: anchor-size(--a1 height); + background: lime; + opacity: .3; +} +.target1-rb { + right: anchor(--a1 right); + bottom: anchor(--a1 bottom); + width: 10px; + height: 10px; + background: purple; +} +</style> +<body onload="checkLayout('.target')"> + <p>The green box should be a union of blue boxes, + and the purple box should be at the right-bottom of the green box. + </p> + <div class="spacer" style="height: 10px"></div> + <div class="cb"> + <div class="columns"> + <div class="spacer" style="height: 30px"></div> + <div class="cb"> + <!-- This spacer fills up to the middle of the 2nd column. --> + <div class="spacer" style="height: 130px"></div> + <div class="anchor1"></div> + <div class="spacer" style="height: 100px"></div> + + <!-- The containing block of querying elements is block-fragmented. --> + <div class="target target1" + data-offset-x=18 data-offset-y=65 + data-expected-width=160 data-expected-height=100></div> + <div class="target target1-rb" + data-offset-x=168 data-offset-y=155></div> + </div> + + <!-- The containing block of querying elements is a multi-column. --> + <div class="target target1" + data-offset-x=144 data-offset-y=5 + data-expected-width=160 data-expected-height=100></div> + <div class="target target1-rb" + data-offset-x=294 data-offset-y=95></div> + </div> + + <!-- The containing block of querying elements is not fragmented. --> + <div class="target target1" + data-offset-x=144 data-offset-y=5 + data-expected-width=160 data-expected-height=100></div> + <div class="target target1-rb" + data-offset-x=294 data-offset-y=95></div> + </div> +</body>
diff --git a/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window.js b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window.js new file mode 100644 index 0000000..119daf1 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/origin_trials/anonymous-iframe/cookies.https.window.js
@@ -0,0 +1,74 @@ +// META: script=/common/get-host-info.sub.js +// META: script=/common/utils.js +// META: script=/common/dispatcher/dispatcher.js +// META: script=./resources/common.js + +// A basic test checking partitioned cookies are enabled for anonymous iframe +// origin trial. + +const enableAnonymousIframeOriginTrial = () => { + const meta = document.createElement('meta'); + meta.httpEquiv = 'origin-trial'; + // Generated using: + // ./tools/origin_trials/generate_token.py \ + // --expire-days 5000 \ + // --version 3 \ + // https://www.web-platform.test:8444/ \ + // AnonymousIframe + meta.content = 'AwdHTTICbNy8uTXRBoXUyIR2BqCZTs2wEYHEChRfeyzgFI06chb5ud7lfDB3it3gFS5X9z4H/vxF0M58xWmLfwMAAABgeyJvcmlnaW4iOiAiaHR0cHM6Ly93ZWItcGxhdGZvcm0udGVzdDo4NDQ0IiwgImZlYXR1cmUiOiAiQW5vbnltb3VzSWZyYW1lIiwgImV4cGlyeSI6IDIwODMzMTQ1MTR9'; + document.getElementsByTagName('head')[0].appendChild(meta); +}; + +const executor_path = '/common/dispatcher/executor.html?pipe='; + +// Add a |cookie| on an |origin|. +// Note: cookies visibility depends on the path of the document. Those are set +// from a document from: /common/dispatcher/. So the cookie is visible to every +// path underneath. +const setCookie = async (origin, cookie) => { + const popup_token = token(); + const popup_url = origin + executor_path + `&uuid=${popup_token}`; + const popup = window.open(popup_url); + + const reply_token = token(); + send(popup_token, ` + document.cookie = "${cookie}"; + send("${reply_token}", "done"); + `); + assert_equals(await receive(reply_token), "done"); + popup.close(); +} + +// Returns the cookies accessible from an iframe. +const cookiesFromIframe = (anonymous) => { + const iframe_token = token(); + const iframe = document.createElement('iframe'); + iframe.src = window.origin + executor_path + `&uuid=${iframe_token}`; + iframe.anonymous = anonymous; + document.body.appendChild(iframe); + const reply_token = token(); + send(iframe_token, `send("${reply_token}", document.cookie);`); + return receive(reply_token); +} + +promise_test(async test => { + const parent_cookie = token() + "=" + token(); + await setCookie(window.origin, parent_cookie); + + // Sanity check. Before the OT, anonymous iframe behave like a normal iframe: + assert_false('anonymouslyFramed' in window, + "Anonymous iframe is disabled by default"); + assert_equals(await cookiesFromIframe(/*anonymous=*/true), parent_cookie, + "OT disabled, anonymous iframe shares cookies"); + assert_equals(await cookiesFromIframe(/*anonymous=*/false), parent_cookie, + "OT disabled, normal iframe shares cookies"); + + // Verify the same-origin anonymous iframe do not share cookies: + enableAnonymousIframeOriginTrial(); + assert_true('anonymouslyFramed' in window, + "Anonymous iframe can be enabled using the OT token"); + assert_equals(await cookiesFromIframe(/*anonymous=*/true), "", + "OT enabled, anonymous iframe do not shares cookies"); + assert_equals(await cookiesFromIframe(/*anonymous=*/false), parent_cookie, + "OT enabled, normal iframe shares cookies"); +});
diff --git a/third_party/nearby/README.chromium b/third_party/nearby/README.chromium index e744b04..6b5b4f2 100644 --- a/third_party/nearby/README.chromium +++ b/third_party/nearby/README.chromium
@@ -1,7 +1,7 @@ Name: Nearby Connections Library Short Name: Nearby URL: https://github.com/google/nearby -Version: 123a2cfd1853b28f7cf9986ad10a866d33a1beee +Version: e5c24b8b8ac4b093ccf741d1af8e3ecd896a1eda License: Apache 2.0 License File: LICENSE Security Critical: yes
diff --git a/third_party/wayland-protocols/BUILD.gn b/third_party/wayland-protocols/BUILD.gn index e54c4fa..0b65ea5c 100644 --- a/third_party/wayland-protocols/BUILD.gn +++ b/third_party/wayland-protocols/BUILD.gn
@@ -140,6 +140,10 @@ sources = [ "mesa/wayland-drm/wayland-drm.xml" ] } +wayland_protocol("xdg_activation") { + sources = [ "src/staging/xdg-activation/xdg-activation-v1.xml" ] +} + wayland_protocol("xdg_foreign") { sources = [ "src/unstable/xdg-foreign/xdg-foreign-unstable-v1.xml",
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index b6c9212..c870358 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -140,6 +140,8 @@ e, urllib.error.HTTPError) and e.code == 404: raise e num_retries -= 1 + output_file.seek(0) + output_file.truncate() print('Retrying in %d s ...' % retry_wait_s) sys.stdout.flush() time.sleep(retry_wait_s)
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 3b0fd5ea..189ca872 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -6241,8 +6241,11 @@ <enum name="AutofillAssistantUserDataSource"> <int value="0" label="Unknown"/> - <int value="1" label="Backend"/> - <int value="2" label="Chrome Autofill"/> + <int value="1" label="Always Backend"/> + <int value="2" label="Always Chrome Autofill"/> + <int value="3" label="Fallback Chrome Autofill on Failed Request"/> + <int value="4" label="Use Backend, no fallback required as data exists"/> + <int value="5" label="Fallback Chrome Autofill on Missing Data"/> </enum> <enum name="AutofillAwGSuggestionAvailability"> @@ -25081,6 +25084,20 @@ <int value="3" label="Font Editor opened"/> </enum> +<enum name="DevToolsCSSHintShown"> + <int value="0" label="Other"/> + <int value="1" label="AlignContent"/> + <int value="2" label="FlexItem"/> + <int value="3" label="FlexContainer"/> + <int value="4" label="GridContainer"/> + <int value="5" label="GridItem"/> + <int value="6" label="FlexGrid"/> + <int value="7" label="MulticolFlexGrid"/> + <int value="8" label="Padding"/> + <int value="9" label="Position"/> + <int value="10" label="ZIndex"/> +</enum> + <enum name="DevToolsDeveloperResourceLoaded"> <int value="0" label="LoadThroughPageViaTarget"/> <int value="1" label="LoadThroughPageViaFrame"/> @@ -58072,6 +58089,7 @@ <int value="-733616934" label="ReduceUserAgentMinorVersion:enabled"/> <int value="-733210914" label="AutofillEnableMerchantBoundVirtualCards:disabled"/> + <int value="-731967727" label="OmahaMinSdkVersionAndroid:disabled"/> <int value="-731502579" label="CupsPrintersUiOverhaul:disabled"/> <int value="-731133967" label="AutofillSettingsCardTypeSplit:disabled"/> <int value="-728461030" label="AutofillPruneSuggestions:disabled"/> @@ -58415,6 +58433,7 @@ <int value="-519342886" label="PrintWithPostScriptType42Fonts:disabled"/> <int value="-518104091" label="NewAudioRenderingMixingStrategy:enabled"/> <int value="-518037829" label="ProjectorExcludeTranscript:disabled"/> + <int value="-517913118" label="OmahaMinSdkVersionAndroid:enabled"/> <int value="-516845951" label="enable-embedded-extension-options"/> <int value="-515913489" label="EphemeralTabUsingBottomSheet:disabled"/> <int value="-514076866" label="MovablePartialScreenshot:disabled"/> @@ -63457,6 +63476,8 @@ <int value="10" label="Safety Check"/> <int value="11" label="Save/Update Password Bubble"/> <int value="12" label="Password Generation Prompt in Autofill Dropdown"/> + <int value="13" label="Passwords Google Website"/> + <int value="14" label="Link after successful automated password change"/> </enum> <enum name="ManifestFetchResultType">
diff --git a/tools/metrics/histograms/metadata/accessibility/histograms.xml b/tools/metrics/histograms/metadata/accessibility/histograms.xml index 5417a11..6ae6974 100644 --- a/tools/metrics/histograms/metadata/accessibility/histograms.xml +++ b/tools/metrics/histograms/metadata/accessibility/histograms.xml
@@ -1535,7 +1535,7 @@ </histogram> <histogram name="Accessibility.WebSpeech.Duration" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>evliu@google.com</owner> <owner>chrome-media-ux@google.com</owner> <summary> @@ -1545,7 +1545,7 @@ </histogram> <histogram name="Accessibility.WinAPIs" enum="AccessibilityWinAPIEnum" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>aleventhal@chromium.org</owner> <owner>nektar@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> @@ -1768,7 +1768,7 @@ </histogram> <histogram name="DomDistiller.ReaderMode.EntryPoint" - enum="ReaderModeEntryPoint" expires_after="2022-11-27"> + enum="ReaderModeEntryPoint" expires_after="2023-02-12"> <owner>katie@chromium.org</owner> <owner>gilmanmh@google.com</owner> <owner>chrome-a11y-core@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index a6acc79..a7288f6 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -183,7 +183,7 @@ </histogram> <histogram name="Android.ActivityStop.PercentageOfTabsUsed" units="%" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>gauravjj@google.com</owner> <owner>skavuluru@google.com</owner> <owner>clank-large-form-factors@google.com</owner> @@ -244,7 +244,7 @@ </histogram> <histogram name="Android.AdaptiveToolbarButton.SettingsToggle.Changed" - enum="BooleanEnabled" expires_after="2022-12-04"> + enum="BooleanEnabled" expires_after="2023-02-12"> <owner>shaktisahu@chromium.org</owner> <owner>chrome-segmentation-platform@google.com</owner> <summary> @@ -389,7 +389,7 @@ <histogram name="Android.AutofillAssistant.FeatureModuleInstallation" enum="AutofillAssistantFeatureModuleInstallation" - expires_after="2022-11-20"> + expires_after="2023-02-12"> <owner>mcarlen@chromium.org</owner> <owner>autofill_assistant+watch@google.com</owner> <summary> @@ -440,7 +440,7 @@ <histogram name="Android.AutofillAssistant.PaymentRequest.AutofillChanged" enum="AutofillAssistantPaymentRequestAutofillInfoChanged" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>arbesser@google.com</owner> <owner>mcarlen@chromium.org</owner> <summary> @@ -451,7 +451,7 @@ </histogram> <histogram name="Android.AutofillAssistant.PaymentRequest.FirstNameOnly" - enum="Boolean" expires_after="2022-12-11"> + enum="Boolean" expires_after="2023-02-12"> <owner>arbesser@google.com</owner> <owner>mcarlen@chromium.org</owner> <summary> @@ -478,7 +478,7 @@ </histogram> <histogram name="Android.AutofillAssistant.PaymentRequest.Prefilled" - enum="AutofillAssistantPaymentRequestPrefilled" expires_after="2022-12-11"> + enum="AutofillAssistantPaymentRequestPrefilled" expires_after="2023-02-12"> <owner>arbesser@google.com</owner> <owner>mcarlen@chromium.org</owner> <summary> @@ -657,7 +657,7 @@ </histogram> <histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative.FullBrowser" - enum="BackgroundTaskId" expires_after="2022-12-04"> + enum="BackgroundTaskId" expires_after="2023-02-12"> <owner>mheikal@chromium.org</owner> <owner>hanxi@chromium.org</owner> <owner>hnakashima@chromium.org</owner> @@ -668,7 +668,7 @@ </histogram> <histogram name="Android.BackgroundTaskScheduler.TaskLoadedNative.ReducedMode" - enum="BackgroundTaskId" expires_after="2022-12-11"> + enum="BackgroundTaskId" expires_after="2023-02-12"> <owner>mheikal@chromium.org</owner> <owner>hanxi@chromium.org</owner> <owner>hnakashima@chromium.org</owner> @@ -756,7 +756,7 @@ </histogram> <histogram name="Android.ChildMismatch.AppInfoError2" enum="ChildAppInfoError" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>torne@chromium.org</owner> <owner>boliu@chromium.org</owner> <summary> @@ -783,7 +783,7 @@ </histogram> <histogram name="Android.ChildMismatch.BrowserVersionChanged2" - enum="BooleanChanged" expires_after="2022-12-01"> + enum="BooleanChanged" expires_after="2023-02-12"> <owner>torne@chromium.org</owner> <owner>boliu@chromium.org</owner> <summary> @@ -821,7 +821,7 @@ </histogram> <histogram name="Android.ChildProcessBinding.TotalConnections" - units="connections" expires_after="2022-12-01"> + units="connections" expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -1038,7 +1038,7 @@ </histogram> <histogram name="Android.DarkTheme.ThemeSettingsEntry" - enum="AndroidThemeSettingsEntry" expires_after="2022-12-04"> + enum="AndroidThemeSettingsEntry" expires_after="2023-02-12"> <owner>nemco@google.com</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-app-team@google.com</owner> @@ -1895,7 +1895,7 @@ </histogram> <histogram name="Android.Intent.IntentUriWithSelector" enum="Boolean" - expires_after="2022-11-20"> + expires_after="2023-02-12"> <owner>mthiesse@chromium.org</owner> <owner>yfriedman@chromium.org</owner> <summary> @@ -2487,7 +2487,7 @@ </histogram> <histogram name="Android.Omnibox.InputToNavigationControllerStart" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <summary> @@ -2516,7 +2516,7 @@ </histogram> <histogram name="Android.Omnibox.RefineActionUsage" enum="RefineActionUsage" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>ender@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -3153,7 +3153,7 @@ </histogram> <histogram name="Android.RequestDesktopSite.Changed" enum="SiteLayout" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>shuyng@google.com</owner> <owner>twellington@chromium.org</owner> <summary> @@ -3352,7 +3352,7 @@ </histogram> <histogram name="Android.Survey.DownloadRequested2" enum="BooleanRequested" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>twellington@chromium.org</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-app-team@google.com</owner> @@ -3364,7 +3364,7 @@ </histogram> <histogram name="Android.Survey.DownloadResponseCode2" - enum="SurveyDownloadResponseCodes2" expires_after="2022-12-04"> + enum="SurveyDownloadResponseCodes2" expires_after="2023-02-12"> <owner>skym@chromium.org</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-app-team@google.com</owner> @@ -3377,7 +3377,7 @@ </histogram> <histogram name="Android.Survey.InfoBarClosingState" - enum="InfoBarClosingStates" expires_after="2022-12-04"> + enum="InfoBarClosingStates" expires_after="2023-02-12"> <owner>twellington@chromium.org</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-app-team@google.com</owner> @@ -3474,7 +3474,7 @@ </histogram> <histogram name="Android.TabStrip.TimeToSwitchTab" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>gauravjj@google.com</owner> <owner>twellington@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> @@ -4267,7 +4267,7 @@ </histogram> <histogram name="Android.WebView.NonEmbeddedMetrics.HistogramRecordAge" - units="minutes" expires_after="2022-12-11"> + units="minutes" expires_after="2023-02-12"> <owner>hazems@chromium.org</owner> <owner>ntfschr@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> @@ -4281,7 +4281,7 @@ </histogram> <histogram name="Android.WebView.NonEmbeddedMetrics.NumHistograms" - units="histograms" expires_after="2022-12-11"> + units="histograms" expires_after="2023-02-12"> <owner>ntfschr@chromium.org</owner> <owner>hazems@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> @@ -4294,7 +4294,7 @@ <histogram name="Android.WebView.NonEmbeddedMetrics.ParsingLogResult" enum="AndroidWebViewNonEmbeddedMetricsParsingLogResult" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>hazems@chromium.org</owner> <owner>ntfschr@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> @@ -4320,7 +4320,7 @@ </histogram> <histogram name="Android.WebView.NonEmbeddedMetrics.TransmissionResult" - enum="AndroidWebViewDevUiMetricsTransmission" expires_after="2022-12-11"> + enum="AndroidWebViewDevUiMetricsTransmission" expires_after="2023-02-12"> <owner>ntfschr@chromium.org</owner> <owner>hazems@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> @@ -4529,7 +4529,7 @@ </histogram> <histogram name="Android.WebView.SafeMode.SafeModeEnabled" - enum="BooleanEnabled" expires_after="2022-12-11"> + enum="BooleanEnabled" expires_after="2023-02-12"> <owner>ntfschr@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml index c60ab00..ece760d 100644 --- a/tools/metrics/histograms/metadata/apps/histograms.xml +++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -220,7 +220,7 @@ </histogram> <histogram name="Apps.AppLaunchPerAppType" enum="AppType" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary> @@ -230,7 +230,7 @@ </histogram> <histogram name="Apps.AppLaunchPerAppTypeV2" enum="AppTypeV2" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary> @@ -240,7 +240,7 @@ </histogram> <histogram name="Apps.AppLaunchSource" enum="LaunchSource" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary>Records an app launch grouped by launch source.</summary> @@ -433,7 +433,7 @@ </histogram> <histogram name="Apps.AppList.DriveSearchProvider.Latency" units="ms" - expires_after="2022-11-30"> + expires_after="2023-02-12"> <owner>wrong@chromium.org</owner> <owner>tby@chromium.org</owner> <owner>thanhdng@chromium.org</owner> @@ -455,7 +455,7 @@ </histogram> <histogram name="Apps.AppList.DriveSearchProvider.Status" - enum="DriveSearchProviderStatus" expires_after="2022-11-30"> + enum="DriveSearchProviderStatus" expires_after="2023-02-12"> <owner>wrong@chromium.org</owner> <owner>tby@chromium.org</owner> <owner>thanhdng@chromium.org</owner> @@ -466,7 +466,7 @@ </histogram> <histogram name="Apps.AppList.DriveZeroStateProvider.HypotheticalQuery" - enum="DriveZeroStateProviderThrottleInterval" expires_after="2022-12-04"> + enum="DriveZeroStateProviderThrottleInterval" expires_after="2023-02-12"> <owner>tby@chromium.org</owner> <owner>thanhdng@chromium.org</owner> <owner>wrong@chromium.org</owner> @@ -478,7 +478,7 @@ </histogram> <histogram name="Apps.AppList.DriveZeroStateProvider.Latency" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>tby@chromium.org</owner> <owner>thanhdng@chromium.org</owner> <owner>wrong@chromium.org</owner> @@ -500,7 +500,7 @@ </histogram> <histogram name="Apps.AppList.DriveZeroStateProvider.Status" - enum="DriveZeroStateProviderStatus" expires_after="2022-12-11"> + enum="DriveZeroStateProviderStatus" expires_after="2023-02-12"> <owner>tby@chromium.org</owner> <owner>thanhdng@chromium.org</owner> <owner>wrong@chromium.org</owner> @@ -547,7 +547,7 @@ </histogram> <histogram name="Apps.AppList.FileSearchProvider.Relevance" units="score" - expires_after="2022-11-30"> + expires_after="2023-02-12"> <owner>wrong@chromium.org</owner> <owner>tby@chromium.org</owner> <owner>thanhdng@chromium.org</owner> @@ -675,7 +675,7 @@ </histogram> <histogram name="Apps.AppList.NumberOfApps" units="count" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>tbarzic@chromium.org</owner> <owner>mmourgos@chromium.org</owner> <owner>gzadina@google.com</owner> @@ -997,7 +997,7 @@ </histogram> <histogram name="Apps.AppList.SortDiscoveryDurationAfterEducationNudge" - units="ms" expires_after="2023-01-22"> + units="ms" expires_after="2023-02-12"> <owner>andrewxu@chromium.org</owner> <owner>tbarzic@chromium.org</owner> <summary> @@ -1528,7 +1528,7 @@ </histogram> <histogram name="Apps.AppListPageOpened" enum="AppListPage" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>tbarzic@chromium.org</owner> <owner>src/ash/app_list/OWNERS</owner> <summary> @@ -1627,7 +1627,7 @@ </histogram> <histogram name="Apps.AppListSearchAutocomplete" enum="SearchBoxTextMatch" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yulunwu@chromium.org</owner> <owner>tbarzic@chromium.org</owner> <summary> @@ -1877,7 +1877,7 @@ </histogram> <histogram name="Apps.ArcGhostWindowLaunch" enum="Boolean" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>sstan@chromium.org</owner> <summary> @@ -1977,7 +1977,7 @@ </histogram> <histogram name="Apps.CreateShortcuts.Linux.Result" - enum="WebAppCreateShortcutLinuxResult" expires_after="2022-12-11"> + enum="WebAppCreateShortcutLinuxResult" expires_after="2023-02-12"> <owner>phillis@chromium.org</owner> <owner>cmumford@chromium.org</owner> <summary> @@ -2140,7 +2140,7 @@ </histogram> <histogram name="Apps.IconLoadingMethod" enum="IconLoadingMethod" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary>Records the app icon loading method when loading app icons.</summary> @@ -2580,7 +2580,7 @@ </histogram> <histogram name="Apps.PaginationTransition.AnimationSmoothness" units="%" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" --> <owner>tbarzic@chromium.org</owner> @@ -2601,7 +2601,7 @@ <histogram base="true" name="Apps.PaginationTransition.DragScroll.PresentationTime" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" --> @@ -2663,7 +2663,7 @@ </histogram> <histogram name="Apps.RestoreArcWindowCount" units="units" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>sstan@chromium.org</owner> <summary> @@ -2684,7 +2684,7 @@ </histogram> <histogram name="Apps.RestoredAppLaunch" enum="AppType" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>sammiequon@chromium.org</owner> <summary> @@ -2694,7 +2694,7 @@ </histogram> <histogram name="Apps.RestoreForCrashNotification" enum="RestoreAction" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>sammiequon@chromium.org</owner> <summary> @@ -2704,7 +2704,7 @@ </histogram> <histogram name="Apps.RestoreInitSetting" enum="RestoreSetting" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>sammiequon@chromium.org</owner> <summary> @@ -2714,7 +2714,7 @@ </histogram> <histogram name="Apps.RestoreNoGhostWindowReason" enum="ArcNoWindowReason" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>sstan@chromium.org</owner> <summary> @@ -2723,7 +2723,7 @@ </histogram> <histogram name="Apps.RestoreNotification" enum="RestoreAction" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>sammiequon@chromium.org</owner> <summary> @@ -2733,7 +2733,7 @@ </histogram> <histogram name="Apps.RestoreSetting" enum="RestoreSetting" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>nancylingwang@chromium.org</owner> <owner>sammiequon@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/arc/histograms.xml b/tools/metrics/histograms/metadata/arc/histograms.xml index 86af912..55a74cd 100644 --- a/tools/metrics/histograms/metadata/arc/histograms.xml +++ b/tools/metrics/histograms/metadata/arc/histograms.xml
@@ -384,7 +384,7 @@ </histogram> <histogram name="Arc.AppCount.HasInstalledOrUnknownApp" enum="Boolean" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>yusukes@google.com</owner> <owner>arcvm-eng@google.com</owner> <summary> @@ -569,7 +569,7 @@ </histogram> <histogram name="Arc.Auth.MainAccountHashMigration.Status" - enum="ArcMainAccountHashMigrationStatus" expires_after="2022-12-04"> + enum="ArcMainAccountHashMigrationStatus" expires_after="2023-02-12"> <owner>vsomani@google.com</owner> <owner>arc-core@google.com</owner> <summary> @@ -801,7 +801,7 @@ </histogram> <histogram name="Arc.CompatMode.InitialResizeLockState" - enum="ArcResizeLockState" expires_after="2022-12-04"> + enum="ArcResizeLockState" expires_after="2023-02-12"> <owner>toshikikikuchi@google.com</owner> <owner>takise@google.com</owner> <summary> @@ -811,7 +811,7 @@ </histogram> <histogram name="Arc.CompatMode.RightClickConversion" - enum="ArcRightClickConversionResult" expires_after="2022-12-04"> + enum="ArcRightClickConversionResult" expires_after="2023-02-12"> <owner>yhanada@google.com</owner> <owner>arc-framework@google.com</owner> <summary> @@ -1119,7 +1119,7 @@ </histogram> <histogram name="Arc.Fixup.Entire.Failures" units="units" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>risan@google.com</owner> <owner>arc-storage@google.com</owner> <summary> @@ -1215,7 +1215,7 @@ </summary> </histogram> -<histogram name="Arc.ImeCount" units="units" expires_after="2022-12-04"> +<histogram name="Arc.ImeCount" units="units" expires_after="2023-02-12"> <owner>yhanada@chromium.org</owner> <owner>arc-framework@chromium.org</owner> <summary> @@ -1507,7 +1507,7 @@ </histogram> <histogram name="Arc.OptInAction" enum="ArcOptInAction" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mhasank@google.com</owner> <owner>arc-core@google.com</owner> <summary> @@ -1517,7 +1517,7 @@ </histogram> <histogram name="Arc.OptInCancel" enum="ArcOptInCancel" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mhasank@google.com</owner> <owner>arc-core@google.com</owner> <summary>Arc OptIn cancelation reason.</summary> @@ -1624,7 +1624,7 @@ </histogram> <histogram name="Arc.PlayStoreLaunchWithinAWeek" enum="BooleanUsage" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>rsorokin@chromium.org</owner> <owner>cros-oac@google.com</owner> <summary> @@ -2109,7 +2109,7 @@ </histogram> <histogram name="Arc.Wayland.LateTiming.Duration" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>alanding@google.com</owner> <owner>arc-performance@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml index 09b82322..2706f7b 100644 --- a/tools/metrics/histograms/metadata/ash/histograms.xml +++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -269,7 +269,7 @@ </histogram> <histogram name="Ash.AmbientMode.PhotoSource" enum="AmbientModePhotoSource" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>cowmoo@google.com</owner> <owner>xiaohuic@chromium.org</owner> <summary> @@ -368,7 +368,7 @@ </histogram> <histogram name="Ash.BackGesture.EndScenarioType" - enum="BackGestureEndScenarioType" expires_after="2022-12-04"> + enum="BackGestureEndScenarioType" expires_after="2023-02-12"> <owner>minch@chromium.org</owner> <owner>tclaiborne@chromium.org</owner> <summary> @@ -378,7 +378,7 @@ </histogram> <histogram name="Ash.BackGesture.StartScenarioType" - enum="BackGestureStartScenarioType" expires_after="2022-12-04"> + enum="BackGestureStartScenarioType" expires_after="2023-02-12"> <owner>minch@chromium.org</owner> <owner>tclaiborne@chromium.org</owner> <summary> @@ -388,7 +388,7 @@ </histogram> <histogram name="Ash.BackGesture.UnderneathWindowType" - enum="BackGestureUnderneathWindowType" expires_after="2022-12-04"> + enum="BackGestureUnderneathWindowType" expires_after="2023-02-12"> <owner>minch@chromium.org</owner> <owner>tclaiborne@chromium.org</owner> <summary> @@ -889,7 +889,7 @@ </histogram> <histogram name="Ash.Calendar.TimeToSeeTodaysEventDots" units="ms" - expires_after="2022-11-10"> + expires_after="2023-02-12"> <owner>newcomer@google.com</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -1532,7 +1532,7 @@ </histogram> <histogram name="Ash.ClipboardHistory.ReorderType" - enum="ClipboardHistoryReorderType" expires_after="2022-10-25"> + enum="ClipboardHistoryReorderType" expires_after="2023-02-12"> <owner>ckincaid@chromium.org</owner> <owner>multipaste@google.com</owner> <summary> @@ -1751,7 +1751,7 @@ </histogram> <histogram name="Ash.Desks.DesksCount3" units="units" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>afakhry@chromium.org</owner> <owner>tclaiborne@chromium.org</owner> <summary> @@ -1773,7 +1773,7 @@ </histogram> <histogram name="Ash.Desks.MoveWindowFromActiveDesk" - enum="DesksMoveWindowFromActiveDeskSource" expires_after="2022-12-04"> + enum="DesksMoveWindowFromActiveDeskSource" expires_after="2023-02-12"> <owner>afakhry@chromium.org</owner> <owner>tclaiborne@chromium.org</owner> <summary> @@ -1790,7 +1790,7 @@ </histogram> <histogram name="Ash.Desks.NewDesk2" enum="DesksCreationRemovalSource" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>afakhry@chromium.org</owner> <owner>tclaiborne@chromium.org</owner> <summary> @@ -1966,7 +1966,7 @@ </histogram> <histogram name="Ash.Desks.WeeklyActiveDesks" units="active desks" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>afakhry@chromium.org</owner> <owner>janetmac@chromium.org</owner> <summary> @@ -2580,7 +2580,7 @@ </histogram> <histogram name="Ash.Lacros.Launch.ModeAndSource" - enum="LacrosLaunchModeAndSource" expires_after="2022-12-01"> + enum="LacrosLaunchModeAndSource" expires_after="2023-02-12"> <owner>skuhne@chromium.org</owner> <owner>lacros-team@google.com</owner> <summary> @@ -2594,7 +2594,7 @@ </histogram> <histogram name="Ash.Login.Lock.AuthMethod.Switched" - enum="AuthMethodSwitchType" expires_after="2022-12-04"> + enum="AuthMethodSwitchType" expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2603,7 +2603,7 @@ </histogram> <histogram name="Ash.Login.Lock.AuthMethod.Used.ClamShellMode" - enum="AuthMethod" expires_after="2022-12-04"> + enum="AuthMethod" expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2614,7 +2614,7 @@ </histogram> <histogram name="Ash.Login.Lock.AuthMethod.Used.TabletMode" enum="AuthMethod" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2624,7 +2624,7 @@ </histogram> <histogram name="Ash.Login.Lock.NbPasswordAttempts.UntilFailure" - units="attempts" expires_after="2022-12-04"> + units="attempts" expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2635,7 +2635,7 @@ </histogram> <histogram name="Ash.Login.Lock.NbPasswordAttempts.UntilSuccess" - units="attempts" expires_after="2022-12-04"> + units="attempts" expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2645,7 +2645,7 @@ </histogram> <histogram name="Ash.Login.Lock.UserClicks" enum="LockScreenUserClickTarget" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2664,7 +2664,7 @@ </histogram> <histogram name="Ash.Login.Login.AuthMethod.Used.ClamShellMode" - enum="AuthMethod" expires_after="2022-12-04"> + enum="AuthMethod" expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2685,7 +2685,7 @@ </histogram> <histogram name="Ash.Login.Login.MigrationBanner" enum="BooleanShown" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2695,7 +2695,7 @@ </histogram> <histogram name="Ash.Login.Login.UserClicks" enum="LoginScreenUserClickTarget" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -2705,7 +2705,7 @@ </histogram> <histogram name="Ash.Login.OOBE.UserClicks" enum="OobeUserClickTarget" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>raleksandrov@google.com</owner> <owner>cros-lurs@google.com</owner> @@ -2838,7 +2838,7 @@ </histogram> <histogram name="Ash.MessageCenter.Scroll.PresentationTime.MaxLatency" - units="ms" expires_after="2022-12-04"> + units="ms" expires_after="2023-02-12"> <owner>leandre@chromium.org</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -2953,7 +2953,7 @@ </histogram> <histogram name="Ash.Notification.ClearAllStacked.AnimationSmoothness" - units="%" expires_after="2022-12-04"> + units="%" expires_after="2023-02-12"> <owner>leandre@chromium.org</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -3361,7 +3361,7 @@ </summary> </histogram> -<histogram name="Ash.Overview.Items" units="units" expires_after="2022-12-11"> +<histogram name="Ash.Overview.Items" units="units" expires_after="2023-02-12"> <owner>nupurjain@chromium.org</owner> <owner>sammiequon@chromium.org</owner> <summary> @@ -3447,7 +3447,7 @@ </histogram> <histogram name="Ash.Overview.TimeBetweenUse" units="ms" - expires_after="2022-10-08"> + expires_after="2023-02-12"> <owner>nupurjain@chromium.org</owner> <owner>sammiequon@chromium.org</owner> <summary> @@ -4214,7 +4214,7 @@ </histogram> <histogram name="Ash.SplitView.EntryPoint.DeviceOrientation" - enum="DeviceOrientation" expires_after="2022-12-04"> + enum="DeviceOrientation" expires_after="2023-02-12"> <owner>xdai@chromium.org</owner> <owner>zxdan@chromium.org</owner> <owner>nupurjain@chromium.org</owner> @@ -4227,7 +4227,7 @@ </histogram> <histogram name="Ash.SplitView.EntryPoint.DeviceUIMode" enum="DeviceMode" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>xdai@chromium.org</owner> <owner>zxdan@chromium.org</owner> <owner>nupurjain@chromium.org</owner> @@ -4612,7 +4612,7 @@ </histogram> <histogram name="Ash.TouchView.LidAngle" units="degrees" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>oshima@chromium.org</owner> <summary> Chrome OS only. The computed angle between the lid and the keyboard panel. @@ -4886,7 +4886,7 @@ </histogram> <histogram name="Ash.Wallpaper.Image" enum="WallpaperImage" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jasontt@chromium.org</owner> <owner>assistive-eng@google.com</owner> <summary> @@ -4906,7 +4906,7 @@ </histogram> <histogram name="Ash.Wallpaper.Source2" enum="WallpaperType" - expires_after="2022-12-03"> + expires_after="2023-02-12"> <owner>thuongphan@chromium.org</owner> <owner>assistive-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/assistant/histograms.xml b/tools/metrics/histograms/metadata/assistant/histograms.xml index b2d1191a4..32fcb65 100644 --- a/tools/metrics/histograms/metadata/assistant/histograms.xml +++ b/tools/metrics/histograms/metadata/assistant/histograms.xml
@@ -75,7 +75,7 @@ </histogram> <histogram name="Assistant.EntryPoint" enum="AssistantEntryPoint" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xiaohuic@chromium.org</owner> <owner>croissant-eng@chromium.org</owner> <summary> @@ -85,7 +85,7 @@ </histogram> <histogram name="Assistant.ExitPoint" enum="AssistantExitPoint" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xiaohuic@chromium.org</owner> <owner>croissant-eng@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index c988eb3f..e891815f 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -281,7 +281,7 @@ </histogram> <histogram name="Autofill.Address.IsEnabled.PageLoad" enum="BooleanEnabled" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>jsaul@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -291,7 +291,7 @@ </histogram> <histogram name="Autofill.Address.IsEnabled.Startup" enum="BooleanEnabled" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>jsaul@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -311,7 +311,7 @@ </histogram> <histogram name="Autofill.AddressesSuppressedForDisuse" units="addresses" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -325,7 +325,7 @@ <histogram name="Autofill.AddressProfileImportCountrySpecificFieldRequirements" enum="AutofillAddressProfileImportCountrySpecificFieldRequirement" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>koerber@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -336,7 +336,7 @@ </histogram> <histogram name="Autofill.AddressProfileImportRequirements" - enum="AutofillAddressProfileImportRequirement" expires_after="2022-12-12"> + enum="AutofillAddressProfileImportRequirement" expires_after="2023-02-12"> <owner>koerber@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -346,7 +346,7 @@ </histogram> <histogram name="Autofill.AddressProfileImportStatus" - enum="AutofillAddressProfileImportStatus" expires_after="2022-12-12"> + enum="AutofillAddressProfileImportStatus" expires_after="2023-02-12"> <owner>koerber@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -355,7 +355,7 @@ </histogram> <histogram name="Autofill.AddressSuggestionsCount" units="units" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -777,7 +777,7 @@ </histogram> <histogram name="Autofill.CardholderNameFixFlowPrompt.Events" - enum="AutofillCardholderNameFixFlowPromptEvent" expires_after="2022-09-30"> + enum="AutofillCardholderNameFixFlowPromptEvent" expires_after="2023-02-12"> <owner>jsaul@google.com</owner> <owner>siyua@chromium.org</owner> <owner>payments-autofill-team@google.com</owner> @@ -790,7 +790,7 @@ <histogram name="Autofill.CardUnmaskAuthenticationSelectionDialog.Result" enum="AutofillCardUnmaskAuthenticationSelectionDialogResult" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>siyua@chromium.org</owner> <owner>jsaul@google.com</owner> <owner>siashah@chromium.org</owner> @@ -803,7 +803,7 @@ </histogram> <histogram name="Autofill.CardUnmaskAuthenticationSelectionDialog.Shown" - enum="BooleanShown" expires_after="2022-11-27"> + enum="BooleanShown" expires_after="2023-02-12"> <owner>siyua@chromium.org</owner> <owner>jsaul@google.com</owner> <owner>siashah@chromium.org</owner> @@ -838,7 +838,7 @@ </histogram> <histogram name="Autofill.CreditCard.IsEnabled.PageLoad" enum="BooleanEnabled" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jsaul@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -1043,7 +1043,7 @@ </histogram> <histogram name="Autofill.CreditCardsSuppressedForDisuse" units="units" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>jsaul@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -1066,7 +1066,7 @@ </histogram> <histogram name="Autofill.DaysSinceLastUse.CreditCard" units="days" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -1087,7 +1087,7 @@ </histogram> <histogram name="Autofill.DaysSinceLastUse.StoredCreditCard" units="days" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <!-- Name completed by histogram_suffixes name="AutofillCreditCardType" --> @@ -1100,7 +1100,7 @@ </histogram> <histogram name="Autofill.DaysSinceLastUse.StoredProfile" units="days" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -1123,7 +1123,7 @@ </histogram> <histogram name="Autofill.EditedAutofilledFieldAtSubmission.Aggregate" - enum="AutofilledFieldUserEditingStatus" expires_after="2022-12-12"> + enum="AutofilledFieldUserEditingStatus" expires_after="2023-02-12"> <owner>koerber@google.com</owner> <owner>battre@google.com</owner> <summary> @@ -1134,7 +1134,7 @@ <histogram name="Autofill.EditedAutofilledFieldAtSubmission.ByFieldType" enum="AutofilledFieldUserEditingStatusByFieldType" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>koerber@google.com</owner> <owner>battre@google.com</owner> <summary> @@ -1203,7 +1203,7 @@ </histogram> <histogram name="Autofill.FieldCount" units="form fields" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>kolos@chromium.org</owner> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -1519,7 +1519,7 @@ </histogram> <histogram name="Autofill.FormSubmittedState" enum="AutofillFormSubmittedState" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary>The autofill state related to a submitted form.</summary> @@ -1732,7 +1732,7 @@ </histogram> <histogram name="Autofill.IsEnabled.PageLoad" enum="BooleanEnabled" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>jsaul@google.com</owner> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -1746,7 +1746,7 @@ </histogram> <histogram name="Autofill.IsEnabled.Startup" enum="BooleanEnabled" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>jsaul@google.com</owner> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -1906,7 +1906,7 @@ </histogram> <histogram name="Autofill.LabelInference.AssignedLabelSource" - enum="AssignedLabelSource" expires_after="2022-10-15"> + enum="AssignedLabelSource" expires_after="2023-02-12"> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-team@google.com</owner> <summary> @@ -2113,7 +2113,7 @@ </histogram> <histogram name="Autofill.NumberOfEditedAutofilledFieldsAtSubmission" - units="fields" expires_after="2022-12-12"> + units="fields" expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2123,7 +2123,7 @@ </histogram> <histogram name="Autofill.NumberOfProfilesConsideredForDedupe" units="profiles" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2141,7 +2141,7 @@ </histogram> <histogram name="Autofill.NumElementsMatchesNumFields" enum="Boolean" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2253,7 +2253,7 @@ </histogram> <histogram name="Autofill.Offer.SuggestedCardsHaveOffer" - enum="AutofillCreditCardOfferSuggestion" expires_after="2022-12-04"> + enum="AutofillCreditCardOfferSuggestion" expires_after="2023-02-12"> <owner>siyua@chromium.org</owner> <owner>payments-autofill-team@google.com</owner> <summary> @@ -2542,7 +2542,7 @@ </histogram> <histogram name="Autofill.ProfileActionOnFormSubmitted" - enum="AutofillProfileAction" expires_after="2022-12-12"> + enum="AutofillProfileAction" expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2633,7 +2633,7 @@ <histogram name="Autofill.ProfileImport.NewProfileWithRemovedPhoneNumberDecision" - enum="AutofillProfileImportDecision" expires_after="2022-12-04"> + enum="AutofillProfileImportDecision" expires_after="2023-02-12"> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-team@google.com</owner> <summary> @@ -2647,7 +2647,7 @@ </histogram> <histogram name="Autofill.ProfileImport.PhoneNumberParsingResult" - enum="PhoneNumberImportParsingResult" expires_after="2022-11-27"> + enum="PhoneNumberImportParsingResult" expires_after="2023-02-12"> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-team@google.com</owner> <summary> @@ -2917,7 +2917,7 @@ </histogram> <histogram name="Autofill.Query.BackoffDelay" units="ms" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2938,7 +2938,7 @@ </histogram> <histogram name="Autofill.Query.HttpResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2022-12-12"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -2947,7 +2947,7 @@ </histogram> <histogram name="Autofill.Query.Method" enum="AutofillQueryMethod" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary>The HTTP method used to query the autofill server.</summary> @@ -3045,7 +3045,7 @@ </histogram> <histogram name="Autofill.ScanCreditCard.Completed" enum="BooleanCompleted" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary>Whether a credit card scan was completed or cancelled.</summary> @@ -3066,7 +3066,7 @@ </histogram> <histogram name="Autofill.ScanCreditCardPrompt" - enum="AutofillScanCreditCardPrompt" expires_after="2022-12-12"> + enum="AutofillScanCreditCardPrompt" expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>jsaul@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -3188,7 +3188,7 @@ </histogram> <histogram name="Autofill.StoredCreditCardCount" units="cards" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <!-- Name completed by histogram_suffixes name="AutofillCreditCardType" --> @@ -3233,7 +3233,7 @@ </histogram> <histogram name="Autofill.StoredProfileCount" units="units" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3252,7 +3252,7 @@ </histogram> <histogram name="Autofill.StoredProfileDisusedCount" units="units" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3391,7 +3391,7 @@ <histogram name="Autofill.StrikeDatabase.VirtualCardEnrollmentNotOfferedDueToRequiredDelay" - enum="AutofillVirtualCardEnrollmentSource" expires_after="2022-10-31"> + enum="AutofillVirtualCardEnrollmentSource" expires_after="2023-02-12"> <owner>jsaul@google.com</owner> <owner>siyua@chromium.org</owner> <owner>payments-autofill-team@google.com</owner> @@ -3425,7 +3425,7 @@ </histogram> <histogram name="Autofill.SubmittedValuePatterns" enum="AutofillValuePatterns" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>jsaul@google.com</owner> <owner>koerber@google.com</owner> @@ -3448,7 +3448,7 @@ </histogram> <histogram name="Autofill.SuggestionAcceptedIndex.Autocomplete" - units="position" expires_after="2022-12-12"> + units="position" expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3478,7 +3478,7 @@ </histogram> <histogram name="Autofill.SuggestionClick" enum="AutofillSuggestionClick" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>schwering@chromium.org</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -4078,7 +4078,7 @@ </histogram> <histogram name="Autofill.WebOTP.OneTimeCode.FromAutocomplete" enum="Boolean" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>yigu@chromium.org</owner> <owner>battre@chromium.org</owner> <owner>web-identity@google.com</owner> @@ -4090,7 +4090,7 @@ </histogram> <histogram name="Autofill.WebOTP.PhoneNumberCollection.ParseResult" - enum="Boolean" expires_after="2022-12-12"> + enum="Boolean" expires_after="2023-02-12"> <owner>yigu@chromium.org</owner> <owner>battre@chromium.org</owner> <owner>web-identity@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index 2510c463..156fbf9 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -700,7 +700,7 @@ </histogram> <histogram name="Blink.CullRect.UpdateTime" units="microseconds" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>pdr@chromium.org</owner> <owner>wangxianzhu@chromium.org</owner> <owner>paint-dev@chromium.org</owner> @@ -713,7 +713,7 @@ </histogram> <histogram name="Blink.DarkMode.ApplyToImageOnMainThread" units="microseconds" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>pdr@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary> @@ -740,7 +740,7 @@ </histogram> <histogram name="Blink.DecodedImage.JpegDensity.KiBWeighted" - units="0.01 bits per pixel" expires_after="2022-12-04"> + units="0.01 bits per pixel" expires_after="2023-02-12"> <owner>jyrki@google.com</owner> <owner>compression-dev@google.com</owner> <summary> @@ -786,7 +786,7 @@ </histogram> <histogram base="true" name="Blink.DisplayLockIntersectionObserver.UpdateTime" - units="microseconds" expires_after="2022-12-11"> + units="microseconds" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -1147,7 +1147,7 @@ </histogram> <histogram base="true" name="Blink.HandleInputEvents.UpdateTime" - units="microseconds" expires_after="2022-12-11"> + units="microseconds" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -1524,7 +1524,7 @@ </histogram> <histogram base="true" name="Blink.IntersectionObservation.UpdateTime" - units="microseconds" expires_after="2022-12-11"> + units="microseconds" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -1581,7 +1581,7 @@ </histogram> <histogram base="true" name="Blink.JavascriptIntersectionObserver.UpdateTime" - units="microseconds" expires_after="2022-12-11"> + units="microseconds" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -1613,7 +1613,7 @@ </histogram> <histogram name="Blink.Layout.NGRatio.Blocks" units="%" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>tkent@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -1628,7 +1628,7 @@ </histogram> <histogram name="Blink.Layout.NGRatio.Calls" units="%" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>tkent@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -1713,7 +1713,7 @@ </histogram> <histogram base="true" name="Blink.LazyLoadIntersectionObserver.UpdateTime" - units="microseconds" expires_after="2022-12-11"> + units="microseconds" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -1939,7 +1939,7 @@ </histogram> <histogram name="Blink.Paint.PaintArtifactCompositorUpdateReason" - enum="PaintArtifactCompositorUpdateReason" expires_after="2022-12-01"> + enum="PaintArtifactCompositorUpdateReason" expires_after="2023-02-12"> <owner>pdr@chromium.org</owner> <owner>rego@chromium.org</owner> <owner>paint-dev@chromium.org</owner> @@ -2013,7 +2013,7 @@ </histogram> <histogram name="Blink.PreloadRequestWaitTime" units="ms" - expires_after="2022-12-07"> + expires_after="2023-02-12"> <owner>cduvall@chromium.org</owner> <owner>swarm-team@google.com</owner> <summary> @@ -2047,7 +2047,7 @@ </histogram> <histogram name="Blink.RenderThrottling.PaintUpdateTime" units="microseconds" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>pdr@chromium.org</owner> <owner>tcaptan@chromium.org</owner> <owner>paint-dev@chromium.org</owner> @@ -2220,7 +2220,7 @@ </histogram> <histogram name="Blink.Script.SchedulingType" enum="ScriptSchedulingType" - expires_after="2022-11-25"> + expires_after="2023-02-12"> <owner>kouhei@chromium.org</owner> <owner>hiroshige@chromium.org</owner> <owner>chikamune@chromium.org</owner> @@ -2327,7 +2327,7 @@ </histogram> <histogram name="Blink.Sms.Receive.Infobar" enum="WebOTPServiceInfobarAction" - expires_after="2022-10-30"> + expires_after="2023-02-12"> <owner>yigu@chromium.org</owner> <owner>goto@chromium.org</owner> <owner>fedcm-core@google.com</owner> @@ -2391,7 +2391,7 @@ </histogram> <histogram name="Blink.Sms.Receive.TimeContinueOnSuccess" units="ms" - expires_after="2022-10-30"> + expires_after="2023-02-12"> <owner>yigu@chromium.org</owner> <owner>goto@chromium.org</owner> <owner>fedcm-core@google.com</owner> @@ -2425,7 +2425,7 @@ </histogram> <histogram name="Blink.Sms.Receive.TimeUserCancel" units="ms" - expires_after="2022-10-30"> + expires_after="2023-02-12"> <owner>yigu@chromium.org</owner> <owner>goto@chromium.org</owner> <owner>fedcm-core@google.com</owner> @@ -2448,7 +2448,7 @@ </histogram> <histogram base="true" name="Blink.Style.UpdateTime" units="microseconds" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -2470,7 +2470,7 @@ </histogram> <histogram name="Blink.SVGImage.DataChanged" units="microseconds" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>pdr@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary> @@ -2493,7 +2493,7 @@ </histogram> <histogram name="Blink.UpdateViewportIntersection.UpdateTime" - units="microseconds" expires_after="2022-12-11"> + units="microseconds" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePreFCPSuffixes" --> <!-- Name completed by histogram_suffixes name="BlinkUpdateTimePostFCPSuffixes" --> @@ -2660,7 +2660,7 @@ </histogram> <histogram name="Blink.UseCounter.FeaturePolicy.Header" - enum="FeaturePolicyFeature" expires_after="2022-11-27"> + enum="FeaturePolicyFeature" expires_after="2023-02-12"> <owner>iclelland@chromium.org</owner> <owner>feature-control@chromium.org</owner> <summary> @@ -2869,7 +2869,7 @@ </histogram> <histogram name="Blink.UseCounter.PermissionsPolicy.Allow2" - enum="FeaturePolicyFeature" expires_after="2022-12-04"> + enum="FeaturePolicyFeature" expires_after="2023-02-12"> <owner>iclelland@chromium.org</owner> <owner>feature-control@chromium.org</owner> <summary> @@ -2963,7 +2963,7 @@ </histogram> <histogram name="Blink.VisibleBeforeLoaded.LazyLoadImages.BelowTheFold" - enum="NQEEffectiveConnectionType" expires_after="2022-11-20"> + enum="NQEEffectiveConnectionType" expires_after="2023-02-12"> <owner>sclittle@chromium.org</owner> <owner>rajendrant@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/bluetooth/histograms.xml b/tools/metrics/histograms/metadata/bluetooth/histograms.xml index eab92c1..692352a 100644 --- a/tools/metrics/histograms/metadata/bluetooth/histograms.xml +++ b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
@@ -449,7 +449,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.FastPair.GattConnection.Result" - enum="BooleanSuccess" expires_after="2022-12-11"> + enum="BooleanSuccess" expires_after="2023-02-12"> <owner>shanefitz@google.com</owner> <owner>julietlevesque@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> @@ -722,7 +722,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.FastPair.PairingMethod" - enum="FastPairPairingMethod" expires_after="2022-12-11"> + enum="FastPairPairingMethod" expires_after="2023-02-12"> <owner>shanefitz@google.com</owner> <owner>julietlevesque@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> @@ -839,7 +839,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.FastPair.RetroactiveEngagementFunnel.Steps" - enum="FastPairRetroactiveEngagementFlowEvent" expires_after="2022-12-11"> + enum="FastPairRetroactiveEngagementFlowEvent" expires_after="2023-02-12"> <owner>shanefitz@google.com</owner> <owner>julietlevesque@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/bookmarks/histograms.xml b/tools/metrics/histograms/metadata/bookmarks/histograms.xml index 48550bd7..acad066 100644 --- a/tools/metrics/histograms/metadata/bookmarks/histograms.xml +++ b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
@@ -141,7 +141,7 @@ </histogram> <histogram name="Bookmarks.Count.OnProfileLoad" units="bookmarks" - expires_after="2023-01-22"> + expires_after="2023-02-12"> <owner>supertri@chromium.org</owner> <owner>isherman@chromium.org</owner> <owner>aidanday@google.com</owner> @@ -227,14 +227,14 @@ </histogram> <histogram name="Bookmarks.EntryPoint" enum="BookmarksEntryPoint" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ianwen@chromium.org</owner> <component>UI>Browser>Bookmarks</component> <summary>How users add a new bookmark.</summary> </histogram> <histogram name="Bookmarks.GetResultsMatching.AnyTermApproach.Used" - enum="Boolean" expires_after="2022-12-11"> + enum="Boolean" expires_after="2023-02-12"> <owner>manukh@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> <component>UI>Browser>Bookmarks</component> @@ -277,7 +277,7 @@ </histogram> <histogram name="Bookmarks.GetResultsMatching.Terms.TermLength" - units="characters" expires_after="2022-12-11"> + units="characters" expires_after="2023-02-12"> <owner>manukh@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> <component>UI>Browser>Bookmarks</component>
diff --git a/tools/metrics/histograms/metadata/browser/histograms.xml b/tools/metrics/histograms/metadata/browser/histograms.xml index 5b7f024..f4a5b90 100644 --- a/tools/metrics/histograms/metadata/browser/histograms.xml +++ b/tools/metrics/histograms/metadata/browser/histograms.xml
@@ -113,7 +113,7 @@ </histogram> <histogram name="Browser.ChromeOS.HatsStatus" enum="HatsStatus" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>aalsum@chromium.org</owner> <owner>cros-telemetry@google.com</owner> <summary> @@ -195,7 +195,7 @@ </histogram> <histogram name="Browser.PaintPreview.Capture.CompressedOnDiskSize" units="KB" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <owner>chrome-fdt@google.com</owner> @@ -206,7 +206,7 @@ </histogram> <histogram name="Browser.PaintPreview.Capture.NumberOfFramesCaptured" - units="units" expires_after="2022-12-11"> + units="units" expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <owner>chrome-fdt@google.com</owner> @@ -216,7 +216,7 @@ </histogram> <histogram name="Browser.PaintPreview.Capture.Success" enum="BooleanSuccess" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <owner>chrome-fdt@google.com</owner> @@ -226,7 +226,7 @@ </histogram> <histogram name="Browser.PaintPreview.Capture.TotalCaptureDuration" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <owner>chrome-fdt@google.com</owner> @@ -247,7 +247,7 @@ </histogram> <histogram name="Browser.PaintPreview.Player.CompositorProcessStartupTime" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <owner>chrome-fdt@google.com</owner> @@ -265,7 +265,7 @@ </histogram> <histogram name="Browser.PaintPreview.Player.TimeToFirstBitmap" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <owner>chrome-fdt@google.com</owner> @@ -288,7 +288,7 @@ </histogram> <histogram name="Browser.PaintPreview.TabbedPlayer.ExitCause" - enum="TabbedPaintPreviewExitCause" expires_after="2022-12-11"> + enum="TabbedPaintPreviewExitCause" expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <owner>chrome-fdt@google.com</owner> @@ -333,7 +333,7 @@ </histogram> <histogram name="Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <owner>fredmello@chromium.org</owner> <owner>chrome-fdt@google.com</owner> @@ -559,7 +559,7 @@ </histogram> <histogram name="Browser.Tabs.TabSwitchHasRWHV" enum="BooleanExists" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>joenotcharles@google.com</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -806,7 +806,7 @@ <histogram name="BrowserRenderProcessHost.RoutingIDSpaceUsed" units="% of routing ID space used for browser-allocated routing IDs" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>alexmos@chromium.org</owner> <owner>dcheng@chromium.org</owner> <summary> @@ -933,7 +933,7 @@ </histogram> <histogram name="BrowserSwitcher.AlternativeBrowser" enum="BrowserType" - expires_after="2022-12-05"> + expires_after="2023-02-12"> <owner>nicolaso@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -978,7 +978,7 @@ </histogram> <histogram name="BrowserSwitcher.Decision" enum="BooleanBrowserSwitch" - expires_after="2022-12-05"> + expires_after="2023-02-12"> <owner>nicolaso@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -990,7 +990,7 @@ </histogram> <histogram name="BrowserSwitcher.DecisionTime" units="ms" - expires_after="2022-12-05"> + expires_after="2023-02-12"> <owner>nicolaso@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -1001,7 +1001,7 @@ </histogram> <histogram name="BrowserSwitcher.ExternalGreylistSize" units="rules" - expires_after="2022-12-05"> + expires_after="2023-02-12"> <owner>nicolaso@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -1011,7 +1011,7 @@ </histogram> <histogram name="BrowserSwitcher.ExternalSitelistSize" units="rules" - expires_after="2022-12-05"> + expires_after="2023-02-12"> <owner>nicolaso@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -1042,7 +1042,7 @@ </histogram> <histogram name="BrowserSwitcher.IeemSitelistSize" units="rules" - expires_after="2022-12-05"> + expires_after="2023-02-12"> <owner>nicolaso@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chrome/histograms.xml b/tools/metrics/histograms/metadata/chrome/histograms.xml index d9c5ff4e..627a951e 100644 --- a/tools/metrics/histograms/metadata/chrome/histograms.xml +++ b/tools/metrics/histograms/metadata/chrome/histograms.xml
@@ -189,7 +189,7 @@ </histogram> <histogram name="Chrome.Tabs.AnimationSmoothness.HoverCard.FadeOut" units="%" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>yichenz@chromium.org</owner> <owner>chromeos-wmp@google.com</owner> <summary> @@ -210,7 +210,7 @@ </histogram> <histogram name="ChromeColors.ColorOnLoad" enum="ChromeColorsInfo" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>gayane@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml index 506bb5a..ed7daf35 100644 --- a/tools/metrics/histograms/metadata/chromeos/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -205,7 +205,7 @@ </histogram> <histogram name="ChromeOS.Attestation.AttestationFlowStatus" - enum="AttestationFlowStatus" expires_after="2022-12-11"> + enum="AttestationFlowStatus" expires_after="2023-02-12"> <owner>cylai@chromium.org</owner> <owner>cros-hwsec+umas@chromium.org</owner> <summary> @@ -254,7 +254,7 @@ </histogram> <histogram name="ChromeOS.Camera.ErrorType" enum="ChromeOSCameraErrorType" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>wtlee@chromium.org</owner> <owner>chromeos-camera-eng@google.com</owner> <summary> @@ -285,7 +285,7 @@ </histogram> <histogram name="ChromeOS.Camera.Facing" enum="ChromeOSCameraFacing" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>wtlee@chromium.org</owner> <owner>chromeos-camera-eng@google.com</owner> <summary> @@ -474,7 +474,7 @@ </histogram> <histogram name="ChromeOS.Camera.SessionDuration" units="seconds" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>wtlee@chromium.org</owner> <owner>chromeos-camera-eng@google.com</owner> <summary>Records the session duration in Chrome OS camera service.</summary> @@ -599,7 +599,7 @@ </histogram> <histogram name="ChromeOS.CWP.ParsePSIMemory" enum="ChromeOSParsePSIMemStatus" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>raging@google.com</owner> <owner>chromeos-memory@google.com</owner> <summary> @@ -694,7 +694,7 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.MemoryRoutineDuration" units="s" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>ashleydp@google.com</owner> <owner>gavinwill@chromium.org</owner> <owner>zentaro@chromium.org</owner> @@ -706,7 +706,7 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.OpenDuration" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>ashleydp@google.com</owner> <owner>gavinwill@chromium.org</owner> <owner>zentaro@chromium.org</owner> @@ -718,7 +718,7 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.RoutineCount" units="routines" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>ashleydp@google.com</owner> <owner>gavinwill@chromium.org</owner> <owner>zentaro@chromium.org</owner> @@ -966,7 +966,7 @@ </histogram> <histogram name="ChromeOS.Intents.IntentPickerAction" - enum="IntentPickerDialogAction" expires_after="2023-01-22"> + enum="IntentPickerDialogAction" expires_after="2023-02-12"> <owner>tsergeant@chromium.org</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary> @@ -994,7 +994,7 @@ </histogram> <histogram name="ChromeOS.Intents.IntentPickerIconEvent" - enum="IntentPickerIconEvent" expires_after="2022-12-04"> + enum="IntentPickerIconEvent" expires_after="2023-02-12"> <owner>tsergeant@chromium.org</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary> @@ -1037,7 +1037,7 @@ </histogram> <histogram name="ChromeOS.Intents.LinkCapturingEvent2" - enum="LinkCapturingEvent" expires_after="2022-12-01"> + enum="LinkCapturingEvent" expires_after="2023-02-12"> <owner>vpao@google.com</owner> <owner>chromeos-apps-foundation-team@google.com</owner> <summary> @@ -1261,7 +1261,7 @@ </histogram> <histogram name="ChromeOS.Liveness.PingResponseTime" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>rtinkoff@google.com</owner> <owner>xiyuan@google.com</owner> <summary> @@ -1543,7 +1543,7 @@ </histogram> <histogram name="ChromeOS.SecurityAnomaly" enum="SecurityAnomaly" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jorgelo@chromium.org</owner> <owner>chromeos-security-core@google.com</owner> <summary> @@ -1613,7 +1613,7 @@ </histogram> <histogram name="ChromeOS.Sharesheet.FormFactor" - enum="ChromeOSSharesheetFormFactor" expires_after="2022-12-11"> + enum="ChromeOSSharesheetFormFactor" expires_after="2023-02-12"> <owner>dominickn@chromium.org</owner> <owner>melzhang@chromium.org</owner> <summary>Records the form factor when the Sharesheet is invoked.</summary> @@ -1640,7 +1640,7 @@ </histogram> <histogram name="ChromeOS.Sharesheet.LaunchSource" - enum="ChromeOSSharesheetLaunchSource" expires_after="2022-12-11"> + enum="ChromeOSSharesheetLaunchSource" expires_after="2023-02-12"> <owner>dominickn@chromium.org</owner> <owner>melzhang@chromium.org</owner> <summary> @@ -1662,7 +1662,7 @@ </histogram> <histogram name="ChromeOS.Sharesheet.UserAction" - enum="ChromeOSSharesheetAction" expires_after="2022-12-11"> + enum="ChromeOSSharesheetAction" expires_after="2023-02-12"> <owner>dominickn@chromium.org</owner> <owner>melzhang@chromium.org</owner> <summary>Records user action on sharesheet invocations.</summary> @@ -1689,7 +1689,7 @@ </histogram> <histogram name="ChromeOS.Sync.PreferencesMigrated" enum="BooleanMigrated" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>rsorokin@chromium.org</owner> <owner>jamescook@chromium.org</owner> <owner>cros-oac@google.com</owner> @@ -1928,7 +1928,7 @@ </histogram> <histogram name="ChromeOS.TypeC.UsbDeviceSpeed" enum="UsbDeviceSpeedMetric" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>wonchung@google.com</owner> <owner>chromeos-usb@google.com</owner> <summary> @@ -1949,7 +1949,7 @@ </histogram> <histogram name="ChromeOS.UrlXattrsCount" units="units" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jorgelo@chromium.org</owner> <owner>tnagel@chromium.org</owner> <summary> @@ -2060,7 +2060,7 @@ </histogram> <histogram name="ChromeOS.WXMountCount" units="count" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jorgelo@chromium.org</owner> <owner>chromeos-security-core@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml index 3f6bc78..15663f61 100644 --- a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml
@@ -108,7 +108,7 @@ </histogram> <histogram name="ChromeOS.Settings.Languages.Interaction" - enum="SettingsLanguagesPageInteraction" expires_after="2022-12-11"> + enum="SettingsLanguagesPageInteraction" expires_after="2023-02-12"> <owner>myy@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -137,7 +137,7 @@ </histogram> <histogram base="true" name="ChromeOS.Settings.Languages.Toggle" - enum="BooleanToggled" expires_after="2022-12-11"> + enum="BooleanToggled" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="SettingsLanguagesPageToggle" --> <owner>myy@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/commerce/histograms.xml b/tools/metrics/histograms/metadata/commerce/histograms.xml index d95bd83..2f6bc1b8 100644 --- a/tools/metrics/histograms/metadata/commerce/histograms.xml +++ b/tools/metrics/histograms/metadata/commerce/histograms.xml
@@ -102,7 +102,7 @@ </histogram> <histogram name="Commerce.Carts.FormSubmitIsTransaction" - enum="BooleanIsTransaction" expires_after="2022-11-06"> + enum="BooleanIsTransaction" expires_after="2023-02-12"> <owner>wychen@chromium.org</owner> <owner>yuezhanggg@chromium.org</owner> <owner>chrome-shopping@google.com</owner> @@ -113,7 +113,7 @@ </histogram> <histogram name="Commerce.Carts.XHRIsAddToCart" enum="BooleanIsAddToCart" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>wychen@chromium.org</owner> <owner>yuezhanggg@chromium.org</owner> <owner>chrome-shopping@google.com</owner> @@ -151,7 +151,7 @@ </histogram> <histogram name="Commerce.Heuristics.MerchantNameSource" - enum="CommerceHeuristicsDataSource" expires_after="2022-12-04"> + enum="CommerceHeuristicsDataSource" expires_after="2023-02-12"> <owner>yuezhanggg@chromium.org</owner> <owner>wychen@chromium.org</owner> <owner>chrome-shopping@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/compositing/histograms.xml b/tools/metrics/histograms/metadata/compositing/histograms.xml index 3009393b..de5bf01 100644 --- a/tools/metrics/histograms/metadata/compositing/histograms.xml +++ b/tools/metrics/histograms/metadata/compositing/histograms.xml
@@ -265,7 +265,7 @@ </histogram> <histogram name="Compositing.Display.DrmOverlayManager.FirstTestPageFlipPassed" - enum="Boolean" expires_after="2022-11-30"> + enum="Boolean" expires_after="2023-02-12"> <owner>khaslett@chromium.org</owner> <owner>kylechar@chromium.org</owner> <summary> @@ -275,7 +275,7 @@ </histogram> <histogram name="Compositing.Display.DrmOverlayManager.TestPageFlipCount" - units="units" expires_after="2022-12-04"> + units="units" expires_after="2023-02-12"> <owner>khaslett@chromium.org</owner> <owner>kylechar@chromium.org</owner> <summary> @@ -285,7 +285,7 @@ </histogram> <histogram name="Compositing.Display.DrmOverlayManager.TestPageFlipUs" - units="microseconds" expires_after="2022-12-04"> + units="microseconds" expires_after="2023-02-12"> <owner>khaslett@chromium.org</owner> <owner>kylechar@chromium.org</owner> <summary> @@ -296,7 +296,7 @@ </histogram> <histogram name="Compositing.Display.DrmThread.CheckOverlayCapabilitiesSyncUs" - units="microseconds" expires_after="2022-12-04"> + units="microseconds" expires_after="2023-02-12"> <owner>khaslett@chromium.org</owner> <owner>kylechar@chromium.org</owner> <summary> @@ -344,7 +344,7 @@ </histogram> <histogram name="Compositing.Display.OverlayProcessorOzone.MaxPlanesSupported" - units="units" expires_after="2022-11-30"> + units="units" expires_after="2023-02-12"> <owner>khaslett@chromium.org</owner> <owner>kylechar@chromium.org</owner> <summary> @@ -356,7 +356,7 @@ <histogram name="Compositing.Display.OverlayProcessorUsingStrategy.CandidateCombinationPreviouslySucceeded" - enum="Boolean" expires_after="2022-11-30"> + enum="Boolean" expires_after="2023-02-12"> <owner>khaslett@chromium.org</owner> <owner>kylechar@chromium.org</owner> <summary> @@ -408,7 +408,7 @@ <histogram name="Compositing.Display.OverlayProcessorUsingStrategy.NumQuadsConsidered" - units="units" expires_after="2022-11-30"> + units="units" expires_after="2023-02-12"> <owner>khaslett@chromium.org</owner> <owner>kylechar@chromium.org</owner> <summary> @@ -419,7 +419,7 @@ <histogram name="Compositing.Display.OverlayProcessorUsingStrategy.ShouldAttemptMultipleOverlays" - enum="AttemptingMultipleOverlays" expires_after="2022-11-30"> + enum="AttemptingMultipleOverlays" expires_after="2023-02-12"> <owner>khaslett@chromium.org</owner> <owner>kylechar@chromium.org</owner> <summary> @@ -628,7 +628,7 @@ </histogram> <histogram name="Compositing.Renderer.LCDTextDisallowedReasonKPixels" - enum="LCDTextDisallowedReason" expires_after="2022-12-11"> + enum="LCDTextDisallowedReason" expires_after="2023-02-12"> <owner>wangxianzhu@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary> @@ -750,7 +750,7 @@ </histogram> <histogram name="Compositing.SurfaceAggregator.DeclareResourcesUs" - units="microseconds" expires_after="2022-12-11"> + units="microseconds" expires_after="2023-02-12"> <owner>kylechar@chromium.org</owner> <owner>jonross@chromium.org</owner> <summary> @@ -785,7 +785,7 @@ </histogram> <histogram name="Compositing.SurfaceAggregator.PrewalkUs" units="microseconds" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>kylechar@chromium.org</owner> <owner>jonross@chromium.org</owner> <summary> @@ -964,7 +964,7 @@ </histogram> <histogram name="Graphics.Smoothness.Checkerboarding" units="%" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>jonross@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -998,7 +998,7 @@ <histogram name="Graphics.Smoothness.Diagnostic.DroppedFrameAfterScrollStart2.Frames" - units="vsyncs" expires_after="2022-11-29"> + units="vsyncs" expires_after="2023-02-12"> <owner>jonross@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -1011,7 +1011,7 @@ <histogram name="Graphics.Smoothness.Diagnostic.DroppedFrameAfterScrollStart2.Time" - units="ms" expires_after="2022-11-29"> + units="ms" expires_after="2023-02-12"> <owner>jonross@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -1373,7 +1373,7 @@ </histogram> <histogram name="Graphics.Smoothness.PercentMissedDeadlineFrames.AllSequences" - units="%" expires_after="2022-12-04"> + units="%" expires_after="2023-02-12"> <owner>jonross@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml index 3dd10ab..acfb570 100644 --- a/tools/metrics/histograms/metadata/content/histograms.xml +++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -171,7 +171,7 @@ </histogram> <histogram name="ContentSettings.AllowStorageAccessSync" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -297,7 +297,7 @@ </histogram> <histogram name="ContentSettings.DefaultUsbGuardSetting" enum="ContentSetting" - expires_after="2022-10-23"> + expires_after="2023-02-12"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary>The default permission setting for WebUSB at profile open.</summary>
diff --git a/tools/metrics/histograms/metadata/content_creation/histograms.xml b/tools/metrics/histograms/metadata/content_creation/histograms.xml index 96b77ff4..4e458fc63 100644 --- a/tools/metrics/histograms/metadata/content_creation/histograms.xml +++ b/tools/metrics/histograms/metadata/content_creation/histograms.xml
@@ -47,7 +47,7 @@ </histogram> <histogram name="LightweightReactions.AssetsFetchSuccess" enum="BooleanSuccess" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>gujen@google.com</owner> <owner>chrome-creation@google.com</owner> <summary> @@ -100,7 +100,7 @@ </histogram> <histogram name="LightweightReactions.Funnel" enum="LightweightReactionsFunnel" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>gujen@google.com</owner> <owner>chrome-creation@google.com</owner> <summary> @@ -232,7 +232,7 @@ </histogram> <histogram name="NoteCreation.Funnel" enum="NoteCreationFunnel" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>sebsg@chromium.org</owner> <owner>chrome-creation@google.com</owner> <summary> @@ -332,7 +332,7 @@ </histogram> <histogram name="SharedHighlights.AndroidShareSheet.SharedState" - enum="LinkGenerationSharedStatus" expires_after="2022-12-11"> + enum="LinkGenerationSharedStatus" expires_after="2023-02-12"> <owner>sebsg@chromium.org</owner> <owner>jeffreycohen@chromium.org</owner> <owner>chrome-shared-highlighting@google.com</owner> @@ -365,7 +365,7 @@ </histogram> <histogram name="SharedHighlights.Desktop.CopiedLinkType" - enum="LinkGenerationCopiedLinkType" expires_after="2022-12-11"> + enum="LinkGenerationCopiedLinkType" expires_after="2023-02-12"> <owner>sebsg@chromium.org</owner> <owner>jeffreycohen@chromium.org</owner> <owner>chrome-shared-highlighting@google.com</owner> @@ -375,7 +375,7 @@ </histogram> <histogram name="SharedHighlights.LinkGenerated.Error" - enum="LinkGenerationError" expires_after="2022-12-11"> + enum="LinkGenerationError" expires_after="2023-02-12"> <owner>jeffreycohen@chromium.org</owner> <owner>chrome-shared-highlighting@google.com</owner> <summary> @@ -468,7 +468,7 @@ </histogram> <histogram name="SharedHighlights.LinkGenerated.TimeToGenerate" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jeffreycohen@chromium.org</owner> <owner>chrome-shared-highlighting@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml index 1b4080a..a5a213a 100644 --- a/tools/metrics/histograms/metadata/cookie/histograms.xml +++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -90,7 +90,7 @@ </histogram> <histogram name="Cookie.ControlCharacterTruncation" enum="Boolean" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>bingler@chromium.org</owner> <owner>miketaylr@chromium.org</owner> <summary> @@ -508,7 +508,7 @@ </histogram> <histogram name="Cookie.PartitionCount" units="partitions" - expires_after="2022-12-06"> + expires_after="2023-02-12"> <owner>dylancutler@chromium.org</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -520,7 +520,7 @@ </histogram> <histogram name="Cookie.PartitionedCookieCount" units="cookies" - expires_after="2022-12-06"> + expires_after="2023-02-12"> <owner>dylancutler@chromium.org</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -531,7 +531,7 @@ </histogram> <histogram name="Cookie.PartitionedCookiesInRequest" units="cookies" - expires_after="2022-12-06"> + expires_after="2023-02-12"> <owner>dylancutler@chromium.org</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -870,7 +870,7 @@ </histogram> <histogram name="Cookie.TimeDatabaseMigrationToV18" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>arichiv@chromium.org</owner> <owner>bingler@chromium.org</owner> <summary> @@ -896,7 +896,7 @@ </histogram> <histogram name="Cookie.TruncatingCharacterInCookieString" - enum="TruncatingCharacterInCookieStringType" expires_after="2022-12-11"> + enum="TruncatingCharacterInCookieStringType" expires_after="2023-02-12"> <owner>bingler@chromium.org</owner> <owner>awillia@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cras/histograms.xml b/tools/metrics/histograms/metadata/cras/histograms.xml index 163a4d4..bb610ea6 100644 --- a/tools/metrics/histograms/metadata/cras/histograms.xml +++ b/tools/metrics/histograms/metadata/cras/histograms.xml
@@ -71,7 +71,7 @@ </summary> </histogram> -<histogram name="Cras.BusyloopLength" units="units" expires_after="2022-12-01"> +<histogram name="Cras.BusyloopLength" units="units" expires_after="2023-02-12"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -152,7 +152,7 @@ </histogram> <histogram name="Cras.DeviceNoiseCancellationStatus" - enum="CrasNoiseCancellationStatus" expires_after="2022-12-01"> + enum="CrasNoiseCancellationStatus" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="Cras.DeviceType" --> @@ -322,7 +322,7 @@ </histogram> <histogram name="Cras.HighestDeviceDelayInput" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -335,7 +335,7 @@ </histogram> <histogram name="Cras.HighestDeviceDelayOutput" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -359,7 +359,7 @@ </histogram> <histogram name="Cras.HighestOutputHardwareLevel" units="frames" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -590,7 +590,7 @@ </histogram> <histogram name="Cras.MissedCallbackFirstTimeInput" units="seconds" - expires_after="2022-11-20"> + expires_after="2023-02-12"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary> @@ -1046,7 +1046,7 @@ </histogram> <histogram name="Cras.UnderrunsPerDevice" units="count" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>yuhsuan@chromium.org</owner> <owner>chromeos-audio@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cros_ml/histograms.xml b/tools/metrics/histograms/metadata/cros_ml/histograms.xml index 522bf69..4ebc30c 100644 --- a/tools/metrics/histograms/metadata/cros_ml/histograms.xml +++ b/tools/metrics/histograms/metadata/cros_ml/histograms.xml
@@ -177,7 +177,7 @@ </histogram> <histogram name="MachineLearningService.ProcessError" - enum="MachineLearningServiceProcessError" expires_after="2022-12-11"> + enum="MachineLearningServiceProcessError" expires_after="2023-02-12"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <owner>honglinyu@chromium.org</owner> @@ -315,7 +315,7 @@ </histogram> <histogram name="MachineLearningService.WorkerProcessCleanUpTime" - units="microseconds" expires_after="2022-12-11"> + units="microseconds" expires_after="2023-02-12"> <owner>alanlxl@chromium.org</owner> <owner>amoylan@chromium.org</owner> <owner>honglinyu@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/cryptohome/histograms.xml b/tools/metrics/histograms/metadata/cryptohome/histograms.xml index 84f07f5..60b30fb 100644 --- a/tools/metrics/histograms/metadata/cryptohome/histograms.xml +++ b/tools/metrics/histograms/metadata/cryptohome/histograms.xml
@@ -527,7 +527,7 @@ </histogram> <histogram name="Cryptohome.MaskedDownloadsItems" units="items" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>benreich@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml index ee84bd7..bef76d7 100644 --- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml +++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -36,7 +36,7 @@ </histogram> <histogram name="CustomTabs.AutoclosedSessionDuration" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jinsukkim@chromium.org</owner> <owner>twellington@chromium.org</owner> <owner>cct-team@google.com</owner> @@ -159,7 +159,7 @@ </histogram> <histogram name="CustomTabs.CloseCause" enum="CustomTabsCloseCause" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jinsukkim@chromium.org</owner> <owner>twellington@chromium.org</owner> <owner>cct-team@google.com</owner> @@ -231,7 +231,7 @@ </histogram> <histogram name="CustomTabs.HadInteractionOnClose" enum="Boolean" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>wenyufu@chromium.org</owner> <owner>chrome-connective-tissue@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/dev/histograms.xml b/tools/metrics/histograms/metadata/dev/histograms.xml index 812d456..19676ce 100644 --- a/tools/metrics/histograms/metadata/dev/histograms.xml +++ b/tools/metrics/histograms/metadata/dev/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="DevTools.ActionTaken" enum="DevToolsAction" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>alph@chromium.org</owner> <owner>yangguo@chromium.org</owner> <owner>bmeurer@chromium.org</owner> @@ -104,8 +104,20 @@ </summary> </histogram> +<histogram name="DevTools.CSSHintShown" enum="DevToolsCSSHintShown" + expires_after="2023-08-12"> + <owner>changhaohan@chromium.org</owner> + <owner>mathias@chromium.org</owner> + <owner>yangguo@chromium.org</owner> + <summary> + Records how many times different CSS hint types were shown in the Styles + panel in DevTools. It's recorded when a hint icon is shown in the Styles + panel. + </summary> +</histogram> + <histogram name="DevTools.DeveloperResourceLoaded" - enum="DevToolsDeveloperResourceLoaded" expires_after="2022-12-01"> + enum="DevToolsDeveloperResourceLoaded" expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>bmeurer@chromium.org</owner> <summary> @@ -140,7 +152,7 @@ </histogram> <histogram name="DevTools.DeveloperResourceScheme" - enum="DevToolsDeveloperResourceScheme" expires_after="2022-12-01"> + enum="DevToolsDeveloperResourceScheme" expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>bmeurer@chromium.org</owner> <summary> @@ -158,7 +170,7 @@ </histogram> <histogram name="DevTools.ExperimentDisabled" enum="DevtoolsExperiments" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>changhao@chromium.org</owner> <summary> @@ -167,7 +179,7 @@ </histogram> <histogram name="DevTools.ExperimentEnabled" enum="DevtoolsExperiments" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>changhao@chromium.org</owner> <summary> @@ -176,7 +188,7 @@ </histogram> <histogram name="DevTools.ExperimentEnabledAtLaunch" enum="DevtoolsExperiments" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>changhao@chromium.org</owner> <summary> @@ -194,7 +206,7 @@ </histogram> <histogram name="DevTools.IssueCreated" enum="DevToolsIssueCreated" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>dsv@chromium.org</owner> <summary> @@ -203,7 +215,7 @@ </histogram> <histogram name="DevTools.IssuesPanelIssueExpanded" - enum="DevToolsIssuesPanelIssueExpanded" expires_after="2022-12-01"> + enum="DevToolsIssuesPanelIssueExpanded" expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>dsv@chromium.org</owner> <summary> @@ -231,7 +243,7 @@ </histogram> <histogram name="DevTools.KeybindSetSettingChanged" enum="DevToolsKeybindSets" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>jalyn@microsoft.com</owner> <owner>leo.lee@microsoft.com</owner> @@ -242,7 +254,7 @@ </histogram> <histogram name="DevTools.KeyboardShortcutFired" - enum="DevToolsKeyboardShortcutAction" expires_after="2022-12-01"> + enum="DevToolsKeyboardShortcutAction" expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>jalyn@microsoft.com</owner> <owner>leo.lee@microsoft.com</owner> @@ -264,7 +276,7 @@ </histogram> <histogram base="true" name="DevTools.Launch" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="DevToolsLaunchPanels" --> <owner>yangguo@chromium.org</owner> @@ -324,7 +336,7 @@ </histogram> <histogram name="DevTools.PanelClosed" enum="DevToolsPanel" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>yangguo@chromium.org</owner> <owner>bmeurer@chromium.org</owner> <summary> @@ -341,7 +353,7 @@ </histogram> <histogram name="DevTools.RecordingEdited" enum="DevToolsRecordingEdited" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>alexrudenko@chromium.org</owner> <owner>mathias@chromium.org</owner> <owner>yangguo@chromium.org</owner> @@ -349,7 +361,7 @@ </histogram> <histogram name="DevTools.RecordingExported" enum="DevToolsRecordingExported" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>alexrudenko@chromium.org</owner> <owner>mathias@chromium.org</owner> <owner>yangguo@chromium.org</owner> @@ -357,7 +369,7 @@ </histogram> <histogram name="DevTools.RecordingReplayFinished" - enum="DevToolsRecordingReplayFinished" expires_after="2022-12-01"> + enum="DevToolsRecordingReplayFinished" expires_after="2023-02-12"> <owner>alexrudenko@chromium.org</owner> <owner>mathias@chromium.org</owner> <owner>yangguo@chromium.org</owner> @@ -377,7 +389,7 @@ </histogram> <histogram name="DevTools.RecordingReplayStarted" - enum="DevToolsRecordingReplayStarted" expires_after="2022-12-01"> + enum="DevToolsRecordingReplayStarted" expires_after="2023-02-12"> <owner>alexrudenko@chromium.org</owner> <owner>mathias@chromium.org</owner> <owner>yangguo@chromium.org</owner> @@ -385,7 +397,7 @@ </histogram> <histogram name="DevTools.RecordingToggled" enum="DevToolsRecordingToggled" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>alexrudenko@chromium.org</owner> <owner>mathias@chromium.org</owner> <owner>yangguo@chromium.org</owner> @@ -403,7 +415,7 @@ </histogram> <histogram name="DevTools.StyleTextCopied" enum="DevToolsStyleTextCopied" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>changhaohan@chromium.org</owner> <owner>mathias@chromium.org</owner> <owner>yangguo@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/download/histograms.xml b/tools/metrics/histograms/metadata/download/histograms.xml index 66c9877..5048bd2 100644 --- a/tools/metrics/histograms/metadata/download/histograms.xml +++ b/tools/metrics/histograms/metadata/download/histograms.xml
@@ -141,7 +141,7 @@ </histogram> <histogram name="Download.Bubble.SubpageAction" - enum="DownloadBubbleSubpageAction" expires_after="2022-12-14"> + enum="DownloadBubbleSubpageAction" expires_after="2023-02-12"> <owner>bhatiarohit@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -222,7 +222,7 @@ </histogram> <histogram base="true" name="Download.Counts" enum="DownloadCountType" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="DownloadSource" --> <owner>shaktisahu@chromium.org</owner> @@ -704,8 +704,19 @@ </summary> </histogram> +<histogram name="Download.Open.ContentType" enum="DownloadContentType" + expires_after="M110"> + <owner>bhatiarohit@google.com</owner> + <owner>chrome-counter-abuse-alerts@google.com</owner> + <summary> + Content types of the downloads being opened. This histogram is logged + whenever a download is opened, whether from the shelf/bubble or + chrome://downloads. Logged on Desktop platforms. + </summary> +</histogram> + <histogram name="Download.OpenDownloads.PerProfileType" - enum="BrowserProfileType" expires_after="2022-12-11"> + enum="BrowserProfileType" expires_after="2023-02-12"> <owner>sideyilmaz@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -716,7 +727,7 @@ </histogram> <histogram name="Download.OpenDownloadsFromMenu.PerProfileType" - enum="BrowserProfileType" expires_after="2022-12-11"> + enum="BrowserProfileType" expires_after="2023-02-12"> <owner>sideyilmaz@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -1165,7 +1176,7 @@ </histogram> <histogram name="Download.Shelf.DragInfo" enum="Download.DragInfo" - expires_after="2022-12-06"> + expires_after="2023-02-12"> <owner>thefrog@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1175,7 +1186,7 @@ </histogram> <histogram name="Download.Shelf.VisibleTime" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1261,7 +1272,7 @@ </histogram> <histogram name="Download.ShelfContextMenuAction" - enum="DownloadShelfContextMenuAction" expires_after="2022-12-11"> + enum="DownloadShelfContextMenuAction" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1311,22 +1322,30 @@ </histogram> <histogram name="Download.Start.ContentType" enum="DownloadContentType" - expires_after="M85"> + expires_after="M110"> <owner>shaktisahu@chromium.org</owner> - <summary>Content types of the downloads.</summary> + <owner>bhatiarohit@google.com</owner> + <summary> + Content types of the downloads. This histogram is logged when a download is + started. Logged on Desktop platforms. Warning: This histogram had expired + from M85 to M106, data may be missing. + </summary> </histogram> <histogram name="Download.Start.ContentType.NormalProfile" - enum="DownloadContentType" expires_after="2022-05-01"> + enum="DownloadContentType" expires_after="2023-02-09"> <owner>shaktisahu@chromium.org</owner> <owner>clank-downloads@google.com</owner> <summary> Content types of the downloads that are started in non-incognito profile. + This histogram is logged when a download is started. Logged on Desktop + platforms. Warning: This histogram had expired from 2022-05-01 to + 2022-08-15, data may be missing. </summary> </histogram> <histogram name="Download.Start.PerProfileType" enum="BrowserProfileType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>sideyilmaz@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/enterprise/histograms.xml b/tools/metrics/histograms/metadata/enterprise/histograms.xml index 5b11a0fe..1cd4656 100644 --- a/tools/metrics/histograms/metadata/enterprise/histograms.xml +++ b/tools/metrics/histograms/metadata/enterprise/histograms.xml
@@ -848,7 +848,7 @@ </histogram> <histogram name="Enterprise.Dlp.ClipboardReadBlocked" enum="BooleanBlocked" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -890,7 +890,7 @@ </histogram> <histogram name="Enterprise.Dlp.DlpPolicyPresent" enum="Boolean" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -900,7 +900,7 @@ </histogram> <histogram name="Enterprise.Dlp.DragDropBlocked" enum="BooleanBlocked" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -919,14 +919,14 @@ </histogram> <histogram name="Enterprise.Dlp.PrintingBlocked" enum="BooleanBlocked" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary>Result of Data Leak Prevention evaluation for printing.</summary> </histogram> <histogram name="Enterprise.Dlp.PrintingWarned" enum="BooleanWarned" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>aidazolic@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1017,7 +1017,7 @@ </histogram> <histogram name="Enterprise.Dlp.RestrictionConfigured" - enum="EnterpriseDlpPolicyRestriction" expires_after="2022-12-01"> + enum="EnterpriseDlpPolicyRestriction" expires_after="2023-02-12"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1027,7 +1027,7 @@ </histogram> <histogram name="Enterprise.Dlp.ScreenShareBlocked" enum="BooleanBlocked" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1078,7 +1078,7 @@ </histogram> <histogram name="Enterprise.Dlp.ScreenshotBlocked" enum="BooleanBlocked" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1088,7 +1088,7 @@ </histogram> <histogram name="Enterprise.Dlp.ScreenshotWarned" enum="BooleanWarned" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>aidazolic@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1879,7 +1879,7 @@ </histogram> <histogram name="Enterprise.Policies.IgnoredByPolicyGroup" - enum="EnterprisePolicies" expires_after="2022-12-04"> + enum="EnterprisePolicies" expires_after="2023-02-12"> <owner>ydago@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -2308,7 +2308,7 @@ </histogram> <histogram name="EnterpriseCheck.AzureADJoinStatusCheckTime" units="ms" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>igorruvinov@chromium.org</owner> <owner>ydago@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> @@ -2400,7 +2400,7 @@ </histogram> <histogram name="EnterpriseCheck.IsJoinedToAzureAD" enum="BooleanEnabled" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>igorruvinov@chromium.org</owner> <owner>ydago@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> @@ -2437,7 +2437,7 @@ </histogram> <histogram name="EnterpriseCheck.IsManaged2" enum="BooleanEnabled" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>rogerta@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <owner>zmin@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/event/histograms.xml b/tools/metrics/histograms/metadata/event/histograms.xml index c15b8a4..d3300e1 100644 --- a/tools/metrics/histograms/metadata/event/histograms.xml +++ b/tools/metrics/histograms/metadata/event/histograms.xml
@@ -61,7 +61,7 @@ </histogram> <histogram name="Event.AsyncTargeting.ResponseTime" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jonross@chromium.org</owner> <owner>event-targeting@chromium.org</owner> <summary> @@ -255,7 +255,7 @@ </histogram> <histogram name="Event.Latency.EndToEnd.KeyPress" units="microseconds" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>flackr@chromium.org</owner> <owner>input-dev@chromium.org</owner> <summary> @@ -298,7 +298,7 @@ </histogram> <histogram name="Event.Latency.EndToEnd.TouchpadPinch2" units="microseconds" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>nzolghadr@chromium.org</owner> <owner>input-dev@chromium.org</owner> <summary> @@ -318,7 +318,7 @@ </histogram> <histogram name="Event.Latency.HitTest" units="microseconds" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary> @@ -337,7 +337,7 @@ </histogram> <histogram name="Event.Latency.HitTestRecursive" units="microseconds" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary> @@ -536,7 +536,7 @@ </histogram> <histogram name="Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin2" - units="microseconds" expires_after="2022-11-27"> + units="microseconds" expires_after="2023-02-12"> <owner>nzolghadr@chromium.org</owner> <summary> Time between initial creation of a wheel/touch event and start of the frame @@ -936,7 +936,7 @@ </histogram> <histogram name="Event.Latency.ScrollJank" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ddrone@google.com</owner> <owner>chrometto-team@google.com</owner> <summary> @@ -968,7 +968,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.JankyEvents" units="counts" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ddrone@google.com</owner> <owner>chrometto-team@google.com</owner> <summary> @@ -1123,7 +1123,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.TotalDuration" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ddrone@google.com</owner> <owner>chrometto-team@google.com</owner> <summary> @@ -1133,7 +1133,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.TotalEvents" units="counts" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ddrone@google.com</owner> <owner>chrometto-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml index 14b13e3a..056e138 100644 --- a/tools/metrics/histograms/metadata/extensions/histograms.xml +++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -380,7 +380,7 @@ </histogram> <histogram name="Extensions.ContentVerification.ComputeHashesOnInstallResult" - enum="BooleanSuccess" expires_after="2022-12-01"> + enum="BooleanSuccess" expires_after="2023-02-12"> <owner>vkovalova@google.com</owner> <owner>burunduk@chromium.org</owner> <owner>lazyboy@chromium.org</owner> @@ -397,7 +397,7 @@ </histogram> <histogram name="Extensions.ContentVerification.ComputeHashesOnInstallTime" - units="ms" expires_after="2022-12-01"> + units="ms" expires_after="2023-02-12"> <owner>vkovalova@google.com</owner> <owner>burunduk@chromium.org</owner> <owner>lazyboy@chromium.org</owner> @@ -412,7 +412,7 @@ </histogram> <histogram name="Extensions.ContentVerification.FetchFailureError" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2022-12-01"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-02-12"> <owner>vkovalova@google.com</owner> <owner>burunduk@chromium.org</owner> <owner>lazyboy@chromium.org</owner> @@ -717,7 +717,7 @@ </histogram> <histogram name="Extensions.DeclarativeNetRequest.ManifestEnabledRulesCount2" - units="rules" expires_after="2022-12-04"> + units="rules" expires_after="2023-02-12"> <owner>kelvinjiang@chromium.org</owner> <owner>src/extensions/OWNERS</owner> <summary> @@ -764,7 +764,7 @@ </histogram> <histogram name="Extensions.DeclarativeNetRequest.RequestHeaderRemoved" - enum="WebRequest.RequestHeader" expires_after="2022-12-04"> + enum="WebRequest.RequestHeader" expires_after="2023-02-12"> <owner>rdevlin.cronin@chromium.org</owner> <owner>kelvinjiang@chromium.org</owner> <owner>src/extensions/OWNERS</owner> @@ -1854,7 +1854,7 @@ </histogram> <histogram name="Extensions.Functions.ExtensionServiceWorkerCalls" - enum="ExtensionFunctions" expires_after="2022-12-11"> + enum="ExtensionFunctions" expires_after="2023-02-12"> <owner>lazyboy@chromium.org</owner> <owner>dbertoni@chromium.org</owner> <owner>rdevlin.cronin@chromium.org</owner> @@ -2005,7 +2005,7 @@ </histogram> <histogram name="Extensions.GoogleDocOffline.AvailabilityOnResourceRequest" - enum="GoogleDocsExtensionAvailablity" expires_after="2022-12-01"> + enum="GoogleDocsExtensionAvailablity" expires_after="2023-02-12"> <owner>arabm@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -2091,7 +2091,7 @@ </histogram> <histogram name="Extensions.HostedAppLaunchContainer" enum="AppLaunchContainer" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>benwells@chromium.org</owner> <owner>dominickn@chromium.org</owner> <summary> @@ -2303,7 +2303,7 @@ </histogram> <histogram name="Extensions.InstallFrictionDialogAction" - enum="ExtensionInstallFrictionDialogAction" expires_after="2022-12-04"> + enum="ExtensionInstallFrictionDialogAction" expires_after="2023-02-12"> <owner>jeffcyr@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2552,7 +2552,7 @@ </histogram> <histogram name="Extensions.LoadUserScript" units="units" - expires_after="2022-11-18"> + expires_after="2023-02-12"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -2816,7 +2816,7 @@ </histogram> <histogram name="Extensions.NotAllowlistedDisabled" units="extensions" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jeffcyr@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2827,7 +2827,7 @@ </histogram> <histogram name="Extensions.NotAllowlistedDisabledAndEsbUser" - units="extensions" expires_after="2022-12-04"> + units="extensions" expires_after="2023-02-12"> <owner>jeffcyr@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2849,7 +2849,7 @@ </histogram> <histogram name="Extensions.NotAllowlistedEnabledAndEsbUser" units="extensions" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jeffcyr@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3052,7 +3052,7 @@ </histogram> <histogram name="Extensions.SearchEngineOverrides" units="units" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>rdevlin.cronin@chromium.org</owner> <owner>kelvinjiang@chromium.org</owner> <summary> @@ -3085,7 +3085,7 @@ </histogram> <histogram name="Extensions.ServiceWorkerBackground.RegistrationStatus" - enum="Boolean" expires_after="2022-12-04"> + enum="Boolean" expires_after="2023-02-12"> <owner>lazyboy@chromium.org</owner> <owner>dbertoni@chromium.org</owner> <summary> @@ -3113,7 +3113,7 @@ </histogram> <histogram name="Extensions.ServiceWorkerBackground.StartWorkerStatus" - enum="Boolean" expires_after="2022-12-04"> + enum="Boolean" expires_after="2023-02-12"> <owner>lazyboy@chromium.org</owner> <owner>dbertoni@chromium.org</owner> <summary> @@ -3412,7 +3412,7 @@ </histogram> <histogram name="Extensions.WebRequest.KeepaliveRequestState" - enum="ExtensionInProgressRequestState" expires_after="2022-11-27"> + enum="ExtensionInProgressRequestState" expires_after="2023-02-12"> <owner>yhirano@chromium.org</owner> <owner>kinuko@chromium.org</owner> <summary> @@ -3654,7 +3654,7 @@ <histogram name="Extensions.WebStoreInstall.NotAllowlistedInstalledWithFriction" - enum="Boolean" expires_after="2022-12-04"> + enum="Boolean" expires_after="2023-02-12"> <owner>jeffcyr@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3667,7 +3667,7 @@ <histogram name="Extensions.WebStoreInstall.NotAllowlistedInstalledWithoutFriction" - enum="Boolean" expires_after="2022-12-04"> + enum="Boolean" expires_after="2023-02-12"> <owner>jeffcyr@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml index c84d4b5..541d306 100644 --- a/tools/metrics/histograms/metadata/feature_engagement/histograms.xml +++ b/tools/metrics/histograms/metadata/feature_engagement/histograms.xml
@@ -389,7 +389,7 @@ </histogram> <histogram name="InProductHelp.TextBubble.ShowSnooze" enum="BooleanShown" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>haileywang@chromium.org</owner> <owner>shaktisahu@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/file/histograms.xml b/tools/metrics/histograms/metadata/file/histograms.xml index 82e69d5..abbd395 100644 --- a/tools/metrics/histograms/metadata/file/histograms.xml +++ b/tools/metrics/histograms/metadata/file/histograms.xml
@@ -371,7 +371,7 @@ <histogram name="FileBrowser.HoldingSpace.TimeFromFirstWelcomeBannerShowToFirstPin" - units="ms" expires_after="2022-10-10"> + units="ms" expires_after="2023-02-12"> <owner>dmblack@google.com</owner> <owner>tbarzic@chromium.org</owner> <summary> @@ -647,7 +647,7 @@ </histogram> <histogram name="FileBrowser.Recent.FilterByType" - enum="FileManagerRecentFilterType" expires_after="2022-11-27"> + enum="FileManagerRecentFilterType" expires_after="2023-02-12"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/fingerprint/histograms.xml b/tools/metrics/histograms/metadata/fingerprint/histograms.xml index ae961496..761db11 100644 --- a/tools/metrics/histograms/metadata/fingerprint/histograms.xml +++ b/tools/metrics/histograms/metadata/fingerprint/histograms.xml
@@ -36,7 +36,7 @@ </histogram> <histogram name="Fingerprint.Auth.ScanResult" enum="FingerprintScanResult" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>tomhughes@chromium.org</owner> <owner>cros-lurs@google.com</owner> @@ -78,7 +78,7 @@ </histogram> <histogram name="Fingerprint.FingerprintPowerButtonRace" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>chromeos-commercial-identity@google.com</owner> <owner>chromeos-fingerprint@google.com</owner> @@ -91,7 +91,7 @@ </histogram> <histogram name="Fingerprint.FingerprintScanDone" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>chromeos-commercial-identity@google.com</owner> <owner>chromeos-fingerprint@google.com</owner> @@ -270,7 +270,7 @@ </histogram> <histogram name="Fingerprint.Unlock.Result" enum="FingerprintUnlockResult" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>tomhughes@chromium.org</owner> <owner>cros-lurs@google.com</owner> @@ -282,7 +282,7 @@ </histogram> <histogram name="Fingerprint.UnlockEnabled" enum="BooleanEnabled" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>tomhughes@chromium.org</owner> <owner>chromeos-fingerprint@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/gcm/histograms.xml b/tools/metrics/histograms/metadata/gcm/histograms.xml index 96cb585..fb21b3c06 100644 --- a/tools/metrics/histograms/metadata/gcm/histograms.xml +++ b/tools/metrics/histograms/metadata/gcm/histograms.xml
@@ -276,7 +276,7 @@ </histogram> <histogram name="GCM.RegistrationCacheStatus" enum="GCMRegistrationCacheStatus" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>nator@chromium.org</owner> <owner>peter@chromium.org</owner> <owner>rayankans@chromium.org</owner> @@ -287,7 +287,7 @@ </histogram> <histogram name="GCM.RegistrationRequest" units="requests" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>peter@chromium.org</owner> <summary> Number of registration requests sent to Google Cloud Messaging. Recorded @@ -296,7 +296,7 @@ </histogram> <histogram name="GCM.RegistrationRequest.NetErrorCode" enum="NetErrorCodes" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>peter@chromium.org</owner> <owner>platform-capabilities@chromium.org</owner> <summary> @@ -382,7 +382,7 @@ </histogram> <histogram name="GCM.SendWebPushMessageResult" enum="SendWebPushMessageResult" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>knollr@chromium.org</owner> <owner>peter@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/geolocation/histograms.xml b/tools/metrics/histograms/metadata/geolocation/histograms.xml index 54ee0b87..63ca4a7b 100644 --- a/tools/metrics/histograms/metadata/geolocation/histograms.xml +++ b/tools/metrics/histograms/metadata/geolocation/histograms.xml
@@ -105,7 +105,7 @@ </histogram> <histogram name="Geolocation.NetworkLocationRequest.Event" - enum="NetworkLocationRequestEvent" expires_after="2022-12-04"> + enum="NetworkLocationRequestEvent" expires_after="2023-02-12"> <owner>mattreynolds@chromium.org</owner> <owner>device-dev@chromium.org</owner> <summary> @@ -117,14 +117,14 @@ </histogram> <histogram name="Geolocation.NetworkLocationRequest.NetError" - enum="NetErrorCodes" expires_after="2022-11-27"> + enum="NetErrorCodes" expires_after="2023-02-12"> <owner>JamesHollyer@chromium.org</owner> <owner>device-dev@chromium.org</owner> <summary>Network errors in NetworkLocationRequest.</summary> </histogram> <histogram name="Geolocation.NetworkLocationRequest.ResponseCode" - enum="HttpResponseCode" expires_after="2022-11-27"> + enum="HttpResponseCode" expires_after="2023-02-12"> <owner>mattreynolds@chromium.org</owner> <owner>device-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml index a4263fe..7b71047 100644 --- a/tools/metrics/histograms/metadata/gpu/histograms.xml +++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -440,7 +440,7 @@ </histogram> <histogram name="GPU.D3D11FeatureLevel" enum="D3D11FeatureLevel" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>zmo@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -450,7 +450,7 @@ </histogram> <histogram name="GPU.D3D12FeatureLevel" enum="D3D12FeatureLevel" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <summary> @@ -460,7 +460,7 @@ </histogram> <histogram name="GPU.D3D12HighestShaderModel2" enum="D3DShaderModel" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <owner>amaiorano@google.com</owner> @@ -604,7 +604,7 @@ </histogram> <histogram name="GPU.DirectComposition.HardwareOverlaysSupported" - enum="BooleanOverlaySupported" expires_after="2022-12-04"> + enum="BooleanOverlaySupported" expires_after="2023-02-12"> <owner>magchen@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -671,7 +671,7 @@ </histogram> <histogram base="true" name="GPU.DirectComposition.SwapChainCreationResult3" - enum="Hresult" expires_after="2022-12-04"> + enum="Hresult" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="GPU.ProtectedVideoType" --> <owner>magchen@chromium.org</owner> @@ -729,7 +729,7 @@ </histogram> <histogram name="GPU.EnsureWorkVisibleDuration" units="microseconds" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>alemate@chromium.org</owner> <owner>magchen@chromium.org</owner> <owner>oshima@chromium.org</owner> @@ -745,7 +745,7 @@ </histogram> <histogram name="GPU.EnsureWorkVisibleDurationLowRes" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>alemate@chromium.org</owner> <owner>magchen@chromium.org</owner> <owner>oshima@chromium.org</owner> @@ -856,7 +856,7 @@ </summary> </histogram> -<histogram name="GPU.GpuCount" units="gpus" expires_after="2022-12-11"> +<histogram name="GPU.GpuCount" units="gpus" expires_after="2023-02-12"> <owner>zmo@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -1002,7 +1002,7 @@ </histogram> <histogram name="GPU.IOSurface.CATransactionTimeUs" units="microseconds" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>magchen@chromium.org</owner> <owner>ccameron@chromium.org</owner> <summary> @@ -1037,7 +1037,7 @@ </histogram> <histogram name="Gpu.Mac.BackpressureUs" units="microseconds" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>magchen@chromium.org</owner> <owner>ccameron@chromium.org</owner> <summary> @@ -1057,7 +1057,7 @@ </histogram> <histogram name="Gpu.Metal.ReadWriteTextureSupport" - enum="MetalReadWriteTextureSupportTier" expires_after="2022-12-04"> + enum="MetalReadWriteTextureSupportTier" expires_after="2023-02-12"> <owner>cwallez@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -1127,7 +1127,7 @@ </histogram> <histogram name="GPU.MultiGpu.Nvidia" enum="NvidiaDeviceId" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>zmo@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -1171,7 +1171,7 @@ </histogram> <histogram name="Gpu.OutputSurface.ScheduleOverlaysUs" units="microseconds" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>magchen@chromium.org</owner> <owner>ccameron@chromium.org</owner> <summary> @@ -1417,7 +1417,7 @@ </histogram> <histogram name="GPU.SharedImage.DmaBufSupportedType" - enum="DmaBufSupportedType" expires_after="2022-12-04"> + enum="DmaBufSupportedType" expires_after="2023-02-12"> <owner>vasilyt@chromium.org</owner> <owner>hitawala@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml index 293de064..fe3d3fe 100644 --- a/tools/metrics/histograms/metadata/history/histograms.xml +++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -68,7 +68,7 @@ </histogram> <histogram name="History.BrowsingDataLifetime.State.BrowserShutdownDeletion" - enum="BooleanStartedCompleted" expires_after="2022-12-04"> + enum="BooleanStartedCompleted" expires_after="2023-02-12"> <owner>ydago@chromium.org</owner> <owner>dullweber@chromium.org</owner> <component>UI>Browser>History</component> @@ -640,7 +640,7 @@ </histogram> <histogram name="History.Clusters.Backend.ClusterContainsSearch" - enum="BooleanContained" expires_after="2022-11-20"> + enum="BooleanContained" expires_after="2023-02-12"> <owner>mcrouse@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>UI>Browser>Journeys</component> @@ -815,7 +815,7 @@ </histogram> <histogram name="History.Clusters.Backend.NumKeywordsPerCluster" - units="number keywords" expires_after="2022-11-20"> + units="number keywords" expires_after="2023-02-12"> <owner>mcrouse@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>UI>Browser>Journeys</component> @@ -905,7 +905,7 @@ </histogram> <histogram name="History.Clusters.Backend.QueryAnnotatedVisits.ThreadTime" - units="ms" expires_after="2022-11-27"> + units="ms" expires_after="2023-02-12"> <owner>sophiechang@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>UI>Browser>Journeys</component> @@ -919,7 +919,7 @@ </histogram> <histogram name="History.Clusters.Backend.QueryAnnotatedVisitsLatency" - units="ms" expires_after="2022-11-27"> + units="ms" expires_after="2023-02-12"> <owner>sophiechang@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>UI>Browser>Journeys</component> @@ -968,7 +968,7 @@ </histogram> <histogram name="History.Clusters.KeywordCache.ThreadTime" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>tommycli@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>UI>Browser>Journeys</component> @@ -981,7 +981,7 @@ </histogram> <histogram name="History.Clusters.ProcessClustersDuration" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>olivierli@chromium.org</owner> <owner>tommycli@chromium.org</owner> <component>UI>Browser>Journeys</component> @@ -1103,7 +1103,7 @@ </histogram> <histogram name="History.Clusters.WebUISessionDuration" units="ms" - expires_after="2022-11-30"> + expires_after="2023-02-12"> <owner>tommycli@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>UI>Browser>Journeys</component> @@ -1567,7 +1567,7 @@ </histogram> <histogram name="History.InMemoryURLIndexingTime.RoundTripTime" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>tommycli@chromium.org</owner> <owner>mpearson@chromium.org</owner> <component>UI>Browser>History</component> @@ -1803,7 +1803,7 @@ </histogram> <histogram name="History.VisitTableCount" units="visits" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>mpearson@chromium.org</owner> <owner>sky@chromium.org</owner> <component>UI>Browser>History</component>
diff --git a/tools/metrics/histograms/metadata/holding_space/histograms.xml b/tools/metrics/histograms/metadata/holding_space/histograms.xml index ed120bf..7d0424b 100644 --- a/tools/metrics/histograms/metadata/holding_space/histograms.xml +++ b/tools/metrics/histograms/metadata/holding_space/histograms.xml
@@ -82,7 +82,7 @@ </histogram> <histogram name="HoldingSpace.Downloads.Action.All" - enum="HoldingSpaceDownloadsAction" expires_after="2022-12-11"> + enum="HoldingSpaceDownloadsAction" expires_after="2023-02-12"> <owner>dmblack@google.com</owner> <owner>gzadina@google.com</owner> <summary> @@ -102,7 +102,7 @@ </histogram> <histogram name="HoldingSpace.Item.Action.All" enum="HoldingSpaceItemAction" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>dmblack@google.com</owner> <owner>gzadina@google.com</owner> <summary> @@ -155,7 +155,7 @@ </histogram> <histogram name="HoldingSpace.Item.FailureToLaunch.Extension" - enum="HoldingSpaceExtension" expires_after="2022-12-11"> + enum="HoldingSpaceExtension" expires_after="2023-02-12"> <owner>dmblack@google.com</owner> <owner>gzadina@google.com</owner> <summary> @@ -175,7 +175,7 @@ </histogram> <histogram name="HoldingSpace.Pod.Action.All" enum="HoldingSpacePodAction" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>dmblack@google.com</owner> <owner>gzadina@google.com</owner> <summary> @@ -195,7 +195,7 @@ </histogram> <histogram name="HoldingSpace.TimeFromFirstAvailabilityToFirstEntry" units="ms" - expires_after="2022-10-10"> + expires_after="2023-02-12"> <owner>dmblack@google.com</owner> <owner>gzadina@google.com</owner> <summary> @@ -205,7 +205,7 @@ </histogram> <histogram name="HoldingSpace.TimeFromFirstEntryToFirstPin" units="ms" - expires_after="2022-10-10"> + expires_after="2023-02-12"> <owner>dmblack@google.com</owner> <owner>gzadina@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/input/histograms.xml b/tools/metrics/histograms/metadata/input/histograms.xml index f11b8b1..84e516a 100644 --- a/tools/metrics/histograms/metadata/input/histograms.xml +++ b/tools/metrics/histograms/metadata/input/histograms.xml
@@ -38,7 +38,7 @@ </histogram> <histogram name="InputMethod.Assistive.Autocorrect.Actions" - enum="IMEAutocorrectActions" expires_after="2022-12-01"> + enum="IMEAutocorrectActions" expires_after="2023-02-12"> <owner>jopalmer@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -58,7 +58,7 @@ </histogram> <histogram name="InputMethod.Assistive.Autocorrect.Count" - enum="IMETextInputClient" expires_after="2022-12-01"> + enum="IMETextInputClient" expires_after="2023-02-12"> <owner>myy@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -100,7 +100,7 @@ </histogram> <histogram name="InputMethod.Assistive.Disabled" enum="IMEAssistiveAction" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jiwan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -171,7 +171,7 @@ </histogram> <histogram name="InputMethod.Assistive.Grammar.Actions" - enum="IMEGrammarActions" expires_after="2022-12-04"> + enum="IMEGrammarActions" expires_after="2023-02-12"> <owner>jiwan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -243,7 +243,7 @@ </histogram> <histogram name="InputMethod.Assistive.MultiWord.InputState" - enum="IMEAssistiveTextInputState" expires_after="2022-12-04"> + enum="IMEAssistiveTextInputState" expires_after="2023-02-12"> <owner>curtismcmullan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -300,7 +300,7 @@ </histogram> <histogram name="InputMethod.Assistive.Success" enum="IMEAssistiveAction" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jiwan@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -384,7 +384,7 @@ </histogram> <histogram name="InputMethod.Assistive.UserPref.Emoji" enum="BooleanEnabled" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>myy@google.com</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -831,7 +831,7 @@ </histogram> <histogram name="InputMethod.SessionDuration" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>keithlee@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -871,7 +871,7 @@ </histogram> <histogram name="InputMethod.VirtualKeyboard.BackspaceCount" units="units" - expires_after="2022-10-17"> + expires_after="2023-02-12"> <owner>shend@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary> @@ -1098,7 +1098,7 @@ </histogram> <histogram name="InputMethod.VirtualKeyboard.Layout" enum="IMEVKLayout" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>shend@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/installer/histograms.xml b/tools/metrics/histograms/metadata/installer/histograms.xml index 97576a11..5589505 100644 --- a/tools/metrics/histograms/metadata/installer/histograms.xml +++ b/tools/metrics/histograms/metadata/installer/histograms.xml
@@ -46,7 +46,7 @@ </histogram> <histogram name="Installer.PowerwashDays" units="powerwashdays" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>qianwan@google.com</owner> <owner>chromeos-data@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/interstitial/histograms.xml b/tools/metrics/histograms/metadata/interstitial/histograms.xml index 1f17a79..7f81182 100644 --- a/tools/metrics/histograms/metadata/interstitial/histograms.xml +++ b/tools/metrics/histograms/metadata/interstitial/histograms.xml
@@ -27,7 +27,7 @@ </variants> <histogram name="interstitial.captive_portal" - enum="CaptivePortalBlockingPageEvent" expires_after="2022-12-04"> + enum="CaptivePortalBlockingPageEvent" expires_after="2023-02-12"> <owner>meacer@chromium.org</owner> <owner>michaeldo@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/language/histograms.xml b/tools/metrics/histograms/metadata/language/histograms.xml index 95f649f9..20b7deec 100644 --- a/tools/metrics/histograms/metadata/language/histograms.xml +++ b/tools/metrics/histograms/metadata/language/histograms.xml
@@ -348,7 +348,7 @@ <histogram name="LanguageUsage.UI.Android.IsLocaleUpdated" enum="LanguageUsage.UI.Android.LocaleUpdateStatus" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>perrier@chromium.org</owner> <owner>chrome-language@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/login/histograms.xml b/tools/metrics/histograms/metadata/login/histograms.xml index a9b12219d..61e107c1 100644 --- a/tools/metrics/histograms/metadata/login/histograms.xml +++ b/tools/metrics/histograms/metadata/login/histograms.xml
@@ -48,7 +48,7 @@ </histogram> <histogram name="Login.ArcContinueBootImpulseStatus" - enum="ArcContinueBootImpulseStatus" expires_after="2022-12-04"> + enum="ArcContinueBootImpulseStatus" expires_after="2023-02-12"> <owner>vsomani@google.com</owner> <owner>arc-core@google.com</owner> <summary> @@ -71,7 +71,7 @@ </histogram> <histogram name="Login.ArcContinueBootImpulseTime2" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mhasank@google.com</owner> <owner>arc-core@google.com</owner> <summary> @@ -185,7 +185,7 @@ </histogram> <histogram name="Login.NumberOfUsersOnLoginScreen" units="units" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mslus@chromium.org</owner> <owner>chromeos-commercial-identity@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml index 032387f..ac3dc59 100644 --- a/tools/metrics/histograms/metadata/media/histograms.xml +++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -73,7 +73,7 @@ </histogram> <histogram name="Media.AImageReaderGLOwner.HasFence" enum="Boolean" - expires_after="2022-10-16"> + expires_after="2023-02-12"> <owner>vasilyt@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -765,7 +765,7 @@ </histogram> <histogram name="Media.Audio.OutputDeviceMixer.MixedPlaybackStatus" - enum="AudioOutputDeviceMixerMixedPlaybackStatus" expires_after="2022-12-04"> + enum="AudioOutputDeviceMixerMixedPlaybackStatus" expires_after="2023-02-12"> <owner>olka@chromium.org</owner> <owner>tguilbert@chromium.org</owner> <summary> @@ -808,7 +808,7 @@ </histogram> <histogram name="Media.Audio.OutputDeviceMixer.OvertimeCount" units="count" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>olka@chromium.org</owner> <owner>saza@chromium.org</owner> <owner>tguilbert@chromium.org</owner> @@ -876,7 +876,7 @@ </histogram> <histogram name="Media.Audio.Processing.CaptureDelayMs" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -887,7 +887,7 @@ </histogram> <histogram name="Media.Audio.Processing.CaptureDelayVarianceMs" - units="ms squared" expires_after="2022-12-11"> + units="ms squared" expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -898,7 +898,7 @@ </histogram> <histogram name="Media.Audio.Processing.RenderDelayMs" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -909,7 +909,7 @@ </histogram> <histogram name="Media.Audio.Processing.RenderDelayVarianceMs" - units="ms squared" expires_after="2022-12-11"> + units="ms squared" expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -930,7 +930,7 @@ </histogram> <histogram name="Media.Audio.Processing.TotalDelayVarianceMs" - units="ms squared" expires_after="2022-12-11"> + units="ms squared" expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -941,7 +941,7 @@ </histogram> <histogram name="Media.Audio.RawProcessingSupportedWin" enum="BooleanSupported" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>henrika@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -1061,7 +1061,7 @@ </histogram> <histogram name="Media.Audio.Render.OutputDeviceAuthorizationTimedOut" - enum="BooleanTimedOut" expires_after="2022-12-11"> + enum="BooleanTimedOut" expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -1071,7 +1071,7 @@ </histogram> <histogram name="Media.Audio.Render.OutputDeviceStartTime2" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>dalecurtis@chromium.org</owner> <owner>olka@chromium.org</owner> <owner>tguilbert@chromium.org</owner> @@ -1176,7 +1176,7 @@ </histogram> <histogram name="Media.Audio.TabAudioMuted" enum="Boolean" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>evliu@google.com</owner> <owner>chrome-media-ux@google.com</owner> <summary> @@ -1332,7 +1332,7 @@ </histogram> <histogram name="Media.AudioCapturerDroppedData" units="%" - expires_after="2023-01-22"> + expires_after="2023-02-12"> <owner>olka@chromium.org</owner> <owner>gustaf@chromium.org</owner> <summary> @@ -1359,7 +1359,7 @@ </histogram> <histogram name="Media.AudioCapturerMissedReadDeadline" units="%" - expires_after="2023-01-22"> + expires_after="2023-02-12"> <owner>olka@chromium.org</owner> <owner>gustaf@chromium.org</owner> <summary> @@ -1437,7 +1437,7 @@ </histogram> <histogram name="Media.AudioOutputController.CallbackError" enum="BooleanError" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>olka@chromium.org</owner> <owner>guidou@chromium.org</owner> <summary> @@ -1462,7 +1462,7 @@ </histogram> <histogram name="Media.AudioOutputController.ProxyStreamCreationResult" - enum="AudioOutputStreamCreationResult" expires_after="2022-12-11"> + enum="AudioOutputStreamCreationResult" expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -1476,7 +1476,7 @@ <histogram name="Media.AudioOutputController.ProxyStreamCreationResultForDeviceChange" - enum="AudioOutputStreamCreationResult" expires_after="2022-12-11"> + enum="AudioOutputStreamCreationResult" expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -1510,7 +1510,7 @@ <histogram name="Media.AudioOutputResampler.OpenLowLatencyStream" enum="AudioOutputResamplerLowLatencyOpenStreamResult" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>olka@chromium.org</owner> <owner>armax@chromium.org</owner> <owner>guidou@chromium.org</owner> @@ -1597,7 +1597,7 @@ </histogram> <histogram name="Media.AudioRendererAudioGlitches" enum="AudioGlitchResult" - expires_after="2023-02-05"> + expires_after="2023-02-12"> <owner>henrika@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -1640,7 +1640,7 @@ </histogram> <histogram name="Media.AudioRendererMissedDeadline" units="%" - expires_after="2023-02-05"> + expires_after="2023-02-12"> <owner>dalecurtis@chromium.org</owner> <owner>olka@chromium.org</owner> <summary> @@ -1761,7 +1761,7 @@ </histogram> <histogram name="Media.BreakoutBox.Usage" enum="BreakoutBoxUsage" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>guidou@chromium.org</owner> <owner>hta@chromium.org</owner> <owner>tguilbert@chromium.org</owner> @@ -1922,7 +1922,7 @@ </histogram> <histogram name="Media.Controls.Show.Audio" enum="MediaControlsShowReason" - expires_after="2022-10-30"> + expires_after="2023-02-12"> <owner>steimel@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -2413,7 +2413,7 @@ <histogram name="Media.EME.MediaFoundationService.Widevine.HardwareSecure.IsTypeSupported" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>xhwang@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -2708,7 +2708,7 @@ </histogram> <histogram name="Media.GlobalMediaControls.DeviceSelectorAvailable" - enum="Boolean" expires_after="2022-12-04"> + enum="Boolean" expires_after="2023-02-12"> <owner>steimel@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -2719,7 +2719,7 @@ </histogram> <histogram name="Media.GlobalMediaControls.DeviceSelectorOpened" enum="Boolean" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>steimel@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -2742,7 +2742,7 @@ </histogram> <histogram name="Media.GlobalMediaControls.EntryPoint" - enum="GlobalMediaControlsEntryPoint" expires_after="2022-12-11"> + enum="GlobalMediaControlsEntryPoint" expires_after="2023-02-12"> <owner>takumif@chromium.org</owner> <owner>openscreen-eng@google.com</owner> <owner>media-dev@chromium.org</owner> @@ -3085,7 +3085,7 @@ </histogram> <histogram name="Media.InputStreamDurationWithoutCallback" units="ms" - expires_after="2022-12-12"> + expires_after="2023-02-12"> <owner>olka@chromium.org</owner> <owner>henrika@chromium.org</owner> <summary> @@ -3288,7 +3288,7 @@ </histogram> <histogram name="Media.MediaFoundationRenderer.CreateMediaEngineError" - enum="Hresult" expires_after="2022-12-11"> + enum="Hresult" expires_after="2023-02-12"> <owner>xhwang@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -3352,7 +3352,7 @@ </histogram> <histogram name="Media.MediaStreamManager.DesktopVideoDeviceUpdate" - enum="MediaStreamRequestResult2" expires_after="2022-12-01"> + enum="MediaStreamRequestResult2" expires_after="2023-02-12"> <owner>eladalon@chromium.org</owner> <owner>tovep@chromium.org</owner> <summary> @@ -4143,7 +4143,7 @@ </histogram> <histogram name="Media.RtcLowLatencyVideoRenderer.AverageQueueLengthX10" - units="frames" expires_after="2022-12-11"> + units="frames" expires_after="2023-02-12"> <owner>kron@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -4154,7 +4154,7 @@ </histogram> <histogram name="Media.RtcLowLatencyVideoRenderer.DrainedFramesPermille" - units="permille" expires_after="2022-12-11"> + units="permille" expires_after="2023-02-12"> <owner>kron@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -4165,7 +4165,7 @@ </histogram> <histogram name="Media.RtcLowLatencyVideoRenderer.DroppedFramesPermille" - units="permille" expires_after="2022-12-11"> + units="permille" expires_after="2023-02-12"> <owner>kron@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -4176,7 +4176,7 @@ </histogram> <histogram name="Media.RtcLowLatencyVideoRenderer.EnterDrainModeCount" - units="count" expires_after="2022-12-11"> + units="count" expires_after="2023-02-12"> <owner>kron@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -4208,7 +4208,7 @@ </histogram> <histogram name="Media.RtcLowLatencyVideoRenderer.NoNewFrameToRenderPermille" - units="permille" expires_after="2022-12-11"> + units="permille" expires_after="2023-02-12"> <owner>kron@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -4219,7 +4219,7 @@ </histogram> <histogram name="Media.RtcLowLatencyVideoRenderer.ReduceSteadyStateCount" - units="count" expires_after="2022-12-11"> + units="count" expires_after="2023-02-12"> <owner>kron@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -4230,7 +4230,7 @@ </histogram> <histogram name="Media.RtcLowLatencyVideoRenderer.TotalFrames" units="frames" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>kron@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -4241,7 +4241,7 @@ </histogram> <histogram name="Media.RtcLowLatencyVideoRenderer.TryToRenderFrameCount" - units="count" expires_after="2022-12-11"> + units="count" expires_after="2023-02-12"> <owner>kron@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -4251,7 +4251,7 @@ </histogram> <histogram name="Media.RTCVideoDecoderError" enum="MediaStatusCode" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>posciak@chromium.org</owner> <owner>liberato@chromium.org</owner> <owner>webrtc-video@google.com</owner> @@ -4430,7 +4430,7 @@ </histogram> <histogram name="Media.Session.Play" enum="MediaSessionActionSource" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>steimel@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -4614,7 +4614,7 @@ </histogram> <histogram name="Media.VaapiVideoDecoder.DecodeError" enum="BooleanError" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mcasas@chromium.org</owner> <owner>chromeos-gfx@chromium.org</owner> <summary> @@ -4634,7 +4634,7 @@ </histogram> <histogram name="Media.VaapiWrapper.VADisplayStateInitializeSuccess" - enum="BooleanSuccess" expires_after="2022-12-04"> + enum="BooleanSuccess" expires_after="2023-02-12"> <owner>mcasas@chromium.org</owner> <owner>chromeos-gfx-video@google.com</owner> <summary> @@ -4664,7 +4664,7 @@ </histogram> <histogram name="Media.VAVDA.VaapiWrapperCreationSuccess" enum="BooleanSuccess" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mcasas@chromium.org</owner> <owner>chromeos-gfx-video@google.com</owner> <summary> @@ -4946,7 +4946,7 @@ </histogram> <histogram name="Media.VideoCapture.Mac.Device.CapturedWithRequestedResolution" - enum="ResolutionComparison" expires_after="2022-12-11"> + enum="ResolutionComparison" expires_after="2023-02-12"> <owner>eshr@google.com</owner> <owner>handellm@google.com</owner> <summary> @@ -6018,7 +6018,7 @@ </histogram> <histogram name="MediaRouter.Dial.CreateRoute" - enum="MediaRouterDialCreateRouteResult" expires_after="2022-12-11"> + enum="MediaRouterDialCreateRouteResult" expires_after="2023-02-12"> <owner>takumif@chromium.org</owner> <owner>mfoltz@chromium.org</owner> <owner>openscreen-eng@google.com</owner> @@ -6029,7 +6029,7 @@ </histogram> <histogram name="MediaRouter.Dial.FetchAppInfo" - enum="MediaRouterDialFetchAppInfoResult" expires_after="2022-12-11"> + enum="MediaRouterDialFetchAppInfoResult" expires_after="2023-02-12"> <owner>takumif@chromium.org</owner> <owner>mfoltz@chromium.org</owner> <owner>openscreen-eng@google.com</owner> @@ -6051,7 +6051,7 @@ </histogram> <histogram name="MediaRouter.Dial.ParseMessage" - enum="MediaRouterDialParseMessageResult" expires_after="2022-12-11"> + enum="MediaRouterDialParseMessageResult" expires_after="2023-02-12"> <owner>takumif@chromium.org</owner> <owner>mfoltz@chromium.org</owner> <owner>openscreen-eng@google.com</owner> @@ -6063,7 +6063,7 @@ </histogram> <histogram name="MediaRouter.Dial.ParsingError" - enum="MediaRouterDialParsingError" expires_after="2022-12-11"> + enum="MediaRouterDialParsingError" expires_after="2023-02-12"> <owner>takumif@chromium.org</owner> <owner>mfoltz@chromium.org</owner> <owner>openscreen-eng@google.com</owner> @@ -6113,7 +6113,7 @@ </histogram> <histogram name="MediaRouter.Provider.CreateRoute.Result" - enum="MediaRouteProviderResult" expires_after="2022-12-11"> + enum="MediaRouteProviderResult" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="MediaRouteProvider" --> <owner>takumif@chromium.org</owner> @@ -6141,7 +6141,7 @@ </histogram> <histogram name="MediaRouter.Provider.TerminateRoute.Result" - enum="MediaRouteProviderResult" expires_after="2022-12-11"> + enum="MediaRouteProviderResult" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="MediaRouteProvider" --> <owner>takumif@chromium.org</owner> @@ -6260,7 +6260,7 @@ </histogram> <histogram name="MediaRouter.Ui.Android.DialogAction" - enum="MediaRouterAndroidDialogAction" expires_after="2022-11-20"> + enum="MediaRouterAndroidDialogAction" expires_after="2023-02-12"> <owner>muyaoxu@google.com</owner> <owner>openscreen-eng@google.com</owner> <summary> @@ -6272,7 +6272,7 @@ </histogram> <histogram name="MediaRouter.Ui.Android.DialogType" - enum="MediaRouterAndroidDialogType" expires_after="2022-11-20"> + enum="MediaRouterAndroidDialogType" expires_after="2023-02-12"> <owner>muyaoxu@google.com</owner> <owner>openscreen-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/memory/histograms.xml b/tools/metrics/histograms/metadata/memory/histograms.xml index 6b65d36..5710c3a 100644 --- a/tools/metrics/histograms/metadata/memory/histograms.xml +++ b/tools/metrics/histograms/metadata/memory/histograms.xml
@@ -138,7 +138,7 @@ </histogram> <histogram name="HeapProfiling.SamplingIntervalKB" units="KB" - expires_after="2022-12-02"> + expires_after="2023-02-12"> <owner>joenotcharles@chromium.org</owner> <owner>chrome-memory@google.com</owner> <summary> @@ -1096,7 +1096,7 @@ </histogram> <histogram name="Memory.Experimental.Renderer.HighestPrivateMemoryFootprint" - units="MB" expires_after="2022-12-11"> + units="MB" expires_after="2023-02-12"> <owner>tasak@google.com</owner> <owner>bartekn@google.com</owner> <summary> @@ -1525,7 +1525,7 @@ </histogram> <histogram name="Memory.NativeLibrary.MappedAndResidentMemoryFootprint3" - units="KB" expires_after="2022-12-11"> + units="KB" expires_after="2023-02-12"> <owner>lizeb@chromium.org</owner> <owner>pasko@chromium.org</owner> <summary> @@ -1588,7 +1588,7 @@ </histogram> <histogram name="Memory.NetworkService.PrivateMemoryFootprint" units="MiB" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <owner>erikchen@chromium.org</owner> @@ -1759,7 +1759,7 @@ </histogram> <histogram name="Memory.OOMKills.Count" units="kills" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>vovoy@google.com</owner> <owner>wvk@google.com</owner> <summary>Cumulative count of OOM kills in one user session.</summary> @@ -2111,7 +2111,7 @@ </histogram> <histogram name="Memory.ParkableString.DiskWriteTime.5min" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>lizeb@chromium.org</owner> <owner>pasko@chromium.org</owner> <summary> @@ -2281,7 +2281,7 @@ </histogram> <histogram name="Memory.PartitionAlloc.MemoryReclaim" units="microseconds" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>lizeb@chromium.org</owner> <owner>bartekn@chromium.org</owner> <summary> @@ -2471,7 +2471,7 @@ </histogram> <histogram name="Memory.RendererProcessCount" units="processes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>creis@chromium.org</owner> <owner>nasko@chromium.org</owner> <summary> @@ -2530,7 +2530,7 @@ </histogram> <histogram name="Memory.RenderProcessHost.Count.OriginAgentClusterOverhead" - units="processes" expires_after="2022-11-27"> + units="processes" expires_after="2023-02-12"> <owner>wjmaclean@chromium.org</owner> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> @@ -2560,7 +2560,7 @@ </histogram> <histogram name="Memory.RenderProcessHost.Percent.OriginAgentClusterOverhead" - units="%" expires_after="2022-11-27"> + units="%" expires_after="2023-02-12"> <owner>wjmaclean@chromium.org</owner> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> @@ -2688,7 +2688,7 @@ </histogram> <histogram name="Memory.Total.RendererPrivateMemoryFootprint" units="MB" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>tommckee@chromium.org</owner> <summary> A rough estimate of the private memory footprint of all renderer processes.
diff --git a/tools/metrics/histograms/metadata/mobile/histograms.xml b/tools/metrics/histograms/metadata/mobile/histograms.xml index f17b5bd..f9e5927f 100644 --- a/tools/metrics/histograms/metadata/mobile/histograms.xml +++ b/tools/metrics/histograms/metadata/mobile/histograms.xml
@@ -95,7 +95,7 @@ </histogram> <histogram name="Mobile.CanonicalURLResult" enum="CanonicalURLResult" - expires_after="2022-11-13"> + expires_after="2023-02-12"> <owner>pkl@chromium.org</owner> <owner>sebsg@chromium.org</owner> <owner>tedchoc@chromium.org</owner> @@ -1036,7 +1036,7 @@ </histogram> <histogram name="MobileOmnibox.PressedClipboardSuggestionAge" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <summary> @@ -1223,7 +1223,7 @@ </histogram> <histogram name="MobileStartup.LaunchType" enum="LaunchType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>tedchoc@chromium.org</owner> <owner>twellington@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/na_cl/histograms.xml b/tools/metrics/histograms/metadata/na_cl/histograms.xml index 262dee8..e1c7ff3 100644 --- a/tools/metrics/histograms/metadata/na_cl/histograms.xml +++ b/tools/metrics/histograms/metadata/na_cl/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="NaCl.AppType" enum="NaClAppTypeEnum" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>dschuff@chromium.org</owner> <owner>fabiansommer@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml index 5ca378b1..104b91d 100644 --- a/tools/metrics/histograms/metadata/navigation/histograms.xml +++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -248,7 +248,7 @@ </histogram> <histogram name="BackForwardCache.HistoryNavigationOutcome.BlocklistedFeature" - enum="WebSchedulerTrackedFeature" expires_after="2022-12-11"> + enum="WebSchedulerTrackedFeature" expires_after="2023-02-12"> <owner>hajimehoshi@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> <summary> @@ -283,7 +283,7 @@ <histogram name="BackForwardCache.HistoryNavigationOutcome.DisabledForRenderFrameHostReason2" enum="BackForwardCacheDisabledForRenderFrameHostReason2" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>carlscab@chromium.org</owner> <owner>hajimehoshi@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> @@ -828,7 +828,7 @@ </histogram> <histogram name="Navigation.MainFrame.ThirdPartyCookieBlockingEnabled" - enum="ThirdPartyCookieBlockState" expires_after="2022-11-27"> + enum="ThirdPartyCookieBlockState" expires_after="2023-02-12"> <owner>dullweber@chromium.org</owner> <owner>feuunk@chromium.org</owner> <summary> @@ -1227,7 +1227,7 @@ </histogram> <histogram name="Navigation.RequiresDedicatedProcess" - enum="NavigationRequiresDedicatedProcess" expires_after="2022-10-09"> + enum="NavigationRequiresDedicatedProcess" expires_after="2023-02-12"> <owner>alexmos@chromium.org</owner> <owner>lukasza@chromium.org</owner> <summary> @@ -1274,7 +1274,7 @@ </histogram> <histogram name="Navigation.ThrottleDeferTime.{Event}" units="ms" - expires_after="2022-09-11"> + expires_after="2023-02-11"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -1285,7 +1285,7 @@ </histogram> <histogram name="Navigation.ThrottleExecutionTime.{Event}" units="ms" - expires_after="2022-09-11"> + expires_after="2023-02-11"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -1555,7 +1555,7 @@ </histogram> <histogram name="Prerender.Experimental.PredictionStatus.DefaultSearchEngine" - enum="PrerenderPredictionStatus" expires_after="2022-11-27"> + enum="PrerenderPredictionStatus" expires_after="2023-02-12"> <owner>asamidoi@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -1567,7 +1567,7 @@ </histogram> <histogram name="Prerender.Experimental.PredictionStatus.DirectUrlInput" - enum="PrerenderPredictionStatus" expires_after="2022-11-27"> + enum="PrerenderPredictionStatus" expires_after="2023-02-12"> <owner>asamidoi@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -1636,7 +1636,7 @@ <histogram name="Prerender.Experimental.Search.FirstCorrectPrerenderHintReceivedToRealSearchNavigationStartedDuration" - units="ms" expires_after="2022-11-27"> + units="ms" expires_after="2023-02-12"> <owner>lingqi@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -1682,7 +1682,7 @@ </histogram> <histogram name="Prerender.FinalStatus" enum="PrerenderFinalStatus" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ryansturm@chromium.org</owner> <owner>tbansal@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml index f2ff850f..6167c1c 100644 --- a/tools/metrics/histograms/metadata/net/histograms.xml +++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -90,7 +90,7 @@ </histogram> <histogram name="HttpCache.CreateDiskEntry" units="ms" - expires_after="2022-11-25"> + expires_after="2023-02-12"> <owner>yhirano@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -110,7 +110,7 @@ </summary> </histogram> -<histogram name="HttpCache.OpenDiskEntry" units="ms" expires_after="2022-11-25"> +<histogram name="HttpCache.OpenDiskEntry" units="ms" expires_after="2023-02-12"> <owner>yhirano@chromium.org</owner> <owner>net-dev@chromium.org</owner> <summary> @@ -419,7 +419,7 @@ </histogram> <histogram name="Net.ConnectionInfo.MainFrame" enum="ConnectionInfo" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>dschinazi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -569,7 +569,7 @@ </histogram> <histogram name="Net.DNS.DnsConfig.Nsswitch.Compatible" enum="BooleanValid" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ericorth@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -581,7 +581,7 @@ </histogram> <histogram name="Net.DNS.DnsConfig.Nsswitch.FileChange" enum="BooleanChanged" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ericorth@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -591,7 +591,7 @@ </histogram> <histogram name="Net.DNS.DnsConfig.Nsswitch.HostsFound" enum="BooleanFound" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ericorth@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -613,7 +613,7 @@ </histogram> <histogram name="Net.DNS.DnsConfig.Nsswitch.IncompatibleService" - enum="NsswitchService" expires_after="2022-11-27"> + enum="NsswitchService" expires_after="2023-02-12"> <owner>ericorth@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -649,7 +649,7 @@ </histogram> <histogram name="Net.DNS.DnsConfig.Nsswitch.Read" enum="BooleanReceived" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ericorth@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -661,7 +661,7 @@ </histogram> <histogram name="Net.DNS.DnsConfig.Nsswitch.TooLarge" enum="BooleanExceeded" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ericorth@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -1626,7 +1626,7 @@ </histogram> <histogram name="Net.HttpJob.PrefilterBytesRead" units="bytes" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jkarlin@chromium.org</owner> <owner>shivanisha@chromium.org</owner> <summary> @@ -3357,7 +3357,7 @@ </histogram> <histogram name="Net.QuicSession.PathValidationSuccess" enum="BooleanSuccess" - expires_after="2022-11-13"> + expires_after="2023-02-12"> <owner>renjietang@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -3366,7 +3366,7 @@ </histogram> <histogram name="Net.QuicSession.PendingStreamsWaitTime" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -4259,7 +4259,7 @@ </histogram> <histogram name="Net.RestrictedCookieManager.PartitionedCookiesInScript" - units="cookies" expires_after="2022-12-06"> + units="cookies" expires_after="2023-02-12"> <owner>dylancutler@chromium.org</owner> <owner>src/net/cookies/OWNERS</owner> <summary> @@ -4776,7 +4776,7 @@ </histogram> <histogram name="Net.SSLVersionGoogle" enum="SSLOrQUICVersion" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>davidben@chromium.org</owner> <owner>rsleevi@chromium.org</owner> <summary> @@ -5001,7 +5001,7 @@ </histogram> <histogram name="Net.URLLoaderThrottleDeferTime.WillProcessResponse.{Throttle}" - units="ms" expires_after="2022-09-13"> + units="ms" expires_after="2023-02-13"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -5012,7 +5012,7 @@ </histogram> <histogram name="Net.URLLoaderThrottleDeferTime.WillStartRequest.{Throttle}" - units="ms" expires_after="2022-09-13"> + units="ms" expires_after="2023-02-13"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -5023,7 +5023,7 @@ </histogram> <histogram name="Net.URLLoaderThrottleDeferTime.{Stage}" units="ms" - expires_after="2022-09-14"> + expires_after="2023-02-14"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -5034,7 +5034,7 @@ </histogram> <histogram name="Net.URLLoaderThrottleExecutionTime.{Stage}" units="ms" - expires_after="2022-09-14"> + expires_after="2023-02-14"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -5045,7 +5045,7 @@ </histogram> <histogram name="Net.URLRequest.ReferrerHasInformativePath" - enum="BooleanPathIsInformative" expires_after="2022-12-04"> + enum="BooleanPathIsInformative" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="ReferrerPolicySameOrigin" --> <owner>davidvc@chromium.org</owner> @@ -5059,7 +5059,7 @@ </histogram> <histogram name="Net.URLRequest.ReferrerPolicyForRequest" - enum="URLRequestReferrerPolicy" expires_after="2022-12-04"> + enum="URLRequestReferrerPolicy" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="ReferrerPolicySameOrigin" --> <owner>davidvc@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml index be334908..e4f5963 100644 --- a/tools/metrics/histograms/metadata/network/histograms.xml +++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -589,7 +589,7 @@ </histogram> <histogram name="Network.Cellular.ESim.StatusAtLogin" - enum="NetworkCellularESimProfileStatus" expires_after="2022-11-01"> + enum="NetworkCellularESimProfileStatus" expires_after="2023-02-12"> <owner>azeemarshad@chromium.org</owner> <owner>cros-connectivity@google.com</owner> <owner>hsuregan@chromium.org</owner> @@ -756,7 +756,7 @@ </histogram> <histogram name="Network.Cellular.PSim.Usage.Count" enum="NetworkCellularUsage" - expires_after="2022-11-01"> + expires_after="2023-02-12"> <owner>azeemarshad@chromium.org</owner> <owner>cros-connectivity@google.com</owner> <summary> @@ -1191,7 +1191,7 @@ </histogram> <histogram name="Network.Radio.PossibleWakeupTrigger.URLLoaderAnnotationId2" - enum="TrafficAnnotationUniqueIdHash" expires_after="2022-12-04"> + enum="TrafficAnnotationUniqueIdHash" expires_after="2023-02-12"> <owner>bashi@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -1727,7 +1727,7 @@ <histogram name="Network.Shill.SuspendActionResult" enum="ShillSuspendTerminationDarkResumeActionResult" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>stevenjb@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1737,7 +1737,7 @@ </histogram> <histogram name="Network.Shill.SuspendActionTimeTaken" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>stevenjb@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> @@ -1996,7 +1996,7 @@ </histogram> <histogram name="Network.Shill.WiFi.AdapterAllowlisted" - enum="WiFiAdapterInAllowlist" expires_after="2022-12-01"> + enum="WiFiAdapterInAllowlist" expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2007,7 +2007,7 @@ </histogram> <histogram name="Network.Shill.WiFi.Ap80211kSupport" enum="WiFiAp80211kSupport" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2059,7 +2059,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ApChannelSwitch" enum="WiFiApChannelSwitch" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2069,7 +2069,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ApDisconnectReason" enum="WiFiReasonCode" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2079,7 +2079,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ApDisconnectType" enum="WiFiStatusType" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2089,7 +2089,7 @@ </histogram> <histogram name="Network.Shill.WiFi.AssocFailureType" enum="WiFiStatusCode" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2124,7 +2124,7 @@ </histogram> <histogram name="Network.Shill.WiFi.AvailableBSSesAtConnect" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2145,7 +2145,7 @@ </histogram> <histogram name="Network.Shill.Wifi.Channel" enum="NetworkChannelType" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2155,7 +2155,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ClientDisconnectReason" - enum="WiFiReasonCode" expires_after="2022-12-01"> + enum="WiFiReasonCode" expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2165,7 +2165,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ClientDisconnectType" enum="WiFiStatusType" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2175,7 +2175,7 @@ </histogram> <histogram name="Network.Shill.WiFi.CQMNotification" - enum="WiFiCQMNotificationType" expires_after="2022-12-01"> + enum="WiFiCQMNotificationType" expires_after="2023-02-12"> <owner>kuabhs@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2187,7 +2187,7 @@ </histogram> <histogram name="Network.Shill.Wifi.DevicePresenceStatus" enum="BooleanPresent" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2197,7 +2197,7 @@ </histogram> <histogram name="Network.Shill.Wifi.Disconnect" enum="NetworkDisconnectType" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2307,7 +2307,7 @@ </histogram> <histogram name="Network.Shill.WiFi.HS20Support" enum="HotspotSupport" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>kglund@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2319,7 +2319,7 @@ </histogram> <histogram name="Network.Shill.Wifi.IPv6ConnectivityStatus" - enum="IPv6ConnectivityStatus" expires_after="2022-12-01"> + enum="IPv6ConnectivityStatus" expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2329,7 +2329,7 @@ </histogram> <histogram name="Network.Shill.WiFi.MBOSupport" enum="MBOSupport" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2351,7 +2351,7 @@ </histogram> <histogram name="Network.Shill.Wifi.NetworkConnectionIPType" - enum="NetworkConnectionIPType" expires_after="2022-12-01"> + enum="NetworkConnectionIPType" expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2381,7 +2381,7 @@ </histogram> <histogram name="Network.Shill.Wifi.PortalAttemptsToOnline" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>stevenjb@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> @@ -2394,7 +2394,7 @@ </histogram> <histogram name="Network.Shill.Wifi.PortalResult" enum="NetworkPortalResult" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>stevenjb@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> @@ -2405,7 +2405,7 @@ </histogram> <histogram name="Network.Shill.WiFi.RegulatoryDomain" enum="RegulatoryDomain" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2416,7 +2416,7 @@ </histogram> <histogram name="Network.Shill.WiFi.RememberedNetworkCount" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2444,7 +2444,7 @@ </histogram> <histogram name="Network.Shill.WiFi.RememberedUserNetworkCount" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2455,7 +2455,7 @@ </histogram> <histogram base="true" name="Network.Shill.WiFi.RoamComplete" - enum="WiFiRoamComplete" expires_after="2022-12-01"> + enum="WiFiRoamComplete" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="RoamSecurityType" --> <owner>matthewmwang@chromium.org</owner> @@ -2481,7 +2481,7 @@ </histogram> <histogram name="Network.Shill.WiFi.ScanResult" enum="WiFiScanResult" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2501,7 +2501,7 @@ </histogram> <histogram name="Network.Shill.Wifi.Security" enum="NetworkSecurityType" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2524,7 +2524,7 @@ </histogram> <histogram name="Network.Shill.Wifi.ServiceErrors" enum="NetworkServiceError" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>kuabhs@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2564,7 +2564,7 @@ </histogram> <histogram name="Network.Shill.Wifi.SignalAtDisconnect" units="negative dBm" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>kuabhs@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2574,7 +2574,7 @@ </histogram> <histogram name="Network.Shill.Wifi.SignalStrength" units="negative dBm" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>kuabhs@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2613,7 +2613,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeOnline" units="seconds" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2624,7 +2624,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeResumeToReady" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2645,7 +2645,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeToConnect" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2656,7 +2656,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeToInitialize" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2676,7 +2676,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeToOnline" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2686,7 +2686,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeToPortal" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>hugobenichi@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> @@ -2698,7 +2698,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeToRedirectFound" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>matthewmwang@chromium.org</owner> <owner>hugobenichi@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> @@ -2710,7 +2710,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeToScan" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2720,7 +2720,7 @@ </histogram> <histogram name="Network.Shill.Wifi.TimeToScanAndConnect" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2732,7 +2732,7 @@ </histogram> <histogram name="Network.Shill.WiFi.TransmitBitrateMbps" units="Mbps" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2743,7 +2743,7 @@ </histogram> <histogram name="Network.Shill.Wifi.UnreliableLinkSignalStrength" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2766,7 +2766,7 @@ </histogram> <histogram name="Network.Shill.WiFi.UserInitiatedConnectionResult" - enum="ConnectionResult" expires_after="2022-12-01"> + enum="ConnectionResult" expires_after="2023-02-12"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2988,7 +2988,7 @@ </histogram> <histogram name="NetworkService.CorsPreflightMethodAllowed" - enum="NetworkServiceCorsPreflightMethodAllowed" expires_after="2022-11-27"> + enum="NetworkServiceCorsPreflightMethodAllowed" expires_after="2023-02-12"> <owner>hiroshige@chromium.org</owner> <owner>toyoshim@chromium.org</owner> <summary> @@ -3094,7 +3094,7 @@ </histogram> <histogram name="NetworkService.MemoryCache.EntryStatus" - enum="NetworkServiceMemoryCacheEntryStatus" expires_after="2022-10-05"> + enum="NetworkServiceMemoryCacheEntryStatus" expires_after="2023-02-12"> <owner>bashi@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml index 002d03ed..b119524 100644 --- a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml +++ b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="NewTabPage.ActionAndroid2" enum="NewTabPageActionAndroid2" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>twellington@chromium.org</owner> <owner>finkm@chromium.org</owner> <summary> @@ -296,7 +296,7 @@ </histogram> <histogram name="NewTabPage.ConcretePage" enum="NewTabPageConcretePage" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>danpeng@google.com</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -307,7 +307,7 @@ </histogram> <histogram name="NewTabPage.ContentSuggestions.ArticlesListVisible" - enum="BooleanVisible" expires_after="2022-12-11"> + enum="BooleanVisible" expires_after="2023-02-12"> <owner>freedjm@chromium.org</owner> <owner>feed@chromium.org</owner> <summary> @@ -825,7 +825,7 @@ </histogram> <histogram name="NewTabPage.Customized" enum="NTPCustomizedFeatures" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -836,7 +836,7 @@ </histogram> <histogram name="NewTabPage.CustomizedShortcuts" - enum="NTPCustomizedShortcutSettings" expires_after="2022-12-11"> + enum="NTPCustomizedShortcutSettings" expires_after="2023-02-12"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -861,7 +861,7 @@ </histogram> <histogram name="NewTabPage.CustomizeShortcutAction" - enum="NTPCustomizeShortcutAction" expires_after="2022-12-11"> + enum="NTPCustomizeShortcutAction" expires_after="2023-02-12"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1171,7 +1171,7 @@ </histogram> <histogram name="NewTabPage.Modules.FreOptOut" units="count" - expires_after="2022-11-20"> + expires_after="2023-02-12"> <owner>danpeng@google.com</owner> <owner>pauladedeji@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1184,7 +1184,7 @@ </histogram> <histogram name="NewTabPage.Modules.Hover" enum="NtpModules" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>danpeng@google.com</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1232,7 +1232,7 @@ </histogram> <histogram name="NewTabPage.Modules.InfoButtonClicked" enum="NtpModules" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>danpeng@google.com</owner> <owner>pauladedeji@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1267,7 +1267,7 @@ </histogram> <histogram name="NewTabPage.Modules.LoadedModulesCount" units="count" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>danpeng@google.com</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1375,7 +1375,7 @@ </histogram> <histogram name="NewTabPage.MostVisitedMigratedDefaultAppType" - enum="TypeOfDeletedMostVisitedApp" expires_after="2022-12-11"> + enum="TypeOfDeletedMostVisitedApp" expires_after="2023-02-12"> <owner>dibyapal@chromium.org</owner> <owner>desktop-pwas-team@google.com</owner> <summary> @@ -1921,7 +1921,7 @@ </summary> </histogram> -<histogram name="NewTabPage.TimeSpent" units="ms" expires_after="2022-12-11"> +<histogram name="NewTabPage.TimeSpent" units="ms" expires_after="2023-02-12"> <owner>freedjm@chromium.org</owner> <owner>feed@chromium.org</owner> <owner>olivierrobin@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/notifications/histograms.xml b/tools/metrics/histograms/metadata/notifications/histograms.xml index 96778947..0b74ac4 100644 --- a/tools/metrics/histograms/metadata/notifications/histograms.xml +++ b/tools/metrics/histograms/metadata/notifications/histograms.xml
@@ -39,7 +39,7 @@ </histogram> <histogram name="Notifications.Android.Build" enum="BooleanSuccess" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>peter@chromium.org</owner> <owner>knollr@chromium.org</owner> <summary> @@ -350,7 +350,7 @@ </histogram> <histogram name="Notifications.Database.ExpiredNotificationCount" - units="notifications" expires_after="2022-12-11"> + units="notifications" expires_after="2023-02-12"> <owner>knollr@chromium.org</owner> <owner>peter@chromium.org</owner> <summary> @@ -425,7 +425,7 @@ </histogram> <histogram name="Notifications.Database.ReadResult" - enum="NotificationDatabaseStatus" expires_after="2022-12-04"> + enum="NotificationDatabaseStatus" expires_after="2023-02-12"> <owner>knollr@chromium.org</owner> <owner>peter@chromium.org</owner> <summary> @@ -435,7 +435,7 @@ </histogram> <histogram name="Notifications.Database.WriteResult" - enum="NotificationDatabaseStatus" expires_after="2022-12-04"> + enum="NotificationDatabaseStatus" expires_after="2023-02-12"> <owner>knollr@chromium.org</owner> <owner>peter@chromium.org</owner> <summary> @@ -666,7 +666,7 @@ </histogram> <histogram name="Notifications.PersistentNotificationActionCount" - units="buttons" expires_after="2022-12-04"> + units="buttons" expires_after="2023-02-12"> <owner>peter@chromium.org</owner> <summary> The number of action buttons the developer provided for a persistent Web @@ -675,7 +675,7 @@ </histogram> <histogram name="Notifications.PersistentNotificationDisplayResult" - enum="PersistentNotificationDisplayResult" expires_after="2022-12-11"> + enum="PersistentNotificationDisplayResult" expires_after="2023-02-12"> <owner>knollr@chromium.org</owner> <owner>peter@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/omnibox/histograms.xml b/tools/metrics/histograms/metadata/omnibox/histograms.xml index 8550b0ee..83bdc8b8 100644 --- a/tools/metrics/histograms/metadata/omnibox/histograms.xml +++ b/tools/metrics/histograms/metadata/omnibox/histograms.xml
@@ -140,7 +140,7 @@ </histogram> <histogram name="Omnibox.AnswerParseType" enum="SuggestionAnswerType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jdonnelly@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> <summary> @@ -418,7 +418,7 @@ </histogram> <histogram name="Omnibox.ClipboardSuggestionShownAge" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>gangwu@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -436,7 +436,7 @@ </histogram> <histogram name="Omnibox.ClipboardSuggestionShownNumTimes" units="units" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>gangwu@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -629,7 +629,7 @@ </histogram> <histogram name="Omnibox.EnteredKeywordMode2" enum="OmniboxEnteredKeywordMode2" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -643,7 +643,7 @@ </histogram> <histogram name="Omnibox.Escape" enum="OmniboxEscapeAction" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1065,7 +1065,7 @@ </histogram> <histogram name="Omnibox.NumTypedTerms" units="terms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1101,7 +1101,7 @@ </summary> </histogram> -<histogram name="Omnibox.PaintTime" units="ms" expires_after="2022-12-04"> +<histogram name="Omnibox.PaintTime" units="ms" expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> @@ -1122,7 +1122,7 @@ </histogram> <histogram name="Omnibox.PedalShown" enum="SuggestionPedalType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jdonnelly@chromium.org</owner> <owner>orinj@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1183,7 +1183,7 @@ </histogram> <histogram name="Omnibox.ResumeJourneyShown.ClusterKeywordScore" units="count" - expires_after="2022-12-10"> + expires_after="2023-02-12"> <owner>junzou@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1198,7 +1198,7 @@ </histogram> <histogram name="Omnibox.ResumeJourneyShown.ClusterKeywordType" - enum="HistoryClusterKeywordType" expires_after="2022-12-10"> + enum="HistoryClusterKeywordType" expires_after="2023-02-12"> <owner>junzou@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1215,7 +1215,7 @@ </histogram> <histogram name="Omnibox.ResumeJourneyShown.PageEntityCollection" - enum="OptimizationGuidePageEntityCollection" expires_after="2022-12-08"> + enum="OptimizationGuidePageEntityCollection" expires_after="2023-02-12"> <owner>junzou@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1231,7 +1231,7 @@ </histogram> <histogram name="Omnibox.RichAutocompletion.Triggered" - enum="OmniboxRichAutocompletionType" expires_after="2022-12-08"> + enum="OmniboxRichAutocompletionType" expires_after="2023-02-12"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1262,7 +1262,7 @@ </histogram> <histogram name="Omnibox.RichAutocompletion.Triggered.Any" units="Boolean" - expires_after="2022-12-08"> + expires_after="2023-02-12"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1311,7 +1311,7 @@ </histogram> <histogram name="Omnibox.SearchEngineType" enum="OmniboxSearchEngineType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1370,7 +1370,7 @@ </histogram> <histogram name="Omnibox.Start.WantAsyncMatches" enum="Boolean" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>tommycli@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <summary> @@ -1400,7 +1400,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.OfferedTabMatch" enum="BooleanOffered" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>gangwu@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> @@ -1423,7 +1423,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.Pedal" enum="SuggestionPedalType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jdonnelly@chromium.org</owner> <owner>orinj@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1462,7 +1462,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.ResumeJourney.ClusterKeywordScore" - units="count" expires_after="2022-12-10"> + units="count" expires_after="2023-02-12"> <owner>junzou@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1482,7 +1482,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.ResumeJourney.ClusterKeywordType" - enum="HistoryClusterKeywordType" expires_after="2022-12-10"> + enum="HistoryClusterKeywordType" expires_after="2023-02-12"> <owner>junzou@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1535,7 +1535,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.ResumeJourney.PageEntityCollection" - enum="OptimizationGuidePageEntityCollection" expires_after="2022-12-08"> + enum="OptimizationGuidePageEntityCollection" expires_after="2023-02-12"> <owner>junzou@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1657,7 +1657,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.ResumeJourneyCTR" - enum="BooleanSelected" expires_after="2022-12-01"> + enum="BooleanSelected" expires_after="2023-02-12"> <owner>tommycli@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <summary> @@ -1678,7 +1678,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.RichAutocompletion" - enum="OmniboxRichAutocompletionType" expires_after="2022-12-08"> + enum="OmniboxRichAutocompletionType" expires_after="2023-02-12"> <owner>manukh@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1701,7 +1701,7 @@ <histogram name="Omnibox.SuggestionUsed.Search.Experimental.NavigationToFirstMeaningfulPaint" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1712,7 +1712,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.Search.InputToNavigationStart" - units="ms" expires_after="2022-12-01"> + units="ms" expires_after="2023-02-12"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1737,7 +1737,7 @@ <histogram name="Omnibox.SuggestionUsed.Search.NavigationToLargestContentfulPaint2" - units="ms" expires_after="2022-11-27"> + units="ms" expires_after="2023-02-12"> <owner>asamidoi@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <owner>chrome-omnibox-team@google.com</owner> @@ -1766,7 +1766,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.SelectedTabMatch" - enum="BooleanSelected" expires_after="2022-12-11"> + enum="BooleanSelected" expires_after="2023-02-12"> <owner>gangwu@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>jdonnelly@chromium.org</owner> @@ -1807,7 +1807,7 @@ </histogram> <histogram name="Omnibox.SuggestionUsed.URL.InputToNavigationStart" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <owner>chrome-omnibox-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/oobe/histograms.xml b/tools/metrics/histograms/metadata/oobe/histograms.xml index c6221c1b..b99a5fd 100644 --- a/tools/metrics/histograms/metadata/oobe/histograms.xml +++ b/tools/metrics/histograms/metadata/oobe/histograms.xml
@@ -180,7 +180,7 @@ </variants> <histogram name="OOBE.ArcTermsOfServiceScreen.ReviewFollowingSetup" - enum="BooleanChecked" expires_after="2022-12-04"> + enum="BooleanChecked" expires_after="2023-02-12"> <owner>raleksandrov@google.com</owner> <owner>cros-oac@google.com</owner> <summary> @@ -190,7 +190,7 @@ </histogram> <histogram name="OOBE.ArcTermsOfServiceScreen.UserActions" - enum="ArcTosScreenUserActions" expires_after="2022-12-13"> + enum="ArcTosScreenUserActions" expires_after="2023-02-12"> <owner>osamafathy@google.com</owner> <owner>cros-oac@google.com</owner> <summary> @@ -253,7 +253,7 @@ </histogram> <histogram name="OOBE.EulaScreen.UserActions" enum="EulaScreenUserAction" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>raleksandrov@google.com</owner> <owner>cros-oac@google.com</owner> <summary> @@ -284,7 +284,7 @@ </summary> </histogram> -<histogram name="OOBE.GaiaLoginTime" units="ms" expires_after="2022-12-01"> +<histogram name="OOBE.GaiaLoginTime" units="ms" expires_after="2023-02-12"> <owner>dkuzmin@google.com</owner> <owner>cros-oac@google.com</owner> <summary> @@ -295,7 +295,7 @@ </histogram> <histogram name="OOBE.GaiaPasswordChangedScreen.UserActions" - enum="GaiaPasswordChangedScreenUserAction" expires_after="2022-12-04"> + enum="GaiaPasswordChangedScreenUserAction" expires_after="2023-02-12"> <owner>raleksandrov@google.com</owner> <owner>cros-oac@google.com</owner> <summary> @@ -676,7 +676,7 @@ </histogram> <histogram name="OOBE.UpdateScreen.StageTime.Check" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>dkuzmin@google.com</owner> <owner>cros-oac@google.com</owner> <summary> @@ -769,7 +769,7 @@ </histogram> <histogram name="OOBE.WelcomeScreen.AcceptChromeVoxHint" enum="BooleanEnabled" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>akihiroota@google.com</owner> <owner>cros-oac@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml index c2b2a74b..e51f36a91 100644 --- a/tools/metrics/histograms/metadata/optimization/histograms.xml +++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -153,7 +153,7 @@ </histogram> <histogram name="OptimizationGuide.ClearFetchedHints.StoreAvailable" - enum="BooleanAvailable" expires_after="2022-11-27"> + enum="BooleanAvailable" expires_after="2023-02-12"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -187,7 +187,7 @@ </histogram> <histogram name="OptimizationGuide.HintCache.HintType.Loaded" - enum="HintCacheStoreEntryType" expires_after="M109"> + enum="HintCacheStoreEntryType" expires_after="2023-02-12"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -198,7 +198,7 @@ <histogram name="OptimizationGuide.HintCacheLevelDBStore.LoadMetadataResult" enum="OptimizationGuideHintCacheLevelDBStoreLoadMetadataResult" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -209,7 +209,7 @@ <histogram name="OptimizationGuide.HintCacheLevelDBStore.Status" enum="OptimizationGuideHintCacheLevelDBStoreStatus" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -729,7 +729,7 @@ <histogram name="OptimizationGuide.PageContentAnnotationsService.ContentAnnotationsStorageStatus" enum="OptimizationGuidePageContentAnnotationsStorageStatus" - expires_after="2022-12-25"> + expires_after="2023-02-12"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -1141,7 +1141,7 @@ <histogram name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.NetErrorCode" - enum="NetErrorCodes" expires_after="2022-12-25"> + enum="NetErrorCodes" expires_after="2023-02-12"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -1171,7 +1171,7 @@ <histogram name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.Status" - enum="HttpResponseCode" expires_after="2022-12-25"> + enum="HttpResponseCode" expires_after="2023-02-12"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -1346,7 +1346,7 @@ </histogram> <histogram name="OptimizationGuide.RemoteFetchingEnabled" enum="BooleanEnabled" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 20af7090..0bd10b7a 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -995,7 +995,7 @@ </histogram> <histogram name="Autocomplete.Events" enum="AutocompleteEvents" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>seblalancette@chromium.org</owner> <summary> Autocomplete events recorded when the user interacts with suggestions served @@ -1112,7 +1112,7 @@ <histogram name="AutocompleteActionPredictor.NoStatePrefetchStatus" enum="AutocompleteActionPredictorPredictionStatus" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <summary> @@ -1916,7 +1916,7 @@ </histogram> <histogram name="Cast.Sender.Clank.NotificationControlsAction" - enum="CastNotificationControls" expires_after="2022-12-11"> + enum="CastNotificationControls" expires_after="2023-02-12"> <owner>muyaoxu@google.com</owner> <owner>openscreen-eng@google.com</owner> <summary> @@ -1995,7 +1995,7 @@ </histogram> <histogram name="Cast.Sender.RemotePlayback.InitiationLocation" - enum="RemotePlaybackInitiationLocation" expires_after="2022-12-11"> + enum="RemotePlaybackInitiationLocation" expires_after="2023-02-12"> <owner>muyaoxu@google.com</owner> <owner>openscreen-eng@google.com</owner> <summary> @@ -2806,7 +2806,7 @@ </histogram> <histogram name="ClientHints.AcceptCHFrame" enum="AcceptCHFrameRestart" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>aarontag@chromium.org</owner> <owner>miketaylr@chromium.org</owner> <summary> @@ -2818,7 +2818,7 @@ </histogram> <histogram name="ClientHints.CriticalCHRestart" enum="CriticalCHRestart" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>aarontag@chromium.org</owner> <owner>miketaylr@chromium.org</owner> <summary> @@ -3217,7 +3217,7 @@ </histogram> <histogram base="true" name="ContextMenu.SelectedOptionDesktop" - enum="ContextMenuOptionDesktop" expires_after="2022-12-11"> + enum="ContextMenuOptionDesktop" expires_after="2023-02-12"> <owner>avi@chromium.org</owner> <owner>mpearson@chromium.org</owner> <summary> @@ -3318,7 +3318,7 @@ </histogram> <histogram name="ContextMenu.URLClicked" enum="BooleanClicked" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>twellington@chromium.org</owner> <owner>clank-app-team@google.com</owner> <summary>Logged when the URL is clicked. Android only.</summary> @@ -3596,7 +3596,7 @@ </histogram> <histogram name="Conversions.CreateReportStatus3" - enum="ConversionStorageCreateReportStatus" expires_after="2022-12-04"> + enum="ConversionStorageCreateReportStatus" expires_after="2023-02-12"> <owner>apaseltiner@chromium.org</owner> <owner>johnidel@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -3741,7 +3741,7 @@ </histogram> <histogram name="Conversions.RegisterConversionAllowed" enum="BooleanAllowed" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>apaseltiner@chromium.org</owner> <owner>johnidel@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -3857,7 +3857,7 @@ </histogram> <histogram name="Conversions.ReportsDeletedInDataClearOperation" - units="conversions" expires_after="2022-12-04"> + units="conversions" expires_after="2023-02-12"> <owner>johnidel@chromium.org</owner> <owner>csharrison@chromium.org</owner> <owner>linnan@chromium.org</owner> @@ -3937,7 +3937,7 @@ </histogram> <histogram name="Conversions.SourceDataHandleStatus" - enum="ConversionDataHandleStatus" expires_after="2022-12-11"> + enum="ConversionDataHandleStatus" expires_after="2023-02-12"> <owner>linnan@chromium.org</owner> <owner>johnidel@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -4031,7 +4031,7 @@ </histogram> <histogram name="Conversions.TriggerDataHandleStatus" - enum="ConversionDataHandleStatus" expires_after="2022-12-11"> + enum="ConversionDataHandleStatus" expires_after="2023-02-12"> <owner>linnan@chromium.org</owner> <owner>johnidel@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -4043,7 +4043,7 @@ </histogram> <histogram name="Conversions.TriggerQueueDelay" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>apaseltiner@chromium.org</owner> <owner>johnidel@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -4346,7 +4346,7 @@ </histogram> <histogram name="Crypto.TPMSupport2" enum="TPMSupport" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>agl@chromium.org</owner> <owner>davidben@chromium.org</owner> <owner>wfh@chromium.org</owner> @@ -4743,7 +4743,7 @@ </histogram> <histogram name="DisplayManager.InternalDisplayZoomPercentage" units="%" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>zentaro@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -4791,7 +4791,7 @@ </histogram> <histogram name="DisplayManager.MultiDisplayMode" enum="MultiDisplayModes" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>zentaro@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -4997,7 +4997,7 @@ </histogram> <histogram name="DocumentScan.ScanRequested" enum="DocumentScanSaneBackend" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>bmgordon@chromium.org</owner> <owner>project-bolton@google.com</owner> <summary> @@ -5372,7 +5372,7 @@ </histogram> <histogram name="Eche.Connectivity.Latency" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>samchiu@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -5382,7 +5382,7 @@ </histogram> <histogram name="Eche.NotificationClicked" enum="EcheNotificationInteraction" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>samchiu@chromium.org</owner> <owner>andychou@chromium.org</owner> <summary> @@ -5392,7 +5392,7 @@ </histogram> <histogram name="Eche.Onboarding.UserAction" enum="OnboardingUserActionMetric" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>paulzchen@google.com</owner> <owner>andychou@google.com</owner> <owner>samchiu@google.com</owner> @@ -5403,7 +5403,7 @@ </histogram> <histogram name="Eche.StreamEvent" enum="StreamState" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>paulzchen@google.com</owner> <owner>andychou@google.com</owner> <summary> @@ -6016,7 +6016,7 @@ </histogram> <histogram name="Feedback.RequestSource" enum="FeedbackSource" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>afakhry@chromium.org</owner> <owner>cros-telemetry@google.com</owner> <summary>Records the source that requested showing the feedback app.</summary> @@ -6771,13 +6771,13 @@ </summary> </histogram> -<histogram name="Hyphenation.Open" units="ms" expires_after="2022-11-27"> +<histogram name="Hyphenation.Open" units="ms" expires_after="2023-02-12"> <owner>kojii@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary>The time it takes to open a hyphenation dictionary.</summary> </histogram> -<histogram name="Hyphenation.Open.File" units="ms" expires_after="2022-12-11"> +<histogram name="Hyphenation.Open.File" units="ms" expires_after="2023-02-12"> <owner>kojii@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary>The time it takes to open a hyphenation dictionary file.</summary> @@ -7281,14 +7281,14 @@ </histogram> <histogram name="Kiosk.Launch.CryptohomeFailure" enum="LoginFailureReason" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xiyuan@chromium.org</owner> <owner>apotapchuk@chromium.org</owner> <summary>Tracks cryptohome failure during kiosk launch.</summary> </histogram> <histogram name="Kiosk.Launch.Error" enum="KioskLaunchError" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xiyuan@chromium.org</owner> <owner>apotapchuk@chromium.org</owner> <summary> @@ -7744,7 +7744,7 @@ </histogram> <histogram name="Lens.Omnibox.LensSupportStatus" enum="LensSupportStatus" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>yusuyoutube@google.com</owner> <owner>benwgold@google.com</owner> <owner>fgorski@chromium.org</owner> @@ -8487,7 +8487,7 @@ </histogram> <histogram name="Mouse.PointerSensitivity.Changed" enum="PointerSensitivity" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>zentaro@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -8663,7 +8663,7 @@ </histogram> <histogram name="NativeSmbFileShare.MountResult" - enum="NativeSmbFileShare_MountResult" expires_after="2022-12-01"> + enum="NativeSmbFileShare_MountResult" expires_after="2023-02-12"> <owner>simmonsjosh@google.com</owner> <owner>src/chrome/browser/ash/smb_client/OWNERS</owner> <summary> @@ -9022,7 +9022,7 @@ </histogram> <histogram name="OAuth2Login.SessionRestore" enum="GaiaSessionRestoreOutcome" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>anastasiian@chromium.org</owner> <owner>sinhak@chromium.org</owner> <summary>Outcome of Chrome OS GAIA cookie session restore process.</summary> @@ -10099,7 +10099,7 @@ </histogram> <histogram name="PrefetchedSignedExchangeCache.Count" units="count" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>ksakamoto@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -10600,7 +10600,7 @@ </histogram> <histogram name="PushMessaging.UnregistrationReason" - enum="PushUnregistrationReason" expires_after="2022-12-04"> + enum="PushUnregistrationReason" expires_after="2023-02-12"> <owner>peter@chromium.org</owner> <owner>knollr@chromium.org</owner> <summary> @@ -12618,7 +12618,7 @@ </histogram> <histogram name="SiteIsolatedCodeCache.JS.FetchCodeCache" units="ms" - expires_after="2022-11-25"> + expires_after="2023-02-12"> <owner>yhirano@chromium.org</owner> <owner>loading-dev@google.com</owner> <summary> @@ -13113,7 +13113,7 @@ </histogram> <histogram name="SubresourceWebBundles.ContentLength" units="bytes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>horo@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -13123,14 +13123,14 @@ </histogram> <histogram name="SubresourceWebBundles.LoadResult" - enum="SubresourceWebBundleLoadResult" expires_after="2022-12-11"> + enum="SubresourceWebBundleLoadResult" expires_after="2023-02-12"> <owner>horo@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary>The result of loading subresource web bundles.</summary> </histogram> <histogram name="SubresourceWebBundles.MaxMemoryUsagePerProcess" units="bytes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>horo@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -13141,7 +13141,7 @@ </histogram> <histogram name="SubresourceWebBundles.ReceivedSize" units="bytes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>horo@chromium.org</owner> <owner>webpackage-dev@chromium.org</owner> <summary> @@ -13231,7 +13231,7 @@ </histogram> <histogram name="Tablet.CountOfVolumeAdjustType" units="numbers" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>minch@chromium.org</owner> <owner>omrilio@chromium.org</owner> <summary> @@ -13921,7 +13921,7 @@ </histogram> <histogram name="Tracing.Background.FinalizationDisallowedReason" - enum="TracingFinalizationDisallowedReason" expires_after="2022-12-11"> + enum="TracingFinalizationDisallowedReason" expires_after="2023-02-12"> <owner>ssid@chromium.org</owner> <summary> Reason why background tracing finalization was not allowed. Also see @@ -13930,11 +13930,16 @@ </summary> </histogram> -<histogram name="Tracing.Background.FinalizingTraceSizeInKB" units="KB" +<histogram name="Tracing.Background.FinalizingTraceSizeInKB2" units="KB" expires_after="2023-01-15"> - <owner>oysteine@chromium.org</owner> + <owner>oksamyt@chromium.org</owner> + <owner>tracing@chromium.org</owner> + <owner>chrometto-team@google.com</owner> <summary> - The size, in kilobytes, of a finalized trace ready to be uploaded. + The size, in kilobytes, of a finalized trace ready to be uploaded. Values + can range from 1KB to 100MB. This replaces + Tracing.Background.FinalizingTraceSizeInKB, which had a minimum of 1MB and + was not precise enough for WebView traces. </summary> </histogram> @@ -13957,7 +13962,7 @@ </histogram> <histogram name="Tracing.Background.ScenarioState" - enum="BackgroundTracingState" expires_after="2022-12-11"> + enum="BackgroundTracingState" expires_after="2023-02-12"> <owner>oysteine@chromium.org</owner> <summary> Records state of the Background Tracing system, from when scenarios are @@ -13994,7 +13999,7 @@ </summary> </histogram> -<histogram name="UI.DeviceScale" units="%" expires_after="2022-11-27"> +<histogram name="UI.DeviceScale" units="%" expires_after="2023-02-12"> <owner>bsep@chromium.org</owner> <summary> The device scales available on the system at startup. A system may report @@ -14743,7 +14748,7 @@ </histogram> <histogram name="VoiceInteraction.VoiceResultConfidenceValue" units="%" - expires_after="2023-01-15"> + expires_after="2023-02-12"> <owner>jds@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -14886,7 +14891,7 @@ </histogram> <histogram name="WebFont.CacheHit" enum="WebFontCacheHit" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>hajimehoshi@chromium.org</owner> <owner>kenjibaheux@chromium.org</owner> <owner>kouhei@chromium.org</owner> @@ -15361,7 +15366,7 @@ </histogram> <histogram name="WhatsNew.LoadEvent" enum="WhatsNewLoadEvent" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>rbpotter@chromium.org</owner> <owner>mahmadi@chromium.org</owner> <summary> @@ -15387,7 +15392,7 @@ </histogram> <histogram name="WhatsNew.StartupType" enum="WhatsNewStartupType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>rbpotter@chromium.org</owner> <owner>mahmadi@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index 33b0463..61dd603 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -61,7 +61,7 @@ </variants> <histogram name="PageActionController.ExtensionsWithPageActions" units="units" - expires_after="2022-11-13"> + expires_after="2023-02-12"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -306,7 +306,7 @@ </histogram> <histogram name="PageLoad.Clients.Ads.Resources.Bytes.Ads2" units="KB" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>johnidel@chromium.org</owner> <owner>jkarlin@chromium.org</owner> <summary> @@ -450,7 +450,7 @@ <histogram name="PageLoad.Clients.AMP.LayoutInstability.CumulativeShiftScore.Subframe" - units="scorex10" expires_after="2022-12-11"> + units="scorex10" expires_after="2023-02-12"> <owner>bmcquade@chromium.org</owner> <owner>skobes@chromium.org</owner> <owner>sullivan@chromium.org</owner> @@ -546,7 +546,7 @@ <histogram name="PageLoad.Clients.AMP.PaintTiming.InputToFirstContentfulPaint.Subframe" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>bmcquade@chromium.org</owner> <owner>sullivan@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> @@ -562,7 +562,7 @@ <histogram name="PageLoad.Clients.AMP.PaintTiming.InputToFirstContentfulPaint.Subframe.FullNavigation" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>bmcquade@chromium.org</owner> <owner>sullivan@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> @@ -577,7 +577,7 @@ <histogram name="PageLoad.Clients.AMP.PaintTiming.InputToLargestContentfulPaint.Subframe" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>bmcquade@chromium.org</owner> <owner>sullivan@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> @@ -1431,7 +1431,7 @@ </histogram> <histogram name="PageLoad.Experimental.InputTiming.InputToNavigationStart" - units="ms" expires_after="2022-12-01"> + units="ms" expires_after="2023-02-12"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <summary> @@ -1442,7 +1442,7 @@ <histogram name="PageLoad.Experimental.InputTiming.InputToNavigationStart.Background" - units="ms" expires_after="2022-12-01"> + units="ms" expires_after="2023-02-12"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <summary> @@ -1453,7 +1453,7 @@ <histogram name="PageLoad.Experimental.InputTiming.InputToNavigationStart.FromLinkClick" - units="ms" expires_after="2022-12-01"> + units="ms" expires_after="2023-02-12"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <summary> @@ -1464,7 +1464,7 @@ <histogram name="PageLoad.Experimental.InputTiming.InputToNavigationStart.FromOmnibox" - units="ms" expires_after="2022-12-01"> + units="ms" expires_after="2023-02-12"> <owner>spelchat@chromium.org</owner> <owner>chrome-brapp-loading@google.com</owner> <summary> @@ -1715,7 +1715,7 @@ <histogram name="PageLoad.Experimental.PageTiming.CommitSentToFirstSubresourceLoadStart" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -1777,7 +1777,7 @@ <histogram name="PageLoad.Experimental.PaintTiming.FirstEligibleToPaintToFirstPaint" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>cduvall@chromium.org</owner> <owner>jam@chromium.org</owner> <summary> @@ -1863,7 +1863,7 @@ </histogram> <histogram name="PageLoad.Experimental.TotalForegroundDuration" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>npm@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -2723,7 +2723,7 @@ </histogram> <histogram name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>npm@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -2758,7 +2758,7 @@ <histogram name="PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.MainFrame" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>npm@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -2770,7 +2770,7 @@ </histogram> <histogram name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> @@ -2819,7 +2819,7 @@ </histogram> <histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>bmcquade@chromium.org</owner> <owner>csharrison@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml index 4c7d9769..698c8a6 100644 --- a/tools/metrics/histograms/metadata/password/histograms.xml +++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -119,7 +119,7 @@ </histogram> <histogram name="KeyboardAccessory.AccessorySheetSuggestionsSelected" - enum="AccessorySuggestionType" expires_after="2022-11-20"> + enum="AccessorySuggestionType" expires_after="2023-02-12"> <owner>fhorschig@chromium.org</owner> <owner>ioanap@chromium.org</owner> <summary> @@ -140,7 +140,7 @@ </histogram> <histogram name="KeyboardAccessory.AccessoryToggleClicked" - enum="AccessoryToggleType" expires_after="2022-12-04"> + enum="AccessoryToggleType" expires_after="2023-02-12"> <owner>ioanap@chromium.org</owner> <owner>fhorschig@chromium.org</owner> <summary> @@ -261,7 +261,7 @@ </histogram> <histogram name="PasswordGeneration.SubmissionEvent" - enum="PasswordSubmissionEvent" expires_after="2022-12-11"> + enum="PasswordSubmissionEvent" expires_after="2023-02-12"> <owner>kazinova@google.com</owner> <owner>kolos@chromium.org</owner> <summary> @@ -355,7 +355,7 @@ </histogram> <histogram name="PasswordManager.AccountStorage.ClearedOnStartup" - enum="PasswordAccountStoreClearedOnStartup" expires_after="2022-12-04"> + enum="PasswordAccountStoreClearedOnStartup" expires_after="2023-02-12"> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> <summary> @@ -365,7 +365,7 @@ </histogram> <histogram name="PasswordManager.AccountStorage.ClearedOptInForAllAccounts" - units="accounts" expires_after="2022-12-04"> + units="accounts" expires_after="2023-02-12"> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> <summary> @@ -377,7 +377,7 @@ </histogram> <histogram name="PasswordManager.AccountStorage.MoveToAccountStoreFlowAccepted" - enum="PasswordManager.MoveToAccountStoreTrigger" expires_after="2022-12-04"> + enum="PasswordManager.MoveToAccountStoreTrigger" expires_after="2023-02-12"> <owner>treib@chromium.org</owner> <owner>victorvianna@google.com</owner> <owner>mamir@chromium.org</owner> @@ -390,7 +390,7 @@ </histogram> <histogram name="PasswordManager.AccountStorage.MoveToAccountStoreFlowOffered" - enum="PasswordManager.MoveToAccountStoreTrigger" expires_after="2022-12-04"> + enum="PasswordManager.MoveToAccountStoreTrigger" expires_after="2023-02-12"> <owner>treib@chromium.org</owner> <owner>victorvianna@google.com</owner> <owner>mamir@chromium.org</owner> @@ -418,7 +418,7 @@ </histogram> <histogram name="PasswordManager.AccountStorage.NumOptedInAccountsAfterOptIn" - units="accounts" expires_after="2022-12-04"> + units="accounts" expires_after="2023-02-12"> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> <summary> @@ -469,7 +469,7 @@ </histogram> <histogram base="true" name="PasswordManager.AccountStorageUserStateDuration" - units="ms" expires_after="2022-12-04"> + units="ms" expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="PasswordAccountStorageUserState" --> <owner>mamir@chromium.org</owner> @@ -513,7 +513,7 @@ </histogram> <histogram name="PasswordManager.AccountStoreCredentialsAfterOptIn" - units="credentials" expires_after="2022-12-04"> + units="credentials" expires_after="2023-02-12"> <owner>treib@chromium.org</owner> <owner>mamir@chromium.org</owner> <summary> @@ -721,7 +721,7 @@ </histogram> <histogram name="PasswordManager.AffiliationService.GetChangePasswordUsage" - enum="GetChangePasswordUrlMetric" expires_after="2022-12-11"> + enum="GetChangePasswordUrlMetric" expires_after="2023-02-12"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -901,7 +901,7 @@ </histogram> <histogram name="PasswordManager.BiometricAuthPwdFill.AuthResult" - enum="BiometricAuthResult" expires_after="2022-12-11"> + enum="BiometricAuthResult" expires_after="2023-02-12"> <owner>ioanap@chromium.org</owner> <owner>fhorschig@chromium.org</owner> <summary> @@ -923,7 +923,7 @@ </histogram> <histogram name="PasswordManager.BubbleSuppression.AccountsInStatisticsTable" - units="accounts" expires_after="2022-11-30"> + units="accounts" expires_after="2023-02-12"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -1141,7 +1141,7 @@ </histogram> <histogram name="PasswordManager.CertificateErrorsWhileSeeingForms" - enum="PasswordCertificateError" expires_after="2022-12-04"> + enum="PasswordCertificateError" expires_after="2023-02-12"> <owner>battre@chromium.org</owner> <owner>kazinova@google.com</owner> <owner>chrome-password-manager-metrics-alerts@google.com</owner> @@ -1484,7 +1484,7 @@ </histogram> <histogram name="PasswordManager.FillingSource" - enum="PasswordManagerFillingSource" expires_after="2022-12-11"> + enum="PasswordManagerFillingSource" expires_after="2023-02-12"> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> <summary> @@ -1736,7 +1736,7 @@ </histogram> <histogram name="PasswordManager.LeakDetection.IsPasswordReused" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>vasilii@chromium.org</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -1974,7 +1974,7 @@ </histogram> <histogram name="PasswordManager.NonSyncPasswordHashChange" - enum="GaiaPasswordHashChange" expires_after="2022-12-04"> + enum="GaiaPasswordHashChange" expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2126,7 +2126,7 @@ </histogram> <histogram name="PasswordManager.PasswordExport.Event" - enum="PasswordExportEvent" expires_after="2022-11-20"> + enum="PasswordExportEvent" expires_after="2023-02-12"> <owner>ioanap@chromium.org</owner> <owner>kazinova@google.com</owner> <summary> @@ -2148,7 +2148,7 @@ </histogram> <histogram name="PasswordManager.PasswordReuse.NumberOfMatches" - units="credentials" expires_after="2022-12-11"> + units="credentials" expires_after="2023-02-12"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2164,7 +2164,7 @@ </histogram> <histogram name="PasswordManager.PasswordReuse.PasswordFieldDetected" - enum="PasswordReusePasswordFieldDetected" expires_after="2022-12-04"> + enum="PasswordReusePasswordFieldDetected" expires_after="2023-02-12"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2757,7 +2757,7 @@ </histogram> <histogram name="PasswordManager.RequirementsSpecFetcher.NetErrorCode" - enum="NetErrorCodes" expires_after="2022-12-04"> + enum="NetErrorCodes" expires_after="2023-02-12"> <owner>kazinova@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -2766,7 +2766,7 @@ </histogram> <histogram name="PasswordManager.RequirementsSpecFetcher.NetworkDuration" - units="ms" expires_after="2022-12-04"> + units="ms" expires_after="2023-02-12"> <owner>kazinova@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -2776,7 +2776,7 @@ </histogram> <histogram name="PasswordManager.RequirementsSpecFetcher.Result" - enum="PasswordRequirementsFetcherResult" expires_after="2022-12-04"> + enum="PasswordRequirementsFetcherResult" expires_after="2023-02-12"> <owner>kazinova@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -2862,7 +2862,7 @@ <histogram name="PasswordManager.SaveUIOnClearedPasswordChangeFormDismissalReason" - enum="PasswordManagerUIDismissalReason" expires_after="2022-12-04"> + enum="PasswordManagerUIDismissalReason" expires_after="2023-02-12"> <owner>kazinova@google.com</owner> <owner>khamutov@google.com</owner> <summary> @@ -2925,7 +2925,7 @@ </histogram> <histogram name="PasswordManager.StoresUsedForFillingInLast28Days" - enum="PasswordManagerFillingSource" expires_after="2022-12-11"> + enum="PasswordManagerFillingSource" expires_after="2023-02-12"> <owner>mamir@chromium.org</owner> <owner>treib@chromium.org</owner> <summary> @@ -3080,7 +3080,7 @@ </histogram> <histogram name="PasswordManager.SyncPasswordHashChange" - enum="GaiaPasswordHashChange" expires_after="2022-12-04"> + enum="GaiaPasswordHashChange" expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3304,7 +3304,7 @@ <histogram name="PasswordManager.UpdateUIOnClearedPasswordChangeFormDismissalReason" - enum="PasswordManagerUIDismissalReason" expires_after="2022-12-04"> + enum="PasswordManagerUIDismissalReason" expires_after="2023-02-12"> <owner>kazinova@google.com</owner> <owner>khamutov@google.com</owner> <summary> @@ -3640,7 +3640,7 @@ </histogram> <histogram name="PasswordProtection.ModalWarningDialogLifetime" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3651,7 +3651,7 @@ </histogram> <histogram name="PasswordProtection.PageInfoAction" - enum="PasswordProtectionWarningAction" expires_after="2022-11-27"> + enum="PasswordProtectionWarningAction" expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3688,7 +3688,7 @@ </histogram> <histogram name="PasswordProtection.PasswordReuseSyncAccountType" - enum="PasswordProtectionSyncAccountType" expires_after="2022-11-27"> + enum="PasswordProtectionSyncAccountType" expires_after="2023-02-12"> <owner>nwokedi@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3699,7 +3699,7 @@ </histogram> <histogram name="PasswordProtection.RequestNetworkDuration" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/payment/histograms.xml b/tools/metrics/histograms/metadata/payment/histograms.xml index 25af47e..4125ddda 100644 --- a/tools/metrics/histograms/metadata/payment/histograms.xml +++ b/tools/metrics/histograms/metadata/payment/histograms.xml
@@ -66,7 +66,7 @@ </histogram> <histogram name="PaymentRequest.EventResponse.CanMakePayment" enum="Boolean" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>rouslan@chromium.org</owner> <owner>web-payments-team@google.com</owner> <summary> @@ -82,7 +82,7 @@ </histogram> <histogram name="PaymentRequest.EventResponse.IsReadyToPay" enum="Boolean" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>rouslan@chromium.org</owner> <owner>web-payments-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/pdf/histograms.xml b/tools/metrics/histograms/metadata/pdf/histograms.xml index 52f5bf0..1e3b0d3 100644 --- a/tools/metrics/histograms/metadata/pdf/histograms.xml +++ b/tools/metrics/histograms/metadata/pdf/histograms.xml
@@ -104,7 +104,7 @@ </summary> </histogram> -<histogram name="PDF.Version" enum="PDFVersion" expires_after="2022-12-11"> +<histogram name="PDF.Version" enum="PDFVersion" expires_after="2023-02-12"> <owner>dhoss@chromium.org</owner> <owner>thestig@chromium.org</owner> <summary>Tracks versions of documents opened in the PDF viewer.</summary>
diff --git a/tools/metrics/histograms/metadata/permissions/histograms.xml b/tools/metrics/histograms/metadata/permissions/histograms.xml index ac5eb4b..01e089f 100644 --- a/tools/metrics/histograms/metadata/permissions/histograms.xml +++ b/tools/metrics/histograms/metadata/permissions/histograms.xml
@@ -137,7 +137,7 @@ </histogram> <histogram name="Permissions.AutoBlocker.EmbargoStatus" - enum="PermissionEmbargoStatus" expires_after="2022-10-24"> + enum="PermissionEmbargoStatus" expires_after="2023-02-12"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -563,7 +563,7 @@ </histogram> <histogram name="Permissions.Prompt.Accepted.PriorDismissCount2" units="units" - expires_after="2022-10-31"> + expires_after="2023-02-12"> <owner>engedy@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1084,7 +1084,7 @@ </histogram> <histogram name="SiteEngagementService.OriginsEngaged" units="units" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>calamity@chromium.org</owner> <owner>dominickn@chromium.org</owner> <summary> @@ -1135,7 +1135,7 @@ </histogram> <histogram name="WebsiteSettings.Action" enum="WebsiteSettingsAction" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>estark@chromium.org</owner> <owner>dullweber@chromium.org</owner> <summary> @@ -1166,7 +1166,7 @@ </histogram> <histogram name="WebsiteSettings.Discoverability.Action" - enum="WebsiteSettingsDiscoverabilityAction" expires_after="2022-12-11"> + enum="WebsiteSettingsDiscoverabilityAction" expires_after="2023-02-12"> <owner>eokoyomon@chromium.org</owner> <owner>dullweber@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/platform/histograms.xml b/tools/metrics/histograms/metadata/platform/histograms.xml index 872d322..f5e4bd9 100644 --- a/tools/metrics/histograms/metadata/platform/histograms.xml +++ b/tools/metrics/histograms/metadata/platform/histograms.xml
@@ -232,7 +232,7 @@ </histogram> <histogram name="Platform.DetachableBase.ActivePercent" units="%" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>fshao@chromium.org</owner> <owner>phoenixshen@chromium.org</owner> <owner>chromeos-kukui@google.com</owner> @@ -244,7 +244,7 @@ </histogram> <histogram name="Platform.DetachableBase.AttachedOnBoot" enum="BooleanAttached" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>fshao@chromium.org</owner> <owner>phoenixshen@chromium.org</owner> <owner>chromeos-kukui@google.com</owner> @@ -298,7 +298,7 @@ </histogram> <histogram name="Platform.DiskUsage.NumUserHomeDirectories" - units="home directories" expires_after="2022-12-04"> + units="home directories" expires_after="2023-02-12"> <owner>achuith@chromium.org</owner> <owner>tls@chromium.org</owner> <summary> @@ -364,7 +364,7 @@ </histogram> <histogram name="Platform.Emmc.LifeUsed" enum="EmmcLifeUsed" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>gwendal@google.com</owner> <summary> eMMC [5.0] Device lifetime estimation for flash. This field provides an @@ -620,7 +620,7 @@ </histogram> <histogram name="Platform.IntelMaxMicroArchitecture" - enum="IntelMaxMicroArchitecture" expires_after="2022-12-11"> + enum="IntelMaxMicroArchitecture" expires_after="2023-02-12"> <owner>fbarchard@chromium.org</owner> <owner>pwnall@chromium.org</owner> <summary> @@ -1378,7 +1378,7 @@ </histogram> <histogram name="Platform.TPM.HardwareAlerts" enum="PlatformTPMHardwareAlerts" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>anatol@google.com</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary> @@ -1388,7 +1388,7 @@ </histogram> <histogram name="Platform.TPM.TimeToTakeOwnership" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>yich@google.com</owner> <owner>cylai@google.com</owner> <owner>cros-hwsec+uma@chromium.org</owner> @@ -1399,7 +1399,7 @@ </histogram> <histogram name="Platform.TPM.TpmManagerSecretStatus" - enum="TpmManagerSecretStatus" expires_after="2022-12-13"> + enum="TpmManagerSecretStatus" expires_after="2023-02-12"> <owner>cylai@chromium.org</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary> @@ -1466,7 +1466,7 @@ </histogram> <histogram name="Platform.UnaggregatedUsageTime" units="seconds" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mutexlox@chromium.org</owner> <owner>iby@chromium.org</owner> <owner>cros-telemetry@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml index ba1e3a2cc..23eb771 100644 --- a/tools/metrics/histograms/metadata/power/histograms.xml +++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -281,7 +281,7 @@ </histogram> <histogram name="PerformanceMonitor.ResourceCoalition.Availability" - enum="CoalitionIDAvailability" expires_after="2022-11-30"> + enum="CoalitionIDAvailability" expires_after="2023-02-12"> <owner>fdoray@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary> @@ -714,7 +714,7 @@ </histogram> <histogram name="Power.BatteryDischargeRate" units="mW" - expires_after="2023-02-05"> + expires_after="2023-02-12"> <owner>puthik@chromium.org</owner> <owner>chromeos-platform-power@google.com</owner> <summary> @@ -841,7 +841,7 @@ </histogram> <histogram name="Power.BatterySamplingDelay" units="microseconds" - expires_after="2022-11-30"> + expires_after="2023-02-12"> <owner>etiennep@chromium.org</owner> <owner>fdoray@chromium.org</owner> <summary> @@ -1735,7 +1735,7 @@ </histogram> <histogram name="Power.Mac.IsOnBattery2" enum="BooleanOnBattery" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>avi@chromium.org</owner> <owner>lgrey@chromium.org</owner> <summary> @@ -1817,7 +1817,7 @@ </histogram> <histogram name="Power.PowerButtonPressed" units="units" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>emaamari@google.com</owner> <owner>chromeos-commercial-identity@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/print/histograms.xml b/tools/metrics/histograms/metadata/print/histograms.xml index 4806cb3..8a8445c 100644 --- a/tools/metrics/histograms/metadata/print/histograms.xml +++ b/tools/metrics/histograms/metadata/print/histograms.xml
@@ -124,7 +124,7 @@ </histogram> <histogram name="PrintPreview.PrintSettings" enum="PrintSettings" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>thestig@chromium.org</owner> <owner>awscreen@chromium.org</owner> <summary> @@ -197,7 +197,7 @@ </histogram> <histogram name="PrintPreview.RendererError" enum="PrintPreviewFailureType" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>thestig@chromium.org</owner> <owner>dhoss@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/printing/histograms.xml b/tools/metrics/histograms/metadata/printing/histograms.xml index 34118087..905de07 100644 --- a/tools/metrics/histograms/metadata/printing/histograms.xml +++ b/tools/metrics/histograms/metadata/printing/histograms.xml
@@ -105,7 +105,7 @@ </histogram> <histogram name="Printing.CUPS.IppAttributesSuccess" enum="BooleanSuccess" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>bmgordon@chromium.org</owner> <owner>cros-printing-dev@chromium.org</owner> <summary> @@ -162,7 +162,7 @@ </histogram> <histogram name="Printing.CUPS.MigratedMakeAndModel" enum="BooleanMigrated" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>luum@chromium.org</owner> <owner>cros-printing-dev@chromium.org</owner> <summary> @@ -259,7 +259,7 @@ </histogram> <histogram name="Printing.CUPS.PrinterStatusReasons" - enum="PrinterStatusReasons" expires_after="2022-12-04"> + enum="PrinterStatusReasons" expires_after="2023-02-12"> <owner>gavinwill@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -371,7 +371,7 @@ <histogram name="Printing.PrintBackend.DriversRequiringElevatedPrivilegeEncountered" - enum="BooleanFound" expires_after="2022-12-11"> + enum="BooleanFound" expires_after="2023-02-12"> <owner>awscreen@chromium.org</owner> <owner>thestig@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml index 9dbfc75..0cb2270 100644 --- a/tools/metrics/histograms/metadata/privacy/histograms.xml +++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -232,7 +232,7 @@ </histogram> <histogram name="Privacy.DIPS.TimeFromNavigationCommitToClientBounce" - units="ms" expires_after="2022-12-01"> + units="ms" expires_after="2023-02-12"> <owner>bcl@chromium.org</owner> <owner>jdh@chromium.org</owner> <owner>rtarpine@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/profile/histograms.xml b/tools/metrics/histograms/metadata/profile/histograms.xml index b3ae172..fdd7b7c4 100644 --- a/tools/metrics/histograms/metadata/profile/histograms.xml +++ b/tools/metrics/histograms/metadata/profile/histograms.xml
@@ -23,13 +23,13 @@ <histograms> <histogram name="Profile.AddNewUser" enum="ProfileAddNewUser" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>rogerta@chromium.org</owner> <summary>The frequency of ways that new user profiles are added.</summary> </histogram> <histogram name="Profile.AddSignInFlowOutcome" - enum="ProfileSignedInFlowOutcome" expires_after="2022-12-11"> + enum="ProfileSignedInFlowOutcome" expires_after="2023-02-12"> <owner>jkrcal@chromium.org</owner> <owner>droger@chromium.org</owner> <summary> @@ -221,7 +221,7 @@ </histogram> <histogram name="Profile.Guest.TypeCreated" enum="GuestProfileCreatedType" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -238,7 +238,7 @@ </histogram> <histogram name="Profile.Incognito.Lifetime" units="minutes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>rhalavati@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary> @@ -412,7 +412,7 @@ </histogram> <histogram name="Profile.NumberOfActiveProfiles" units="profiles" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>droger@chromium.org</owner> <owner>feuunk@chromium.org</owner> <summary> @@ -440,7 +440,7 @@ </histogram> <histogram name="Profile.NumberOfProfiles" units="profiles" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>droger@chromium.org</owner> <owner>jkrcal@chromium.org</owner> <summary> @@ -477,7 +477,7 @@ </histogram> <histogram name="Profile.NumberOfUnusedProfiles" units="profiles" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>msarda@chromium.org</owner> <owner>droger@chromium.org</owner> <summary> @@ -632,7 +632,7 @@ </histogram> <histogram name="Profile.UserAction.PerProfile" enum="Profile" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>msarda@chromium.org</owner> <owner>tangltom@chromium.org</owner> <summary> @@ -706,7 +706,7 @@ </histogram> <histogram name="ProfilePicker.AskOnStartup" enum="BooleanEnabled" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>msalama@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -742,7 +742,7 @@ </histogram> <histogram name="ProfilePicker.FirstProfileTime.FirstWebContentsNonEmptyPaint" - units="ms" expires_after="2022-11-27"> + units="ms" expires_after="2023-02-12"> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/quota/histograms.xml b/tools/metrics/histograms/metadata/quota/histograms.xml index 9305d67..33a325e7 100644 --- a/tools/metrics/histograms/metadata/quota/histograms.xml +++ b/tools/metrics/histograms/metadata/quota/histograms.xml
@@ -72,7 +72,7 @@ </histogram> <histogram name="Quota.EvictedBucketAccessCount" units="units" - expires_after="2022-12-10"> + expires_after="2023-02-12"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -94,7 +94,7 @@ </histogram> <histogram name="Quota.EvictedBucketsPerHour" units="buckets" - expires_after="2022-12-10"> + expires_after="2023-02-12"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -155,7 +155,7 @@ </histogram> <histogram name="Quota.PercentDiskAvailable" units="%" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -175,7 +175,7 @@ </histogram> <histogram name="Quota.PercentUsedByOrigin" units="%" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -202,7 +202,7 @@ </histogram> <histogram name="Quota.QuotaDatabaseReset" enum="QuotaDatabaseResetReason" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -266,7 +266,7 @@ </summary> </histogram> -<histogram name="Quota.TotalDiskSpace" units="MB" expires_after="2022-12-11"> +<histogram name="Quota.TotalDiskSpace" units="MB" expires_after="2023-02-12"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/renderer/histograms.xml b/tools/metrics/histograms/metadata/renderer/histograms.xml index b3c952b..735b1bd 100644 --- a/tools/metrics/histograms/metadata/renderer/histograms.xml +++ b/tools/metrics/histograms/metadata/renderer/histograms.xml
@@ -277,7 +277,7 @@ </histogram> <histogram name="Renderer.Font.PrimaryFont.FCP" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>kojii@chromium.org</owner> <owner>tkent@chromium.org</owner> <owner>yosin@chromium.org</owner> @@ -290,7 +290,7 @@ </histogram> <histogram name="Renderer.Font.PrimaryFont.FCP.Style" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>kojii@chromium.org</owner> <owner>tkent@chromium.org</owner> <owner>yosin@chromium.org</owner> @@ -408,7 +408,7 @@ </histogram> <histogram name="Renderer.RenderThreadImpl.Init" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jam@chromium.org</owner> <owner>sky@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml index 875c38e..d9d83a98 100644 --- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -233,7 +233,7 @@ </histogram> <histogram name="SafeBrowsing.ClientSafeBrowsingReport.RequestHasToken" - enum="BooleanSent" expires_after="2022-12-11"> + enum="BooleanSent" expires_after="2023-02-12"> <owner>thefrog@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -776,7 +776,7 @@ </histogram> <histogram name="SafeBrowsing.DeepScan.Print.Success.Duration" units="ms" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>domfc@chromium.org</owner> <owner>webprotect-team@google.com</owner> <summary> @@ -1160,7 +1160,7 @@ <histogram name="SafeBrowsing.ExtensionTelemetry.NetworkRequestResponseCodeOrError" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2022-12-11"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-02-12"> <owner>anunoy@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1174,7 +1174,7 @@ </histogram> <histogram name="SafeBrowsing.ExtensionTelemetry.RetriesTillUploadSuccess" - units="retries" expires_after="2022-12-11"> + units="retries" expires_after="2023-02-12"> <owner>anunoy@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1207,7 +1207,7 @@ </histogram> <histogram name="SafeBrowsing.ExtensionTelemetry.UploadSuccess" - enum="BooleanSuccess" expires_after="2022-12-04"> + enum="BooleanSuccess" expires_after="2023-02-12"> <owner>anunoy@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1291,7 +1291,7 @@ </histogram> <histogram name="SafeBrowsing.HasCookieAtStartup" enum="Boolean" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1314,7 +1314,7 @@ </histogram> <histogram name="SafeBrowsing.MetricsCollector.IsPrefValid" enum="BooleanValid" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1337,7 +1337,7 @@ <histogram name="SafeBrowsing.NavigationObserver.DroppedReferrerChainEntries.RecentNavigation" - units="units" expires_after="2022-11-27"> + units="units" expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1349,7 +1349,7 @@ <histogram name="SafeBrowsing.NavigationObserver.MissingInitiatorRenderFrameHostPortal" - enum="BooleanExists" expires_after="2022-11-27"> + enum="BooleanExists" expires_after="2023-02-12"> <owner>vollick@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>Logs the number of times we have a missing initiator RFH.</summary> @@ -1357,7 +1357,7 @@ <histogram name="SafeBrowsing.NavigationObserver.NavigationEventsRecordedLength" - units="count" expires_after="2022-12-11"> + units="count" expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1387,7 +1387,7 @@ </histogram> <histogram name="SafeBrowsing.PageLoadToken.Duration" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1409,7 +1409,7 @@ </histogram> <histogram name="SafeBrowsing.PageLoadToken.PasswordProtectionHasToken" - enum="BooleanExists" expires_after="2022-12-11"> + enum="BooleanExists" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1419,7 +1419,7 @@ </histogram> <histogram name="SafeBrowsing.PageLoadToken.RealTimeCheckHasToken" - enum="BooleanExists" expires_after="2022-12-11"> + enum="BooleanExists" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1429,7 +1429,7 @@ </histogram> <histogram name="SafeBrowsing.PageLoadToken.TokenCount" units="entries" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1542,7 +1542,7 @@ </histogram> <histogram name="SafeBrowsing.Pref.MainProfile.SafeBrowsingState" - enum="SafeBrowsingState" expires_after="2022-12-04"> + enum="SafeBrowsingState" expires_after="2023-02-12"> <owner>jeffcyr@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1575,7 +1575,7 @@ <histogram name="SafeBrowsing.RendererThrottle.IsCheckCompletedOnProcessResponse" - enum="BooleanCompleted" expires_after="2022-12-04"> + enum="BooleanCompleted" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1588,7 +1588,7 @@ </histogram> <histogram name="SafeBrowsing.RendererThrottle.TotalDelay" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1613,7 +1613,7 @@ </histogram> <histogram name="SafeBrowsing.RT.AllStoresAvailable" enum="BooleanAvailable" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1635,7 +1635,7 @@ </histogram> <histogram name="SafeBrowsing.RT.CacheManager.CleanUpTime" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1655,7 +1655,7 @@ </histogram> <histogram name="SafeBrowsing.RT.CanCheckDatabase" enum="BooleanEnabled" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1890,7 +1890,7 @@ </histogram> <histogram name="SafeBrowsing.RT.RequestDestinations.Requested" - enum="RequestDestination" expires_after="2022-12-11"> + enum="RequestDestination" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1900,7 +1900,7 @@ </histogram> <histogram name="SafeBrowsing.RT.Response.VerdictType" - enum="SafeBrowsingRTLookupResponseVerdictType" expires_after="2023-01-15"> + enum="SafeBrowsingRTLookupResponseVerdictType" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1940,7 +1940,7 @@ </histogram> <histogram name="SafeBrowsing.RT.ThreatInfoSize" units="verdicts" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1951,7 +1951,7 @@ </histogram> <histogram base="true" name="SafeBrowsing.Settings.UserAction" - enum="SafeBrowsingSettingsUserAction" expires_after="2022-12-11"> + enum="SafeBrowsingSettingsUserAction" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1975,7 +1975,7 @@ <histogram name="SafeBrowsing.TailoredSecurity.ConsentedDesktopDialogEnabledOutcome" - enum="SafeBrowsingTailoredSecurityOutcome" expires_after="2022-10-01"> + enum="SafeBrowsingTailoredSecurityOutcome" expires_after="2023-02-12"> <owner>jacastro@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -2008,7 +2008,7 @@ <histogram name="SafeBrowsing.TailoredSecurity.SyncPromptEnabledNotificationResult2" enum="SafeBrowsingTailoredSecurityNotificationResult" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jacastro@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2142,7 +2142,7 @@ </histogram> <histogram name="SafeBrowsing.Triggers.SuspiciousSite.Event" - enum="SuspiciousSiteTriggerEvent" expires_after="2022-11-27"> + enum="SuspiciousSiteTriggerEvent" expires_after="2023-02-12"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2218,7 +2218,7 @@ </histogram> <histogram name="SafeBrowsing.V4GetHash.CountOfPrefixes" units="prefixes" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2299,7 +2299,7 @@ <histogram name="SafeBrowsing.V4LocalDatabaseManager.TimeSinceLastUpdateResponse" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>ajuma@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2435,7 +2435,7 @@ </histogram> <histogram name="SafeBrowsing.V4ProcessPartialUpdate.RemovalsHashesCount" - units="entries" expires_after="2022-12-11"> + units="entries" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2485,7 +2485,7 @@ </histogram> <histogram name="SafeBrowsing.V4Store.IsStoreValid" enum="BooleanValid" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2549,7 +2549,7 @@ </histogram> <histogram name="SafeBrowsing.V4StoreRead.Result" - enum="SafeBrowsingV4StoreReadResult" expires_after="2022-12-04"> + enum="SafeBrowsingV4StoreReadResult" expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2574,7 +2574,7 @@ </histogram> <histogram name="SafeBrowsing.V4Update.Network.Result" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2022-12-11"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-02-12"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2599,7 +2599,7 @@ </histogram> <histogram name="SafeBrowsing.V4Update.ResponseSizeKB" units="KB" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>vakh@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sb_client/histograms.xml b/tools/metrics/histograms/metadata/sb_client/histograms.xml index 7a86950..e644d8c 100644 --- a/tools/metrics/histograms/metadata/sb_client/histograms.xml +++ b/tools/metrics/histograms/metadata/sb_client/histograms.xml
@@ -96,7 +96,7 @@ </histogram> <histogram name="SBClientDownload.DmgHasAPFS" enum="Boolean" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -116,7 +116,7 @@ </histogram> <histogram name="SBClientDownload.DmgParsedUdif" enum="BooleanSuccess" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -401,7 +401,7 @@ <histogram name="SBClientDownload.UserGestureFileType.Attributes" enum="SBClientDownloadUserGestureFileTypeAttributes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -532,7 +532,7 @@ </histogram> <histogram name="SBClientPhishing.CacheDetectsPhishing" - enum="BooleanIsPhishing" expires_after="2022-11-27"> + enum="BooleanIsPhishing" expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -657,7 +657,7 @@ </histogram> <histogram name="SBClientPhishing.MainFrameRemoteConnected" - enum="BooleanConnected" expires_after="2022-11-27"> + enum="BooleanConnected" expires_after="2023-02-12"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -760,7 +760,7 @@ </histogram> <histogram name="SBClientPhishing.ProtobufScorer.CreationStatus" - enum="SBClientPhishingScorerCreationStatus" expires_after="2022-12-11"> + enum="SBClientPhishingScorerCreationStatus" expires_after="2023-02-12"> <owner>bhatiarohit@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -783,7 +783,7 @@ </histogram> <histogram name="SBClientPhishing.RequestWithToken" enum="BooleanSent" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>bhatiarohit@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/scanning/histograms.xml b/tools/metrics/histograms/metadata/scanning/histograms.xml index e1f137b..f157c75 100644 --- a/tools/metrics/histograms/metadata/scanning/histograms.xml +++ b/tools/metrics/histograms/metadata/scanning/histograms.xml
@@ -94,7 +94,7 @@ </histogram> <histogram name="Scanning.NumCompletedScansInSession" units="scans" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>gavinwill@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -140,7 +140,7 @@ </histogram> <histogram name="Scanning.NumScanSettingChanges" units="changes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>gavinwill@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -170,7 +170,7 @@ </histogram> <histogram name="Scanning.ScanCompleteAction" enum="ScanCompleteAction" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>gavinwill@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -186,7 +186,7 @@ </histogram> <histogram name="Scanning.ScanJobSettings.ColorMode" - enum="ScanJobSettingsColorMode" expires_after="2022-12-11"> + enum="ScanJobSettingsColorMode" expires_after="2023-02-12"> <owner>gavinwill@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -204,7 +204,7 @@ </histogram> <histogram name="Scanning.ScanJobSettings.PageSize" - enum="ScanJobSettingsPageSize" expires_after="2022-12-11"> + enum="ScanJobSettingsPageSize" expires_after="2023-02-12"> <owner>gavinwill@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -213,7 +213,7 @@ </histogram> <histogram name="Scanning.ScanJobSettings.Resolution" - enum="ScanJobSettingsResolution" expires_after="2022-12-11"> + enum="ScanJobSettingsResolution" expires_after="2023-02-12"> <owner>gavinwill@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary> @@ -231,7 +231,7 @@ </histogram> <histogram name="Scanning.ScanJobSuccessful" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>gavinwill@chromium.org</owner> <owner>cros-peripherals@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/scheduler/histograms.xml b/tools/metrics/histograms/metadata/scheduler/histograms.xml index 1e902f4..0518e40 100644 --- a/tools/metrics/histograms/metadata/scheduler/histograms.xml +++ b/tools/metrics/histograms/metadata/scheduler/histograms.xml
@@ -139,7 +139,7 @@ </histogram> <histogram name="Scheduler.TaskQueueImpl.DelayedIncomingQueueSize" - units="tasks" expires_after="2022-09-30"> + units="tasks" expires_after="2023-02-12"> <owner>yafroze@google.com</owner> <owner>pmonette@chromium.org</owner> <owner>catan-team@chromium.org</owner> @@ -154,7 +154,7 @@ </histogram> <histogram name="Scheduler.TaskQueueImpl.PostDelayedTaskDelay" units="ms" - expires_after="2022-09-30"> + expires_after="2023-02-12"> <owner>yafroze@google.com</owner> <owner>pmonette@chromium.org</owner> <owner>catan-team@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/search/histograms.xml b/tools/metrics/histograms/metadata/search/histograms.xml index 18bf672..234e80b 100644 --- a/tools/metrics/histograms/metadata/search/histograms.xml +++ b/tools/metrics/histograms/metadata/search/histograms.xml
@@ -44,7 +44,7 @@ </histogram> <histogram name="Search.ContextualSearch.All.Searches" - enum="BooleanBottomSearchKind" expires_after="2022-12-11"> + enum="BooleanBottomSearchKind" expires_after="2023-02-12"> <!-- TODO(donnd): change expires_after to "never" once established and approved. --> @@ -87,7 +87,7 @@ </histogram> <histogram name="Search.ContextualSearch.Counted.Event" - enum="ContextualSearchCountedEvent" expires_after="2022-12-11"> + enum="ContextualSearchCountedEvent" expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>contextual-search-eng@google.com</owner> <summary> @@ -98,7 +98,7 @@ </histogram> <histogram name="Search.ContextualSearch.Counted.Searches" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <!-- TODO(donnd): change expires_after to "never" once established and approved. --> @@ -290,7 +290,7 @@ </histogram> <histogram name="Search.ContextualSearch.ResolveRequested" - enum="ContextualSearchGestureIsTap" expires_after="2022-12-11"> + enum="ContextualSearchGestureIsTap" expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>twellington@chromium.org</owner> <summary> @@ -301,7 +301,7 @@ </histogram> <histogram name="Search.ContextualSearch.SelectionExpanded" - enum="ContextualSearchGestureIsTap" expires_after="2022-12-11"> + enum="ContextualSearchGestureIsTap" expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>twellington@chromium.org</owner> <summary> @@ -864,7 +864,7 @@ </histogram> <histogram name="Search.ContextualSearchQuickActions.Category" - enum="ContextualSearchQuickActionCategory" expires_after="2022-12-11"> + enum="ContextualSearchQuickActionCategory" expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>twellington@chromium.org</owner> <summary> @@ -1242,7 +1242,7 @@ </histogram> <histogram name="Search.DefaultSearchProviderType" - enum="OmniboxSearchEngineType" expires_after="2022-12-11"> + enum="OmniboxSearchEngineType" expires_after="2023-02-12"> <owner>mpearson@chromium.org</owner> <owner>csharp@chromium.org</owner> <summary> @@ -1400,7 +1400,7 @@ </histogram> <histogram name="Search.QueryTiles.GroupStatus" enum="QueryTilesGroupStatus" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>qinmin@chromium.org</owner> <owner>chrome-upboarding-eng@google.com</owner> <summary> @@ -1432,7 +1432,7 @@ </histogram> <histogram name="Search.QueryTiles.RequestStatus" - enum="QueryTilesRequestStatus" expires_after="2022-12-04"> + enum="QueryTilesRequestStatus" expires_after="2023-02-12"> <owner>qinmin@chromium.org</owner> <owner>chrome-upboarding-eng@google.com</owner> <summary> @@ -1456,7 +1456,7 @@ <histogram name="Search.QueryTiles.ShowQueryTilesSegmentationResultComparison" enum="ShowQueryTilesSegmentationResultComparison" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>haileywang@chromium.org</owner> <owner>ssid@chromium.org</owner> <summary> @@ -1580,7 +1580,7 @@ </histogram> <histogram name="Search.RelatedSearches.CarouselLastVisibleItemPosition" - units="position" expires_after="2022-12-11"> + units="position" expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>gangwu@chromium.org</owner> <owner>related-searches-vteam@google.com</owner> @@ -1633,7 +1633,7 @@ </histogram> <histogram name="Search.RelatedSearches.NumberOfSuggestionsClicked2" - units="selected" expires_after="2022-12-11"> + units="selected" expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>related-searches-vteam@google.com</owner> <summary> @@ -1644,7 +1644,7 @@ </histogram> <histogram name="Search.RelatedSearches.QualifiedUsers" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>related-searches-vteam@google.com</owner> <summary> @@ -1659,7 +1659,7 @@ </histogram> <histogram name="Search.RelatedSearches.SelectedCarouselIndex" units="position" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>related-searches-vteam@google.com</owner> <summary> @@ -1670,7 +1670,7 @@ </histogram> <histogram name="Search.RelatedSearches.SelectedSuggestionIndex" - units="position" expires_after="2022-12-11"> + units="position" expires_after="2023-02-12"> <owner>donnd@chromium.org</owner> <owner>related-searches-vteam@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/security/histograms.xml b/tools/metrics/histograms/metadata/security/histograms.xml index c012ffdd..cc3e514 100644 --- a/tools/metrics/histograms/metadata/security/histograms.xml +++ b/tools/metrics/histograms/metadata/security/histograms.xml
@@ -221,7 +221,7 @@ </histogram> <histogram name="Security.PageInfo.AboutThisSiteLanguageSupported" - enum="Boolean" expires_after="M109"> + enum="Boolean" expires_after="2023-02-12"> <owner>dullweber@chromium.org</owner> <owner>olesiamarukhno@chromium.org</owner> <summary> @@ -292,7 +292,7 @@ </histogram> <histogram name="Security.PrivateNetworkAccess.CheckResult" - enum="PrivateNetworkAccessCheckResult" expires_after="2022-11-27"> + enum="PrivateNetworkAccessCheckResult" expires_after="2023-02-12"> <owner>titouan@chromium.org</owner> <owner>clamy@chromium.org</owner> <owner>mkwst@chromium.org</owner> @@ -341,7 +341,7 @@ </histogram> <histogram name="Security.SafetyTips.Interaction" enum="SafetyTipInteraction" - expires_after="2022-10-09"> + expires_after="2023-02-12"> <owner>jdeblasio@chromium.org</owner> <owner>estark@chromium.org</owner> <summary> @@ -509,7 +509,7 @@ </histogram> <histogram name="Security.SCTAuditing.OptOut.DroppedDueToLogNotFound" - enum="Boolean" expires_after="2022-11-27"> + enum="Boolean" expires_after="2023-02-12"> <owner>cthomp@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> <summary> @@ -520,7 +520,7 @@ </histogram> <histogram name="Security.SCTAuditing.OptOut.LookupQueryResult" - enum="SCTLookupQueryResult" expires_after="2022-12-04"> + enum="SCTLookupQueryResult" expires_after="2023-02-12"> <owner>cthomp@chromium.org</owner> <owner>nsatragno@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> @@ -531,7 +531,7 @@ </histogram> <histogram name="Security.SCTAuditing.OptOut.PopularSCTSkipped" enum="Boolean" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>cthomp@chromium.org</owner> <owner>nsatragno@chromium.org</owner> <owner>trusty-transport@chromium.org</owner> @@ -597,7 +597,7 @@ </histogram> <histogram name="Security.SecurityLevel.OnCommit" enum="SecurityLevel" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>cthomp@chromium.org</owner> <owner>security-enamel@chromium.org</owner> <summary> @@ -660,7 +660,7 @@ </histogram> <histogram name="SiteIsolation.BrowsingInstance.MaxCountPerProcess" - units="units" expires_after="2022-12-09"> + units="units" expires_after="2023-02-12"> <owner>wjmaclean@chromium.org</owner> <owner>creis@chromium.org</owner> <summary> @@ -989,7 +989,7 @@ </histogram> <histogram name="SiteIsolation.SavedOAuthSites.Size" units="origins" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <owner>lukasza@chromium.org</owner> @@ -1001,7 +1001,7 @@ </histogram> <histogram name="SiteIsolation.SavedUserTriggeredIsolatedOrigins.Size" - units="origins" expires_after="2022-12-11"> + units="origins" expires_after="2023-02-12"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <owner>lukasza@chromium.org</owner> @@ -1014,7 +1014,7 @@ </histogram> <histogram name="SiteIsolation.SavedWebTriggeredIsolatedOrigins.Size" - units="origins" expires_after="2022-12-11"> + units="origins" expires_after="2023-02-12"> <owner>alexmos@chromium.org</owner> <owner>creis@chromium.org</owner> <owner>lukasza@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml index 6eeb95b6..64c2397f6 100644 --- a/tools/metrics/histograms/metadata/service/histograms.xml +++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -74,7 +74,7 @@ </histogram> <histogram name="ServiceWorker.ActivateEventStatus" - enum="ServiceWorkerStatusCode" expires_after="2022-11-27"> + enum="ServiceWorkerStatusCode" expires_after="2023-02-12"> <owner>wanderview@chromium.org</owner> <owner>asamidoi@chromium.org</owner> <owner>chrome-worker@google.com</owner> @@ -161,7 +161,7 @@ <histogram name="ServiceWorker.CacheStorageInstalledScript.CachedMetadataTotalSize" - units="bytes" expires_after="2022-12-08"> + units="bytes" expires_after="2023-02-12"> <owner>horo@chromium.org</owner> <owner>wanderview@chromium.org</owner> <owner>chrome-worker@google.com</owner> @@ -172,7 +172,7 @@ </histogram> <histogram name="ServiceWorker.CacheStorageInstalledScript.Count" units="count" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>horo@chromium.org</owner> <owner>wanderview@chromium.org</owner> <summary> @@ -327,7 +327,7 @@ </histogram> <histogram name="ServiceWorker.FetchEvent.Fallback.Time" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>wanderview@chromium.org</owner> <owner>asamidoi@chromium.org</owner> <owner>chrome-worker@google.com</owner> @@ -340,7 +340,7 @@ </histogram> <histogram name="ServiceWorker.FetchEvent.HasResponse.Time" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>wanderview@chromium.org</owner> <owner>asamidoi@chromium.org</owner> <owner>chrome-worker@google.com</owner> @@ -363,7 +363,7 @@ </histogram> <histogram name="ServiceWorker.FetchEvent.QueuingTime" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>asamidoi@chromium.org</owner> <owner>wanderview@chromium.org</owner> <owner>chrome-worker@google.com</owner> @@ -431,7 +431,7 @@ <histogram name="ServiceWorker.LoadTiming.MainFrame.MainResource.FetchHandlerEndToFallbackNetwork" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>bashi@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -562,7 +562,7 @@ <histogram name="ServiceWorker.LoadTiming.Subresource.FetchHandlerEndToFallbackNetwork" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>bashi@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -579,7 +579,7 @@ <histogram name="ServiceWorker.LoadTiming.Subresource.FetchHandlerEndToResponseReceived" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>bashi@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -626,7 +626,7 @@ <histogram name="ServiceWorker.LoadTiming.Subresource.WorkerReadyToFetchHandlerEnd" - units="ms" expires_after="2022-12-11"> + units="ms" expires_after="2023-02-12"> <owner>bashi@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -715,7 +715,7 @@ <histogram name="ServiceWorker.OnBrowserStartup.FirstFindRegistrationForClientUrl.Time" - units="ms" expires_after="2022-12-01"> + units="ms" expires_after="2023-02-12"> <owner>chikamune@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -794,7 +794,7 @@ </histogram> <histogram name="ServiceWorker.StartNewWorker.Time" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>wanderview@chromium.org</owner> <owner>asamidoi@chromium.org</owner> <owner>chrome-worker@google.com</owner> @@ -1175,7 +1175,7 @@ </histogram> <histogram name="ServiceWorkerCache.ErrorStorageType" - enum="CacheStorageErrorStorageType" expires_after="2022-12-02"> + enum="CacheStorageErrorStorageType" expires_after="2023-02-12"> <owner>wanderview@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml index 7de029f..dd18c27 100644 --- a/tools/metrics/histograms/metadata/settings/histograms.xml +++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -42,7 +42,7 @@ </histogram> <histogram name="Settings.AutocompleteSearches.OnStartup" enum="BooleanEnabled" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>harrisonsean@chromium.org</owner> <owner>chrome-friendly-settings@google.com</owner> <summary> @@ -171,7 +171,7 @@ </histogram> <histogram name="Settings.PinUnlockSetup" enum="LockScreenProgress" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>anastasiian@chromium.org</owner> <owner>teresachow@google.com</owner> <owner>cros-lurs@google.com</owner> @@ -237,7 +237,7 @@ <histogram name="Settings.PrivacySandbox.DialogDisplayHost" enum="SettingsPrivacySandboxDialogDisplayHostHash" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>sauski@google.com</owner> <owner>chrome-friendly-settings@google.com</owner> <summary> @@ -250,7 +250,7 @@ </histogram> <histogram name="Settings.PrivacySandbox.DialogLoadTime" units="ms" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>olesiamarukhno@google.com</owner> <owner>sauski@google.com</owner> <owner>chrome-friendly-settings@google.com</owner> @@ -286,7 +286,7 @@ </histogram> <histogram name="Settings.PrivacySandbox.PrivacySandboxReferrer" - enum="PrivacySandboxReferrer" expires_after="2022-11-27"> + enum="PrivacySandboxReferrer" expires_after="2023-02-12"> <owner>andzaytsev@google.com</owner> <owner>harrisonsean@chromium.org</owner> <owner>msramek@chromium.org</owner> @@ -301,7 +301,7 @@ </histogram> <histogram name="Settings.PrivacySandbox.StartupState" - enum="SettingsPrivacySandboxStartupStates" expires_after="2022-11-27"> + enum="SettingsPrivacySandboxStartupStates" expires_after="2023-02-12"> <owner>sauski@google.com</owner> <owner>harrisonsean@chromium.org</owner> <owner>msramek@chromium.org</owner> @@ -348,7 +348,7 @@ </histogram> <histogram name="Settings.SafetyCheck.SafeBrowsingResult" - enum="SafetyCheckSafeBrowsingStatus" expires_after="2022-12-11"> + enum="SafetyCheckSafeBrowsingStatus" expires_after="2023-02-12"> <owner>andzaytsev@google.com</owner> <owner>msramek@chromium.org</owner> <summary>Resulting state of the safety check Safe Browsing check.</summary>
diff --git a/tools/metrics/histograms/metadata/sharing/histograms.xml b/tools/metrics/histograms/metadata/sharing/histograms.xml index 425e7109..4b2bf42d 100644 --- a/tools/metrics/histograms/metadata/sharing/histograms.xml +++ b/tools/metrics/histograms/metadata/sharing/histograms.xml
@@ -72,7 +72,7 @@ </histogram> <histogram name="Sharing.ClickToCallDialerPresent" enum="BooleanPresent" - expires_after="2022-10-30"> + expires_after="2023-02-12"> <owner>mvanouwerkerk@chromium.org</owner> <owner>knollr@chromium.org</owner> <summary> @@ -341,7 +341,7 @@ </histogram> <histogram name="Sharing.Screenshot.Action" enum="SharingScreenshotAction" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jeffreycohen@chromium.org</owner> <owner>src/chrome/browser/share/OWNERS</owner> <summary> @@ -405,7 +405,7 @@ </histogram> <histogram name="Sharing.SendMessageResult" enum="SharingSendMessageResult" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes SharingChannelType, SharingDevicePlatform, SharingMessage, and SharingPulseInterval. --> @@ -586,7 +586,7 @@ </histogram> <histogram name="Sharing.SharingHubDesktop.CrOSSharesheetResult" - enum="SharingHubSharesheetResult" expires_after="2022-12-04"> + enum="SharingHubSharesheetResult" expires_after="2023-02-12"> <owner>kristipark@chromium.org</owner> <owner>src/chrome/browser/share/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/side_search/histograms.xml b/tools/metrics/histograms/metadata/side_search/histograms.xml index a6e7959d..457d10f5 100644 --- a/tools/metrics/histograms/metadata/side_search/histograms.xml +++ b/tools/metrics/histograms/metadata/side_search/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="SideSearch.AvailabilityChanged" - enum="SideSearchAvailabilityChangeType" expires_after="2022-12-04"> + enum="SideSearchAvailabilityChangeType" expires_after="2023-02-12"> <owner>yuhengh@chromium.org</owner> <owner>tluk@chromium.org</owner> <owner>romanarora@chromium.org</owner> @@ -35,7 +35,7 @@ </histogram> <histogram name="SideSearch.CloseAction" enum="SideSearchCloseActionType" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>yuhengh@chromium.org</owner> <owner>tluk@chromium.org</owner> <owner>romanarora@chromium.org</owner> @@ -70,7 +70,7 @@ </histogram> <histogram name="SideSearch.Navigation" enum="SideSearchNavigationType" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>yuhengh@chromium.org</owner> <owner>tluk@chromium.org</owner> <owner>romanarora@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml index 334baa1..fc68ba5 100644 --- a/tools/metrics/histograms/metadata/signin/histograms.xml +++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -95,7 +95,7 @@ </histogram> <histogram name="Signin.AccountConsistencyPromoAction" - enum="AccountConsistencyPromoAction" expires_after="2022-12-11"> + enum="AccountConsistencyPromoAction" expires_after="2023-02-12"> <owner>bsazonov@chromium.org</owner> <owner>aliceywang@chromium.org</owner> <summary> @@ -135,7 +135,7 @@ </histogram> <histogram name="Signin.AccountReconcilorState.OnGaiaResponse" - enum="SigninAccountReconcilorState" expires_after="2022-12-11"> + enum="SigninAccountReconcilorState" expires_after="2023-02-12"> <owner>jlebel@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -160,7 +160,7 @@ </histogram> <histogram name="Signin.AccountTracker.GaiaIdMigrationState" - enum="OAuth2LoginAccountRevokedMigrationState" expires_after="2022-12-11"> + enum="OAuth2LoginAccountRevokedMigrationState" expires_after="2023-02-12"> <owner>msarda@chromium.org</owner> <owner>sdefresne@chromium.org</owner> <summary> @@ -430,7 +430,7 @@ </histogram> <histogram name="Signin.GetAccessTokenFinished" enum="GoogleServiceAuthError" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>droger@chromium.org</owner> <owner>msarda@chromium.org</owner> <summary> @@ -1126,7 +1126,7 @@ </histogram> <histogram name="Signin.SyncFirstSetupCompleteSource" - enum="SyncFirstSetupCompleteSource" expires_after="2022-12-11"> + enum="SyncFirstSetupCompleteSource" expires_after="2023-02-12"> <owner>triploblastic@chromium.org</owner> <owner>bsazonov@chromium.org</owner> <summary>Tracks where FirstSetupComplete bit is set from.</summary> @@ -1181,7 +1181,7 @@ </histogram> <histogram name="Signin.TransactionalReauthResult" enum="SigninReauthResult" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="TransactionalReauthEntryPoint" -->
diff --git a/tools/metrics/histograms/metadata/stability/histograms.xml b/tools/metrics/histograms/metadata/stability/histograms.xml index 1a54054..0910b29 100644 --- a/tools/metrics/histograms/metadata/stability/histograms.xml +++ b/tools/metrics/histograms/metadata/stability/histograms.xml
@@ -33,7 +33,7 @@ </variants> <histogram name="Stability.Android.MinidumpUploadingTime" units="ms" - expires_after="2022-11-30"> + expires_after="2023-02-12"> <owner>shaktisahu@chromium.org</owner> <owner>src/components/minidump_uploader/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/startup/histograms.xml b/tools/metrics/histograms/metadata/startup/histograms.xml index b0bd0839..d7d4c0f2 100644 --- a/tools/metrics/histograms/metadata/startup/histograms.xml +++ b/tools/metrics/histograms/metadata/startup/histograms.xml
@@ -188,7 +188,7 @@ </histogram> <histogram name="Startup.Android.Cold.TimeToVisibleContent" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>ckitagawa@chromium.org</owner> <summary> Android: The time from the activity creation point to the moment the content @@ -245,7 +245,7 @@ </histogram> <histogram base="true" name="Startup.Android.FeedStreamCreatedTime" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="JavaStartMode" --> <owner>hanxi@chromium.org</owner> @@ -281,7 +281,7 @@ </histogram> <histogram name="Startup.Android.LastVisitedTabIsSRPWhenOverviewShownAtLaunch" - enum="Boolean" expires_after="2022-12-11"> + enum="Boolean" expires_after="2023-02-12"> <owner>hanxi@chromium.org</owner> <owner>spdonghao@chromium.org</owner> <owner>fredmello@chromium.org</owner> @@ -344,7 +344,7 @@ </histogram> <histogram name="Startup.Android.StartSurfaceShownAtStartup" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>hanxi@chromium.org</owner> <owner>spdonghao@chromium.org</owner> <owner>wychen@chromium.org</owner> @@ -417,7 +417,7 @@ </histogram> <histogram name="Startup.BringToForegroundReason" - enum="BooleanBringToForegroundReason" expires_after="2022-12-11"> + enum="BooleanBringToForegroundReason" expires_after="2023-02-12"> <owner>peter@chromium.org</owner> <summary> Records the cause, each time Chrome is brought to the foreground. Currently
diff --git a/tools/metrics/histograms/metadata/storage/histograms.xml b/tools/metrics/histograms/metadata/storage/histograms.xml index bb38857e..c0e6215 100644 --- a/tools/metrics/histograms/metadata/storage/histograms.xml +++ b/tools/metrics/histograms/metadata/storage/histograms.xml
@@ -86,7 +86,7 @@ </histogram> <histogram name="Clipboard.Read" enum="ClipboardFormatRead" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>huangdarwin@chromium.org</owner> <owner>src/ui/base/clipboard/OWNERS</owner> <summary> @@ -114,7 +114,7 @@ </histogram> <histogram name="Clipboard.TimeIntervalBetweenCommitAndRead" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>dcheng@chromium.org</owner> <owner>src/ui/base/clipboard/OWNERS</owner> <summary> @@ -127,7 +127,7 @@ </histogram> <histogram name="Clipboard.Write" enum="ClipboardFormatWrite" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>huangdarwin@chromium.org</owner> <owner>src/ui/base/clipboard/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/subresource/histograms.xml b/tools/metrics/histograms/metadata/subresource/histograms.xml index 0bba5c5..775778b6 100644 --- a/tools/metrics/histograms/metadata/subresource/histograms.xml +++ b/tools/metrics/histograms/metadata/subresource/histograms.xml
@@ -480,7 +480,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.NumSubresourceLoads.MatchedRules" - units="resource loads" expires_after="2022-12-11"> + units="resource loads" expires_after="2023-02-12"> <owner>jkarlin@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml index bf82a9c..e11b267 100644 --- a/tools/metrics/histograms/metadata/sync/histograms.xml +++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -98,7 +98,7 @@ </histogram> <histogram name="Sync.BookmarkGUIDSource2" enum="BookmarkGUIDSource" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -420,7 +420,7 @@ </histogram> <histogram name="Sync.FCMInstanceIdTokenRetrievalStatus" - enum="InstanceIDResult" expires_after="2022-11-30"> + enum="InstanceIDResult" expires_after="2023-02-12"> <owner>rushans@google.com</owner> <owner>treib@chromium.org</owner> <component>Services>Sync</component> @@ -432,7 +432,7 @@ </histogram> <histogram name="Sync.FCMMessageDeliveredToListeners" enum="Boolean" - expires_after="2022-11-30"> + expires_after="2023-02-12"> <owner>rushans@google.com</owner> <owner>treib@chromium.org</owner> <component>Services>Sync</component> @@ -686,7 +686,7 @@ </histogram> <histogram name="Sync.ModelTypeIncrementalUpdateReceived" enum="SyncModelTypes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -698,7 +698,7 @@ </histogram> <histogram name="Sync.ModelTypeInitialUpdateReceived" enum="SyncModelTypes" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -969,7 +969,7 @@ </histogram> <histogram name="Sync.ProblematicServerSideBookmarksDuringMerge" - enum="RemoteBookmarkUpdateError" expires_after="2022-12-11"> + enum="RemoteBookmarkUpdateError" expires_after="2023-02-12"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -1073,7 +1073,7 @@ </histogram> <histogram name="Sync.StopSource" enum="SyncStopSource" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>treib@chromium.org</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -1116,7 +1116,7 @@ </histogram> <histogram name="Sync.SyncEverything2" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>treib@chromium.org</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -1129,7 +1129,7 @@ </histogram> <histogram name="Sync.SyncStoppedReported" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>rushans@google.com</owner> <owner>treib@chromium.org</owner> <component>Services>Sync</component> @@ -1142,7 +1142,7 @@ </histogram> <histogram name="Sync.SyncStoppedURLFetchResponse" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2022-12-11"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2023-02-12"> <owner>rushans@google.com</owner> <owner>treib@chromium.org</owner> <component>Services>Sync</component> @@ -1177,7 +1177,7 @@ </histogram> <histogram name="Sync.TrustedVaultAddKeysAttemptIsSuccessful" enum="Boolean" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mmoskvitin@google.com</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -1188,7 +1188,7 @@ </histogram> <histogram name="Sync.TrustedVaultDeviceRegistered" enum="Boolean" - expires_after="2022-11-13"> + expires_after="2023-02-12"> <owner>mmoskvitin@google.com</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -1347,7 +1347,7 @@ </histogram> <histogram name="Sync.TypedURLDatabaseError" enum="SyncTypedUrlDatabaseError" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> <summary> @@ -1370,7 +1370,7 @@ </histogram> <histogram name="Sync.URLFetchTimedOut" enum="BooleanTimedOut" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>mastiz@chromium.org</owner> <owner>treib@chromium.org</owner> <component>Services>Sync</component>
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml index 230e673..7b649ea 100644 --- a/tools/metrics/histograms/metadata/tab/histograms.xml +++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -381,7 +381,7 @@ </summary> </histogram> -<histogram name="Tab.NewTab" enum="NewTabType" expires_after="2022-12-11"> +<histogram name="Tab.NewTab" enum="NewTabType" expires_after="2023-02-12"> <owner>tbergquist@chromium.org</owner> <owner>bsep@chromium.org</owner> <summary> @@ -489,7 +489,7 @@ </histogram> <histogram name="Tab.Preview.TimeToStoreAfterTabSwitch" units="ms" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>dfried@chromium.org</owner> <owner>collinbaker@chromium.org</owner> <summary> @@ -714,7 +714,7 @@ </histogram> <histogram name="TabGroups.CollapsedGroupCountPerLoad" units="groups" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>connily@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> <summary> @@ -744,7 +744,7 @@ </histogram> <histogram name="TabGroups.SessionsPerGroup" units="sessions" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>yusufo@chromium.org</owner> <owner>wychen@chromium.org</owner> <summary> @@ -796,7 +796,7 @@ </histogram> <histogram name="TabGroups.UserGroupCountPerLoad" units="groups" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>connily@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> <summary> @@ -1859,7 +1859,7 @@ <histogram name="Tabs.PersistedTabData.Storage.Save.File.FirstStorageRequestType" - enum="FileStorageRequestType" expires_after="2022-11-20"> + enum="FileStorageRequestType" expires_after="2023-02-12"> <owner>yusufo@chromium.org</owner> <owner>nyquist@chromium.org</owner> <owner>dtrainor@chromium.org</owner> @@ -2189,7 +2189,7 @@ </histogram> <histogram name="Tabs.TabCountInGroupPerLoad" units="tabs" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>connily@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> <summary> @@ -3115,7 +3115,7 @@ </histogram> <histogram name="TabStrip.TimeToCreateNewTabFromPress" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>robliao@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> <summary> @@ -3124,7 +3124,7 @@ </summary> </histogram> -<histogram name="TabStrip.TimeToSwitch" units="ms" expires_after="2022-11-27"> +<histogram name="TabStrip.TimeToSwitch" units="ms" expires_after="2023-02-12"> <owner>connily@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/translate/histograms.xml b/tools/metrics/histograms/metadata/translate/histograms.xml index 33d7a3b..2e13cad 100644 --- a/tools/metrics/histograms/metadata/translate/histograms.xml +++ b/tools/metrics/histograms/metadata/translate/histograms.xml
@@ -116,7 +116,7 @@ </histogram> <histogram name="Translate.CLD3.LanguageDetected" enum="LocaleCodeISO639" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -423,7 +423,7 @@ </histogram> <histogram name="Translate.NeverTranslateSite" units="units" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -445,7 +445,7 @@ </histogram> <histogram name="Translate.PageLoad.FinalSourceLanguage" - enum="LocaleCodeISO639" expires_after="2022-11-27"> + enum="LocaleCodeISO639" expires_after="2023-02-12"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary> @@ -1013,7 +1013,7 @@ </histogram> <histogram name="Translate.UserActionDuration" units="ms" - expires_after="2022-11-13"> + expires_after="2023-02-12"> <owner>megjablon@google.com</owner> <owner>chrome-language@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/uma/histograms.xml b/tools/metrics/histograms/metadata/uma/histograms.xml index e29d454..a069d9ed 100644 --- a/tools/metrics/histograms/metadata/uma/histograms.xml +++ b/tools/metrics/histograms/metadata/uma/histograms.xml
@@ -80,7 +80,7 @@ </histogram> <histogram name="UMA.ActualLogUploadInterval" units="minutes" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -187,7 +187,7 @@ </histogram> <histogram name="UMA.ClientIdBackupRecoveredWithAge" units="hours" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -208,14 +208,14 @@ </histogram> <histogram name="UMA.ClientIdSource" enum="ClientIdSource" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>pdyson@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary>The source of the client id when its creation is forced.</summary> </histogram> <histogram name="UMA.CrosPerUser.DaemonStoreWriteFailed" - enum="PerUserDaemonStoreFail" expires_after="2022-12-04"> + enum="PerUserDaemonStoreFail" expires_after="2023-02-12"> <owner>jongahn@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -226,7 +226,7 @@ </histogram> <histogram name="UMA.CrosPerUser.IdReset" enum="PerUserIdType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jongahn@chromium.org</owner> <owner>asvitkine@chromium.org</owner> <summary> @@ -238,7 +238,7 @@ </histogram> <histogram name="UMA.CrosPerUser.UserLogStoreState" enum="PerUserLogStoreState" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>jongahn@chromium.org</owner> <owner>asvitkine@chromium.org</owner> <summary> @@ -332,7 +332,7 @@ </histogram> <histogram name="UMA.IsClonedInstall" enum="BooleanCloned" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -458,7 +458,7 @@ </histogram> <histogram name="UMA.LowEntropySource3Value" units="units" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>mpearson@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -483,7 +483,7 @@ </histogram> <histogram name="UMA.MachineIdState" enum="UmaMachineIdState" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jwd@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -495,7 +495,7 @@ </histogram> <histogram name="UMA.MetricsIDsReset" enum="BooleanHit" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jwd@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -521,7 +521,7 @@ </histogram> <histogram name="UMA.MetricsService.Initialize.Time" units="microseconds" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -735,7 +735,7 @@ </histogram> <histogram name="UMA.SamplingRatePerMille" units="samples per mille" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jwd@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -763,7 +763,7 @@ </histogram> <histogram name="UMA.Startup.LocalStateFileExistence" enum="BooleanExists" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>caitlinfischer@google.com</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -795,7 +795,7 @@ </histogram> <histogram name="UMA.StructuredMetrics.EventsRecordedBeforeInit" units="count" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>jongahn@chromium.org</owner> <owner>tby@chromium.org</owner> <summary> @@ -859,7 +859,7 @@ </histogram> <histogram name="UMA.TruncatedEvents.UserAction" units="events" - expires_after="2023-01-22"> + expires_after="2023-02-12"> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -980,7 +980,7 @@ </histogram> <histogram name="UMA.UserDemographics.Status" enum="UserDemographicsStatus" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>rogerm@google.com</owner> <owner>src/base/metrics/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml index 76aba1f..ab2f57d 100644 --- a/tools/metrics/histograms/metadata/v8/histograms.xml +++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -380,7 +380,7 @@ </histogram> <histogram name="V8.GC.Cycle.CollectionRate.Full.Cpp" units="%" - expires_after="M109"> + expires_after="2023-02-12"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -466,7 +466,7 @@ </summary> </histogram> -<histogram name="V8.GC.Cycle.Full" units="ms" expires_after="M109"> +<histogram name="V8.GC.Cycle.Full" units="ms" expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -493,7 +493,7 @@ </summary> </histogram> -<histogram name="V8.GC.Cycle.Full.Cpp" units="ms" expires_after="M109"> +<histogram name="V8.GC.Cycle.Full.Cpp" units="ms" expires_after="2023-02-12"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -556,7 +556,8 @@ </summary> </histogram> -<histogram name="V8.GC.Cycle.MainThread.Full" units="ms" expires_after="M109"> +<histogram name="V8.GC.Cycle.MainThread.Full" units="ms" + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -566,7 +567,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Atomic" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -578,7 +579,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Compact" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -602,7 +603,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Cpp" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -638,7 +639,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Sweep" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -662,7 +663,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Weak" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -674,7 +675,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Weak.Cpp" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -707,7 +708,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Cpp" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -717,7 +718,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Incremental.Mark" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -728,7 +729,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Incremental.Mark.Cpp" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -739,7 +740,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Incremental.Sweep" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -761,7 +762,7 @@ </histogram> <histogram name="V8.GC.Cycle.MainThread.Full.Mark" units="ms" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -824,7 +825,8 @@ </summary> </histogram> -<histogram name="V8.GC.Cycle.MainThread.Young" units="ms" expires_after="M109"> +<histogram name="V8.GC.Cycle.MainThread.Young" units="ms" + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -854,7 +856,7 @@ </histogram> <histogram name="V8.GC.Cycle.Objects.Before.Full.Cpp" units="KB" - expires_after="M109"> + expires_after="2023-02-12"> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -874,7 +876,7 @@ </histogram> <histogram name="V8.GC.Cycle.Reason.Full" enum="GarbageCollectionReason" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -884,7 +886,7 @@ </histogram> <histogram name="V8.GC.Cycle.Reason.Young" enum="GarbageCollectionReason" - expires_after="M109"> + expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -893,7 +895,7 @@ </summary> </histogram> -<histogram name="V8.GC.Cycle.Young" units="ms" expires_after="M109"> +<histogram name="V8.GC.Cycle.Young" units="ms" expires_after="2023-02-12"> <owner>nikolaos@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -960,7 +962,7 @@ </histogram> <histogram name="V8.GC.TimeToSafepoint" units="microseconds" - expires_after="M109"> + expires_after="2023-02-12"> <owner>dinfuehr@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -1263,7 +1265,7 @@ </histogram> <histogram name="V8.InlineCodeCache.MainFrame.CacheTimesMatch" - units="BooleanTimesMatch" expires_after="2022-12-11"> + units="BooleanTimesMatch" expires_after="2023-02-12"> <owner>sky@chromium.org</owner> <owner>swarm-team@google.com</owner> <summary> @@ -1275,7 +1277,7 @@ </histogram> <histogram name="V8.InlineCodeCache.Subframe.CacheTimesMatch" - units="BooleanTimesMatch" expires_after="2022-12-11"> + units="BooleanTimesMatch" expires_after="2023-02-12"> <owner>sky@chromium.org</owner> <owner>swarm-team@google.com</owner> <summary> @@ -1287,7 +1289,7 @@ </histogram> <histogram name="V8.InlineCodeCache.UsedPreviouslyGeneratedCache" - units="BooleanUsed" expires_after="2022-12-11"> + units="BooleanUsed" expires_after="2023-02-12"> <owner>sky@chromium.org</owner> <owner>swarm-team@google.com</owner> <summary> @@ -1297,7 +1299,7 @@ </histogram> <histogram name="V8.InlineCodeCache.WillGenerateCache" units="BooleanUsed" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>sky@chromium.org</owner> <owner>swarm-team@google.com</owner> <summary> @@ -1410,7 +1412,7 @@ </histogram> <histogram name="V8.SandboxedExternalPointersCount" units="count" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>saelo@chromium.org</owner> <owner>ishell@chromium.org</owner> <summary> @@ -1425,7 +1427,7 @@ </histogram> <histogram name="V8.SandboxMode" enum="V8SandboxMode" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>saelo@chromium.org</owner> <owner>ishell@chromium.org</owner> <summary> @@ -1446,7 +1448,7 @@ </histogram> <histogram name="V8.SandboxReservationSizeGB" units="GB" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>saelo@chromium.org</owner> <owner>ishell@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/variations/histograms.xml b/tools/metrics/histograms/metadata/variations/histograms.xml index cca3f5d..2f28506 100644 --- a/tools/metrics/histograms/metadata/variations/histograms.xml +++ b/tools/metrics/histograms/metadata/variations/histograms.xml
@@ -127,7 +127,7 @@ </histogram> <histogram name="Variations.FirstRun.SeedConnectTime" units="ms" - expires_after="2022-11-20"> + expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -153,7 +153,7 @@ </histogram> <histogram name="Variations.FirstRun.SeedFetchTime" units="ms" - expires_after="2022-11-20"> + expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -164,7 +164,7 @@ </histogram> <histogram name="Variations.FirstRunResult" enum="VariationsFirstRunResult" - expires_after="2022-11-20"> + expires_after="2023-02-12"> <owner>asvitkine@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -684,7 +684,7 @@ </histogram> <histogram name="Variations.WebViewDownloadJobInterval" units="minutes" - expires_after="2022-12-13"> + expires_after="2023-02-12"> <owner>ntfschr@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary> @@ -695,7 +695,7 @@ </histogram> <histogram name="Variations.WebViewDownloadJobQueueTime" units="minutes" - expires_after="2022-12-13"> + expires_after="2023-02-12"> <owner>ntfschr@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/web_apk/histograms.xml b/tools/metrics/histograms/metadata/web_apk/histograms.xml index dbb9b0b..b4b55ed 100644 --- a/tools/metrics/histograms/metadata/web_apk/histograms.xml +++ b/tools/metrics/histograms/metadata/web_apk/histograms.xml
@@ -142,7 +142,7 @@ </histogram> <histogram name="WebApk.Install.RequestTokenDurationV2" units="ms" - expires_after="2022-10-02"> + expires_after="2023-02-12"> <owner>hartmanng@chromium.org</owner> <owner>rayankans@chromium.org</owner> <owner> @@ -197,7 +197,7 @@ </histogram> <histogram name="WebApk.Notification.Permission.Status2" enum="ContentSetting" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>hartmanng@chromium.org</owner> <owner>mvanouwerkerk@chromium.org</owner> <owner>
diff --git a/tools/metrics/histograms/metadata/web_audio/histograms.xml b/tools/metrics/histograms/metadata/web_audio/histograms.xml index f3a7bc7..9cb0da8a 100644 --- a/tools/metrics/histograms/metadata/web_audio/histograms.xml +++ b/tools/metrics/histograms/metadata/web_audio/histograms.xml
@@ -162,7 +162,7 @@ </histogram> <histogram name="WebAudio.AudioDestination.HardwareBufferSize" units="units" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>hongchan@chromium.org</owner> <owner>mjwilson@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml index e2d84bc..ad2cde6 100644 --- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml +++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -200,7 +200,7 @@ </histogram> <histogram name="WebRTC.Audio.Agc.InputClippingRate" units="%" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>silen@chromium.org</owner> <owner>alessiob@chromium.org</owner> <owner>minyue@chromium.org</owner> @@ -280,7 +280,7 @@ </histogram> <histogram name="WebRTC.Audio.AgcClippingAdjustmentAllowed" enum="Boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>hlundin@chromium.org</owner> <summary> The automatic gain control (AGC) in WebRTC tries to adjust the microphone @@ -293,7 +293,7 @@ </histogram> <histogram name="WebRTC.Audio.AgcSetLevel" units="level" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>hlundin@chromium.org</owner> <summary> The automatic gain control (AGC) in WebRTC tries to adjust the microphone @@ -304,7 +304,7 @@ </histogram> <histogram name="WebRTC.Audio.ApmAnalogGainDecreaseAverage" units="level" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>silen@chromium.org</owner> <owner>alessiob@chromium.org</owner> <summary> @@ -315,7 +315,7 @@ </histogram> <histogram name="WebRTC.Audio.ApmAnalogGainDecreaseRate" units="changes/minute" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>silen@chromium.org</owner> <owner>alessiob@chromium.org</owner> <summary> @@ -326,7 +326,7 @@ </histogram> <histogram name="WebRTC.Audio.ApmAnalogGainIncreaseAverage" units="level" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>silen@chromium.org</owner> <owner>alessiob@chromium.org</owner> <summary> @@ -348,7 +348,7 @@ </histogram> <histogram name="WebRTC.Audio.ApmAnalogGainUpdateAverage" units="level" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>silen@chromium.org</owner> <owner>alessiob@chromium.org</owner> <summary> @@ -359,7 +359,7 @@ </histogram> <histogram name="WebRTC.Audio.ApmAnalogGainUpdateRate" units="changes/minute" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>silen@chromium.org</owner> <owner>alessiob@chromium.org</owner> <summary> @@ -840,7 +840,7 @@ </histogram> <histogram name="WebRTC.Audio.SpeechExpandRatePercent" units="%" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>hlundin@chromium.org</owner> <summary> Measures the audible expand rate for an incoming WebRTC audio stream. The @@ -1219,7 +1219,7 @@ </histogram> <histogram name="WebRTC.DesktopCapture.Win.WgcCapturerResult" - enum="WebRtcWgcCapturerResult" expires_after="2022-12-11"> + enum="WebRtcWgcCapturerResult" expires_after="2023-02-12"> <owner>jamiewalch@chromium.org</owner> <owner>auorion@microsoft.com</owner> <owner>edgecapabilitiesdev@microsoft.com</owner> @@ -1230,7 +1230,7 @@ </histogram> <histogram name="WebRTC.DesktopCapture.Win.WgcCaptureSessionGetFrameResult" - enum="WebRtcWgcCaptureSessionGetFrameResult" expires_after="2022-12-11"> + enum="WebRtcWgcCaptureSessionGetFrameResult" expires_after="2023-02-12"> <owner>jamiewalch@chromium.org</owner> <owner>auorion@microsoft.com</owner> <owner>edgecapabilitiesdev@microsoft.com</owner> @@ -1240,7 +1240,7 @@ </histogram> <histogram name="WebRTC.DesktopCapture.Win.WgcCaptureSessionStartResult" - enum="WebRtcWgcCaptureSessionStartResult" expires_after="2022-12-11"> + enum="WebRtcWgcCaptureSessionStartResult" expires_after="2023-02-12"> <owner>jamiewalch@chromium.org</owner> <owner>auorion@microsoft.com</owner> <owner>edgecapabilitiesdev@microsoft.com</owner> @@ -1424,7 +1424,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.Duration.Signaling" units="microseconds" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>handellm@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary> @@ -1589,7 +1589,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.Latency.Worker" units="microseconds" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>handellm@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <summary> @@ -1815,7 +1815,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.SpeedLimit" units="%" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>hbos@chromium.org</owner> <summary> @@ -1890,7 +1890,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.ThermalThrottling" units="boolean" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>hbos@chromium.org</owner> <summary> @@ -1900,7 +1900,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.ThermalThrottlingEpisodes" units="count" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>hbos@chromium.org</owner> <summary> @@ -1975,7 +1975,7 @@ </histogram> <histogram name="WebRTC.Screenshare.FrameRateConstraints.60MinPlusMaxMinusOne" - units="2D fps" expires_after="2022-12-11"> + units="2D fps" expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>ilnik@chromium.org</owner> <summary> @@ -1985,7 +1985,7 @@ </histogram> <histogram name="WebRTC.Screenshare.FrameRateConstraints.Exists" - units="boolean" expires_after="2022-12-11"> + units="boolean" expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>ilnik@chromium.org</owner> <summary> @@ -1995,7 +1995,7 @@ </histogram> <histogram name="WebRTC.Screenshare.FrameRateConstraints.Max.Exists" - units="boolean" expires_after="2022-12-11"> + units="boolean" expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>ilnik@chromium.org</owner> <summary> @@ -2005,7 +2005,7 @@ </histogram> <histogram name="WebRTC.Screenshare.FrameRateConstraints.Max.Value" units="fps" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>ilnik@chromium.org</owner> <summary> @@ -2015,7 +2015,7 @@ </histogram> <histogram name="WebRTC.Screenshare.FrameRateConstraints.Min.Exists" - units="boolean" expires_after="2022-12-11"> + units="boolean" expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>ilnik@chromium.org</owner> <summary> @@ -2025,7 +2025,7 @@ </histogram> <histogram name="WebRTC.Screenshare.FrameRateConstraints.Min.Value" units="fps" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>ilnik@chromium.org</owner> <summary> @@ -2055,7 +2055,7 @@ </histogram> <histogram name="WebRTC.Screenshare.FrameRateConstraints.MinUnset.Max" - units="fps" expires_after="2022-12-11"> + units="fps" expires_after="2023-02-12"> <owner>handellm@google.com</owner> <owner>ilnik@chromium.org</owner> <summary> @@ -2075,7 +2075,7 @@ </histogram> <histogram name="WebRTC.SentAudioTrackDuration" units="ms" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>perkj@chromium.org</owner> <summary> Durations of audio tracks sent over a PeerConnection. The stopwatch starts
diff --git a/tools/metrics/histograms/metadata/webapps/histograms.xml b/tools/metrics/histograms/metadata/webapps/histograms.xml index a5e61e5..f151aae 100644 --- a/tools/metrics/histograms/metadata/webapps/histograms.xml +++ b/tools/metrics/histograms/metadata/webapps/histograms.xml
@@ -100,7 +100,7 @@ </histogram> <histogram name="AppBanners.UserResponse" enum="AppBannersUserResponse" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>dominickn@chromium.org</owner> <owner>pjmclachlan@google.com</owner> <summary> @@ -167,7 +167,7 @@ </histogram> <histogram name="Webapp.AddToHomescreenMediator.AppTypeToMenuEntry" - enum="AppTypeToMenuEntry" expires_after="2022-12-11"> + enum="AppTypeToMenuEntry" expires_after="2023-02-12"> <owner>finnur@chromium.org</owner> <owner>peter@chromium.org</owner> <summary> @@ -503,7 +503,7 @@ </histogram> <histogram name="Webapp.Install.InstallEvent" enum="WebappInstallSource" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>dominickn@chromium.org</owner> <owner>loyso@chromium.org</owner> <owner>calamity@chromium.org</owner> @@ -574,7 +574,7 @@ </histogram> <histogram name="Webapp.InstallResult" enum="WebAppInstallResultCode" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <!-- Name completed by histogram_suffixes name="WebAppType" --> <owner>calamity@chromium.org</owner> @@ -583,7 +583,7 @@ </histogram> <histogram name="WebApp.Launcher.LaunchResult" - enum="WebAppLauncherLaunchResult" expires_after="2022-11-27"> + enum="WebAppLauncherLaunchResult" expires_after="2023-02-12"> <owner>davidbienvenu@chromium.org</owner> <owner>jessemckenna@google.com</owner> <summary> @@ -614,7 +614,7 @@ </histogram> <histogram name="WebApp.Preinstalled.AppDuplicationFixApplied" units="apps" - expires_after="2022-11-27"> + expires_after="2023-02-12"> <owner>alancutter@chromium.org</owner> <owner>desktop-pwas-team@google.com</owner> <summary> @@ -679,7 +679,7 @@ </histogram> <histogram name="WebApp.Preinstalled.ConfigErrorCount" units="apps" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>alancutter@chromium.org</owner> <owner>desktop-pwas-team@google.com</owner> <summary> @@ -788,7 +788,7 @@ </histogram> <histogram name="WebApp.Shortcuts.Creation.Result" - enum="ShortcutsCreationResult" expires_after="2022-11-20"> + enum="ShortcutsCreationResult" expires_after="2023-02-12"> <owner>phillis@chromium.org</owner> <owner>dmurph@chromium.org</owner> <summary>Records the result of shortcut creation for PWA.</summary>
diff --git a/tools/metrics/histograms/metadata/webauthn/histograms.xml b/tools/metrics/histograms/metadata/webauthn/histograms.xml index 61535c77..03d4082 100644 --- a/tools/metrics/histograms/metadata/webauthn/histograms.xml +++ b/tools/metrics/histograms/metadata/webauthn/histograms.xml
@@ -71,7 +71,7 @@ </histogram> <histogram name="WebAuthentication.CableV2.MobileEvent" - enum="WebAuthenticationCableV2MobileEvent" expires_after="2022-12-11"> + enum="WebAuthenticationCableV2MobileEvent" expires_after="2023-02-12"> <owner>agl@chromium.org</owner> <owner>martinkr@google.com</owner> <summary> @@ -212,7 +212,7 @@ </histogram> <histogram name="WebAuthentication.MakeCredentialRequestTransport" - enum="WebAuthenticationFidoTransport" expires_after="2022-12-01"> + enum="WebAuthenticationFidoTransport" expires_after="2023-02-12"> <owner>kenrb@chromium.org</owner> <owner>martinkr@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/windows/histograms.xml b/tools/metrics/histograms/metadata/windows/histograms.xml index 72ae4cc..0667a1c 100644 --- a/tools/metrics/histograms/metadata/windows/histograms.xml +++ b/tools/metrics/histograms/metadata/windows/histograms.xml
@@ -44,7 +44,7 @@ </histogram> <histogram name="Windows.CetEnabled" enum="BooleanEnabled" - expires_after="2022-12-01"> + expires_after="2023-02-12"> <owner>ajgo@chromium.org</owner> <owner>wfh@chromium.org</owner> <summary> @@ -228,7 +228,7 @@ </histogram> <histogram name="Windows.OnCurrentWorkspaceCached" enum="BooleanCacheHit" - expires_after="2022-12-04"> + expires_after="2023-02-12"> <owner>davidbienvenu@chromium.org</owner> <owner>sky@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/xr/histograms.xml b/tools/metrics/histograms/metadata/xr/histograms.xml index 81d4069..02af3bc 100644 --- a/tools/metrics/histograms/metadata/xr/histograms.xml +++ b/tools/metrics/histograms/metadata/xr/histograms.xml
@@ -58,7 +58,7 @@ </summary> </histogram> -<histogram name="VRViewerType" enum="VRViewerType" expires_after="2022-12-11"> +<histogram name="VRViewerType" enum="VRViewerType" expires_after="2023-02-12"> <owner>alcooper@chromium.org</owner> <owner>xr-dev@chromium.org</owner> <summary>The type of headset being used for VR.</summary> @@ -85,7 +85,7 @@ </histogram> <histogram name="XR.WebXR.ReferenceSpace.Succeeded" enum="XRReferenceSpaceType" - expires_after="2022-12-11"> + expires_after="2023-02-12"> <owner>alcooper@chromium.org</owner> <owner>xr-dev@chromium.org</owner> <summary>
diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_strings_am.xtb b/ui/accessibility/extensions/strings/accessibility_extensions_strings_am.xtb index 897d6d78..2f93206 100644 --- a/ui/accessibility/extensions/strings/accessibility_extensions_strings_am.xtb +++ b/ui/accessibility/extensions/strings/accessibility_extensions_strings_am.xtb
@@ -24,7 +24,7 @@ <translation id="3410969471888629217">የጣቢያ ብጁ ማድረጎችን እርሳ</translation> <translation id="3435896845095436175">አንቃ</translation> <translation id="3622586652998721735">እንደ ነባሪ ገጽታ አዘጋጅ</translation> -<translation id="3812541808639806898">የምስል ምትክ ጽሑፍ ተመልካች</translation> +<translation id="3812541808639806898">የምስል ምትክ ጽሁፍ ተመልካች</translation> <translation id="381767806621926835">ረጅም መግለጫውን ለመድረስ የ«longdesc» ወይም የ«aria-describedat» አይነታ ያለው ማንኛውም ነገር በቀኝ ጠቅ ያድርጉ።</translation> <translation id="4023902424053835668">የድር ገጾችን ጹሑፍ የቀስት ቁልፎችን በመጠቀም ያስሱ።</translation> <translation id="4388820049312272371">የጠቋሚውን አቀማመጥ ከፈጣን ብልጭታ ጋር አድምቅ።</translation>
diff --git a/ui/accessibility/platform/inspect/ax_call_statement_invoker_auralinux.h b/ui/accessibility/platform/inspect/ax_call_statement_invoker_auralinux.h index 90a4d8d0..823bd271 100644 --- a/ui/accessibility/platform/inspect/ax_call_statement_invoker_auralinux.h +++ b/ui/accessibility/platform/inspect/ax_call_statement_invoker_auralinux.h
@@ -72,7 +72,7 @@ // Map between AXUIElement objects and their DOMIds/accessible tree // line numbers. Owned by the caller and outlives this object. - const base::raw_ptr<const AXTreeIndexerAuraLinux, DanglingUntriaged> indexer_; + const base::raw_ptr<const AXTreeIndexerAuraLinux> indexer_; // Variables storage. Owned by the caller and outlives this object. const base::raw_ptr<std::map<std::string, Target>> storage_;
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc index 9b1d5a2..0d9378dd 100644 --- a/ui/aura/window_tree_host.cc +++ b/ui/aura/window_tree_host.cc
@@ -175,10 +175,6 @@ WindowTreeHost::~WindowTreeHost() { DCHECK(!compositor_) << "compositor must be destroyed before root window"; - if (owned_input_method_) { - delete input_method_; - input_method_ = nullptr; - } } // static @@ -344,18 +340,15 @@ ui::InputMethod* WindowTreeHost::GetInputMethod() { if (!input_method_) { - input_method_ = - ui::CreateInputMethod(this, GetAcceleratedWidget()).release(); - owned_input_method_ = true; + input_method_owned_ = ui::CreateInputMethod(this, GetAcceleratedWidget()); + input_method_ = input_method_owned_.get(); } return input_method_; } void WindowTreeHost::SetSharedInputMethod(ui::InputMethod* input_method) { - if (input_method_ && owned_input_method_) - delete input_method_; input_method_ = input_method; - owned_input_method_ = false; + input_method_owned_.reset(); } ui::EventDispatchDetails WindowTreeHost::DispatchKeyEventPostIME(
diff --git a/ui/aura/window_tree_host.h b/ui/aura/window_tree_host.h index 7e7dc232..b82002bb 100644 --- a/ui/aura/window_tree_host.h +++ b/ui/aura/window_tree_host.h
@@ -481,13 +481,11 @@ std::unique_ptr<ui::ViewProp> prop_; + std::unique_ptr<ui::InputMethod> input_method_owned_; // The InputMethod instance used to process key events. // If owned it, it is created in GetInputMethod() method; // If not owned it, it is passed in through SetSharedInputMethod() method. - raw_ptr<ui::InputMethod, DanglingUntriaged> input_method_ = nullptr; - - // Whether the InputMethod instance is owned by this WindowTreeHost. - bool owned_input_method_ = false; + raw_ptr<ui::InputMethod> input_method_ = nullptr; // Set to true if this WindowTreeHost is currently holding pointer moves. bool holding_pointer_moves_ = false;
diff --git a/ui/base/webui/i18n_source_stream.cc b/ui/base/webui/i18n_source_stream.cc index 9aa3589..de274f10 100644 --- a/ui/base/webui/i18n_source_stream.cc +++ b/ui/base/webui/i18n_source_stream.cc
@@ -35,12 +35,13 @@ return "i18n"; } -int I18nSourceStream::FilterData(net::IOBuffer* output_buffer, - int output_buffer_size, - net::IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool upstream_end_reached) { +base::expected<size_t, net::Error> I18nSourceStream::FilterData( + net::IOBuffer* output_buffer, + size_t output_buffer_size, + net::IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool upstream_end_reached) { // |input_| is often empty (or it may have something from the prior call). input_.append(input_buffer->data(), input_buffer_size); *consumed_bytes = input_buffer_size; @@ -61,8 +62,7 @@ } output_.append(ReplaceTemplateExpressions(to_process, *replacements_)); - int bytes_out = - std::min(output_.size(), static_cast<size_t>(output_buffer_size)); + size_t bytes_out = std::min(output_.size(), output_buffer_size); output_.copy(output_buffer->data(), bytes_out); output_.erase(0, bytes_out); return bytes_out;
diff --git a/ui/base/webui/i18n_source_stream.h b/ui/base/webui/i18n_source_stream.h index 177d336..b797575e 100644 --- a/ui/base/webui/i18n_source_stream.h +++ b/ui/base/webui/i18n_source_stream.h
@@ -37,12 +37,13 @@ // SourceStream implementation. std::string GetTypeAsString() const override; - int FilterData(net::IOBuffer* output_buffer, - int output_buffer_size, - net::IOBuffer* input_buffer, - int input_buffer_size, - int* consumed_bytes, - bool upstream_end_reached) override; + base::expected<size_t, net::Error> FilterData( + net::IOBuffer* output_buffer, + size_t output_buffer_size, + net::IOBuffer* input_buffer, + size_t input_buffer_size, + size_t* consumed_bytes, + bool upstream_end_reached) override; // Keep split $i18n tags (wait for the whole tag). This is expected to vary // in size from 0 to a few KB and should never be larger than the input file
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb index 75bb515b..4441546 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -597,7 +597,7 @@ <translation id="6055907707645252013"><ph name="NETWORK_TYPE" /> አውታረ መረብ፣ አልተገናኘም</translation> <translation id="6074825444536523002">Google ቅጽ</translation> <translation id="6079871810119356840">የሃንጋሪኛ በQwerty የቁልፍ ሰሌዳ</translation> -<translation id="6096979789310008754">የፍለጋ ጽሑፍ ጸድቷል፣ ሁሉንም ፋይሎች እና አቃፊዎች በማሳየት ላይ።</translation> +<translation id="6096979789310008754">የፍለጋ ጽሁፍ ጸድቷል፣ ሁሉንም ፋይሎች እና አቃፊዎች በማሳየት ላይ።</translation> <translation id="610101264611565198"><ph name="FILE_NAME" />ን ወደ <ph name="FOLDER_NAME" /> በመውሰድ ላይ</translation> <translation id="61118516107968648">የCSV ጽሁፍ</translation> <translation id="6129953537138746214">ባዶ ቦታ</translation> @@ -866,7 +866,7 @@ <translation id="8299269255470343364">ጃፓንኛ</translation> <translation id="8300849813060516376">OTASP አልተሳካም</translation> <translation id="8312871300878166382">ወደ አቃፊ ውስጥ ይለጥፉ</translation> -<translation id="8329978297633540474">ስነጣ አልባ ጽሑፍ</translation> +<translation id="8329978297633540474">ስነጣ አልባ ጽሁፍ</translation> <translation id="8335587457941836791">ከመደርደሪያ ንቀል</translation> <translation id="8335837413233998004">ቤላሩስኛ</translation> <translation id="8336153091935557858">ትላንትና <ph name="YESTERDAY_DAYTIME" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb index d259f05..cb741e7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -286,10 +286,12 @@ <translation id="3479552764303398839">לא עכשיו</translation> <translation id="3486821258960016770">מונגולית</translation> <translation id="3495304270784461826"><ph name="COUNT" /> שגיאות.</translation> +<translation id="3495810061346586977">הקובץ הזה סודי וכפוף להגבלות של מדיניות האדמין. <ph name="BEGIN_LINK_HELP" />מידע נוסף<ph name="END_LINK_HELP" /></translation> <translation id="3509680540198371098">רשת <ph name="NETWORK_INDEX" /> מתוך <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, עוצמת האות: <ph name="SIGNAL_STRENGTH" />%, פרטים</translation> <translation id="3522708245912499433">פורטוגזית</translation> <translation id="3524311639100184459">זהירות: הקבצים האלה זמניים, וייתכן שהם יימחקו באופן אוטומטי כדי לפנות מקום בכונן. <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation> <translation id="3527085408025491307">תיקייה</translation> +<translation id="3548125359243647069">הוזן קוד אימות שגוי יותר מדי פעמים.</translation> <translation id="3549797760399244642">מעבר אל drive.google.com...</translation> <translation id="3553048479571901246">כדי שניתן יהיה לפתוח קבצים באמצעות <ph name="APP_NAME" />, צריך להעתיק אותם לתיקיית קובצי Windows.</translation> <translation id="3556731189587832921">מקלדת Workman בינלאומית באנגלית (ארה"ב) ל-PC</translation> @@ -619,6 +621,7 @@ <translation id="6267547857941397424">רשת <ph name="NETWORK_INDEX" /> מתוך <ph name="NETWORK_COUNT" />, <ph name="PHONE_NAME" />, עוצמת האות: <ph name="SIGNAL_STRENGTH" />%, סוללת הטלפון: <ph name="BATTERY_STATUS" />%, התחברות</translation> <translation id="6269630227984243955">מלאית</translation> <translation id="6287852322318138013">בחירת אפליקציה לפתיחת הקובץ</translation> +<translation id="6295542640242147836">נעילת כרטיס ה-SIM</translation> <translation id="6296410173147755564">ה-PUK לא תקין</translation> <translation id="6312403991423642364">שגיאת רשת לא ידועה</translation> <translation id="6317608858038767920">שרת שמות בהתאמה אישית <ph name="INPUT_INDEX" /></translation> @@ -727,6 +730,7 @@ <translation id="7189874332498648577"><ph name="NUMBER_OF_GB" /> GB</translation> <translation id="7191454237977785534">שמירה בשם</translation> <translation id="7229570126336867161">יש צורך ב-EVDO</translation> +<translation id="7230898482850090046">לבקשת האדמין, עליך להשבית את ההגדרה 'נעילת כרטיס ה-SIM'</translation> <translation id="7238097264433196391">שם התקן האחסון</translation> <translation id="7238643356913091553"><ph name="NETWORK_NAME" />, פרטים</translation> <translation id="7246947237293279874">שרת proxy של FTP</translation> @@ -759,6 +763,7 @@ <translation id="7505167922889582512">הצגת קבצים מוסתרים</translation> <translation id="7514365320538308">הורדה</translation> <translation id="751507702149411736">ביילורוסית</translation> +<translation id="7521790570754130607">נדרש קוד אימות לשימוש בחבילת הגלישה</translation> <translation id="7532029025027028521">תעתיק פרסית</translation> <translation id="7544830582642184299">הענקת הרשאת גישה לאפליקציות Linux לקבצים ב-Google Drive. השינויים יסתנכרנו עם המכשירים האחרים שלך.</translation> <translation id="7547009467130558110">נעל ספורט</translation> @@ -783,6 +788,7 @@ <translation id="76959938259365003">ריקון האשפה נכשל.</translation> <translation id="770015031906360009">יוונית</translation> <translation id="7705251383879779343">ההעתקה של <ph name="FILE_NAME" /> הסתיימה.</translation> +<translation id="7708271999969613024">כדי להשתמש ברשת הזו, עליך להזין את המפתח האישי לביטול החסימה (PUK) בן 8 הספרות שמקבלים מהספק.</translation> <translation id="7711920809702896782">פרטי התמונה</translation> <translation id="7724603315864178912">חיתוך</translation> <translation id="7730494089396812859">הצגת פרטים של גיבוי בענן</translation> @@ -877,6 +883,7 @@ <translation id="8437209419043462667">ארה"ב</translation> <translation id="8452135315243592079">כרטיס SIM חסר</translation> <translation id="8456681095658380701">שם לא חוקי</translation> +<translation id="8457767749626250697">כרטיס ה-SIM שלך נעול</translation> <translation id="8459404855768962328">לאחר העתקת הפריט הזה, הוא ישותף עם כל מי שיכול לראות את התיקייה המשותפת '<ph name="DESTINATION_NAME" />'.</translation> <translation id="8461467696380332069">כדי לגשת במהירות לקבצים שבמדף, יש ללחוץ לחיצה ימנית על הקובץ ולבחור באפשרות "הצמדה למדף".</translation> <translation id="8461914792118322307">שרת proxy</translation>
diff --git a/ui/file_manager/integration_tests/file_manager/transfer.js b/ui/file_manager/integration_tests/file_manager/transfer.js index aa4b904..2c823d87 100644 --- a/ui/file_manager/integration_tests/file_manager/transfer.js +++ b/ui/file_manager/integration_tests/file_manager/transfer.js
@@ -925,6 +925,47 @@ {ignoreLastModifiedTime: true}); }; +/** + * Tests that dropping a folder on a directory tree item (folder) copies the + * folder and also updates the directory tree. + */ +testcase.transferDragAndDropFolder = async () => { + // Note that directoryB is a child of directoryA. + const entries = [ENTRIES.directoryA, ENTRIES.directoryB, ENTRIES.directoryD]; + + // Open files app. + const appId = await setupAndWaitUntilReady(RootPath.DOWNLOADS, entries, []); + + // Expand Downloads to display folder "D" in the directory tree. + await expandTreeItem(appId, '#directory-tree [entry-label="Downloads"]'); + + // The drag has to start in the file list column "name" text, otherwise it + // starts a drag-selection instead of a drag operation. + const source = + `#file-list li[file-name="${ENTRIES.directoryA.nameText}"] .entry-name`; + + // Wait for the source. + await remoteCall.waitForElement(appId, source); + + // Wait for the directory tree target. + const target = + `#directory-tree [entry-label="${ENTRIES.directoryD.nameText}"]`; + await remoteCall.waitForElement(appId, target); + + // Drag the source and drop it on the target. + const skipDrop = false; + chrome.test.assertTrue( + await remoteCall.callRemoteTestUtil( + 'fakeDragAndDrop', appId, [source, target, skipDrop]), + 'fakeDragAndDrop failed'); + + // Check: the dropped folder "A" should appear in the directory tree under + // the target folder "D" and be expandable (as folder "A" contains "B"). + await expandTreeItem(appId, target); + await expandTreeItem( + appId, target + ` [entry-label="${ENTRIES.directoryA.nameText}"]`); +}; + /* * Tests that dragging a file over a directory tree item (folder) navigates * the file list to that folder.
diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn index 3963fbd..4ac34cea 100644 --- a/ui/ozone/platform/wayland/BUILD.gn +++ b/ui/ozone/platform/wayland/BUILD.gn
@@ -191,6 +191,8 @@ "host/wayland_zwp_pointer_gestures.h", "host/wayland_zwp_relative_pointer_manager.cc", "host/wayland_zwp_relative_pointer_manager.h", + "host/xdg_activation.cc", + "host/xdg_activation.h", "host/xdg_foreign_wrapper.cc", "host/xdg_foreign_wrapper.h", "host/xdg_output.cc", @@ -269,6 +271,7 @@ "//third_party/wayland-protocols:touchpad_haptics_protocol", "//third_party/wayland-protocols:viewporter_protocol", "//third_party/wayland-protocols:wayland_drm_protocol", + "//third_party/wayland-protocols:xdg_activation", "//third_party/wayland-protocols:xdg_decoration_protocol", "//third_party/wayland-protocols:xdg_foreign", "//third_party/wayland-protocols:xdg_output_protocol",
diff --git a/ui/ozone/platform/wayland/common/wayland_object.cc b/ui/ozone/platform/wayland/common/wayland_object.cc index 052da983..a1e1d810 100644 --- a/ui/ozone/platform/wayland/common/wayland_object.cc +++ b/ui/ozone/platform/wayland/common/wayland_object.cc
@@ -32,6 +32,7 @@ #include <wayland-client-core.h> #include <wayland-cursor.h> #include <wayland-drm-client-protocol.h> +#include <xdg-activation-v1-client-protocol.h> #include <xdg-decoration-unstable-v1-client-protocol.h> #include <xdg-foreign-unstable-v1-client-protocol.h> #include <xdg-foreign-unstable-v2-client-protocol.h> @@ -209,6 +210,8 @@ IMPLEMENT_WAYLAND_OBJECT_TRAITS(wp_presentation_feedback) IMPLEMENT_WAYLAND_OBJECT_TRAITS(wp_viewport) IMPLEMENT_WAYLAND_OBJECT_TRAITS(wp_viewporter) +IMPLEMENT_WAYLAND_OBJECT_TRAITS(xdg_activation_v1) +IMPLEMENT_WAYLAND_OBJECT_TRAITS(xdg_activation_token_v1) IMPLEMENT_WAYLAND_OBJECT_TRAITS(xdg_popup) IMPLEMENT_WAYLAND_OBJECT_TRAITS(xdg_positioner) IMPLEMENT_WAYLAND_OBJECT_TRAITS(xdg_surface)
diff --git a/ui/ozone/platform/wayland/common/wayland_object.h b/ui/ozone/platform/wayland/common/wayland_object.h index 70c32c8..b32ae8b 100644 --- a/ui/ozone/platform/wayland/common/wayland_object.h +++ b/ui/ozone/platform/wayland/common/wayland_object.h
@@ -143,6 +143,8 @@ DECLARE_WAYLAND_OBJECT_TRAITS(wp_presentation_feedback) DECLARE_WAYLAND_OBJECT_TRAITS(wp_viewport) DECLARE_WAYLAND_OBJECT_TRAITS(wp_viewporter) +DECLARE_WAYLAND_OBJECT_TRAITS(xdg_activation_v1) +DECLARE_WAYLAND_OBJECT_TRAITS(xdg_activation_token_v1) DECLARE_WAYLAND_OBJECT_TRAITS(xdg_popup) DECLARE_WAYLAND_OBJECT_TRAITS(xdg_positioner) DECLARE_WAYLAND_OBJECT_TRAITS(xdg_surface)
diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc index ae6846d..003c907f 100644 --- a/ui/ozone/platform/wayland/host/wayland_connection.cc +++ b/ui/ozone/platform/wayland/host/wayland_connection.cc
@@ -55,6 +55,7 @@ #include "ui/ozone/platform/wayland/host/wayland_zwp_pointer_constraints.h" #include "ui/ozone/platform/wayland/host/wayland_zwp_pointer_gestures.h" #include "ui/ozone/platform/wayland/host/wayland_zwp_relative_pointer_manager.h" +#include "ui/ozone/platform/wayland/host/xdg_activation.h" #include "ui/ozone/platform/wayland/host/xdg_foreign_wrapper.h" #include "ui/ozone/platform/wayland/host/zwp_idle_inhibit_manager.h" #include "ui/ozone/platform/wayland/host/zwp_primary_selection_device_manager.h" @@ -196,6 +197,8 @@ &WaylandZwpPointerGestures::Instantiate); RegisterGlobalObjectFactory(WaylandZwpRelativePointerManager::kInterfaceName, &WaylandZwpRelativePointerManager::Instantiate); + RegisterGlobalObjectFactory(XdgActivation::kInterfaceName, + &XdgActivation::Instantiate); RegisterGlobalObjectFactory(XdgForeignWrapper::kInterfaceNameV1, &XdgForeignWrapper::Instantiate); RegisterGlobalObjectFactory(XdgForeignWrapper::kInterfaceNameV2,
diff --git a/ui/ozone/platform/wayland/host/wayland_connection.h b/ui/ozone/platform/wayland/host/wayland_connection.h index 27e70b08..b45280e 100644 --- a/ui/ozone/platform/wayland/host/wayland_connection.h +++ b/ui/ozone/platform/wayland/host/wayland_connection.h
@@ -61,6 +61,7 @@ class GtkShell1; class ZwpIdleInhibitManager; class ZwpPrimarySelectionDeviceManager; +class XdgActivation; class XdgForeignWrapper; class OverlayPrioritizer; @@ -243,6 +244,8 @@ return wayland_zwp_relative_pointer_manager_.get(); } + const XdgActivation* xdg_activation() const { return xdg_activation_.get(); } + XdgForeignWrapper* xdg_foreign() const { return xdg_foreign_.get(); } ZwpIdleInhibitManager* zwp_idle_inhibit_manager() const { @@ -328,6 +331,7 @@ friend class WaylandZwpRelativePointerManager; friend class WaylandZcrColorManager; friend class WaylandZcrCursorShapes; + friend class XdgActivation; friend class XdgForeignWrapper; friend class ZwpIdleInhibitManager; friend class ZwpPrimarySelectionDeviceManager; @@ -412,6 +416,7 @@ std::unique_ptr<WaylandZwpPointerGestures> wayland_zwp_pointer_gestures_; std::unique_ptr<WaylandSeat> seat_; std::unique_ptr<WaylandBufferManagerHost> buffer_manager_host_; + std::unique_ptr<XdgActivation> xdg_activation_; std::unique_ptr<XdgForeignWrapper> xdg_foreign_; std::unique_ptr<ZwpIdleInhibitManager> zwp_idle_inhibit_manager_; std::unique_ptr<OverlayPrioritizer> overlay_prioritizer_;
diff --git a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc index 391b58b..ab9fc817 100644 --- a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc +++ b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc
@@ -29,6 +29,7 @@ #include "ui/ozone/platform/wayland/host/wayland_window_drag_controller.h" #include "ui/ozone/platform/wayland/host/wayland_zaura_shell.h" #include "ui/ozone/platform/wayland/host/wayland_zwp_pointer_constraints.h" +#include "ui/ozone/platform/wayland/host/xdg_activation.h" #include "ui/platform_window/common/platform_window_defaults.h" #include "ui/platform_window/extensions/wayland_extension.h" @@ -239,6 +240,8 @@ if (aura_surface_ && zaura_surface_get_version(aura_surface_.get()) >= ZAURA_SURFACE_ACTIVATE_SINCE_VERSION) { zaura_surface_activate(aura_surface_.get()); + } else if (connection()->xdg_activation()) { + connection()->xdg_activation()->Activate(root_surface()->surface()); } else if (gtk_surface1_) { gtk_surface1_->RequestFocus(); }
diff --git a/ui/ozone/platform/wayland/host/xdg_activation.cc b/ui/ozone/platform/wayland/host/xdg_activation.cc new file mode 100644 index 0000000..ad964e91 --- /dev/null +++ b/ui/ozone/platform/wayland/host/xdg_activation.cc
@@ -0,0 +1,144 @@ +// Copyright 2022 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 "ui/ozone/platform/wayland/host/xdg_activation.h" + +#include <xdg-activation-v1-client-protocol.h> + +#include <memory> + +#include "base/bind.h" +#include "base/callback.h" +#include "base/check_op.h" +#include "base/logging.h" +#include "ui/ozone/platform/wayland/host/wayland_connection.h" +#include "ui/ozone/platform/wayland/host/wayland_seat.h" +#include "ui/ozone/platform/wayland/host/wayland_serial_tracker.h" +#include "ui/ozone/platform/wayland/host/wayland_window.h" + +namespace ui { + +namespace { +constexpr uint32_t kMaxVersion = 1; +} + +using ActivationDoneCallback = base::OnceCallback<void(std::string token)>; + +// Wraps the actual activation token. +class XdgActivation::Token { + public: + Token(wl::Object<xdg_activation_token_v1> token, + wl_surface* surface, + wl_seat* seat, + absl::optional<wl::Serial> serial, + ActivationDoneCallback callback); + Token(const Token&) = delete; + Token& operator=(const Token&) = delete; + ~Token(); + + private: + static void Done(void* data, + struct xdg_activation_token_v1* xdg_activation_token_v1, + const char* token); + + wl::Object<xdg_activation_token_v1> token_; + + ActivationDoneCallback callback_; +}; + +// static +constexpr char XdgActivation::kInterfaceName[]; + +// static +void XdgActivation::Instantiate(WaylandConnection* connection, + wl_registry* registry, + uint32_t name, + const std::string& interface, + uint32_t version) { + DCHECK_EQ(interface, kInterfaceName); + + if (connection->xdg_activation_) + return; + + auto instance = wl::Bind<::xdg_activation_v1>(registry, name, + std::min(version, kMaxVersion)); + if (!instance) { + LOG(ERROR) << "Failed to bind " << kInterfaceName; + return; + } + connection->xdg_activation_ = + std::make_unique<XdgActivation>(std::move(instance), connection); +} + +XdgActivation::XdgActivation(wl::Object<xdg_activation_v1> xdg_activation_v1, + WaylandConnection* connection) + : xdg_activation_v1_(std::move(xdg_activation_v1)), + connection_(connection) {} + +XdgActivation::~XdgActivation() = default; + +void XdgActivation::Activate(wl_surface* surface) const { + const WaylandWindow* const active_window = + connection_->wayland_window_manager()->GetCurrentActiveWindow(); + if (!active_window) { + LOG(WARNING) << "Cannot activate a window because no active windows found!"; + return; + } + + if (token_.get() != nullptr) { + // TODO(crbug.com/1175327): chain the incoming request and try to serve it + // after the current one is done. + LOG(WARNING) << "Another activation request is in progress!"; + return; + } + + auto* const token = + xdg_activation_v1_get_activation_token(xdg_activation_v1_.get()); + if (!token) { + LOG(WARNING) << "Could not get an XDG activation token!"; + return; + } + + token_ = std::make_unique<Token>( + wl::Object<xdg_activation_token_v1>(token), + active_window->root_surface()->surface(), + connection_->seat()->wl_object(), + connection_->serial_tracker().GetSerial( + {wl::SerialType::kTouchPress, wl::SerialType::kMousePress, + wl::SerialType::kMouseEnter, wl::SerialType::kKeyPress}), + base::BindOnce(&XdgActivation::OnActivateDone, weak_factory_.GetWeakPtr(), + surface)); +} + +void XdgActivation::OnActivateDone(wl_surface* surface, std::string token) { + xdg_activation_v1_activate(xdg_activation_v1_.get(), token.c_str(), surface); + token_.reset(); +} + +XdgActivation::Token::Token(wl::Object<xdg_activation_token_v1> token, + wl_surface* surface, + wl_seat* seat, + absl::optional<wl::Serial> serial, + ActivationDoneCallback callback) + : token_(std::move(token)), callback_(std::move(callback)) { + static constexpr xdg_activation_token_v1_listener kListener = {&Done}; + xdg_activation_token_v1_add_listener(token_.get(), &kListener, this); + xdg_activation_token_v1_set_surface(token_.get(), surface); + if (serial) + xdg_activation_token_v1_set_serial(token_.get(), serial->value, seat); + xdg_activation_token_v1_commit(token_.get()); +} + +XdgActivation::Token::~Token() = default; + +// static +void XdgActivation::Token::Done( + void* data, + struct xdg_activation_token_v1* xdg_activation_token_v1, + const char* token) { + auto* const self = static_cast<XdgActivation::Token*>(data); + std::move(self->callback_).Run(token); +} + +} // namespace ui
diff --git a/ui/ozone/platform/wayland/host/xdg_activation.h b/ui/ozone/platform/wayland/host/xdg_activation.h new file mode 100644 index 0000000..3256996 --- /dev/null +++ b/ui/ozone/platform/wayland/host/xdg_activation.h
@@ -0,0 +1,55 @@ +// Copyright 2022 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 UI_OZONE_PLATFORM_WAYLAND_HOST_XDG_ACTIVATION_H_ +#define UI_OZONE_PLATFORM_WAYLAND_HOST_XDG_ACTIVATION_H_ + +#include "base/memory/raw_ptr.h" +#include "base/memory/weak_ptr.h" +#include "ui/ozone/platform/wayland/common/wayland_object.h" + +namespace ui { + +// Implements the XDG activation Wayland protocol extension. +class XdgActivation : public wl::GlobalObjectRegistrar<XdgActivation> { + public: + static constexpr char kInterfaceName[] = "xdg_activation_v1"; + + static void Instantiate(WaylandConnection* connection, + wl_registry* registry, + uint32_t name, + const std::string& interface, + uint32_t version); + + XdgActivation(wl::Object<xdg_activation_v1> xdg_activation_v1, + WaylandConnection* connection); + XdgActivation(const XdgActivation&) = delete; + XdgActivation& operator=(const XdgActivation&) = delete; + ~XdgActivation(); + + // Requests activation of the `surface`. + // The actual activation happens asynchronously, after a round trip to the + // server. + // Does nothing if no other window is currently active, or if there is already + // an unfinished activation request. + void Activate(wl_surface* surface) const; + + private: + class Token; + + void OnActivateDone(wl_surface* surface, std::string token); + + // Wayland object wrapped by this class. + wl::Object<xdg_activation_v1> xdg_activation_v1_; + // The actual activation token. + mutable std::unique_ptr<Token> token_; + + const raw_ptr<WaylandConnection> connection_; + + base::WeakPtrFactory<XdgActivation> weak_factory_{this}; +}; + +} // namespace ui + +#endif // UI_OZONE_PLATFORM_WAYLAND_HOST_XDG_ACTIVATION_H_
diff --git a/ui/strings/translations/ax_strings_am.xtb b/ui/strings/translations/ax_strings_am.xtb index 2cc96768..e1f7dc35 100644 --- a/ui/strings/translations/ax_strings_am.xtb +++ b/ui/strings/translations/ax_strings_am.xtb
@@ -9,7 +9,7 @@ <translation id="1211441953136645838">የግርጌ ማስታወሻ</translation> <translation id="1281252709823657822">መገናኛ</translation> <translation id="1335095011850992622">ክሬዲቶች</translation> -<translation id="1342835525016946179">ጽሑፍ</translation> +<translation id="1342835525016946179">ጽሁፍ</translation> <translation id="1359897965706325498">ሰንደቅ</translation> <translation id="1589122976691792535">ክልል</translation> <translation id="1650423536718072820">ጥቅስ</translation> @@ -67,7 +67,7 @@ <translation id="492244087561876220">አስተያየት</translation> <translation id="5022314756875057021">የረድፍ ቡድን</translation> <translation id="5034860022980953847">የሂደት አመልካች</translation> -<translation id="5093189678851173835">የተቀረጸ ጽሑፍ</translation> +<translation id="5093189678851173835">የተቀረጸ ጽሁፍ</translation> <translation id="512758898067543763">የረድፍ ራስጌ</translation> <translation id="5143125788380636750">ድሕረ ታሪክ</translation> <translation id="5406322316791861025">ምስል</translation> @@ -137,7 +137,7 @@ <translation id="8583702881314752957">የብየና ዝርዝር</translation> <translation id="8597182159515967513">ርዕስ</translation> <translation id="860475260694818407">ማውጫ</translation> -<translation id="862370744433916922">የግርጌ ጽሑፍ</translation> +<translation id="862370744433916922">የግርጌ ጽሁፍ</translation> <translation id="8711688047404765493">ውጽዓት</translation> <translation id="8808573423886751634">ምዕራፍ</translation> <translation id="8851136666856101339">main</translation>
diff --git a/ui/strings/translations/ui_strings_am.xtb b/ui/strings/translations/ui_strings_am.xtb index ecb35ba1..97934e7 100644 --- a/ui/strings/translations/ui_strings_am.xtb +++ b/ui/strings/translations/ui_strings_am.xtb
@@ -36,7 +36,7 @@ <translation id="208586643495776849">እባክዎ እንደገና ይሞክሩ</translation> <translation id="2141853158323869627">{DAYS,plural, =1{1ቀ}one{#ቀ}other{#ቀ}}</translation> <translation id="2148716181193084225">ዛሬ</translation> -<translation id="2161656808144014275">ጽሑፍ</translation> +<translation id="2161656808144014275">ጽሁፍ</translation> <translation id="2168039046890040389">ወደላይ አንቀሳቅስ</translation> <translation id="2190355936436201913">(ባዶ)</translation> <translation id="2192232475740621500">ዝቅተኛ ትፍገትን ተጠቀም</translation> @@ -78,7 +78,7 @@ <translation id="3295886253693811851">ከዚህ ላይ ጥሪ ያድርጉ</translation> <translation id="3306688585798492231">አብሮገነብ ማሳያ</translation> <translation id="335581015389089642">ንግግር</translation> -<translation id="3389286852084373014">ጽሑፍ ከልክ በላይ ግዙፍ ነው</translation> +<translation id="3389286852084373014">ጽሁፍ ከልክ በላይ ግዙፍ ነው</translation> <translation id="3406306243914553062">የHTML ይዘት</translation> <translation id="3600566671520689681">{DAYS,plural, =1{1 ቀን ቀርቷል}one{# ቀኖች ቀርቷል}other{# ቀኖች ቀርተዋል}}</translation> <translation id="3600969208114796418">የ<ph name="SAVEAS_EXTENSION_TYPE" /> ፋይል</translation> @@ -199,7 +199,7 @@ <translation id="8259556432390118667">የአስራስድስትዮሽ ቀለም እሴት</translation> <translation id="8328145009876646418">የግራ ጠርዝ</translation> <translation id="8331626408530291785">ወደ ላይ ሸብልል</translation> -<translation id="8352146631962686268">{YEARS,plural, =1{1 አመት}one{# ዓመቶች}other{# ዓመቶች}}</translation> +<translation id="8352146631962686268">{YEARS,plural, =1{1 ዓመት}one{# ዓመቶች}other{# ዓመቶች}}</translation> <translation id="8393700583063109961">መልዕክት ይላኩ</translation> <translation id="8394908167088220973">ሚዲያ አጫውት/ለአፍታ አቁም</translation> <translation id="8458811141851741261">{YEARS,plural, =1{1ዓ}one{#ዓ}other{#ዓ}}</translation>
diff --git a/ui/views/cocoa/text_input_host.mm b/ui/views/cocoa/text_input_host.mm index 6af6423f..28839cc4 100644 --- a/ui/views/cocoa/text_input_host.mm +++ b/ui/views/cocoa/text_input_host.mm
@@ -379,7 +379,7 @@ void TextInputHost::HasCompositionText(HasCompositionTextCallback callback) { bool has_composition_text = false; - IsRTL(&has_composition_text); + HasCompositionText(&has_composition_text); std::move(callback).Run(has_composition_text); }
diff --git a/ui/views/view.cc b/ui/views/view.cc index 7e786be..b625d43 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc
@@ -245,6 +245,12 @@ for (auto* child : children_) { child->parent_ = nullptr; + // Remove any references to |child| to avoid holding a dangling ptr. + if (child->previous_focusable_view_) + child->previous_focusable_view_->next_focusable_view_ = nullptr; + if (child->next_focusable_view_) + child->next_focusable_view_->previous_focusable_view_ = nullptr; + // Since all children are removed here, it is safe to set // |child|'s focus list pointers to null and expect any references // to |child| will be removed subsequently. @@ -601,6 +607,9 @@ // Notify all other subscriptions of the change. OnPropertyChanged(&visible_, kPropertyEffectsPaint); + + if (was_visible) + UpdateTooltip(); } if (parent_) {
diff --git a/ui/views/view.h b/ui/views/view.h index 3f5844b..19e8d418 100644 --- a/ui/views/view.h +++ b/ui/views/view.h
@@ -2029,7 +2029,7 @@ // Tree operations ----------------------------------------------------------- // This view's parent. - raw_ptr<View, DanglingUntriaged> parent_ = nullptr; + raw_ptr<View> parent_ = nullptr; // This view's children. Views children_; @@ -2166,10 +2166,10 @@ // Focus --------------------------------------------------------------------- // Next view to be focused when the Tab key is pressed. - raw_ptr<View, DanglingUntriaged> next_focusable_view_ = nullptr; + raw_ptr<View> next_focusable_view_ = nullptr; // Next view to be focused when the Shift-Tab key combination is pressed. - raw_ptr<View, DanglingUntriaged> previous_focusable_view_ = nullptr; + raw_ptr<View> previous_focusable_view_ = nullptr; // The focus behavior of the view in regular and accessibility mode. FocusBehavior focus_behavior_ = FocusBehavior::NEVER;