diff --git a/DEPS b/DEPS index 3ec76bd..980de010 100644 --- a/DEPS +++ b/DEPS
@@ -304,11 +304,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '69cf6a81a5146b01d0dd7f8625ff118ad53c3384', + 'skia_revision': '364e681336654cb8649fd940625e2c1106e99fac', # 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': '0d70f4fe89f1424e49723bf1501a87c8ef1d1b60', + 'v8_revision': '6aafe8e8ca861a57ba70ed1b0a8e4fd938342c7c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. @@ -320,7 +320,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': 'dabf13f6efc73a0e99b63080140e2a9979a02b65', + 'pdfium_revision': '27f3c71fffac1ead3da18f88cfcb4c46e5dba64a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -375,7 +375,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'af64cd4fef041a6a0953cce7e407b647b366328c', + 'catapult_revision': '34db3cf3bd794d8a9b4c4885daa38297001882a3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. @@ -391,7 +391,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': '5c05d4dc8d1a03f0df6cd29ecca62dc522cf2208', + 'devtools_frontend_revision': '3fc4bb2dc409fe73f21aac4677d2cb84f7ea00e9', # 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. @@ -431,7 +431,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': '53fe6bf3842cb686b0ea0323719e6d998ee0c8c0', + 'dawn_revision': '8bfdb661f862f677ca90e8534fa32ebe5909920d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -790,7 +790,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - '6f250130a403c69104f790187c36e9f053ee4d3b', + 'e1eb4ca694241e55df9ea47c5762fa23013d1646', 'condition': 'checkout_android and checkout_src_internal', }, @@ -889,7 +889,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': '-EZQ64f537wnRzv-r_G-wITMVMr2jyTP7WKUiJUuu7sC', + 'version': 'BtJaUd90iG6mlg8FIYFdSAWLH3qaxWaQbSQ8qz3aFaQC', }, ], 'dep_type': 'cipd', @@ -900,7 +900,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'WD2fDYTR6ckURAA7E0_alVbPczeOCXq4VmTMPZghAYIC', + 'version': 'OKup69P7c2wMhFmaptQQnk1XknUqHu-JI1ALCTitdlAC', }, ], 'dep_type': 'cipd', @@ -911,7 +911,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'Ten12S8sTbmQwhSZQIWr0v9mYwnm4FbjizXCuRuNiloC', + 'version': '2ufK5_TiuU2FLaN11p4qlCQkWA-puonruji7P4EqX2EC', }, ], 'dep_type': 'cipd', @@ -979,7 +979,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'I_O9S2WYVdcTleiem-wROGlOMUBVfoyMljBMWu_lDF4C', + 'version': 'wQyQ-3fqAvQxgvsnDX7d_5TsNyMaQvCk2AgX2qjWPQwC', }, ], 'condition': 'checkout_android', @@ -1187,7 +1187,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' + '@' + 'd2f17965d70ab3e41d06c3f77379d97db65cc0d0', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '4bd8727c8956f8f2002ac5bfddbbf5aea827829b', 'condition': 'checkout_chromeos', }, @@ -1219,13 +1219,13 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'e8e3e3efcfdb49aa582338abc3027ab643ccae1f', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '2075f733e8c060f56e25884fc3b3d49ed5d749e0', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), 'src/third_party/devtools-frontend-internal': { - 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + '619f63d8fd8aced6bdf632833f6999cf964e1e86', + 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + 'd951a53360d452d51fb5dca19956b5d3b72268b0', 'condition': 'checkout_src_internal', }, @@ -1691,7 +1691,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'ce44c86b2c9d39481ebbcb8a963c5d76655e89f0', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '13a1c0bb4787971da99ef027dcc39730e6df4e1c', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1876,7 +1876,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '8220cf0cfbc6cdc9de34d1d71136f9b77562706a', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'b8219a1f98d9d3ce3af5310cd04726dd3e49363a', + Var('webrtc_git') + '/src.git' + '@' + '7454fdd12b5e410605533a01b9e00be29da78c89', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file. @@ -1966,7 +1966,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': Var('chrome_git') + '/chrome/src-internal.git@72ce65f087edb7c84e7c18de89c68d44f6438c2f', + 'url': Var('chrome_git') + '/chrome/src-internal.git@941573e7157b996432954537a7a3261ef222a8c1', 'condition': 'checkout_src_internal', }, @@ -1996,7 +1996,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'eMcIRP6K57jljaCBCTsiPhoD2wZDialfzUFso9REAOwC', + 'version': '4md2g-5NTz-aF613lY9RPIupAG6Q5Y83uMQ1USb7gngC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2029,7 +2029,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'vefC9eSPwr-qhfn6kAI5gKjNAT4y1zaaQCxVjzu81pAC', + 'version': '_fStqwcg7NH9AJ7XJCvwHOW8tvTjYc5n2X8bjVl9BIMC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -3558,7 +3558,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7', - 'version': 'version:2@1.8.0.cr1', + 'version': 'version:2@1.8.20.cr1', }, ], 'condition': 'checkout_android', @@ -3569,7 +3569,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8', - 'version': 'version:2@1.8.0.cr1', + 'version': 'version:2@1.8.20.cr1', }, ], 'condition': 'checkout_android', @@ -3580,7 +3580,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android', - 'version': 'version:2@1.6.1.cr1', + 'version': 'version:2@1.6.4.cr1', }, ], 'condition': 'checkout_android', @@ -3591,7 +3591,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm', - 'version': 'version:2@1.6.1.cr1', + 'version': 'version:2@1.6.4.cr1', }, ], 'condition': 'checkout_android',
diff --git a/android_webview/browser/content_relationship_verification/browser_url_loader_throttle.cc b/android_webview/browser/content_relationship_verification/browser_url_loader_throttle.cc index 5003575..2701755 100644 --- a/android_webview/browser/content_relationship_verification/browser_url_loader_throttle.cc +++ b/android_webview/browser/content_relationship_verification/browser_url_loader_throttle.cc
@@ -12,7 +12,7 @@ #include "base/trace_event/trace_event.h" #include "components/content_relationship_verification/content_relationship_verification_constants.h" #include "components/content_relationship_verification/response_header_verifier.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "net/log/net_log_event_type.h" #include "net/url_request/redirect_info.h" #include "services/network/public/cpp/resource_request.h"
diff --git a/android_webview/browser/lifecycle/aw_contents_lifecycle_notifier_unittest.cc b/android_webview/browser/lifecycle/aw_contents_lifecycle_notifier_unittest.cc index dc25d31f..fcb10cc 100644 --- a/android_webview/browser/lifecycle/aw_contents_lifecycle_notifier_unittest.cc +++ b/android_webview/browser/lifecycle/aw_contents_lifecycle_notifier_unittest.cc
@@ -5,7 +5,7 @@ #include "android_webview/browser/lifecycle/aw_contents_lifecycle_notifier.h" #include "base/memory/raw_ptr.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_utils.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/android_webview/browser/safe_browsing/aw_ping_manager_factory.cc b/android_webview/browser/safe_browsing/aw_ping_manager_factory.cc index 4f0a989..dcf184e 100644 --- a/android_webview/browser/safe_browsing/aw_ping_manager_factory.cc +++ b/android_webview/browser/safe_browsing/aw_ping_manager_factory.cc
@@ -9,7 +9,7 @@ #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/safe_browsing/content/browser/web_ui/safe_browsing_ui.h" #include "components/safe_browsing/core/browser/ping_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" namespace safe_browsing {
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 5e33135..b51349a6 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -234,6 +234,8 @@ "ambient/ui/ambient_info_view.h", "ambient/ui/ambient_shield_view.cc", "ambient/ui/ambient_shield_view.h", + "ambient/ui/ambient_slideshow_peripheral_ui.cc", + "ambient/ui/ambient_slideshow_peripheral_ui.h", "ambient/ui/ambient_video_utils.cc", "ambient/ui/ambient_video_utils.h", "ambient/ui/ambient_video_view.cc",
diff --git a/ash/ambient/ambient_controller.cc b/ash/ambient/ambient_controller.cc index 62beeeb..7280f09 100644 --- a/ash/ambient/ambient_controller.cc +++ b/ash/ambient/ambient_controller.cc
@@ -529,8 +529,11 @@ void AmbientController::OnUserActivity(const ui::Event* event) { // The following events are handled separately so that we can consume them. - if (IsShown() && (event->IsMouseEvent() || event->IsTouchEvent() || - event->IsKeyEvent() || event->IsFlingScrollEvent())) { + // In case events come from external sources (i.e. Chrome extensions), the + // event will be nullptr. + if (IsShown() && event && + (event->IsMouseEvent() || event->IsTouchEvent() || event->IsKeyEvent() || + event->IsFlingScrollEvent())) { return; } // While |kPreview| is loading, don't |DismissUI| on user activity. @@ -1047,6 +1050,18 @@ return widget; } +void AmbientController::OnUiLauncherInitialized(bool success) { + if (!success) { + // Success = false denotes a case where the screensaver is in a permanent + // error state and such that the UI and any further attempts to launch the + // UI will also result in this failure. + // TODO (b/175142676) Add metrics for cases where success = false. + LOG(ERROR) << "AmbientUiLauncher failed to initialize"; + return; + } + CreateAndShowWidgets(); +} + void AmbientController::CreateAndShowWidgets() { if (ambient_ui_model_.ui_visibility() == AmbientUiVisibility::kPreview) { preview_widget_created_at_ = base::Time::Now(); @@ -1122,7 +1137,7 @@ Shell::Get()->AddPreTargetHandler(this); if (ambient_ui_launcher_) { ambient_ui_launcher_->Initialize( - base::BindOnce(&AmbientController::CreateAndShowWidgets, + base::BindOnce(&AmbientController::OnUiLauncherInitialized, weak_ptr_factory_.GetWeakPtr())); } else { StartRefreshingImages();
diff --git a/ash/ambient/ambient_controller.h b/ash/ambient/ambient_controller.h index 6b6e88c..394db33b 100644 --- a/ash/ambient/ambient_controller.h +++ b/ash/ambient/ambient_controller.h
@@ -245,6 +245,7 @@ void CreateUiLauncher(); void DestroyUiLauncher(); bool IsUiLauncherActive() const; + void OnUiLauncherInitialized(bool success); AmbientAccessTokenController* access_token_controller_for_testing() { return &access_token_controller_;
diff --git a/ash/ambient/ambient_controller_unittest.cc b/ash/ambient/ambient_controller_unittest.cc index 1cbe22f..c61560d8 100644 --- a/ash/ambient/ambient_controller_unittest.cc +++ b/ash/ambient/ambient_controller_unittest.cc
@@ -16,6 +16,7 @@ #include "ash/ambient/test/test_ambient_managed_photo_source.h" #include "ash/ambient/ui/ambient_container_view.h" #include "ash/ambient/ui/ambient_view_ids.h" +#include "ash/ambient/ui/photo_view.h" #include "ash/assistant/assistant_interaction_controller_impl.h" #include "ash/assistant/model/assistant_interaction_model.h" #include "ash/constants/ambient_theme.h" @@ -703,12 +704,17 @@ ui::ET_TOUCH_PRESSED, gfx::PointF(), gfx::PointF(), base::TimeTicks(), ui::PointerDetails())); + // External user activity. + events.emplace_back(nullptr); + for (const auto& event : events) { ShowAmbientScreen(); FastForwardTiny(); EXPECT_TRUE(WidgetsVisible()); - if (event.get()->IsMouseEvent()) { + if (!event) { + ambient_controller()->OnUserActivity(nullptr); + } else if (event.get()->IsMouseEvent()) { ambient_controller()->OnMouseEvent(event.get()->AsMouseEvent()); } else if (event.get()->IsTouchEvent()) { ambient_controller()->OnTouchEvent(event.get()->AsTouchEvent()); @@ -1632,14 +1638,11 @@ class AmbientControllerForManagedScreensaverTest : public AmbientAshTestBase { public: - AmbientControllerForManagedScreensaverTest() - : photo_source_(std::make_unique<TestAmbientManagedPhotoSource>()) {} - void SetUp() override { scoped_feature_list_.InitAndEnableFeature( ash::features::kAmbientModeManagedScreensaver); AmbientAshTestBase::SetUp(); - + photo_source_ = std::make_unique<TestAmbientManagedPhotoSource>(); GetSessionControllerClient()->set_show_lock_screen_views(true); CreateTestData(); } @@ -1647,6 +1650,7 @@ void TearDown() override { ASSERT_TRUE(temp_dir_.Delete()); image_file_paths_.clear(); + photo_source_.reset(); AmbientAshTestBase::TearDown(); } @@ -1693,6 +1697,11 @@ ASSERT_TRUE(GetContainerView()); EXPECT_TRUE( GetContainerView()->GetViewByID(AmbientViewID::kAmbientPhotoView)); + + // Peripheral Ui is always hidden in managed screeensaver mode + EXPECT_FALSE(GetAmbientSlideshowPeripheralUi()->GetVisible()) + << "Peripheral Ui should be hidden in managed mode"; + GetEventGenerator()->ClickLeftButton(); EXPECT_FALSE(ambient_controller()->IsShown()); FastForwardToLockScreenTimeout(); @@ -1746,6 +1755,7 @@ ASSERT_TRUE(GetContainerView()); EXPECT_TRUE( GetContainerView()->GetViewByID(AmbientViewID::kAmbientPhotoView)); + EXPECT_TRUE(GetAmbientSlideshowPeripheralUi()->GetVisible()); UnlockScreen(); EXPECT_FALSE(ambient_controller()->IsShown()); } @@ -1824,6 +1834,18 @@ GetContainerView()->GetViewByID(AmbientViewID::kAmbientPhotoView)); } +TEST_F(AmbientControllerForManagedScreensaverTest, + AmbientManagedPhotoSourceErrorCase) { + SetAmbientModeManagedScreensaverEnabled(/*enabled=*/true); + photo_source_.reset(); + SimulateScreensaverStart(); + + // The view will not be created as an initialization callback will be called + // with success = false, so the container would be null. + ASSERT_FALSE(GetContainerView()); + EXPECT_TRUE(ambient_controller()->IsShown()); +} + TEST_F(AmbientControllerTest, RendersCorrectViewForVideo) { SetAmbientUiSettings( AmbientUiSettings(AmbientTheme::kVideo, AmbientVideo::kNewMexico));
diff --git a/ash/ambient/ambient_managed_slideshow_ui_launcher.cc b/ash/ambient/ambient_managed_slideshow_ui_launcher.cc index 79094dd..65e48b3 100644 --- a/ash/ambient/ambient_managed_slideshow_ui_launcher.cc +++ b/ash/ambient/ambient_managed_slideshow_ui_launcher.cc
@@ -34,15 +34,14 @@ AmbientManagedSlideshowUiLauncher::~AmbientManagedSlideshowUiLauncher() = default; -void AmbientManagedSlideshowUiLauncher::Initialize(base::OnceClosure on_done) { +void AmbientManagedSlideshowUiLauncher::Initialize( + InitializationCallback on_done) { initialization_callback_ = std::move(on_done); if (!AmbientManagedPhotoSource::Get()) { LOG(WARNING) << "AmbientManagedPhotoSource not present. Probably " "AmbientManagedPhotoController screen update is being " "started during a shutdown"; - // TODO(fahadmansoor): Start calling this callback with a boolean to handle - // the error case. - initialization_callback_.Reset(); + std::move(initialization_callback_).Run(/*success=*/false); return; } photo_controller_.UpdateImageFilePaths( @@ -56,7 +55,8 @@ } std::unique_ptr<views::View> AmbientManagedSlideshowUiLauncher::CreateView() { - return std::make_unique<PhotoView>(delegate_); + return std::make_unique<PhotoView>(delegate_, + /*peripheral_ui_visible=*/false); } void AmbientManagedSlideshowUiLauncher::Finalize() { @@ -67,9 +67,10 @@ AmbientManagedSlideshowUiLauncher::GetAmbientBackendModel() { return photo_controller_.ambient_backend_model(); } + void AmbientManagedSlideshowUiLauncher::OnImagesReady() { CHECK(initialization_callback_); - std::move(initialization_callback_).Run(); + std::move(initialization_callback_).Run(/*success=*/true); } bool AmbientManagedSlideshowUiLauncher::IsActive() {
diff --git a/ash/ambient/ambient_managed_slideshow_ui_launcher.h b/ash/ambient/ambient_managed_slideshow_ui_launcher.h index 36d1d2fe..a6cc435 100644 --- a/ash/ambient/ambient_managed_slideshow_ui_launcher.h +++ b/ash/ambient/ambient_managed_slideshow_ui_launcher.h
@@ -32,7 +32,7 @@ void OnImagesReady() override; // AmbientUiLauncher overrides - void Initialize(base::OnceClosure on_done) override; + void Initialize(InitializationCallback on_done) override; std::unique_ptr<views::View> CreateView() override; @@ -51,7 +51,7 @@ AmbientManagedPhotoController photo_controller_; base::raw_ptr<AmbientViewDelegateImpl> delegate_; - base::OnceClosure initialization_callback_; + InitializationCallback initialization_callback_; base::ScopedObservation<AmbientBackendModel, AmbientBackendModelObserver> ambient_backend_model_observer_{this};
diff --git a/ash/ambient/ambient_ui_launcher.h b/ash/ambient/ambient_ui_launcher.h index 982ebd6..00182f4e 100644 --- a/ash/ambient/ambient_ui_launcher.h +++ b/ash/ambient/ambient_ui_launcher.h
@@ -22,11 +22,12 @@ // for the first time and ends when the `Finalize` method is called. class AmbientUiLauncher { public: + using InitializationCallback = base::OnceCallback<void(bool success)>; virtual ~AmbientUiLauncher() = default; // Do any asynchronous initialization before launching the UI. This method is // only expected to be run once per ambient UI session. - virtual void Initialize(base::OnceClosure on_done) = 0; + virtual void Initialize(InitializationCallback on_done) = 0; // After Initialize() is complete, we call this method to create the view, // this can be called multiple times during an ambient UI session in case
diff --git a/ash/ambient/ambient_video_ui_launcher.cc b/ash/ambient/ambient_video_ui_launcher.cc index 7bdd3c7..91f68dc 100644 --- a/ash/ambient/ambient_video_ui_launcher.cc +++ b/ash/ambient/ambient_video_ui_launcher.cc
@@ -34,13 +34,11 @@ // Currently, all resources are shipped with the OTA and reside on rootfs, so // this should never be true unless there is a major bug. // - // TODO(b/271182121): Add UMA metrics for this error case, and change the - // |AmbientUiLauncher::Initialize()| callback signature to take a boolean - // saying whether initialization succeeded or not. If the video doesn't exist, - // we should run the callback with a failure result, and the caller should not - // try to render the UI and call |AmbientUiLauncher::CreateView()|. This - // should only make a difference if/when the ambient video resources start - // getting downloaded at run-time. + // TODO(b/271182121): Add UMA metrics for this error case, and start using the + // Initialize with bool callback, not being used right now as it causes some + // tests to fail. This should only make a difference if/when the ambient + // video resources start getting downloaded at run-time. + if (!all_resources_exists) { LOG(ERROR) << "Ambient video resources do not exist on disc. video=" << GetAmbientVideoPath(video) << " src=" << GetVideoHtmlPath(); @@ -55,7 +53,7 @@ } AmbientVideoUiLauncher::~AmbientVideoUiLauncher() = default; -void AmbientVideoUiLauncher::Initialize(base::OnceClosure on_done) { +void AmbientVideoUiLauncher::Initialize(InitializationCallback on_done) { CHECK(on_done); CHECK(!is_active_); is_active_ = true; @@ -70,7 +68,7 @@ {base::MayBlock(), base::TaskPriority::BEST_EFFORT, base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, base::BindOnce(&VerifyVideoExistsOnDisc, current_video_)); - std::move(on_done).Run(); + std::move(on_done).Run(/*success=*/true); } std::unique_ptr<views::View> AmbientVideoUiLauncher::CreateView() {
diff --git a/ash/ambient/ambient_video_ui_launcher.h b/ash/ambient/ambient_video_ui_launcher.h index b30859d..73e0fa7 100644 --- a/ash/ambient/ambient_video_ui_launcher.h +++ b/ash/ambient/ambient_video_ui_launcher.h
@@ -23,7 +23,7 @@ ~AmbientVideoUiLauncher() override; // AmbientUiLauncher overrides: - void Initialize(base::OnceClosure on_done) override; + void Initialize(InitializationCallback on_done) override; std::unique_ptr<views::View> CreateView() override; void Finalize() override; AmbientBackendModel* GetAmbientBackendModel() override;
diff --git a/ash/ambient/test/ambient_ash_test_base.cc b/ash/ambient/test/ambient_ash_test_base.cc index 833c0b48..e283e38 100644 --- a/ash/ambient/test/ambient_ash_test_base.cc +++ b/ash/ambient/test/ambient_ash_test_base.cc
@@ -22,6 +22,7 @@ #include "ash/ambient/ui/ambient_background_image_view.h" #include "ash/ambient/ui/ambient_container_view.h" #include "ash/ambient/ui/ambient_info_view.h" +#include "ash/ambient/ui/ambient_slideshow_peripheral_ui.h" #include "ash/ambient/ui/ambient_view_ids.h" #include "ash/ambient/ui/jitter_calculator.h" #include "ash/ambient/ui/media_string_view.h" @@ -451,6 +452,12 @@ GetContainerView()->GetViewByID(kAmbientInfoView)); } +AmbientSlideshowPeripheralUi* +AmbientAshTestBase::GetAmbientSlideshowPeripheralUi() { + return static_cast<AmbientSlideshowPeripheralUi*>( + GetContainerView()->GetViewByID(kAmbientSlideshowPeripheralUi)); +} + AmbientAnimationView* AmbientAshTestBase::GetAmbientAnimationView() { return static_cast<AmbientAnimationView*>( GetContainerView()->GetViewByID(kAmbientAnimationView));
diff --git a/ash/ambient/test/ambient_ash_test_base.h b/ash/ambient/test/ambient_ash_test_base.h index 2405ad5..8646138b 100644 --- a/ash/ambient/test/ambient_ash_test_base.h +++ b/ash/ambient/test/ambient_ash_test_base.h
@@ -182,6 +182,7 @@ PhotoView* GetPhotoView(); AmbientAnimationView* GetAmbientAnimationView(); AmbientInfoView* GetAmbientInfoView(); + AmbientSlideshowPeripheralUi* GetAmbientSlideshowPeripheralUi(); const std::map<int, ::ambient::PhotoCacheEntry>& GetCachedFiles(); const std::map<int, ::ambient::PhotoCacheEntry>& GetBackupCachedFiles();
diff --git a/ash/ambient/ui/ambient_background_image_view.cc b/ash/ambient/ui/ambient_background_image_view.cc index 53c69c1..e528dc7 100644 --- a/ash/ambient/ui/ambient_background_image_view.cc +++ b/ash/ambient/ui/ambient_background_image_view.cc
@@ -7,11 +7,10 @@ #include <memory> #include "ash/ambient/ambient_constants.h" -#include "ash/ambient/ui/ambient_info_view.h" -#include "ash/ambient/ui/ambient_shield_view.h" +#include "ash/ambient/ui/ambient_slideshow_peripheral_ui.h" +#include "ash/ambient/ui/ambient_view_delegate.h" #include "ash/ambient/ui/ambient_view_ids.h" #include "ash/ambient/ui/jitter_calculator.h" -#include "ash/ambient/ui/media_string_view.h" #include "ash/ambient/util/ambient_util.h" #include "ash/shell.h" #include "ash/style/ash_color_id.h" @@ -39,9 +38,6 @@ namespace { -// Appearance. -constexpr int kMediaStringMarginDip = 32; - gfx::ImageSkia ResizeImage(const gfx::ImageSkia& image, const gfx::Size& view_size) { if (image.isNull()) @@ -156,24 +152,6 @@ SetResizedImage(related_image_view_, related_image_unscaled_); } -MediaStringView::Settings AmbientBackgroundImageView::GetSettings() { - return MediaStringView::Settings( - {/*icon_light_mode_color=*/ambient::util::GetColor( - GetColorProvider(), kColorAshIconColorPrimary, - /*dark_mode_enabled=*/false), - /*icon_dark_mode_color=*/ - ambient::util::GetColor(GetColorProvider(), kColorAshIconColorPrimary, - /*dark_mode_enabled=*/true), - /*text_light_mode_color=*/ - ambient::util::GetColor(GetColorProvider(), kColorAshTextColorPrimary, - /*dark_mode_enabled=*/false), - /*text_dark_mode_color=*/ - ambient::util::GetColor(GetColorProvider(), kColorAshTextColorPrimary, - /*dark_mode_enabled=*/true), - /*text_shadow_elevation=*/ - ambient::util::kDefaultTextShadowElevation}); -} - void AmbientBackgroundImageView::UpdateImage( const gfx::ImageSkia& image, const gfx::ImageSkia& related_image, @@ -184,7 +162,7 @@ is_portrait_ = is_portrait; topic_type_ = type; - UpdateGlanceableInfoPosition(); + ambient_peripheral_ui_->UpdateGlanceableInfoPosition(); const bool has_change = UpdateRelatedImageViewVisibility(); @@ -202,7 +180,7 @@ const std::u16string& related_details) { details_ = details; related_details_ = related_details; - ambient_info_view_->UpdateImageDetails( + ambient_peripheral_ui_->UpdateImageDetails( details, MustShowPairs() ? related_details : std::u16string()); } @@ -258,46 +236,9 @@ kUnboundedScaleToZero); observed_views_.AddObservation(related_image_view_); - - AddChildView(std::make_unique<AmbientShieldView>()); - - ambient_info_view_ = - AddChildView(std::make_unique<AmbientInfoView>(delegate_)); - - gfx::Insets shadow_insets = - gfx::ShadowValue::GetMargin(ambient::util::GetTextShadowValues(nullptr)); - - // Inits the media string view. The media string view is positioned on the - // right-top corner of the container. - views::View* media_string_view_container_ = - AddChildView(std::make_unique<views::View>()); - views::BoxLayout* media_string_layout = - media_string_view_container_->SetLayoutManager( - std::make_unique<views::BoxLayout>( - views::BoxLayout::Orientation::kVertical)); - media_string_layout->set_main_axis_alignment( - views::BoxLayout::MainAxisAlignment::kStart); - media_string_layout->set_cross_axis_alignment( - views::BoxLayout::CrossAxisAlignment::kEnd); - media_string_layout->set_inside_border_insets( - gfx::Insets::TLBR(kMediaStringMarginDip + shadow_insets.top(), 0, 0, - kMediaStringMarginDip + shadow_insets.right())); - media_string_view_ = media_string_view_container_->AddChildView( - std::make_unique<MediaStringView>(this)); - media_string_view_->SetVisible(false); -} - -void AmbientBackgroundImageView::UpdateGlanceableInfoPosition() { - gfx::Vector2d jitter = glanceable_info_jitter_calculator_->Calculate(); - gfx::Transform transform; - transform.Translate(jitter); - ambient_info_view_->SetTextTransform(transform); - - if (media_string_view_->GetVisible()) { - gfx::Transform media_string_transform; - media_string_transform.Translate(-jitter.x(), -jitter.y()); - media_string_view_->layer()->SetTransform(media_string_transform); - } + ambient_peripheral_ui_ = + AddChildView(std::make_unique<AmbientSlideshowPeripheralUi>( + delegate_, glanceable_info_jitter_calculator_)); } void AmbientBackgroundImageView::UpdateLayout() { @@ -350,6 +291,10 @@ image_view->ResetImageSize(); } +void AmbientBackgroundImageView::SetPeripheralUiVisibility(bool visibile) { + ambient_peripheral_ui_->SetVisible(visibile); +} + bool AmbientBackgroundImageView::MustShowPairs() const { const bool landscape_mode_portrait_image = width() > height() && is_portrait_; const bool portrait_mode_landscape_image =
diff --git a/ash/ambient/ui/ambient_background_image_view.h b/ash/ambient/ui/ambient_background_image_view.h index 3252b6c..360badb4 100644 --- a/ash/ambient/ui/ambient_background_image_view.h +++ b/ash/ambient/ui/ambient_background_image_view.h
@@ -7,8 +7,8 @@ #include <string> +#include "ash/ambient/ui/ambient_slideshow_peripheral_ui.h" #include "ash/ambient/ui/ambient_view_delegate.h" -#include "ash/ambient/ui/media_string_view.h" #include "ash/ash_export.h" #include "ash/public/cpp/ambient/ambient_backend_controller.h" #include "base/memory/raw_ptr.h" @@ -21,17 +21,14 @@ namespace ash { -class AmbientInfoView; class JitterCalculator; -class MediaStringView; // AmbientBackgroundImageView-------------------------------------------------- // A custom ImageView to display photo image and details information on ambient. // It also handles specific mouse/gesture events to dismiss ambient when user // interacts with the background photos. class ASH_EXPORT AmbientBackgroundImageView : public views::View, - public views::ViewObserver, - public MediaStringView::Delegate { + public views::ViewObserver { public: METADATA_HEADER(AmbientBackgroundImageView); @@ -49,9 +46,6 @@ // views::ViewObserver: void OnViewBoundsChanged(views::View* observed_view) override; - // MediaStringView::Delegate: - MediaStringView::Settings GetSettings() override; - // Updates the display images. void UpdateImage(const gfx::ImageSkia& image, const gfx::ImageSkia& related_image, @@ -62,6 +56,9 @@ void UpdateImageDetails(const std::u16string& details, const std::u16string& related_details); + // Shows/Hides the peripheral ui. + void SetPeripheralUiVisibility(bool visible); + gfx::ImageSkia GetCurrentImage(); gfx::Rect GetImageBoundsInScreenForTesting() const; @@ -71,8 +68,6 @@ private: void InitLayout(); - void UpdateGlanceableInfoPosition(); - void UpdateLayout(); bool UpdateRelatedImageViewVisibility(); void SetResizedImage(views::ImageView* image_view, @@ -107,9 +102,7 @@ ::ambient::TopicType topic_type_ = ::ambient::TopicType::kOther; - AmbientInfoView* ambient_info_view_ = nullptr; - - MediaStringView* media_string_view_ = nullptr; + AmbientSlideshowPeripheralUi* ambient_peripheral_ui_ = nullptr; base::ScopedMultiSourceObservation<views::View, views::ViewObserver> observed_views_{this};
diff --git a/ash/ambient/ui/ambient_slideshow_peripheral_ui.cc b/ash/ambient/ui/ambient_slideshow_peripheral_ui.cc new file mode 100644 index 0000000..330e7dd --- /dev/null +++ b/ash/ambient/ui/ambient_slideshow_peripheral_ui.cc
@@ -0,0 +1,114 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/ambient/ui/ambient_slideshow_peripheral_ui.h" + +#include <memory> + +#include "ash/ambient/ui/ambient_shield_view.h" +#include "ash/ambient/ui/ambient_view_delegate.h" +#include "ash/ambient/ui/ambient_view_ids.h" +#include "ash/ambient/ui/jitter_calculator.h" +#include "ash/ambient/ui/media_string_view.h" +#include "ash/ambient/util/ambient_util.h" +#include "ash/style/ash_color_id.h" +#include "ui/base/metadata/metadata_impl_macros.h" +#include "ui/compositor/layer.h" +#include "ui/views/layout/box_layout.h" +#include "ui/views/layout/fill_layout.h" +#include "ui/views/layout/flex_layout_types.h" + +namespace ash { + +namespace { + +// Appearance. +constexpr int kMediaStringMarginDip = 32; + +} // namespace + +AmbientSlideshowPeripheralUi::AmbientSlideshowPeripheralUi( + AmbientViewDelegate* delegate, + JitterCalculator* glanceable_info_jitter_calculator) + : glanceable_info_jitter_calculator_(glanceable_info_jitter_calculator) { + CHECK(delegate); + CHECK(glanceable_info_jitter_calculator_); + SetID(AmbientViewID::kAmbientSlideshowPeripheralUi); + InitLayout(delegate); +} + +AmbientSlideshowPeripheralUi::~AmbientSlideshowPeripheralUi() = default; + +void AmbientSlideshowPeripheralUi::InitLayout(AmbientViewDelegate* delegate) { + SetLayoutManager(std::make_unique<views::FillLayout>()); + AddChildView(std::make_unique<AmbientShieldView>()); + + ambient_info_view_ = + AddChildView(std::make_unique<AmbientInfoView>(delegate)); + + gfx::Insets shadow_insets = + gfx::ShadowValue::GetMargin(ambient::util::GetTextShadowValues(nullptr)); + + // Inits the media string view. The media string view is positioned on the + // right-top corner of the container. + views::View* media_string_view_container_ = + AddChildView(std::make_unique<views::View>()); + views::BoxLayout* media_string_layout = + media_string_view_container_->SetLayoutManager( + std::make_unique<views::BoxLayout>( + views::BoxLayout::Orientation::kVertical)); + media_string_layout->set_main_axis_alignment( + views::BoxLayout::MainAxisAlignment::kStart); + media_string_layout->set_cross_axis_alignment( + views::BoxLayout::CrossAxisAlignment::kEnd); + media_string_layout->set_inside_border_insets( + gfx::Insets::TLBR(kMediaStringMarginDip + shadow_insets.top(), 0, 0, + kMediaStringMarginDip + shadow_insets.right())); + media_string_view_ = media_string_view_container_->AddChildView( + std::make_unique<MediaStringView>(this)); + media_string_view_->SetVisible(false); +} + +MediaStringView::Settings AmbientSlideshowPeripheralUi::GetSettings() { + return MediaStringView::Settings( + {/*icon_light_mode_color=*/ambient::util::GetColor( + GetColorProvider(), kColorAshIconColorPrimary, + /*dark_mode_enabled=*/false), + /*icon_dark_mode_color=*/ + ambient::util::GetColor(GetColorProvider(), kColorAshIconColorPrimary, + /*dark_mode_enabled=*/true), + /*text_light_mode_color=*/ + ambient::util::GetColor(GetColorProvider(), kColorAshTextColorPrimary, + /*dark_mode_enabled=*/false), + /*text_dark_mode_color=*/ + ambient::util::GetColor(GetColorProvider(), kColorAshTextColorPrimary, + /*dark_mode_enabled=*/true), + /*text_shadow_elevation=*/ + ambient::util::kDefaultTextShadowElevation}); +} + +void AmbientSlideshowPeripheralUi::UpdateGlanceableInfoPosition() { + gfx::Vector2d jitter = glanceable_info_jitter_calculator_->Calculate(); + gfx::Transform transform; + transform.Translate(jitter); + + ambient_info_view_->SetTextTransform(transform); + + if (media_string_view_->GetVisible()) { + gfx::Transform media_string_transform; + media_string_transform.Translate(-jitter.x(), -jitter.y()); + media_string_view_->layer()->SetTransform(media_string_transform); + } +} + +void AmbientSlideshowPeripheralUi::UpdateImageDetails( + const std::u16string& details, + const std::u16string& related_details) { + ambient_info_view_->UpdateImageDetails(details, related_details); +} + +BEGIN_METADATA(AmbientSlideshowPeripheralUi, views::View) +END_METADATA + +} // namespace ash
diff --git a/ash/ambient/ui/ambient_slideshow_peripheral_ui.h b/ash/ambient/ui/ambient_slideshow_peripheral_ui.h new file mode 100644 index 0000000..2af2f49 --- /dev/null +++ b/ash/ambient/ui/ambient_slideshow_peripheral_ui.h
@@ -0,0 +1,56 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_AMBIENT_UI_AMBIENT_SLIDESHOW_PERIPHERAL_UI_H_ +#define ASH_AMBIENT_UI_AMBIENT_SLIDESHOW_PERIPHERAL_UI_H_ + +#include <string> + +#include "ash/ambient/ui/ambient_info_view.h" +#include "ash/ambient/ui/ambient_view_delegate.h" +#include "ash/ambient/ui/media_string_view.h" +#include "ash/ash_export.h" +#include "ui/base/metadata/metadata_header_macros.h" +#include "ui/views/view.h" + +namespace ash { + +class AmbientInfoView; +class JitterCalculator; + +// AmbientSlideshowPeripheralUi----------------------------------------------- +// A custom view that shows peripheral elements such as related info, time, +// weather and media string that are shown in the slideshow's photo view. +class AmbientSlideshowPeripheralUi : public views::View, + public MediaStringView::Delegate { + public: + METADATA_HEADER(AmbientSlideshowPeripheralUi); + + AmbientSlideshowPeripheralUi( + AmbientViewDelegate* delegate, + JitterCalculator* glanceable_info_jitter_calculator); + + ~AmbientSlideshowPeripheralUi() override; + + // MediaStringView::Delegate: + MediaStringView::Settings GetSettings() override; + + void UpdateGlanceableInfoPosition(); + + void UpdateImageDetails(const std::u16string& details, + const std::u16string& related_details); + + private: + void InitLayout(AmbientViewDelegate* delegate); + + const base::raw_ptr<JitterCalculator> glanceable_info_jitter_calculator_; + + AmbientInfoView* ambient_info_view_ = nullptr; + + MediaStringView* media_string_view_ = nullptr; +}; + +} // namespace ash + +#endif // ASH_AMBIENT_UI_AMBIENT_SLIDESHOW_PERIPHERAL_UI_H_
diff --git a/ash/ambient/ui/ambient_view_ids.h b/ash/ambient/ui/ambient_view_ids.h index 56b81c3..c56ad19f 100644 --- a/ash/ambient/ui/ambient_view_ids.h +++ b/ash/ambient/ui/ambient_view_ids.h
@@ -22,6 +22,7 @@ kAmbientShieldView, kAmbientAnimationView, kAmbientVideoWebView, + kAmbientSlideshowPeripheralUi }; } // namespace ash
diff --git a/ash/ambient/ui/photo_view.cc b/ash/ambient/ui/photo_view.cc index 0a9728b..0e623a1 100644 --- a/ash/ambient/ui/photo_view.cc +++ b/ash/ambient/ui/photo_view.cc
@@ -47,8 +47,10 @@ } // namespace // PhotoView ------------------------------------------------------------------ -PhotoView::PhotoView(AmbientViewDelegateImpl* delegate) - : delegate_(delegate), +PhotoView::PhotoView(AmbientViewDelegateImpl* delegate, + bool peripheral_ui_visible) + : peripheral_ui_visible_(peripheral_ui_visible), + delegate_(delegate), glanceable_info_jitter_calculator_(kGlanceableInfoJitterConfig) { DCHECK(delegate_); SetID(AmbientViewID::kAmbientPhotoView); @@ -88,6 +90,7 @@ // Each image view will be animated on its own layer. image_view->SetPaintToLayer(); image_view->layer()->SetFillsBoundsOpaquely(false); + image_view->SetPeripheralUiVisibility(peripheral_ui_visible_); } // Hides one image view initially for fade in animation.
diff --git a/ash/ambient/ui/photo_view.h b/ash/ambient/ui/photo_view.h index 0726938..ceac503 100644 --- a/ash/ambient/ui/photo_view.h +++ b/ash/ambient/ui/photo_view.h
@@ -35,7 +35,9 @@ public: METADATA_HEADER(PhotoView); - explicit PhotoView(AmbientViewDelegateImpl* delegate); + explicit PhotoView(AmbientViewDelegateImpl* delegate, + bool peripheral_ui_visible = true); + PhotoView(const PhotoView&) = delete; PhotoView& operator=(PhotoView&) = delete; ~PhotoView() override; @@ -63,6 +65,9 @@ gfx::ImageSkia GetVisibleImageForTesting(); + // Flag to set the peripheral ui visibility, true by default. + const bool peripheral_ui_visible_ = true; + // Note that we should be careful when using |delegate_|, as there is no // strong guarantee on the life cycle. AmbientViewDelegateImpl* const delegate_ = nullptr;
diff --git a/ash/capture_mode/capture_mode_util.cc b/ash/capture_mode/capture_mode_util.cc index d84b6897..b5d5391 100644 --- a/ash/capture_mode/capture_mode_util.cc +++ b/ash/capture_mode/capture_mode_util.cc
@@ -508,7 +508,8 @@ /*app_name=*/ l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_CAPTURE_MODE_BUTTON_LABEL), is_camera_used, is_microphone_used, /*delegate=*/ - base::MakeRefCounted<PrivacyIndicatorsNotificationDelegate>()); + base::MakeRefCounted<PrivacyIndicatorsNotificationDelegate>(), + PrivacyIndicatorsSource::kScreenCapture); } ui::ColorProvider* GetColorProviderForNativeTheme() {
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb index 09549f4..554c318 100644 --- a/ash/strings/ash_strings_af.xtb +++ b/ash/strings/ash_strings_af.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Lessenaar 13</translation> <translation id="6782919488259222803">Deursoek huidige bladsy</translation> <translation id="6786750046913594791">Maak vouer toe</translation> +<translation id="6787839852456839824">Kortpadsleutels</translation> <translation id="6790428901817661496">Speel</translation> <translation id="679368458793552943">Zoem in wanneer vergrootglas aan is</translation> <translation id="6801878137098616817">Dit is onlangs gewysig</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 4fb3b371..d971753 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">ዴስክ 13</translation> <translation id="6782919488259222803">የአሁኑን ገጽ ይፈልጉ</translation> <translation id="6786750046913594791">አቃፊ ዝጋ</translation> +<translation id="6787839852456839824">የቁልፍ ሰሌዳ አቋራጮች</translation> <translation id="6790428901817661496">አጫውት</translation> <translation id="679368458793552943">ማጉያ ሲበራ አጉላ</translation> <translation id="6801878137098616817">በቅርቡ አርትዖት የተደረገበት</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 551e7f4..f846ef8 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -1236,6 +1236,7 @@ <translation id="6782182743534150858">سطح المكتب 13</translation> <translation id="6782919488259222803">البحث في الصفحة الحالية</translation> <translation id="6786750046913594791">إغلاق المجلد</translation> +<translation id="6787839852456839824">اختصارات لوحة المفاتيح</translation> <translation id="6790428901817661496">التشغيل</translation> <translation id="679368458793552943">التكبير عند يكون المكبِّر مفعّلاً</translation> <translation id="6801878137098616817">تم تعديله مؤخرًا.</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb index 2a2700cb..69a54b2 100644 --- a/ash/strings/ash_strings_as.xtb +++ b/ash/strings/ash_strings_as.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">ডেস্ক ১৩</translation> <translation id="6782919488259222803">বৰ্তমানৰ পৃষ্ঠাটো সন্ধান কৰক</translation> <translation id="6786750046913594791">ফ’ল্ডাৰ বন্ধ কৰক</translation> +<translation id="6787839852456839824">কীব’ৰ্ডৰ শ্বৰ্টকাটসমূহ</translation> <translation id="6790428901817661496">প্লে’ কৰক</translation> <translation id="679368458793552943">বিৱৰ্ধক অন কৰা থাকিলে জুম ইন কৰক</translation> <translation id="6801878137098616817">শেহতীয়াকৈ সম্পাদনা কৰা হৈছে</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb index 292a6c2..cfbead2 100644 --- a/ash/strings/ash_strings_az.xtb +++ b/ash/strings/ash_strings_az.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Masa 13</translation> <translation id="6782919488259222803">Cari səhifəni axtarın</translation> <translation id="6786750046913594791">Qovluğu qapadın</translation> +<translation id="6787839852456839824">Klaviatura qısayolları</translation> <translation id="6790428901817661496">Oxudun</translation> <translation id="679368458793552943">Böyüdücü aktiv olduqda yaxınlaşdırın</translation> <translation id="6801878137098616817">Bu yaxınlarda redaktə edilib</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb index 8c36f37a..93ad733 100644 --- a/ash/strings/ash_strings_be.xtb +++ b/ash/strings/ash_strings_be.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Працоўны стол 13</translation> <translation id="6782919488259222803">Выканаць пошук на бягучай старонцы</translation> <translation id="6786750046913594791">Закрыць папку</translation> +<translation id="6787839852456839824">Спалучэнні клавіш</translation> <translation id="6790428901817661496">Прайграць</translation> <translation id="679368458793552943">Павялічыць маштаб пры ўключанай лупе</translation> <translation id="6801878137098616817">Зменена нядаўна</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index 748b9dc..1358394 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Работен кът 13</translation> <translation id="6782919488259222803">Търсене в текущата страница</translation> <translation id="6786750046913594791">Затваряне на папката</translation> +<translation id="6787839852456839824">Клавишни комбинации</translation> <translation id="6790428901817661496">Пускане</translation> <translation id="679368458793552943">Приближаване, когато лупата е включена</translation> <translation id="6801878137098616817">Редактирано наскоро</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 1586122..bf6f8f12 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">ডেস্ক ১৩</translation> <translation id="6782919488259222803">বর্তমান পৃষ্ঠা সার্চ করুন</translation> <translation id="6786750046913594791">ফোল্ডার বন্ধ করুন</translation> +<translation id="6787839852456839824">কীবোর্ড শর্টকাটগুলি</translation> <translation id="6790428901817661496">চালু করুন</translation> <translation id="679368458793552943">ম্যাগনিফায়ার চালু থাকাকালীন বড় করুন</translation> <translation id="6801878137098616817">সম্প্রতি এডিট করা হয়েছে</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index e0f58e91..2700660 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">13. radna površina</translation> <translation id="6782919488259222803">Pretraživanje trenutne stranice</translation> <translation id="6786750046913594791">Zatvori folder</translation> +<translation id="6787839852456839824">Prečice tastature</translation> <translation id="6790428901817661496">Pokreni</translation> <translation id="679368458793552943">Uvećajte kada je povećalo uključeno</translation> <translation id="6801878137098616817">Nedavno uređeno</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 969a695..ef9b436f 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Escriptori 13</translation> <translation id="6782919488259222803">Cerca a la pàgina actual</translation> <translation id="6786750046913594791">Tanca la carpeta</translation> +<translation id="6787839852456839824">Tecles de drecera</translation> <translation id="6790428901817661496">Reprodueix</translation> <translation id="679368458793552943">Amplia quan la lupa estigui activada</translation> <translation id="6801878137098616817">Editat fa poc</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index ef78cd4..63e8b4bc 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Plocha 13</translation> <translation id="6782919488259222803">Hledat na aktuální stránce</translation> <translation id="6786750046913594791">Zavřít složku</translation> +<translation id="6787839852456839824">Klávesové zkratky</translation> <translation id="6790428901817661496">Přehrát</translation> <translation id="679368458793552943">Přiblížit, když je zapnutá lupa</translation> <translation id="6801878137098616817">Nedávno upraveno</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb index f2c73d76..1a511804 100644 --- a/ash/strings/ash_strings_cy.xtb +++ b/ash/strings/ash_strings_cy.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Desg 13</translation> <translation id="6782919488259222803">Chwilio'r dudalen bresennol</translation> <translation id="6786750046913594791">Cau'r ffolder</translation> +<translation id="6787839852456839824">Llwybrau byr bysellfwrdd</translation> <translation id="6790428901817661496">Chwarae</translation> <translation id="679368458793552943">Chwyddo pan fydd y chwyddwydr ymlaen</translation> <translation id="6801878137098616817">Golygwyd yn ddiweddar</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index 8e09595..ba9dad2 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Skrivebord 13</translation> <translation id="6782919488259222803">Søg på den aktuelle side</translation> <translation id="6786750046913594791">Luk mappe</translation> +<translation id="6787839852456839824">Tastaturgenveje</translation> <translation id="6790428901817661496">Afspil</translation> <translation id="679368458793552943">Zoom ind, når luppen er aktiveret</translation> <translation id="6801878137098616817">Redigeret for nylig</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index ebbe829..e5878c25 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -1233,6 +1233,7 @@ <translation id="6782182743534150858">Desktop 13</translation> <translation id="6782919488259222803">Auf aktueller Seite suchen</translation> <translation id="6786750046913594791">Ordner schließen</translation> +<translation id="6787839852456839824">Tastenkombinationen</translation> <translation id="6790428901817661496">Wiedergabe</translation> <translation id="679368458793552943">Heranzoomen, wenn die Lupe aktiviert ist</translation> <translation id="6801878137098616817">Vor Kurzem bearbeitet</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 602d8ae..d1f7b44 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Γραφείο 13</translation> <translation id="6782919488259222803">Αναζήτηση τρέχουσας σελίδας</translation> <translation id="6786750046913594791">Κλείσιμο φακέλου</translation> +<translation id="6787839852456839824">Συντομεύσεις πληκτρολογίου</translation> <translation id="6790428901817661496">Αναπαραγωγή</translation> <translation id="679368458793552943">Μεγέθυνση όταν είναι ενεργοποιημένος ο μεγεθυντικός φακός</translation> <translation id="6801878137098616817">Έγινε επεξεργασία πρόσφατα</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 5d8397bd..d10b97f7 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Desk 13</translation> <translation id="6782919488259222803">Search current page</translation> <translation id="6786750046913594791">Close folder</translation> +<translation id="6787839852456839824">Keyboard shortcuts</translation> <translation id="6790428901817661496">Play</translation> <translation id="679368458793552943">Zoom in when magnifier is on</translation> <translation id="6801878137098616817">Recently edited</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index d80b7ec..18fe0e8 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Escritorio 13</translation> <translation id="6782919488259222803">Buscar en la página actual</translation> <translation id="6786750046913594791">Cerrar carpeta</translation> +<translation id="6787839852456839824">Accesos directos</translation> <translation id="6790428901817661496">Reproducir</translation> <translation id="679368458793552943">Acercar cuando la lupa esté activada</translation> <translation id="6801878137098616817">Se editó recientemente</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 547342c..d2923da 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Escritorio 13</translation> <translation id="6782919488259222803">Buscar en la página actual</translation> <translation id="6786750046913594791">Cerrar carpeta</translation> +<translation id="6787839852456839824">Accesos directos</translation> <translation id="6790428901817661496">Reproducir</translation> <translation id="679368458793552943">Ampliar cuando la lupa esté activada</translation> <translation id="6801878137098616817">Editado recientemente</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 62ab9aa..838e462e 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Töölaud 13</translation> <translation id="6782919488259222803">Praeguselt lehelt otsimine</translation> <translation id="6786750046913594791">Kausta sulgemine</translation> +<translation id="6787839852456839824">Klaviatuuri otseteed</translation> <translation id="6790428901817661496">Esita</translation> <translation id="679368458793552943">Suumi sisse, kui luup on sisse lülitatud</translation> <translation id="6801878137098616817">Hiljuti muudetud</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb index 8c63957..c7e027b 100644 --- a/ash/strings/ash_strings_eu.xtb +++ b/ash/strings/ash_strings_eu.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Lan-eremua 13</translation> <translation id="6782919488259222803">Bilatu oraingo orrian</translation> <translation id="6786750046913594791">Itxi karpeta</translation> +<translation id="6787839852456839824">Laster-teklak</translation> <translation id="6790428901817661496">Erreproduzitu</translation> <translation id="679368458793552943">Handitu lupa aktibatuta dagoenean</translation> <translation id="6801878137098616817">Duela gutxi editatu da</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 6f30d6ac..b8c1ea0 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -1233,6 +1233,7 @@ <translation id="6782182743534150858">میزکار ۱۳</translation> <translation id="6782919488259222803">جستجوی صفحه کنونی</translation> <translation id="6786750046913594791">بستن پوشه</translation> +<translation id="6787839852456839824">میانبرهای صفحهکلید</translation> <translation id="6790428901817661496">پخش</translation> <translation id="679368458793552943">زومپیش کردن هنگام روشن بودن ذرهبین</translation> <translation id="6801878137098616817">اخیراً ویرایش شده است</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index 2adc8cad..9bf23d6 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Työpöytä 13</translation> <translation id="6782919488259222803">Hae nykyiseltä sivulta</translation> <translation id="6786750046913594791">Sulje kansio</translation> +<translation id="6787839852456839824">Pikanäppäimet</translation> <translation id="6790428901817661496">Toista</translation> <translation id="679368458793552943">Lähennä, kun suurennus on päällä</translation> <translation id="6801878137098616817">Muokattu hiljattain</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index f1e88be..5d577e1 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Desk 13</translation> <translation id="6782919488259222803">Maghanap sa kasalukuyang page</translation> <translation id="6786750046913594791">Isara ang folder</translation> +<translation id="6787839852456839824">Mga keyboard shortcut</translation> <translation id="6790428901817661496">I-play</translation> <translation id="679368458793552943">Mag-zoom in kapag naka-on ang magnifier</translation> <translation id="6801878137098616817">Na-edit kamakailan</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb index 2d3f9e7..34eee12 100644 --- a/ash/strings/ash_strings_fr-CA.xtb +++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Bureau 13</translation> <translation id="6782919488259222803">Recherche dans la page actuelle</translation> <translation id="6786750046913594791">Fermer le dossier</translation> +<translation id="6787839852456839824">Raccourcis clavier</translation> <translation id="6790428901817661496">Jouer</translation> <translation id="679368458793552943">Zoomer lorsque la loupe est activée</translation> <translation id="6801878137098616817">Modifié récemment</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index d216534..4596bb7 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -1233,6 +1233,7 @@ <translation id="6782182743534150858">Bureau 13</translation> <translation id="6782919488259222803">Rechercher sur la page active</translation> <translation id="6786750046913594791">Fermer le dossier</translation> +<translation id="6787839852456839824">Raccourcis clavier</translation> <translation id="6790428901817661496">Lire</translation> <translation id="679368458793552943">Faire un zoom avant lorsque la loupe est activée</translation> <translation id="6801878137098616817">Modifié récemment</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb index d88c257..81f69e5 100644 --- a/ash/strings/ash_strings_gl.xtb +++ b/ash/strings/ash_strings_gl.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Escritorio 13</translation> <translation id="6782919488259222803">Buscar na páxina actual</translation> <translation id="6786750046913594791">Pechar cartafol</translation> +<translation id="6787839852456839824">Atallos do teclado</translation> <translation id="6790428901817661496">Reproducir</translation> <translation id="679368458793552943">Achega o zoom cando a lupa está activada</translation> <translation id="6801878137098616817">Editouse recentemente</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index 422f74f..04813aed 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -1202,6 +1202,7 @@ <translation id="6781002679438061620">ડેસ્ક 9</translation> <translation id="6782182743534150858">ડેસ્ક 13</translation> <translation id="6786750046913594791">ફોલ્ડર બંધ કરો</translation> +<translation id="6787839852456839824">કીબોર્ડ શોર્ટકટ્સ</translation> <translation id="6790428901817661496">ચલાવો</translation> <translation id="679368458793552943">મેગ્નિફાયર ચાલુ હોય, ત્યારે મોટું કરો</translation> <translation id="6801878137098616817">તાજેતરમાં ફેરફાર કરવામાં આવ્યો હતો</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index 7581833ca..471542a 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">डेस्क 13</translation> <translation id="6782919488259222803">मौजूदा पेज में खोजें</translation> <translation id="6786750046913594791">फ़ोल्डर बंद करें</translation> +<translation id="6787839852456839824">कीबोर्ड शॉर्टकट</translation> <translation id="6790428901817661496">चलाएं</translation> <translation id="679368458793552943">ज़ूम करने की सुविधा चालू होने पर ज़ूम इन करने के लिए</translation> <translation id="6801878137098616817">इसमें, हाल ही में बदलाव किया गया था</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index f57b1d1c..ea60393 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -1233,6 +1233,7 @@ <translation id="6782182743534150858">Radna površina 13</translation> <translation id="6782919488259222803">Pretraživanje trenutačne stranice</translation> <translation id="6786750046913594791">Zatvori mapu</translation> +<translation id="6787839852456839824">Tipkovnički prečaci</translation> <translation id="6790428901817661496">Reproduciraj</translation> <translation id="679368458793552943">Povećavanje kad je povećalo uključeno</translation> <translation id="6801878137098616817">Nedavno uređivano</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 5988c0f..813dc39c8 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">13. asztal</translation> <translation id="6782919488259222803">Keresés az aktuális oldalon</translation> <translation id="6786750046913594791">Mappa bezárása</translation> +<translation id="6787839852456839824">Billentyűkódok</translation> <translation id="6790428901817661496">Lejátszás</translation> <translation id="679368458793552943">Nagyítás, ha a nagyító be van kapcsolva</translation> <translation id="6801878137098616817">Nemrégiben szerkesztette</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb index ff7604c..01f6f1d 100644 --- a/ash/strings/ash_strings_hy.xtb +++ b/ash/strings/ash_strings_hy.xtb
@@ -1233,6 +1233,7 @@ <translation id="6782182743534150858">Աշխատասեղան 13</translation> <translation id="6782919488259222803">Որոնել ընթացիկ էջում</translation> <translation id="6786750046913594791">Փակել պանակը</translation> +<translation id="6787839852456839824">Ստեղնային դյուրանցումներ</translation> <translation id="6790428901817661496">Նվագարկել</translation> <translation id="679368458793552943">Մեծացնել, երբ խոշորացույցը միացված է</translation> <translation id="6801878137098616817">Վերջերս փոփոխել եք</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index 293350d..81d99247 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Desktop 13</translation> <translation id="6782919488259222803">Telusuri halaman saat ini</translation> <translation id="6786750046913594791">Tutup folder</translation> +<translation id="6787839852456839824">Pintasan keyboard</translation> <translation id="6790428901817661496">Putar</translation> <translation id="679368458793552943">Perbesar saat kaca pembesar diaktifkan</translation> <translation id="6801878137098616817">Diedit baru-baru ini</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb index d1a82df..ee0d9c5 100644 --- a/ash/strings/ash_strings_is.xtb +++ b/ash/strings/ash_strings_is.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Skrifborð 13</translation> <translation id="6782919488259222803">Leita á núverandi síðu</translation> <translation id="6786750046913594791">Loka möppu</translation> +<translation id="6787839852456839824">Flýtilyklar</translation> <translation id="6790428901817661496">Spila</translation> <translation id="679368458793552943">Stækka þegar kveikt er á stækkunargleri</translation> <translation id="6801878137098616817">Breytt nýlega</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index fc4205c..8265e05 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -1231,6 +1231,7 @@ <translation id="6782182743534150858">Scrivania 13</translation> <translation id="6782919488259222803">Cerca nella pagina corrente</translation> <translation id="6786750046913594791">Chiudi cartella</translation> +<translation id="6787839852456839824">Scorciatoie da tastiera</translation> <translation id="6790428901817661496">Riproduci</translation> <translation id="679368458793552943">Aumenta lo zoom quando la lente d'ingrandimento è attiva</translation> <translation id="6801878137098616817">Modificato di recente</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index 705a48c..ef0096f 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">שולחן עבודה וירטואלי מספר 13</translation> <translation id="6782919488259222803">חיפוש בדף הנוכחי</translation> <translation id="6786750046913594791">סגירת התיקייה</translation> +<translation id="6787839852456839824">מקשי קיצור</translation> <translation id="6790428901817661496">הפעלה</translation> <translation id="679368458793552943">הגדלת התצוגה כשמפעילים זכוכית מגדלת</translation> <translation id="6801878137098616817">נערך לאחרונה</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index abade4c..72fd841 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">デスク 13</translation> <translation id="6782919488259222803">現在のページを検索する</translation> <translation id="6786750046913594791">フォルダを閉じる</translation> +<translation id="6787839852456839824">キーボード ショートカット</translation> <translation id="6790428901817661496">再生</translation> <translation id="679368458793552943">拡大鏡がオンのときにズームインします</translation> <translation id="6801878137098616817">最近編集したファイル</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb index 5b33fe1..3ab6d5e 100644 --- a/ash/strings/ash_strings_ka.xtb +++ b/ash/strings/ash_strings_ka.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">სამუშაო მაგიდა 13</translation> <translation id="6782919488259222803">მიმდინარე გვერდზე ძიება</translation> <translation id="6786750046913594791">საქაღალდის დახურვა</translation> +<translation id="6787839852456839824">კლავიატურის მალსახმობები</translation> <translation id="6790428901817661496">დაკვრა</translation> <translation id="679368458793552943">მასშტაბის გადიდება, როცა ლუპა ჩართულია</translation> <translation id="6801878137098616817">ახლახან რედაქტირებული</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb index 370de8a..9bb8e630 100644 --- a/ash/strings/ash_strings_kk.xtb +++ b/ash/strings/ash_strings_kk.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">13-жұмыс үстелі</translation> <translation id="6782919488259222803">Ағымдағы беттен іздеу</translation> <translation id="6786750046913594791">Қалтаны жабу</translation> +<translation id="6787839852456839824">Пернелер тіркесімі</translation> <translation id="6790428901817661496">Ойнату</translation> <translation id="679368458793552943">Ұлғайтқыш қосылған кезде ұлғайту</translation> <translation id="6801878137098616817">Жақында өзгертілді.</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb index aa0fb671..1098eaf7 100644 --- a/ash/strings/ash_strings_km.xtb +++ b/ash/strings/ash_strings_km.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">តុទី 13</translation> <translation id="6782919488259222803">ស្វែងរកលើទំព័របច្ចុប្បន្ន</translation> <translation id="6786750046913594791">បិទថតឯកសារ</translation> +<translation id="6787839852456839824">ផ្លូវកាត់ក្តារចុច</translation> <translation id="6790428901817661496">លេង</translation> <translation id="679368458793552943">ពង្រីកនៅពេលកែវពង្រីកត្រូវបានបើក</translation> <translation id="6801878137098616817">បានកែថ្មីៗនេះ</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index b8ce9be..730aeca6 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">ಡೆಸ್ಕ್ 13</translation> <translation id="6782919488259222803">ಪ್ರಸ್ತುತ ಪುಟವನ್ನು ಹುಡುಕಿ</translation> <translation id="6786750046913594791">ಫೋಲ್ಡರ್ ಮುಚ್ಚಿರಿ</translation> +<translation id="6787839852456839824">ಕೀಬೋರ್ಡ್ ಶಾರ್ಟ್ಕಟ್ಗಳು</translation> <translation id="6790428901817661496">ಪ್ಲೇ ಮಾಡು</translation> <translation id="679368458793552943">ಮ್ಯಾಗ್ನಿಫೈಯರ್ ಆನ್ ಆಗಿರುವಾಗ ಝೂಮ್ ಇನ್ ಮಾಡಿ</translation> <translation id="6801878137098616817">ಇತ್ತೀಚೆಗೆ ಎಡಿಟ್ ಮಾಡಿದ್ದೀರಿ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index bf03ea2..ef8c04b 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">데스크 13</translation> <translation id="6782919488259222803">현재 페이지 검색</translation> <translation id="6786750046913594791">폴더 닫기</translation> +<translation id="6787839852456839824">단축키</translation> <translation id="6790428901817661496">재생</translation> <translation id="679368458793552943">돋보기 사용 설정 시 확대</translation> <translation id="6801878137098616817">최근에 수정됨</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb index 7ed4595c..826033a 100644 --- a/ash/strings/ash_strings_ky.xtb +++ b/ash/strings/ash_strings_ky.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">13-иш такта</translation> <translation id="6782919488259222803">Учурдагы баракты издөө</translation> <translation id="6786750046913594791">Куржунду жабуу</translation> +<translation id="6787839852456839824">Ыкчам баскычтар</translation> <translation id="6790428901817661496">Ойнотуу</translation> <translation id="679368458793552943">Лупа күйүп турганда жакындатуу</translation> <translation id="6801878137098616817">Жакында түзөтүлдү</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb index aea8afd..bf19231 100644 --- a/ash/strings/ash_strings_lo.xtb +++ b/ash/strings/ash_strings_lo.xtb
@@ -1214,6 +1214,7 @@ <translation id="6683022854667115063">ຫູຟັງ</translation> <translation id="6696025732084565524">ແປ້ນພິມທີ່ສາມາດແຍກອອກໄດ້ຂອງທ່ານຈຳເປັນຕ້ອງມີການອັບເດດສຳຄັນ</translation> <translation id="6700713906295497288">ປຸ່ມເມນູ IME</translation> +<translation id="6705577071209924099">ປັບແສງ</translation> <translation id="6707693040195709527">ການປ່ຽນອຸປະກອນກັບໄປເປັນເວີຊັນກ່ອນໜ້ານີ້ແມ່ນເກີນເວລາທີ່ກຳນົດແລ້ວ</translation> <translation id="6710213216561001401">ຜ່ານມາ</translation> <translation id="6723839937902243910">ໄຟ</translation> @@ -1234,6 +1235,7 @@ <translation id="6782182743534150858">ໂຕະ 13</translation> <translation id="6782919488259222803">ຊອກຫາໃນໜ້າປັດຈຸບັນ</translation> <translation id="6786750046913594791">ປິດໂຟລເດີ</translation> +<translation id="6787839852456839824">ທາງລັດຄີບອດ</translation> <translation id="6790428901817661496">ຫຼິ້ນ</translation> <translation id="679368458793552943">ຊູມເຂົ້າເມື່ອແວ່ນຂະຫຍາຍເປີດຢູ່</translation> <translation id="6801878137098616817">ແກ້ໄຂຫຼ້າສຸດ</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index f24a861..8862377 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">13 darbalaukis</translation> <translation id="6782919488259222803">Ieškoti dabartiniame puslapyje</translation> <translation id="6786750046913594791">Uždaryti aplanką</translation> +<translation id="6787839852456839824">Spartieji klavišai</translation> <translation id="6790428901817661496">Žaisti</translation> <translation id="679368458793552943">Artinti, kai įjungtas didintuvas</translation> <translation id="6801878137098616817">Neseniai redaguota</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index 0406d47c..3d33a3b2 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">13. darbvieta</translation> <translation id="6782919488259222803">Meklēt pašreizējā lapā</translation> <translation id="6786750046913594791">Aizvērt mapi</translation> +<translation id="6787839852456839824">Īsinājumtaustiņi</translation> <translation id="6790428901817661496">Atskaņot</translation> <translation id="679368458793552943">Tuvināt, kad ieslēgta lupa</translation> <translation id="6801878137098616817">Nesen rediģēts</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb index 2681fe9..9eb8a93 100644 --- a/ash/strings/ash_strings_mk.xtb +++ b/ash/strings/ash_strings_mk.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Работна површина 13</translation> <translation id="6782919488259222803">Ја пребарува тековната страница</translation> <translation id="6786750046913594791">Затвори папка</translation> +<translation id="6787839852456839824">Кратенки на тастатура</translation> <translation id="6790428901817661496">Репродуцирај</translation> <translation id="679368458793552943">Зумирајте кога е вклучена лупата</translation> <translation id="6801878137098616817">Изменето неодамна</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index ddbc01e..deb012a 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">ഡെസ്ക് 13</translation> <translation id="6782919488259222803">നിലവിലെ പേജ് തിരയുക</translation> <translation id="6786750046913594791">ഫോൾഡർ അടയ്ക്കുക</translation> +<translation id="6787839852456839824">കീബോർഡ് കുറുക്കുവഴികൾ</translation> <translation id="6790428901817661496">പ്ലേചെയ്യുക</translation> <translation id="679368458793552943">മാഗ്നിഫയർ ഓണായിരിക്കുമ്പോൾ സൂം ഇൻ ചെയ്യുക</translation> <translation id="6801878137098616817">അടുത്തിടെ എഡിറ്റ് ചെയ്തത്</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb index 8e8a0c30..81a469e8 100644 --- a/ash/strings/ash_strings_mn.xtb +++ b/ash/strings/ash_strings_mn.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">13-р дэлгэц</translation> <translation id="6782919488259222803">Одоогийн хуудаснаас хайх</translation> <translation id="6786750046913594791">Хавтасыг хаах</translation> +<translation id="6787839852456839824">Компьютерийн гарын богино холбоос</translation> <translation id="6790428901817661496">Тоглуулах</translation> <translation id="679368458793552943">Томруулагч асаалттай үед томруулах</translation> <translation id="6801878137098616817">Саяхан зассан</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index b3f3619..ab80d55 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">डेस्क १३</translation> <translation id="6782919488259222803">सध्याचे पेज शोधा</translation> <translation id="6786750046913594791">फोल्डर बंद करा</translation> +<translation id="6787839852456839824">कीबोर्ड शॉर्टकट</translation> <translation id="6790428901817661496">प्ले करा</translation> <translation id="679368458793552943">मॅग्निफायर सुरू असताना झूम इन करा</translation> <translation id="6801878137098616817">अलीकडे संपादित केलेली</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index a4cfd6d..3f18e7f8 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Meja 13</translation> <translation id="6782919488259222803">Cari halaman semasa</translation> <translation id="6786750046913594791">Tutup folder</translation> +<translation id="6787839852456839824">Pintasan papan kekunci</translation> <translation id="6790428901817661496">Mainkan</translation> <translation id="679368458793552943">Zum masuk apabila penggadang dihidupkan</translation> <translation id="6801878137098616817">Diedit baru-baru ini</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb index 70cc8d9..3e6bec10 100644 --- a/ash/strings/ash_strings_my.xtb +++ b/ash/strings/ash_strings_my.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">မျက်နှာပြင် ၁၃</translation> <translation id="6782919488259222803">လက်ရှိစာမျက်နှာတွင် ရှာရန်</translation> <translation id="6786750046913594791">ဖိုလ်ဒါကို ပိတ်ရန်</translation> +<translation id="6787839852456839824">ကီးဘုတ် ဖြတ်လမ်းများ</translation> <translation id="6790428901817661496">ဖွင့်ရန်</translation> <translation id="679368458793552943">မှန်ဘီလူးဖွင့်ထားပါက ဇူးမ်ဆွဲရန်</translation> <translation id="6801878137098616817">မကြာသေးမီက ပြင်ဆင်ထားသည်</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index ac6d077..ed57fc02 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">डेस्क १३</translation> <translation id="6782919488259222803">हालको पेजमा खोज्नुहोस्</translation> <translation id="6786750046913594791">फोल्डर बन्द गर्नुहोस्</translation> +<translation id="6787839852456839824">किबोर्ड शर्टकटहरू</translation> <translation id="6790428901817661496">प्ले गर्नुहोस्</translation> <translation id="679368458793552943">म्याग्निफायर अन भएका बेला जुम इन गर्नुहोस्</translation> <translation id="6801878137098616817">हालसालै सम्पादन गरिएको</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index 750bc2254..ab2176d 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Bureau 13</translation> <translation id="6782919488259222803">Zoeken op huidige pagina</translation> <translation id="6786750046913594791">Map sluiten</translation> +<translation id="6787839852456839824">Sneltoetsen</translation> <translation id="6790428901817661496">Spelen</translation> <translation id="679368458793552943">Inzoomen als vergrootglas aanstaat</translation> <translation id="6801878137098616817">Recent bewerkt</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index a24bef8e..aa20b0e 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Skrivebord 13</translation> <translation id="6782919488259222803">Søk på gjeldende side</translation> <translation id="6786750046913594791">Lukk mappen</translation> +<translation id="6787839852456839824">Hurtigtaster</translation> <translation id="6790428901817661496">Spill av</translation> <translation id="679368458793552943">Zoom inn når forstørreren er på</translation> <translation id="6801878137098616817">Redigert nylig</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb index 96d126f..8b2ea74 100644 --- a/ash/strings/ash_strings_or.xtb +++ b/ash/strings/ash_strings_or.xtb
@@ -1233,6 +1233,7 @@ <translation id="6782182743534150858">ଡେସ୍କ 13</translation> <translation id="6782919488259222803">ବର୍ତ୍ତମାନର ପୃଷ୍ଠାକୁ ସର୍ଚ୍ଚ କରନ୍ତୁ</translation> <translation id="6786750046913594791">ଫୋଲ୍ଡର୍ ବନ୍ଦ କରନ୍ତୁ</translation> +<translation id="6787839852456839824">କୀ'ବୋର୍ଡ ସର୍ଟକଟ୍ଗୁଡ଼ିକ</translation> <translation id="6790428901817661496">ଚଲାନ୍ତୁ</translation> <translation id="679368458793552943">ମେଗ୍ନିଫାୟର ଚାଲୁ ଥିବା ସମୟରେ ଜୁମ ଇନ କରନ୍ତୁ</translation> <translation id="6801878137098616817">ବର୍ତ୍ତମାନ ଏଡିଟ କରାଯାଇଛି</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index 8d6de45..b93a8a6 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">ਡੈਸਕ 13</translation> <translation id="6782919488259222803">ਮੌਜੂਦਾ ਪੰਨਾ ਖੋਜੋ</translation> <translation id="6786750046913594791">ਫੋਲਡਰ ਬੰਦ ਕਰੋ</translation> +<translation id="6787839852456839824">ਕੀ-ਬੋਰਡ ਸ਼ਾਰਟਕੱਟ</translation> <translation id="6790428901817661496">ਪਲੇ ਕਰੋ</translation> <translation id="679368458793552943">ਵੱਡਦਰਸ਼ੀ ਦੇ ਚਾਲੂ ਹੋਣ 'ਤੇ ਜ਼ੂਮ ਵਧਾਓ</translation> <translation id="6801878137098616817">ਹਾਲ ਹੀ ਵਿੱਚ ਸੰਪਾਦਨ ਕੀਤਾ ਗਿਆ</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 9e31bcb..3907a38 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -1233,6 +1233,7 @@ <translation id="6782182743534150858">Biurko 13</translation> <translation id="6782919488259222803">Wyszukaj na bieżącej stronie</translation> <translation id="6786750046913594791">Zamknij folder</translation> +<translation id="6787839852456839824">Skróty klawiszowe</translation> <translation id="6790428901817661496">Odtwórz</translation> <translation id="679368458793552943">Powiększ, gdy lupa jest włączona</translation> <translation id="6801878137098616817">Niedawno edytowane</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index 4102e26..a06977e 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Espaço de trabalho 13</translation> <translation id="6782919488259222803">Pesquisar a página atual</translation> <translation id="6786750046913594791">Fechar pasta</translation> +<translation id="6787839852456839824">Atalhos do teclado</translation> <translation id="6790428901817661496">Reproduzir</translation> <translation id="679368458793552943">Aumentar o zoom quando a lupa estiver ativada</translation> <translation id="6801878137098616817">Editado recentemente</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index 823d28d..848032c 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Espaço de trabalho 13</translation> <translation id="6782919488259222803">Pesquisar na página atual</translation> <translation id="6786750046913594791">Fechar pasta</translation> +<translation id="6787839852456839824">Atalhos de teclado</translation> <translation id="6790428901817661496">Reproduzir</translation> <translation id="679368458793552943">Aumentar o zoom quando a lupa estiver ativada</translation> <translation id="6801878137098616817">Editado recentemente</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index ea53949..611be43 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Biroul 13</translation> <translation id="6782919488259222803">Caută în pagina actuală</translation> <translation id="6786750046913594791">Închideți dosarul</translation> +<translation id="6787839852456839824">Comenzi rapide de la tastatură</translation> <translation id="6790428901817661496">Redă</translation> <translation id="679368458793552943">Mărește când lupa este activată</translation> <translation id="6801878137098616817">Editat recent</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index 000e37e..798637d 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Рабочий стол 13</translation> <translation id="6782919488259222803">Выполнить поиск по текущей странице</translation> <translation id="6786750046913594791">Закрыть папку.</translation> +<translation id="6787839852456839824">Быстрые клавиши</translation> <translation id="6790428901817661496">Воспроизвести</translation> <translation id="679368458793552943">Увеличить, когда включена лупа</translation> <translation id="6801878137098616817">Недавно отредактировано</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb index 85c66da4..be31afa 100644 --- a/ash/strings/ash_strings_si.xtb +++ b/ash/strings/ash_strings_si.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">13 වෙනි මේසය</translation> <translation id="6782919488259222803">වත්මන් පිටුව සොයන්න</translation> <translation id="6786750046913594791">ෆෝල්ඩරය වසන්න</translation> +<translation id="6787839852456839824">යතුරු පුවරු කෙටිමං</translation> <translation id="6790428901817661496">වාදනය කරන්න</translation> <translation id="679368458793552943">විශාලකය සක්රීයව ඇති විට විශාලන කරන්න</translation> <translation id="6801878137098616817">මෑතදී සංස්කරණය කරන ලදී</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 59f4652..ff16b7b 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">13. plocha</translation> <translation id="6782919488259222803">Vyhľadanie na aktuálnej stránke</translation> <translation id="6786750046913594791">Zatvoriť priečinok</translation> +<translation id="6787839852456839824">Klávesové skratky</translation> <translation id="6790428901817661496">Prehrať</translation> <translation id="679368458793552943">Priblíženie pri zapnutej lupe</translation> <translation id="6801878137098616817">Nedávno upravené</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index 9a74c41..9bf36b1 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Namizje 13</translation> <translation id="6782919488259222803">Iskanje po trenutni strani</translation> <translation id="6786750046913594791">Zapri mapo</translation> +<translation id="6787839852456839824">Bližnjične tipke</translation> <translation id="6790428901817661496">Predvajanje</translation> <translation id="679368458793552943">Povečava, ko je lupa vklopljena</translation> <translation id="6801878137098616817">Nedavno urejeno</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb index 0d33cc6a..1dcd8d6b 100644 --- a/ash/strings/ash_strings_sq.xtb +++ b/ash/strings/ash_strings_sq.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Tavolina e punës 13</translation> <translation id="6782919488259222803">Kërko në faqen aktuale</translation> <translation id="6786750046913594791">Mbyll dosjen</translation> +<translation id="6787839852456839824">Shkurtoret e tastierës</translation> <translation id="6790428901817661496">Luaj</translation> <translation id="679368458793552943">Zmadho kur zmadhuesi është aktiv</translation> <translation id="6801878137098616817">Modifikuar së fundi</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index 173ea85..348d1be 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Radna površina 13</translation> <translation id="6782919488259222803">Pretraži aktuelnu stranicu</translation> <translation id="6786750046913594791">Zatvorite folder</translation> +<translation id="6787839852456839824">Tasterske prečice</translation> <translation id="6790428901817661496">Pusti</translation> <translation id="679368458793552943">Uvećajte kada je lupa uključena</translation> <translation id="6801878137098616817">Nedavno izmenjeno</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index 1a7bbfc..086f09ab 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">Радна површина 13</translation> <translation id="6782919488259222803">Претражи актуелну страницу</translation> <translation id="6786750046913594791">Затворите фолдер</translation> +<translation id="6787839852456839824">Тастерске пречице</translation> <translation id="6790428901817661496">Пусти</translation> <translation id="679368458793552943">Увећајте када је лупа укључена</translation> <translation id="6801878137098616817">Недавно измењено</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index 64c70ea5..62a5079 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Skrivbord 13</translation> <translation id="6782919488259222803">Sök på den aktuella sidan</translation> <translation id="6786750046913594791">Stäng mappen</translation> +<translation id="6787839852456839824">Kortkommandon</translation> <translation id="6790428901817661496">Spela</translation> <translation id="679368458793552943">Zooma in när skärmförstoring är aktiverat</translation> <translation id="6801878137098616817">Redigerades nyligen</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index af3a44fe..744b57c6 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Eneokazi la 13</translation> <translation id="6782919488259222803">Tafuta ukurasa wa sasa</translation> <translation id="6786750046913594791">Funga Folda</translation> +<translation id="6787839852456839824">Mikato ya kibodi</translation> <translation id="6790428901817661496">Cheza</translation> <translation id="679368458793552943">Vuta karibu kikuzaji kinapokuwa kimewashwa</translation> <translation id="6801878137098616817">Ilibadilishwa hivi karibuni</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index 1bec901..a29a38d 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">டெஸ்க் 13</translation> <translation id="6782919488259222803">தற்போதைய பக்கத்தைத் தேடு</translation> <translation id="6786750046913594791">ஃபோல்டரை மூடு</translation> +<translation id="6787839852456839824">கீபோர்டு ஷார்ட்கட்கள்</translation> <translation id="6790428901817661496">இயக்கு</translation> <translation id="679368458793552943">மேக்னிஃபயர் இயக்கப்பட்டிருக்கும்போது பெரிதாக்கு</translation> <translation id="6801878137098616817">சமீபத்தில் திருத்தப்பட்டது</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index 7dd5017..e0ab05f 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -1235,6 +1235,7 @@ <translation id="6782182743534150858">డెస్క్ 13</translation> <translation id="6782919488259222803">ప్రస్తుత పేజీని సెర్చ్ చేయండి</translation> <translation id="6786750046913594791">ఫోల్డర్ను మూసివేయండి</translation> +<translation id="6787839852456839824">కీబోర్డ్ షార్ట్కట్లు</translation> <translation id="6790428901817661496">ప్లే చేయి</translation> <translation id="679368458793552943">మ్యాగ్నిఫైయర్ ఆన్లో ఉన్నప్పుడు జూమ్ - ఇన్ చేయండి</translation> <translation id="6801878137098616817">ఇటీవల ఎడిట్ చేశారు</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index b593b09..8d99221 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -1230,6 +1230,7 @@ <translation id="6782182743534150858">เดสก์ที่ 13</translation> <translation id="6782919488259222803">ค้นหาหน้าปัจจุบัน</translation> <translation id="6786750046913594791">ปิดโฟลเดอร์</translation> +<translation id="6787839852456839824">แป้นพิมพ์ลัด</translation> <translation id="6790428901817661496">เล่น</translation> <translation id="679368458793552943">ซูมเข้าเมื่อแว่นขยายเปิดอยู่</translation> <translation id="6801878137098616817">แก้ไขเมื่อเร็วๆ นี้</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index e1abdb2..598c0d5 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Masa 13</translation> <translation id="6782919488259222803">Geçerli sayfada ara</translation> <translation id="6786750046913594791">Klasörü kapat</translation> +<translation id="6787839852456839824">Klavye kısayolları</translation> <translation id="6790428901817661496">Oynat</translation> <translation id="679368458793552943">Büyüteç açıkken yakınlaştırın</translation> <translation id="6801878137098616817">Yakın zamanda düzenlendi</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index cc61ed6..64e6d00 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Робочий стіл 13</translation> <translation id="6782919488259222803">Шукати на поточній сторінці</translation> <translation id="6786750046913594791">Закрити папку</translation> +<translation id="6787839852456839824">Комбінації клавіш</translation> <translation id="6790428901817661496">Відтворити</translation> <translation id="679368458793552943">Наблизити, коли лупу ввімкнено</translation> <translation id="6801878137098616817">Змінено нещодавно</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index 445d7fad..c952a21c 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -1233,6 +1233,7 @@ <translation id="6782182743534150858">ڈیسک 13</translation> <translation id="6782919488259222803">موجودہ صفحہ تلاش کریں</translation> <translation id="6786750046913594791">فولڈر بند کریں</translation> +<translation id="6787839852456839824">کی بورڈ شارٹ کٹس</translation> <translation id="6790428901817661496">چلائیں</translation> <translation id="679368458793552943">میگنیفائر کے آن ہونے پر زوم ان کریں</translation> <translation id="6801878137098616817">حال ہی میں ترمیم کیا گیا</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb index 824bce7..ef794a8 100644 --- a/ash/strings/ash_strings_uz.xtb +++ b/ash/strings/ash_strings_uz.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Desk 13</translation> <translation id="6782919488259222803">Joriy sahifadan qidirish</translation> <translation id="6786750046913594791">Jildni yopish</translation> +<translation id="6787839852456839824">Klaviatura yorliqlari</translation> <translation id="6790428901817661496">Ijro etish</translation> <translation id="679368458793552943">Lupa yoqilganda kattalashtirish</translation> <translation id="6801878137098616817">Yaqinda tahrirlangan</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 1ba28cf3..51caac01 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Không gian làm việc 13</translation> <translation id="6782919488259222803">Tìm kiếm trên trang hiện tại</translation> <translation id="6786750046913594791">Đóng thư mục</translation> +<translation id="6787839852456839824">Phím tắt</translation> <translation id="6790428901817661496">Phát</translation> <translation id="679368458793552943">Phóng to khi kính lúp đang bật</translation> <translation id="6801878137098616817">Mới chỉnh sửa gần đây</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index a0bf993..c1f3ade 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">桌面 13</translation> <translation id="6782919488259222803">搜索当前网页</translation> <translation id="6786750046913594791">关闭文件夹</translation> +<translation id="6787839852456839824">键盘快捷键</translation> <translation id="6790428901817661496">播放</translation> <translation id="679368458793552943">开启放大镜时放大</translation> <translation id="6801878137098616817">最近修改过</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb index e949f3c..6a4d354 100644 --- a/ash/strings/ash_strings_zh-HK.xtb +++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -1232,6 +1232,7 @@ <translation id="6782182743534150858">桌面 13</translation> <translation id="6782919488259222803">搜尋目前頁面</translation> <translation id="6786750046913594791">關閉資料夾</translation> +<translation id="6787839852456839824">鍵盤快速鍵</translation> <translation id="6790428901817661496">播放</translation> <translation id="679368458793552943">放大鏡開啟時放大</translation> <translation id="6801878137098616817">最近編輯過</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index af3ca42a..9f3dd9e 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -1230,6 +1230,7 @@ <translation id="6782182743534150858">桌面 13</translation> <translation id="6782919488259222803">搜尋目前網頁</translation> <translation id="6786750046913594791">關閉資料夾</translation> +<translation id="6787839852456839824">鍵盤快速鍵</translation> <translation id="6790428901817661496">播放</translation> <translation id="679368458793552943">放大鏡開啟時放大畫面</translation> <translation id="6801878137098616817">最近編輯過</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb index 22fdac36..41d3545 100644 --- a/ash/strings/ash_strings_zu.xtb +++ b/ash/strings/ash_strings_zu.xtb
@@ -1234,6 +1234,7 @@ <translation id="6782182743534150858">Itafula 13</translation> <translation id="6782919488259222803">Sesha ikhasi lamanje</translation> <translation id="6786750046913594791">Vala ifolda</translation> +<translation id="6787839852456839824">Izinqamuleli zekhibhodi</translation> <translation id="6790428901817661496">Dlala</translation> <translation id="679368458793552943">Sondeza isithombe uma isikhulisi sivuliwe</translation> <translation id="6801878137098616817">Kuhlelwe kamuva nje</translation>
diff --git a/ash/style/ash_color_id.h b/ash/style/ash_color_id.h index eb34425..816649f 100644 --- a/ash/style/ash_color_id.h +++ b/ash/style/ash_color_id.h
@@ -127,7 +127,9 @@ /* Color for feature tile small circle */ \ E_CPONLY(kColorAshTileSmallCircle) \ /* Color for the background of the app count indicator on a folder */ \ - E_CPONLY(kColorAshFolderItemCountBackgroundColor) + E_CPONLY(kColorAshFolderItemCountBackgroundColor) \ + /* Color for the background of the phantom window */ \ + E_CPONLY(kColorAshPhantomWindowBackgroundColor) #include "ui/color/color_id_macros.inc"
diff --git a/ash/style/ash_color_mixer.cc b/ash/style/ash_color_mixer.cc index 17123b2..1555c97 100644 --- a/ash/style/ash_color_mixer.cc +++ b/ash/style/ash_color_mixer.cc
@@ -25,6 +25,7 @@ namespace { constexpr int kAlpha20 = SK_AlphaOPAQUE * 0.2f; +constexpr int kAlpha25 = SK_AlphaOPAQUE * 0.25f; constexpr int kAlpha40 = SK_AlphaOPAQUE * 0.4f; constexpr int kAlpha60 = SK_AlphaOPAQUE * 0.6f; constexpr int kAlpha80 = SK_AlphaOPAQUE * 0.8f; @@ -601,6 +602,8 @@ mixer[kColorAshFolderItemCountBackgroundColor] = use_dark_color ? ui::ColorTransform(gfx::kGoogleBlue300) : ui::ColorTransform(gfx::kGoogleBlue600); + mixer[kColorAshPhantomWindowBackgroundColor] = + ui::SetAlpha(cros_tokens::kCrosSysPrimary, kAlpha25); mixer[ui::kColorToggleButtonThumbOn] = {cros_tokens::kCrosSysOnPrimary}; mixer[ui::kColorToggleButtonThumbOff] = {cros_tokens::kCrosSysOnSecondary};
diff --git a/ash/system/phonehub/phone_hub_recent_apps_view.cc b/ash/system/phonehub/phone_hub_recent_apps_view.cc index 829d080..d88d03c 100644 --- a/ash/system/phonehub/phone_hub_recent_apps_view.cc +++ b/ash/system/phonehub/phone_hub_recent_apps_view.cc
@@ -334,6 +334,11 @@ return "RecentAppLoadingView"; } +base::WeakPtr<PhoneHubRecentAppsView::LoadingView> +PhoneHubRecentAppsView::LoadingView::GetWeakPtr() { + return weak_ptr_factory_.GetWeakPtr(); +} + void PhoneHubRecentAppsView::LoadingView::StartLoadingAnimation() { for (size_t i = 0; i < app_loading_icons_.size(); i++) { app_loading_icons_[i]->StartLoadingAnimation( @@ -460,7 +465,7 @@ views::AnimationBuilder() .OnEnded(base::BindOnce(&LoadingView::SetVisible, - base::Unretained(loading_view_), false)) + loading_view_->GetWeakPtr(), false)) .Once() .SetOpacity(loading_view_, 1.0f) .SetOpacity(recent_app_buttons_view_, 0.0f)
diff --git a/ash/system/phonehub/phone_hub_recent_apps_view.h b/ash/system/phonehub/phone_hub_recent_apps_view.h index 90409f0f..b4fc9150 100644 --- a/ash/system/phonehub/phone_hub_recent_apps_view.h +++ b/ash/system/phonehub/phone_hub_recent_apps_view.h
@@ -120,9 +120,12 @@ void StartLoadingAnimation(); void StopLoadingAnimation(); + base::WeakPtr<LoadingView> GetWeakPtr(); + private: std::vector<AppLoadingIcon*> app_loading_icons_; PhoneHubMoreAppsButton* more_apps_button_ = nullptr; + base::WeakPtrFactory<LoadingView> weak_ptr_factory_{this}; }; // Update the view to reflect the most recently opened apps.
diff --git a/ash/system/privacy/privacy_indicators_controller.cc b/ash/system/privacy/privacy_indicators_controller.cc index fe6bddf..dda2373 100644 --- a/ash/system/privacy/privacy_indicators_controller.cc +++ b/ash/system/privacy/privacy_indicators_controller.cc
@@ -18,6 +18,7 @@ #include "ash/system/status_area_widget.h" #include "ash/system/unified/unified_system_tray.h" #include "base/functional/callback_forward.h" +#include "base/metrics/histogram_functions.h" #include "ui/base/l10n/l10n_util.h" #include "ui/gfx/vector_icon_types.h" #include "ui/message_center/message_center.h" @@ -216,10 +217,13 @@ absl::optional<std::u16string> app_name, bool is_camera_used, bool is_microphone_used, - scoped_refptr<PrivacyIndicatorsNotificationDelegate> delegate) { + scoped_refptr<PrivacyIndicatorsNotificationDelegate> delegate, + PrivacyIndicatorsSource source) { ModifyPrivacyIndicatorsNotification(app_id, app_name, is_camera_used, is_microphone_used, delegate); UpdatePrivacyIndicatorsView(app_id, is_camera_used, is_microphone_used); + + base::UmaHistogramEnumeration("Ash.PrivacyIndicators.Source", source); } std::string GetPrivacyIndicatorsNotificationId(const std::string& app_id) {
diff --git a/ash/system/privacy/privacy_indicators_controller.h b/ash/system/privacy/privacy_indicators_controller.h index 2aca6ea..da987e0 100644 --- a/ash/system/privacy/privacy_indicators_controller.h +++ b/ash/system/privacy/privacy_indicators_controller.h
@@ -69,6 +69,16 @@ absl::optional<int> launch_settings_button_index_; }; +// This enum contains all the sources that use privacy indicators. This enum is +// used for metrics collection. Note to keep in sync with enum in +// tools/metrics/histograms/enums.xml. +enum class PrivacyIndicatorsSource { + kApps = 0, + kLinuxVm = 1, + kScreenCapture = 2, + kMaxValue = kScreenCapture +}; + // Updates privacy indicators, including: // * Updates camera and microphone access indicators for // `PrivacyIndicatorsTrayItemView`(s) across all status area widgets. @@ -80,7 +90,8 @@ absl::optional<std::u16string> app_name, bool is_camera_used, bool is_microphone_used, - scoped_refptr<PrivacyIndicatorsNotificationDelegate> delegate); + scoped_refptr<PrivacyIndicatorsNotificationDelegate> delegate, + PrivacyIndicatorsSource source); // Get the id of the privacy indicators notification associated with `app_id`. std::string ASH_EXPORT
diff --git a/ash/system/privacy/privacy_indicators_controller_unittest.cc b/ash/system/privacy/privacy_indicators_controller_unittest.cc index 43dfe02..5ef0c053 100644 --- a/ash/system/privacy/privacy_indicators_controller_unittest.cc +++ b/ash/system/privacy/privacy_indicators_controller_unittest.cc
@@ -22,6 +22,7 @@ #include "base/command_line.h" #include "base/functional/bind.h" #include "base/memory/weak_ptr.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "ui/base/l10n/l10n_util.h" #include "ui/compositor/scoped_animation_duration_scale_mode.h" @@ -145,7 +146,8 @@ std::string notification_id = GetPrivacyIndicatorsNotificationId(app_id); scoped_refptr<TestDelegate> delegate = base::MakeRefCounted<TestDelegate>(); UpdatePrivacyIndicators(app_id, app_name, /*is_camera_used=*/true, - /*is_microphone_used=*/true, delegate); + /*is_microphone_used=*/true, delegate, + PrivacyIndicatorsSource::kApps); auto* notification = message_center::MessageCenter::Get()->FindNotificationById( @@ -167,7 +169,8 @@ /*has_launch_settings_callback=*/false); UpdatePrivacyIndicators(app_id, u"test_app_name", /*is_camera_used=*/true, - /*is_microphone_used=*/true, delegate); + /*is_microphone_used=*/true, delegate, + PrivacyIndicatorsSource::kApps); auto* notification = message_center::MessageCenter::Get()->FindNotificationById( @@ -185,7 +188,8 @@ /*has_launch_app_callback=*/true, /*has_launch_settings_callback=*/false); UpdatePrivacyIndicators(app_id, u"test_app_name", /*is_camera_used=*/true, - /*is_microphone_used=*/true, delegate); + /*is_microphone_used=*/true, delegate, + PrivacyIndicatorsSource::kApps); auto* notification = message_center::MessageCenter::Get()->FindNotificationById( @@ -216,7 +220,8 @@ /*has_launch_app_callback=*/false, /*has_launch_settings_callback=*/true); UpdatePrivacyIndicators(app_id, u"test_app_name", /*is_camera_used=*/true, - /*is_microphone_used=*/true, delegate); + /*is_microphone_used=*/true, delegate, + PrivacyIndicatorsSource::kApps); auto* notification = message_center::MessageCenter::Get()->FindNotificationById( @@ -245,7 +250,8 @@ scoped_refptr<TestDelegate> delegate = base::MakeRefCounted<TestDelegate>(); UpdatePrivacyIndicators(app_id, u"test_app_name", /*is_camera_used=*/true, - /*is_microphone_used=*/true, delegate); + /*is_microphone_used=*/true, delegate, + PrivacyIndicatorsSource::kApps); auto* notification = message_center::MessageCenter::Get()->FindNotificationById( @@ -291,7 +297,8 @@ scoped_refptr<TestDelegate> delegate = base::MakeRefCounted<TestDelegate>(); UpdatePrivacyIndicators(app_id, u"test_app_name", /*is_camera_used=*/true, - /*is_microphone_used=*/true, delegate); + /*is_microphone_used=*/true, delegate, + PrivacyIndicatorsSource::kApps); // The notification should not exist. EXPECT_FALSE(message_center::MessageCenter::Get()->FindNotificationById( @@ -312,28 +319,59 @@ UpdatePrivacyIndicators("test_id", u"test_app_name", /*is_camera_used=*/true, - /*is_microphone_used=*/false, delegate); + /*is_microphone_used=*/false, delegate, + PrivacyIndicatorsSource::kApps); ExpectPrivacyIndicatorsTrayItemVisible( /*visible=*/true, /*camera_visible=*/true, /*microphone_visible=*/false); UpdatePrivacyIndicators("test_id", u"test_app_name", /*is_camera_used=*/true, - /*is_microphone_used=*/true, delegate); + /*is_microphone_used=*/true, delegate, + PrivacyIndicatorsSource::kApps); ExpectPrivacyIndicatorsTrayItemVisible( /*visible=*/true, /*camera_visible=*/true, /*microphone_visible=*/true); UpdatePrivacyIndicators("test_id", u"test_app_name", /*is_camera_used=*/false, - /*is_microphone_used=*/false, delegate); + /*is_microphone_used=*/false, delegate, + PrivacyIndicatorsSource::kApps); ExpectPrivacyIndicatorsTrayItemVisible( /*visible=*/false, /*camera_visible=*/false, /*microphone_visible=*/false); UpdatePrivacyIndicators("test_id", u"test_app_name", /*is_camera_used=*/false, - /*is_microphone_used=*/true, delegate); + /*is_microphone_used=*/true, delegate, + PrivacyIndicatorsSource::kApps); ExpectPrivacyIndicatorsTrayItemVisible( /*visible=*/true, /*camera_visible=*/false, /*microphone_visible=*/true); } +TEST_F(PrivacyIndicatorsControllerTest, MetricsCollection) { + base::HistogramTester histogram_tester; + scoped_refptr<TestDelegate> delegate = base::MakeRefCounted<TestDelegate>(); + const std::string histogram_name = "Ash.PrivacyIndicators.Source"; + + UpdatePrivacyIndicators("test_id", u"test_app_name", + /*is_camera_used=*/true, + /*is_microphone_used=*/false, delegate, + PrivacyIndicatorsSource::kApps); + histogram_tester.ExpectBucketCount(histogram_name, + PrivacyIndicatorsSource::kApps, 1); + + UpdatePrivacyIndicators("test_id", u"test_app_name", + /*is_camera_used=*/true, + /*is_microphone_used=*/false, delegate, + PrivacyIndicatorsSource::kScreenCapture); + histogram_tester.ExpectBucketCount( + histogram_name, PrivacyIndicatorsSource::kScreenCapture, 1); + + UpdatePrivacyIndicators("test_id", u"test_app_name", + /*is_camera_used=*/true, + /*is_microphone_used=*/false, delegate, + PrivacyIndicatorsSource::kLinuxVm); + histogram_tester.ExpectBucketCount(histogram_name, + PrivacyIndicatorsSource::kLinuxVm, 1); +} + } // namespace ash
diff --git a/ash/system/tray/tray_item_view.cc b/ash/system/tray/tray_item_view.cc index 3b4d3a5..8c1da94 100644 --- a/ash/system/tray/tray_item_view.cc +++ b/ash/system/tray/tray_item_view.cc
@@ -70,10 +70,7 @@ } TrayItemView::TrayItemView(Shelf* shelf) - : views::AnimationDelegateViews(this), - shelf_(shelf), - label_(NULL), - image_view_(NULL) { + : views::AnimationDelegateViews(this), shelf_(shelf) { DCHECK(shelf_); SetPaintToLayer(); layer()->SetFillsBoundsOpaquely(false); @@ -133,21 +130,19 @@ } void TrayItemView::SetVisible(bool visible) { + // Do not invoke animation when the current visibility is already at the + // target visibility. + if (visible == target_visible_) { + return; + } + target_visible_ = visible; + views::View::SetVisible(visible); + if (!GetWidget() || ui::ScopedAnimationDurationScaleMode::duration_multiplier() == ui::ScopedAnimationDurationScaleMode::ZERO_DURATION) { - views::View::SetVisible(visible); return; } - - // Do not invoke animation when visibility is not changing. An in-progress - // animation may change the visibility, so also ensure there are no - // in-progress animations. - if (visible == GetVisible() && !IsAnimating()) { - return; - } - - views::View::SetVisible(visible); PerformVisibilityAnimation(visible); } @@ -159,8 +154,6 @@ // Set the view visible to show both show/hide animation. views::View::SetVisible(true); - target_visible_ = visible; - if (!animation_) { animation_ = std::make_unique<gfx::SlideAnimation>(this); animation_->SetTweenType(gfx::Tween::LINEAR); @@ -169,10 +162,8 @@ // Immediately progress to the end of the animation if animation is disabled. if (!IsAnimationEnabled()) { - animation_->Reset(target_visible_ ? 1.0 : 0.0); - layer()->SetTransform(gfx::Transform()); - layer()->SetOpacity(target_visible_ ? 1.0 : 0.0); - views::View::SetVisible(target_visible_); + animation_->SetSlideDuration(base::TimeDelta()); + target_visible_ ? animation_->Show() : animation_->Hide(); return; } @@ -183,7 +174,6 @@ animation_->SetSlideDuration(base::Milliseconds(400)); animation_->Show(); AnimationProgressed(animation_.get()); - layer()->SetOpacity(0.f); } else { SetupThroughputTrackerForAnimationSmoothness( GetWidget(), throughput_tracker_, @@ -232,6 +222,10 @@ void TrayItemView::AnimationProgressed(const gfx::Animation* animation) { // Should not animate during resize stage. if (InResizeAnimation(animation->GetCurrentValue())) { + // Ensure we are not visible during resize stage. + if (layer()->opacity() > 0.0) { + layer()->SetOpacity(0.0); + } PreferredSizeChanged(); return; } @@ -261,8 +255,8 @@ } void TrayItemView::AnimationEnded(const gfx::Animation* animation) { - if (animation->GetCurrentValue() < 0.1) - views::View::SetVisible(false); + views::View::SetVisible(target_visible_); + layer()->SetOpacity(target_visible_ ? 1.0 : 0.0); if (throughput_tracker_) { // Reset `throughput_tracker_` to reset animation metrics recording.
diff --git a/ash/system/tray/tray_item_view.h b/ash/system/tray/tray_item_view.h index 1d6de50..b61cea0d 100644 --- a/ash/system/tray/tray_item_view.h +++ b/ash/system/tray/tray_item_view.h
@@ -145,14 +145,16 @@ std::unique_ptr<gfx::SlideAnimation> animation_; // The target visibility for the item when all the animation is done. - bool target_visible_ = false; + // Initialized to true because View visibility defaults to true during + // construction. + bool target_visible_ = true; // Use scale in animating in the item to the tray. bool use_scale_in_animation_ = true; // Only one of |label_| and |image_view_| should be non-null. - IconizedLabel* label_; - views::ImageView* image_view_; + IconizedLabel* label_ = nullptr; + views::ImageView* image_view_ = nullptr; // Measure animation smoothness metrics for `animation_`. absl::optional<ui::ThroughputTracker> throughput_tracker_;
diff --git a/ash/webui/camera_app_ui/camera_app_ui.cc b/ash/webui/camera_app_ui/camera_app_ui.cc index 2f836ef..a81a31c 100644 --- a/ash/webui/camera_app_ui/camera_app_ui.cc +++ b/ash/webui/camera_app_ui/camera_app_ui.cc
@@ -18,7 +18,7 @@ #include "components/arc/intent_helper/arc_intent_helper_bridge.h" #include "components/content_settings/core/common/content_settings_types.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/media_device_id.h" #include "content/public/browser/video_capture_service.h"
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_fa.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_fa.xtb index f23e75a..fc2e942 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_fa.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_fa.xtb
@@ -31,7 +31,7 @@ <translation id="2064538373111010176"><ph name="CAMERA" /> فعال شد</translation> <translation id="2128052519899549250">ضبط ویدیو زمانگریز</translation> <translation id="2134029355740465625">تنظیمات فیلم</translation> -<translation id="2144806332417375165">پارامترهای ویدیوی سفارشی</translation> +<translation id="2144806332417375165">پارامترهای ویدیو سفارشی</translation> <translation id="2175927920773552910">رمزینه پاسخسریع</translation> <translation id="2244252133441425811">فعال کردن انتخابگر FPS ویدیو</translation> <translation id="2271433936731426666">فعال کردن عکس آنی از ویدیو با اندازه کامل</translation> @@ -81,7 +81,7 @@ <translation id="4705093842003735294">وضوح کامل</translation> <translation id="4864143361253542638">فهرست صفحه اسکنشده</translation> <translation id="4890010094662541459">۳ × ۳</translation> -<translation id="491895758387112773">ضبط ویدیوی چندجریانی</translation> +<translation id="491895758387112773">ضبط ویدیو چندجریانی</translation> <translation id="495170559598752135">کنشها</translation> <translation id="4984613436295737187">Quad HD (۱۴۴۰ پیکسل)</translation> <translation id="5034763830503483128">نسبت ابعادی عکس</translation> @@ -129,7 +129,7 @@ <translation id="7243947652761655814">وضوح ویدیو</translation> <translation id="7337660886763914220">خطاهایی در سیستم فایل روی داده است.</translation> <translation id="7450541714075000668">نوشتار کپی شد</translation> -<translation id="7488619942230388918">ضبط ویدیوی GIF</translation> +<translation id="7488619942230388918">ضبط ویدیو GIF</translation> <translation id="7557677699350329807">جابهجایی به دوربین بعدی</translation> <translation id="7607002721634913082">متوقف</translation> <translation id="7608223098072244877">۴ در ۴</translation> @@ -139,7 +139,7 @@ <translation id="7670511624014457267">60 FPS</translation> <translation id="7671804233658741790">گوشه پایین سمت راست سند</translation> <translation id="7692090236657809299">فعال کردن «حرکت دادن، کج کردن، بزرگنمایی»</translation> -<translation id="7726641833034062494">ضبط ویدیوی معمولی</translation> +<translation id="7726641833034062494">ضبط ویدیو معمولی</translation> <translation id="7748344063862150053">گوشه بالا سمت راست سند</translation> <translation id="7933675232020478311">درحال انتقال بهسمت راست پایین</translation> <translation id="7983668134180549431">نوشتار شناسایی شد.</translation>
diff --git a/ash/webui/shortcut_customization_ui/resources/BUILD.gn b/ash/webui/shortcut_customization_ui/resources/BUILD.gn index d676a67f..752aae3 100644 --- a/ash/webui/shortcut_customization_ui/resources/BUILD.gn +++ b/ash/webui/shortcut_customization_ui/resources/BUILD.gn
@@ -203,6 +203,7 @@ deps = [ "//ash/webui/common/resources:build_ts", "//third_party/polymer/v3_0:library", + "//ui/webui/resources/cr_components/color_change_listener:build_ts", "//ui/webui/resources/cr_elements:build_ts", "//ui/webui/resources/js:build_ts", "//ui/webui/resources/mojo:build_ts",
diff --git a/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts b/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts index b1e565d2..aefe00c 100644 --- a/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts +++ b/ash/webui/shortcut_customization_ui/resources/js/shortcut_customization_app.ts
@@ -13,7 +13,9 @@ import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js'; import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js'; +import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; import {NavigationViewPanelElement} from 'chrome://resources/ash/common/navigation_view_panel.js'; +import {startColorChangeUpdater} from 'chrome://resources/cr_components/color_change_listener/colors_css_updater.js'; import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js'; import {PolymerElementProperties} from 'chrome://resources/polymer/v3_0/polymer/interfaces.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -106,6 +108,14 @@ override connectedCallback(): void { super.connectedCallback(); + if (loadTimeData.getBoolean('isJellyEnabledForShortcutCustomization')) { + // Use dynamic color CSS and start listening to `ColorProvider` updates. + // TODO(b/276493795): After the Jelly experiment is launched, replace + // `cros_styles.css` with `theme/colors.css` directly in `index.html`. + document.querySelector('link[href*=\'cros_styles.css\']') + ?.setAttribute('href', 'chrome://theme/colors.css?sets=legacy,sys'); + startColorChangeUpdater(); + } this.fetchAccelerators(); this.addEventListener('show-edit-dialog', this.showDialog);
diff --git a/ash/webui/shortcut_customization_ui/shortcut_customization_app_ui.cc b/ash/webui/shortcut_customization_ui/shortcut_customization_app_ui.cc index 0395596f..bac24f2 100644 --- a/ash/webui/shortcut_customization_ui/shortcut_customization_app_ui.cc +++ b/ash/webui/shortcut_customization_ui/shortcut_customization_app_ui.cc
@@ -25,6 +25,7 @@ #include "services/network/public/mojom/content_security_policy.mojom.h" #include "ui/base/ui_base_features.h" #include "ui/resources/grit/webui_resources.h" +#include "ui/webui/color_change_listener/color_change_handler.h" #include "ui/webui/mojo_web_ui_controller.h" namespace ash { @@ -181,6 +182,9 @@ ::features::IsShortcutCustomizationEnabled()); html_source->AddBoolean("isSearchEnabled", features::IsSearchInShortcutsAppEnabled()); + html_source->AddBoolean( + "isJellyEnabledForShortcutCustomization", + ash::features::IsJellyEnabledForShortcutCustomization()); } } // namespace @@ -236,5 +240,14 @@ search_handler->BindInterface(std::move(receiver)); } +void ShortcutCustomizationAppUI::BindInterface( + mojo::PendingReceiver<color_change_listener::mojom::PageHandler> receiver) { + // BindInterface should not be called unless jelly-colors and + // scanning-app-jelly flags are enabled. + CHECK(features::IsJellyEnabledForShortcutCustomization()); + color_provider_handler_ = std::make_unique<ui::ColorChangeHandler>( + web_ui()->GetWebContents(), std::move(receiver)); +} + WEB_UI_CONTROLLER_TYPE_IMPL(ShortcutCustomizationAppUI) } // namespace ash
diff --git a/ash/webui/shortcut_customization_ui/shortcut_customization_app_ui.h b/ash/webui/shortcut_customization_ui/shortcut_customization_app_ui.h index d57d943..c7b90de 100644 --- a/ash/webui/shortcut_customization_ui/shortcut_customization_app_ui.h +++ b/ash/webui/shortcut_customization_ui/shortcut_customization_app_ui.h
@@ -5,6 +5,8 @@ #ifndef ASH_WEBUI_SHORTCUT_CUSTOMIZATION_UI_SHORTCUT_CUSTOMIZATION_APP_UI_H_ #define ASH_WEBUI_SHORTCUT_CUSTOMIZATION_UI_SHORTCUT_CUSTOMIZATION_APP_UI_H_ +#include <memory> + #include "ash/webui/shortcut_customization_ui/backend/search/search.mojom.h" #include "ash/webui/shortcut_customization_ui/backend/search/search_handler.h" #include "ash/webui/shortcut_customization_ui/mojom/shortcut_customization.mojom.h" @@ -12,11 +14,16 @@ #include "ash/webui/system_apps/public/system_web_app_ui_config.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" +#include "ui/webui/resources/cr_components/color_change_listener/color_change_listener.mojom.h" namespace content { class WebUI; } // namespace content +namespace ui { +class ColorChangeHandler; +} // namespace ui + namespace ash { class ShortcutCustomizationAppUI; @@ -47,7 +54,15 @@ mojo::PendingReceiver<shortcut_customization::mojom::SearchHandler> receiver); + void BindInterface( + mojo::PendingReceiver<color_change_listener::mojom::PageHandler> + receiver); + private: + // The color change handler notifies the WebUI when the color provider + // changes. + std::unique_ptr<ui::ColorChangeHandler> color_provider_handler_; + WEB_UI_CONTROLLER_TYPE_DECL(); };
diff --git a/ash/wm/workspace/phantom_window_controller.cc b/ash/wm/workspace/phantom_window_controller.cc index 6bb22e4..6c1da72 100644 --- a/ash/wm/workspace/phantom_window_controller.cc +++ b/ash/wm/workspace/phantom_window_controller.cc
@@ -59,7 +59,7 @@ constexpr int kMaximizeCueHorizontalInsets = 16; constexpr int kMaximizeCueVerticalInsets = 8; -constexpr int kPhantomWindowCornerRadius = 4; +constexpr int kPhantomWindowCornerRadius = 12; constexpr gfx::Insets kPhantomWindowInsets(8); // The move up factor of starting y-position from the target position for @@ -208,7 +208,8 @@ phantom_widget->SetContentsView( views::Builder<views::View>() .SetBackground(views::CreateThemedRoundedRectBackground( - kColorAshShieldAndBase20, kPhantomWindowCornerRadius)) + kColorAshPhantomWindowBackgroundColor, + kPhantomWindowCornerRadius)) .SetBorder(std::make_unique<views::HighlightBorder>( kPhantomWindowCornerRadius, chromeos::features::IsJellyrollEnabled()
diff --git a/base/BUILD.gn b/base/BUILD.gn index 37c1c1c..c41f25e 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -784,7 +784,6 @@ "task/task_runner.h", "task/task_traits.cc", "task/task_traits.h", - "task/task_traits_extension.h", "task/thread_pool.cc", "task/thread_pool.h", "task/thread_pool/delayed_priority_queue.cc", @@ -3033,15 +3032,6 @@ } } -source_set("base_unittests_tasktraits") { - testonly = true - sources = [ - "task/test_task_traits_extension.cc", - "task/test_task_traits_extension.h", - ] - deps = [ ":base" ] -} - source_set("arm_bti_testfunctions") { testonly = true @@ -3319,7 +3309,6 @@ "task/single_thread_task_executor_unittest.cc", "task/single_thread_task_runner_unittest.cc", "task/task_runner_unittest.cc", - "task/task_traits_extension_unittest.cc", "task/task_traits_unittest.cc", "task/thread_pool/can_run_policy_test.h", "task/thread_pool/delayed_priority_queue_unittest.cc", @@ -3443,7 +3432,6 @@ ":arm_bti_testfunctions", ":base", ":base_stack_sampling_profiler_test_util", - ":base_unittests_tasktraits", ":feature_list_buildflags", ":i18n", ":sanitizer_buildflags", @@ -4072,7 +4060,6 @@ "sequence_checker_unittest.nc", "strings/string_piece_unittest.nc", "task/bind_post_task_unittest.nc", - "task/task_traits_extension_unittest.nc", "task/task_traits_unittest.nc", "thread_annotations_unittest.nc", "traits_bag_unittest.nc", @@ -4083,7 +4070,6 @@ deps = [ ":base", - ":base_unittests_tasktraits", "//base/test:run_all_unittests", "//testing/gtest", ]
diff --git a/base/allocator/partition_allocator/page_allocator_internals_posix.h b/base/allocator/partition_allocator/page_allocator_internals_posix.h index 156bc75..c7ab6de0 100644 --- a/base/allocator/partition_allocator/page_allocator_internals_posix.h +++ b/base/allocator/partition_allocator/page_allocator_internals_posix.h
@@ -35,7 +35,7 @@ #include <Security/Security.h> #include <mach/mach.h> #endif -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_ANDROID) #include <sys/prctl.h> #endif #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) @@ -62,7 +62,7 @@ namespace { -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_ANDROID) const char* PageTagToName(PageTag tag) { // Important: All the names should be string literals. As per prctl.h in // //third_party/android_ndk the kernel keeps a pointer to the name instead @@ -195,9 +195,9 @@ ret = nullptr; } -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) - // On Android and Linux, anonymous mappings can have a name attached to them. - // This is useful for debugging, and double-checking memory attribution. +#if BUILDFLAG(IS_ANDROID) + // On Android, anonymous mappings can have a name attached to them. This is + // useful for debugging, and double-checking memory attribution. if (ret) { // No error checking on purpose, testing only. prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, ret, length,
diff --git a/base/android/task_scheduler/task_runner_android.h b/base/android/task_scheduler/task_runner_android.h index 11307000..7d3fc13ee 100644 --- a/base/android/task_scheduler/task_runner_android.h +++ b/base/android/task_scheduler/task_runner_android.h
@@ -12,7 +12,6 @@ #include "base/base_export.h" #include "base/functional/callback_forward.h" #include "base/task/single_thread_task_runner.h" -#include "base/task/task_traits_extension.h" namespace base {
diff --git a/base/debug/alias.h b/base/debug/alias.h index 81760716..8195bfa 100644 --- a/base/debug/alias.h +++ b/base/debug/alias.h
@@ -92,9 +92,9 @@ ::base::strlcpy(var_name, (c_str), sizeof(var_name)); \ ::base::debug::Alias(var_name) -#define DEBUG_ALIAS_FOR_U16CSTR(var_name, c_str, char_count) \ - char16_t var_name[char_count]; \ - ::base::u16cstrlcpy(var_name, (c_str), sizeof(var_name)); \ +#define DEBUG_ALIAS_FOR_U16CSTR(var_name, c_str, char_count) \ + char16_t var_name[char_count]; \ + ::base::u16cstrlcpy(var_name, (c_str), std::size(var_name)); \ ::base::debug::Alias(var_name) // Code folding is a linker optimization whereby the linker identifies functions
diff --git a/base/debug/alias_unittest.cc b/base/debug/alias_unittest.cc index 9acb6b51..6aa7421 100644 --- a/base/debug/alias_unittest.cc +++ b/base/debug/alias_unittest.cc
@@ -37,3 +37,11 @@ EXPECT_TRUE( std::equal(std::begin(kTestString), std::end(kTestString), aliased_copy)); } + +TEST(DebugAlias, U16StringPartialCopy) { + std::u16string input = u"Hello world!"; + DEBUG_ALIAS_FOR_U16CSTR(aliased_copy, input.c_str(), 5); + // Make sure we don't write past the specified number of characters. We + // subtract 1 to account for the null terminator. + EXPECT_EQ(input.substr(0, 4), aliased_copy); +}
diff --git a/base/task/post_job.cc b/base/task/post_job.cc index 178cb4c..758de9b 100644 --- a/base/task/post_job.cc +++ b/base/task/post_job.cc
@@ -22,10 +22,6 @@ DCHECK(ThreadPoolInstance::Get()) << "Hint: if this is in a unit test, you're likely merely missing a " "base::test::TaskEnvironment member in your fixture.\n"; - // ThreadPool is implicitly the destination for PostJob(). Extension traits - // cannot be used. - DCHECK_EQ(traits.extension_id(), - TaskTraitsExtensionStorage::kInvalidExtensionId); return base::MakeRefCounted<internal::JobTaskSource>( from_here, traits, std::move(worker_task),
diff --git a/base/task/post_job_unittest.cc b/base/task/post_job_unittest.cc index d2298528..143b1f6 100644 --- a/base/task/post_job_unittest.cc +++ b/base/task/post_job_unittest.cc
@@ -9,7 +9,6 @@ #include <numeric> #include "base/barrier_closure.h" -#include "base/task/test_task_traits_extension.h" #include "base/test/bind.h" #include "base/test/gtest_util.h" #include "base/test/task_environment.h" @@ -61,16 +60,6 @@ EXPECT_EQ(num_tasks_to_run, 0U); } -TEST(PostJobTest, PostJobExtension) { - testing::FLAGS_gtest_death_test_style = "threadsafe"; - EXPECT_DCHECK_DEATH({ - auto handle = PostJob( - FROM_HERE, TestExtensionBoolTrait(), - BindRepeating([](JobDelegate* delegate) {}), - BindRepeating([](size_t /*worker_count*/) -> size_t { return 0; })); - }); -} - // Verify that concurrent accesses with task_id as the only form of // synchronisation doesn't trigger a race. TEST(PostJobTest, TaskIds) {
diff --git a/base/task/sequence_manager/sequence_manager_impl.cc b/base/task/sequence_manager/sequence_manager_impl.cc index 9009b2c6..e688f876 100644 --- a/base/task/sequence_manager/sequence_manager_impl.cc +++ b/base/task/sequence_manager/sequence_manager_impl.cc
@@ -655,9 +655,11 @@ *main_thread_only().task_execution_stack.rbegin(); NotifyWillProcessTask(&executing_task, &lazy_now); - // Maybe invalidate the delayed task handle. |pending_task| is guaranteed to - // be valid here (not canceled). - executing_task.pending_task.WillRunTask(); + // Maybe invalidate the delayed task handle. If already invalidated, then + // don't run this task. + if (!executing_task.pending_task.WillRunTask()) { + executing_task.pending_task.task = DoNothing(); + } return SelectedTask( executing_task.pending_task,
diff --git a/base/task/sequence_manager/sequence_manager_impl_unittest.cc b/base/task/sequence_manager/sequence_manager_impl_unittest.cc index 2cddd4f..f37789f6 100644 --- a/base/task/sequence_manager/sequence_manager_impl_unittest.cc +++ b/base/task/sequence_manager/sequence_manager_impl_unittest.cc
@@ -1969,6 +1969,45 @@ RunLoop().RunUntilIdle(); } +TEST_P(SequenceManagerTest, CancelHandleInsideTaskObserver) { + class CancelingTaskObserver : public TaskObserver { + public: + DelayedTaskHandle handle; + bool will_run_task_called = false; + bool did_process_task_called = false; + explicit CancelingTaskObserver(DelayedTaskHandle handle_in) + : handle(std::move(handle_in)) { + EXPECT_TRUE(handle.IsValid()); + } + + ~CancelingTaskObserver() override { + EXPECT_FALSE(handle.IsValid()); + EXPECT_TRUE(will_run_task_called); + EXPECT_TRUE(did_process_task_called); + } + + void DidProcessTask(const PendingTask& task) override { + did_process_task_called = true; + } + void WillProcessTask(const PendingTask& task, + bool was_blocked_or_low_priority) override { + handle.CancelTask(); + will_run_task_called = true; + } + }; + + auto queue = CreateTaskQueue(); + + auto handle = queue->task_runner()->PostCancelableDelayedTask( + subtle::PostDelayedTaskPassKeyForTesting(), FROM_HERE, + BindLambdaForTesting([]() { FAIL(); }), base::TimeDelta()); + + CancelingTaskObserver observer(std::move(handle)); + queue->AddTaskObserver(&observer); + + RunLoop().RunUntilIdle(); +} + TEST_P(SequenceManagerTest, ThreadCheckAfterTermination) { auto queue = CreateTaskQueue(); EXPECT_TRUE(queue->task_runner()->RunsTasksInCurrentSequence());
diff --git a/base/task/sequence_manager/tasks.cc b/base/task/sequence_manager/tasks.cc index 3563836..79fdb2f 100644 --- a/base/task/sequence_manager/tasks.cc +++ b/base/task/sequence_manager/tasks.cc
@@ -86,11 +86,14 @@ return delayed_task_handle_delegate_.WasInvalidated(); } -void Task::WillRunTask() { - if (!delayed_task_handle_delegate_) - return; - - delayed_task_handle_delegate_->WillRunTask(); +bool Task::WillRunTask() { + if (delayed_task_handle_delegate_.WasInvalidated()) { + return false; + } + if (delayed_task_handle_delegate_) { + delayed_task_handle_delegate_->WillRunTask(); + } + return true; } TimeTicks WakeUp::earliest_time() const {
diff --git a/base/task/sequence_manager/tasks.h b/base/task/sequence_manager/tasks.h index eb17ab5..9a6208f 100644 --- a/base/task/sequence_manager/tasks.h +++ b/base/task/sequence_manager/tasks.h
@@ -151,9 +151,11 @@ // invalidation or through |delayed_task_handle_delegate_|. bool IsCanceled() const; - // Indicates that this task will be executed. Used to invalidate - // |delayed_task_handle_delegate_|, if any, just before task execution. - void WillRunTask(); + // Must be invoked before running the task. Returns true if the task must run + // (any delayed task handle will have been invalidated by this method), false + // if it mustn't run (e.g. delayed task handle was invalidated prior to + // calling this method). + bool WillRunTask(); private: // `enqueue_order_` is the primary component used to order tasks (see
diff --git a/base/task/task_traits.h b/base/task/task_traits.h index b17a2e7..e7dfaa1 100644 --- a/base/task/task_traits.h +++ b/base/task/task_traits.h
@@ -15,7 +15,6 @@ #include "base/base_export.h" #include "base/check.h" #include "base/check_op.h" -#include "base/task/task_traits_extension.h" #include "base/traits_bag.h" #include "build/build_config.h" @@ -145,8 +144,8 @@ // - The TaskPriority is BEST_EFFORT. // - Background thread priority is supported by the platform (see // environment_config_unittest.cc). - // - No extension trait (e.g. BrowserThread) is used. - // - ThreadPoolInstance::Shutdown() hadn't been called when the task started running. + // - ThreadPoolInstance::Shutdown() hadn't been called when the task started + // running. // (Remaining TaskShutdownBehavior::BLOCK_SHUTDOWN tasks use foreground // threads during shutdown regardless of TaskPriority) // Otherwise, it runs on a normal priority thread. @@ -234,13 +233,11 @@ // }; template <class... ArgTypes, class CheckArgumentsAreValid = std::enable_if_t< - trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value || - trait_helpers::AreValidTraitsForExtension<ArgTypes...>::value>> + trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> + // TaskTraits are intended to be implicitly-constructable (eg {}). + // NOLINTNEXTLINE(google-explicit-constructor) constexpr TaskTraits(ArgTypes... args) - : extension_(trait_helpers::GetTaskTraitsExtension( - trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>{}, - args...)), - priority_( + : priority_( trait_helpers::GetEnum<TaskPriority, TaskPriority::USER_BLOCKING>( args...)), shutdown_behavior_( @@ -268,9 +265,9 @@ // TODO(eseckler): Default the comparison operator once C++20 arrives. bool operator==(const TaskTraits& other) const { - static_assert(sizeof(TaskTraits) == 14, + static_assert(sizeof(TaskTraits) == 5, "Update comparison operator when TaskTraits change"); - return extension_ == other.extension_ && priority_ == other.priority_ && + return priority_ == other.priority_ && shutdown_behavior_ == other.shutdown_behavior_ && thread_policy_ == other.thread_policy_ && may_block_ == other.may_block_ && @@ -312,23 +309,12 @@ return with_base_sync_primitives_; } - uint8_t extension_id() const { return extension_.extension_id; } - - // Access the extension data by parsing it into the provided extension type. - // See task_traits_extension.h for requirements on the extension type. - template <class TaskTraitsExtension> - const TaskTraitsExtension GetExtension() const { - DCHECK_EQ(TaskTraitsExtension::kExtensionId, extension_.extension_id); - return TaskTraitsExtension::Parse(extension_); - } - private: // This bit is set in |priority_|, |shutdown_behavior_| and |thread_policy_| // when the value was set explicitly. static constexpr uint8_t kIsExplicitFlag = 0x80; // Ordered for packing. - TaskTraitsExtensionStorage extension_; TaskPriority priority_; uint8_t shutdown_behavior_; uint8_t thread_policy_;
diff --git a/base/task/task_traits_extension.h b/base/task/task_traits_extension.h deleted file mode 100644 index e15af30..0000000 --- a/base/task/task_traits_extension.h +++ /dev/null
@@ -1,235 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BASE_TASK_TASK_TRAITS_EXTENSION_H_ -#define BASE_TASK_TASK_TRAITS_EXTENSION_H_ - -#include <stdint.h> - -#include <array> -#include <tuple> -#include <utility> - -#include "base/base_export.h" -#include "base/traits_bag.h" - -namespace base { - -// Embedders can attach additional traits to a TaskTraits object in a way that -// is opaque to base. These extension traits can then be specified along the -// base traits when constructing the TaskTraits object. They are then stored and -// propagated with the TaskTraits object. -// -// To support constexpr-compatible construction, extension traits are stored in -// a fixed-size byte array in the TaskTraits object and serialized into and -// parsed from this storage by an embedder-provided extension class and -// MakeTaskTraitsExtension() template function. The embedder can later access -// the extension traits via TaskTraits::GetExtension<[ExtensionClass]>(). -// -// A TaskTraits extension class needs to specify publicly: -// (1) -- static constexpr uint8_t kExtensionId. -// This field's value identifies the type of the extension uniquely within -// each process. The embedder is responsible for ensuring uniqueness and -// can assign values between kFirstEmbedderExtensionId and kMaxExtensionId -// of TaskTraitsExtensionStorage::ExtensionId. -// (2) -- static const [ExtensionClass] Parse( -// -- const base::TaskTraitsExtensionStorage& extension). -// Parses and constructs an extension object from the provided storage. -// -// For each TaskTraits extension class, the embedder has to provide a -// corresponding MakeTaskTraitsExtension definition inside the same namespace -// as its extension traits: -// (3) -- template <...> -// -- constexpr base::TaskTraitsExtensionStorage MakeTaskTraitsExtension( -// -- ArgTypes... args). -// Constructs and serializes an extension with the given arguments into -// a TaskTraitsExtensionStorage and returns it. When the extension is used, -// all traits, including the base ones, are passed to this function in -// order make sure TaskTraits constructor only participates in overload -// resolution if all traits are valid. As such, this function should only -// accept valid task traits recognised by the extension and the base task -// traits. -// -// EXAMPLE (see also base/task/test_task_traits_extension.h): -// -------- -// -// namespace my_embedder { -// enum class MyExtensionTrait {kMyValue1, kMyValue2}; -// -// class MyTaskTraitsExtension { -// public: -// static constexpr uint8_t kExtensionId = -// TaskTraitsExtensionStorage::kFirstEmbedderExtensionId; -// -// struct ValidTrait : public TaskTraits::ValidTrait { -// // Accept base traits in MakeTaskTraitsExtension (see above). -// using TaskTraits::ValidTrait::ValidTrait; -// -// ValidTrait(MyExtensionTrait); -// }; -// -// using MyExtensionTraitFilter = -// trait_helpers::EnumTraitFilter<MyExtensionTrait, MyExtensionTrait::kA>; -// -// // Constructor that accepts only valid traits as specified by ValidTraits. -// template <class... ArgTypes, -// class CheckArgumentsAreValid = std::enable_if_t< -// base::trait_helpers::AreValidTraits< -// ValidTrait, ArgTypes...>::value>> -// constexpr MyTaskTraitsExtension(ArgTypes... args) -// : my_trait_(trait_helpers::GetTraitFromArgList<MyExtensionTraitFilter>( -// args...)) {} -// -// // Serializes MyTaskTraitsExtension into a storage object and returns it. -// constexpr base::TaskTraitsExtensionStorage Serialize() const { -// // Note: can't use reinterpret_cast or placement new because neither are -// // constexpr-compatible. -// return {kExtensionId, {{static_cast<uint8_t>(my_trait_)}}}; -// } -// -// // Creates a MyTaskTraitsExtension by parsing it from a storage object. -// static const MyTaskTraitsExtension Parse( -// const base::TaskTraitsExtensionStorage& extension) { -// return MyTaskTraitsExtension( -// static_cast<MyExtensionTrait>(extension.data[0])); -// } -// -// constexpr MyExtensionTrait my_trait() const { return my_trait_; } -// -// private: -// MyExtensionTrait my_trait_; -// }; -// -// // Creates a MyTaskTraitsExtension for the provided |args| and serializes it -// // into |extension|. Accepts only valid arguments for the -// // MyTaskTraitsExtension() constructor. -// template <class... ArgTypes, -// class = std::enable_if_t< -// base::trait_helpers::AreValidTraits< -// MyTaskTraitsExtension::ValidTrait, ArgTypes...>::value>> -// constexpr base::TaskTraitsExtensionStorage MakeTaskTraitsExtension( -// ArgTypes... args) { -// return MyTaskTraitsExtension(args...).Serialize(); -// } -// } // namespace my_embedder -// -// // Construction of TaskTraits with extension traits. -// constexpr TaskTraits t1 = {my_embedder::MyExtensionTrait::kValueB}; -// constexpr TaskTraits t2 = {base::MayBlock(), -// my_embedder::MyExtensionTrait::kValueA}; -// -// // Extension traits can also be specified directly when posting a task. -// base::PostTask(FROM_HERE, -// {my_embedder::MyExtensionTrait::kValueB}, -// base::BindOnce(...)); - -// Stores extension traits opaquely inside a fixed-size data array. We store -// this data directly (rather than in a separate object on the heap) to support -// constexpr-compatible TaskTraits construction. -struct BASE_EXPORT TaskTraitsExtensionStorage { - // Size in bytes. - // Keep in sync with org.chromium.base.task.TaskTraits.EXTENSION_STORAGE_SIZE - static constexpr size_t kStorageSize = 8; - - inline constexpr TaskTraitsExtensionStorage(); - inline constexpr TaskTraitsExtensionStorage( - uint8_t extension_id_in, - const std::array<uint8_t, kStorageSize>& data_in); - inline constexpr TaskTraitsExtensionStorage( - uint8_t extension_id_in, - std::array<uint8_t, kStorageSize>&& data_in); - - inline constexpr TaskTraitsExtensionStorage( - const TaskTraitsExtensionStorage& other); - inline TaskTraitsExtensionStorage& operator=( - const TaskTraitsExtensionStorage& other) = default; - - inline bool operator==(const TaskTraitsExtensionStorage& other) const; - - enum ExtensionId : uint8_t { - // Keep in sync with org.chromium.base.task.TaskTraits.INVALID_EXTENSION_ID - kInvalidExtensionId = 0, - // The embedder is responsible for assigning the remaining values uniquely. - kFirstEmbedderExtensionId = 1, - // Maximum number of extension types is artificially limited to support - // super efficient TaskExecutor lookup in post_task.cc. - // Keep in sync with org.chromium.base.TaskTraits.MAX_EXTENSION_ID - kMaxExtensionId = 4 - }; - - // Identifies the type of extension. See ExtensionId enum above. - uint8_t extension_id; - - // Serialized extension data. - std::array<uint8_t, kStorageSize> data; -}; - -// TODO(https://crbug.com/874482): These constructors need to be "inline" but -// defined outside the class above, because the chromium-style clang plugin -// doesn't exempt constexpr constructors at the moment. -inline constexpr TaskTraitsExtensionStorage::TaskTraitsExtensionStorage() - : extension_id(kInvalidExtensionId), data{} {} - -inline constexpr TaskTraitsExtensionStorage::TaskTraitsExtensionStorage( - uint8_t extension_id_in, - const std::array<uint8_t, kStorageSize>& data_in) - : extension_id(extension_id_in), data(data_in) {} - -inline constexpr TaskTraitsExtensionStorage::TaskTraitsExtensionStorage( - uint8_t extension_id_in, - std::array<uint8_t, kStorageSize>&& data_in) - : extension_id(extension_id_in), data(std::move(data_in)) {} - -inline constexpr TaskTraitsExtensionStorage::TaskTraitsExtensionStorage( - const TaskTraitsExtensionStorage& other) = default; - -namespace trait_helpers { - -// Helper class whose constructor tests if an extension accepts a list of -// argument types. -struct TaskTraitsExtension { - template <class... ArgTypes, - class CheckCanMakeExtension = - decltype(MakeTaskTraitsExtension(std::declval<ArgTypes>()...))> - constexpr TaskTraitsExtension(ArgTypes... args) {} -}; - -// Tests that that a trait extension accepts all |ArgsTypes...|. -template <class... ArgTypes> -using AreValidTraitsForExtension = - std::is_constructible<TaskTraitsExtension, ArgTypes...>; - -// Helper function that returns the TaskTraitsExtensionStorage of a -// serialized extension created with |args...| if there are arguments that are -// not valid base traits, or a default constructed TaskTraitsExtensionStorage -// otherwise. -template <class... ArgTypes> -constexpr TaskTraitsExtensionStorage GetTaskTraitsExtension( - std::true_type base_traits, - ArgTypes... args) { - return TaskTraitsExtensionStorage(); -} - -template <class... ArgTypes> -constexpr TaskTraitsExtensionStorage GetTaskTraitsExtension( - std::false_type base_traits, - ArgTypes... args) { - return MakeTaskTraitsExtension(args...); -} - -} // namespace trait_helpers - -// TODO(eseckler): Default the comparison operator once C++20 arrives. -inline bool TaskTraitsExtensionStorage::operator==( - const TaskTraitsExtensionStorage& other) const { - static_assert( - 9 == sizeof(TaskTraitsExtensionStorage), - "Update comparison operator when TaskTraitsExtensionStorage changes"); - return extension_id == other.extension_id && data == other.data; -} - - -} // namespace base - -#endif // BASE_TASK_TASK_TRAITS_EXTENSION_H_
diff --git a/base/task/task_traits_extension_unittest.cc b/base/task/task_traits_extension_unittest.cc deleted file mode 100644 index f455154..0000000 --- a/base/task/task_traits_extension_unittest.cc +++ /dev/null
@@ -1,47 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/task/task_traits.h" - -#include "base/task/test_task_traits_extension.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace base { - -TEST(TaskTraitsExtensionTest, NoExtension) { - constexpr TaskTraits traits = {}; - - EXPECT_EQ(traits.extension_id(), - TaskTraitsExtensionStorage::kInvalidExtensionId); -} - -TEST(TaskTraitsExtensionTest, CreateWithOneExtensionTrait) { - constexpr TaskTraits traits = {TestExtensionEnumTrait::kB}; - - EXPECT_EQ(traits.GetExtension<TestTaskTraitsExtension>().enum_trait(), - TestExtensionEnumTrait::kB); - EXPECT_FALSE(traits.GetExtension<TestTaskTraitsExtension>().bool_trait()); -} - -TEST(TaskTraitsExtensionTest, CreateWithMultipleExtensionTraits) { - constexpr TaskTraits traits = {TestExtensionEnumTrait::kB, - TestExtensionBoolTrait()}; - - EXPECT_EQ(traits.GetExtension<TestTaskTraitsExtension>().enum_trait(), - TestExtensionEnumTrait::kB); - EXPECT_TRUE(traits.GetExtension<TestTaskTraitsExtension>().bool_trait()); -} - -TEST(TaskTraitsExtensionTest, CreateWithBaseAndExtensionTraits) { - constexpr TaskTraits traits = {TaskPriority::USER_BLOCKING, - TestExtensionEnumTrait::kC, - TestExtensionBoolTrait()}; - - EXPECT_EQ(traits.priority(), TaskPriority::USER_BLOCKING); - EXPECT_EQ(traits.GetExtension<TestTaskTraitsExtension>().enum_trait(), - TestExtensionEnumTrait::kC); - EXPECT_TRUE(traits.GetExtension<TestTaskTraitsExtension>().bool_trait()); -} - -} // namespace base
diff --git a/base/task/task_traits_extension_unittest.nc b/base/task/task_traits_extension_unittest.nc deleted file mode 100644 index d88578c..0000000 --- a/base/task/task_traits_extension_unittest.nc +++ /dev/null
@@ -1,28 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This is a "No Compile Test" suite. -// http://dev.chromium.org/developers/testing/no-compile-tests - -#include "base/task/task_traits.h" - -#include "base/task/test_task_traits_extension.h" - -namespace base { - -#if defined(NCTEST_TASK_TRAITS_EXTENSION_MULTIPLE_BASE_TRAITS) // [r"The traits bag contains multiple traits of the same type."] -constexpr TaskTraits traits = {MayBlock(), MayBlock()}; -#elif defined(NCTEST_TASK_TRAITS_EXTENSION_MULTIPLE_EXTENSION_TRAITS) // [r"The traits bag contains multiple traits of the same type."] -constexpr TaskTraits traits = {TestExtensionEnumTrait::kB, TestExtensionEnumTrait::kC}; -#elif defined(NCTEST_TASK_TRAITS_EXTENSION_INVALID_TYPE) // [r"no matching constructor for initialization of 'const TaskTraits'"] -constexpr TaskTraits traits = {TestExtensionEnumTrait::kB, 123}; -#elif defined(NCTEST_TASK_TRAITS_EXTENSION_TOO_MUCH_DATA_FOR_STORAGE) // [r"no matching constructor for initialization of 'TaskTraitsExtensionStorage'"] -constexpr TaskTraitsExtensionStorage TestSerializeTaskTraitsWithTooMuchData() { - constexpr std::array<uint8_t, TaskTraitsExtensionStorage::kStorageSize + 1> - data = {}; - return {TaskTraitsExtensionStorage::kFirstEmbedderExtensionId, data}; -} -#endif - -} // namespace base
diff --git a/base/task/test_task_traits_extension.cc b/base/task/test_task_traits_extension.cc deleted file mode 100644 index 6e26c27..0000000 --- a/base/task/test_task_traits_extension.cc +++ /dev/null
@@ -1,12 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/task/test_task_traits_extension.h" - -namespace base { - -// static -constexpr uint8_t TestTaskTraitsExtension::kExtensionId; - -} // namespace base
diff --git a/base/task/test_task_traits_extension.h b/base/task/test_task_traits_extension.h deleted file mode 100644 index 76409f13..0000000 --- a/base/task/test_task_traits_extension.h +++ /dev/null
@@ -1,74 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BASE_TASK_TEST_TASK_TRAITS_EXTENSION_H_ -#define BASE_TASK_TEST_TASK_TRAITS_EXTENSION_H_ - -#include <utility> - -#include "base/task/task_traits.h" - -namespace base { - -enum class TestExtensionEnumTrait { kA, kB, kC }; -struct TestExtensionBoolTrait {}; - -// Example TaskTraits extension for use in tests. -class TestTaskTraitsExtension { - public: - static constexpr uint8_t kExtensionId = - TaskTraitsExtensionStorage::kFirstEmbedderExtensionId; - - struct ValidTrait : public TaskTraits::ValidTrait { - using TaskTraits::ValidTrait::ValidTrait; - - ValidTrait(TestExtensionEnumTrait); - ValidTrait(TestExtensionBoolTrait); - }; - - template <class... ArgTypes, - class CheckArgumentsAreValid = std::enable_if_t< - trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> - constexpr TestTaskTraitsExtension(ArgTypes... args) - : enum_trait_( - trait_helpers::GetEnum<TestExtensionEnumTrait, - TestExtensionEnumTrait::kA>(args...)), - bool_trait_( - trait_helpers::HasTrait<TestExtensionBoolTrait, ArgTypes...>()) {} - - constexpr TaskTraitsExtensionStorage Serialize() const { - return {kExtensionId, {{static_cast<uint8_t>(enum_trait_), bool_trait_}}}; - } - - static const TestTaskTraitsExtension Parse( - const TaskTraitsExtensionStorage& extension) { - if (extension.data[1]) { - return TestTaskTraitsExtension( - static_cast<TestExtensionEnumTrait>(extension.data[0]), - TestExtensionBoolTrait()); - } else { - return TestTaskTraitsExtension( - static_cast<TestExtensionEnumTrait>(extension.data[0])); - } - } - - constexpr TestExtensionEnumTrait enum_trait() const { return enum_trait_; } - constexpr bool bool_trait() const { return bool_trait_; } - - private: - TestExtensionEnumTrait enum_trait_; - bool bool_trait_; -}; - -template <class... ArgTypes, - class = std::enable_if_t< - trait_helpers::AreValidTraits<TestTaskTraitsExtension::ValidTrait, - ArgTypes...>::value>> -constexpr TaskTraitsExtensionStorage MakeTaskTraitsExtension(ArgTypes... args) { - return TestTaskTraitsExtension(std::forward<ArgTypes>(args)...).Serialize(); -} - -} // namespace base - -#endif // BASE_TASK_TEST_TASK_TRAITS_EXTENSION_H_
diff --git a/base/task/thread_pool/thread_pool_impl.cc b/base/task/thread_pool/thread_pool_impl.cc index 4eedf8f..65733853 100644 --- a/base/task/thread_pool/thread_pool_impl.cc +++ b/base/task/thread_pool/thread_pool_impl.cc
@@ -65,12 +65,6 @@ // internal edge case. bool g_synchronous_thread_start_for_testing = false; -// Verifies that |traits| do not have properties that are banned in ThreadPool. -void AssertNoExtensionInTraits(const base::TaskTraits& traits) { - DCHECK_EQ(traits.extension_id(), - TaskTraitsExtensionStorage::kInvalidExtensionId); -} - } // namespace ThreadPoolImpl::ThreadPoolImpl(StringPiece histogram_label) @@ -228,7 +222,6 @@ const TaskTraits& traits, OnceClosure task, TimeDelta delay) { - AssertNoExtensionInTraits(traits); // Post |task| as part of a one-off single-task Sequence. return PostTaskWithSequence( Task(from_here, std::move(task), TimeTicks::Now(), delay, @@ -239,13 +232,11 @@ scoped_refptr<TaskRunner> ThreadPoolImpl::CreateTaskRunner( const TaskTraits& traits) { - AssertNoExtensionInTraits(traits); return MakeRefCounted<PooledParallelTaskRunner>(traits, this); } scoped_refptr<SequencedTaskRunner> ThreadPoolImpl::CreateSequencedTaskRunner( const TaskTraits& traits) { - AssertNoExtensionInTraits(traits); return MakeRefCounted<PooledSequencedTaskRunner>(traits, this); } @@ -253,7 +244,6 @@ ThreadPoolImpl::CreateSingleThreadTaskRunner( const TaskTraits& traits, SingleThreadTaskRunnerThreadMode thread_mode) { - AssertNoExtensionInTraits(traits); return single_thread_task_runner_manager_.CreateSingleThreadTaskRunner( traits, thread_mode); } @@ -262,7 +252,6 @@ scoped_refptr<SingleThreadTaskRunner> ThreadPoolImpl::CreateCOMSTATaskRunner( const TaskTraits& traits, SingleThreadTaskRunnerThreadMode thread_mode) { - AssertNoExtensionInTraits(traits); return single_thread_task_runner_manager_.CreateCOMSTATaskRunner(traits, thread_mode); } @@ -270,7 +259,6 @@ scoped_refptr<UpdateableSequencedTaskRunner> ThreadPoolImpl::CreateUpdateableSequencedTaskRunner(const TaskTraits& traits) { - AssertNoExtensionInTraits(traits); return MakeRefCounted<PooledSequencedTaskRunner>(traits, this); }
diff --git a/build/config/android/config.gni b/build/config/android/config.gni index b60b6fb..bd3a75e 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni
@@ -61,6 +61,10 @@ } else { android_static_analysis = "on" } + + # Build incremental targets whenever possible. + # See //build/android/incremental_install/README.md for more details. + incremental_install = false } # Avoid typos when setting android_static_analysis in args.gn. @@ -71,18 +75,6 @@ # Warn against it. assert(!(enable_chrome_android_internal && skip_secondary_abi_for_cq)) - declare_args() { - # Android API level for 32 bits platforms - android32_ndk_api_level = default_min_sdk_version - - # Android API level for 64 bits platforms - if (default_min_sdk_version < 21) { - android64_ndk_api_level = 21 - } else { - android64_ndk_api_level = default_min_sdk_version - } - } - if (enable_chrome_android_internal) { import("//clank/config.gni") } else { @@ -171,6 +163,17 @@ android_ndk_version = default_android_ndk_version android_ndk_major_version = default_android_ndk_major_version + # Android API level for 32 bits platforms + android32_ndk_api_level = default_min_sdk_version + + # Android API level for 64 bits platforms + android64_ndk_api_level = default_min_sdk_version + + if (default_min_sdk_version < 21) { + # Android did not support 64 bit before API 21. + android64_ndk_api_level = 21 + } + android_sdk_root = default_android_sdk_root android_sdk_version = default_android_sdk_version android_sdk_build_tools_version = default_android_sdk_build_tools_version @@ -204,7 +207,7 @@ # Java debug on Android. Having this on enables multidexing, and turning it # off will enable proguard. - is_java_debug = is_debug + is_java_debug = is_debug || incremental_install # Mark APKs as android:debuggable="true". debuggable_apks = !is_official_build @@ -212,10 +215,6 @@ # Set to false to disable the Errorprone compiler. use_errorprone_java_compiler = android_static_analysis != "off" - # Build incremental targets whenever possible. - # See //build/android/incremental_install/README.md for more details. - incremental_install = false - # When true, updates all android_aar_prebuilt() .info files during gn gen. # Refer to android_aar_prebuilt() for more details. update_android_aar_prebuilts = false @@ -285,6 +284,9 @@ !is_java_debug && android_channel != "stable" } + assert(!incremental_install || is_java_debug, + "incremental_install=true && is_java_debug=false is not supported.") + # Host stuff ----------------------------------------------------------------- # Defines the name the Android build gives to the current host CPU
diff --git a/build/config/rust.gni b/build/config/rust.gni index f4b6ac7..6f05841 100644 --- a/build/config/rust.gni +++ b/build/config/rust.gni
@@ -15,6 +15,8 @@ # Whether to allow Rust code to be part of the Chromium *build process*. # This can be used to create Rust test binaries, even if the flag below # is false. + # This only applies to Chromium itself, so the build_with_chromium check + # should not be removed. # TODO(crbug.com/1386212): Mac # TODO(crbug.com/1271215): Windows # TODO(crbug.com/1426472): use_clang_coverage @@ -25,7 +27,7 @@ # slowly and carefully and there may be no actual bugs there. enable_rust = is_linux && !is_official_build && !using_sanitizer && target_cpu != "x86" && !use_clang_coverage && is_clang && - target_os == host_os + target_os == host_os && build_with_chromium # As we incrementally enable Rust on mainstream builders, we want to enable # the toolchain (by switching 'enable_rust' to true) while still disabling
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1 index 851a6fd..f3131f6 100644 --- a/build/fuchsia/linux_internal.sdk.sha1 +++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@ -12.20230406.0.1 +12.20230406.1.1
diff --git a/cc/metrics/compositor_frame_reporter.cc b/cc/metrics/compositor_frame_reporter.cc index dce0d9a..2780c4b 100644 --- a/cc/metrics/compositor_frame_reporter.cc +++ b/cc/metrics/compositor_frame_reporter.cc
@@ -1397,21 +1397,6 @@ global_trackers_.predictor_jank_tracker->ReportLatestScrollDelta( total_predicted_delta, end_timestamp, args_.interval); } - - // Counting number of inputs per frame for flings and normal input has - // to be separate as the rate of input generation is different for each - // of them, normal input is screen generated, and flings are GPU vsync - // generated. - if (fling_input_count > 0) { - UMA_HISTOGRAM_COUNTS( - "Event.InputEventCoalescing.ScrollUpdate.FlingUpdatesPerFrame", - fling_input_count); - } - if (normal_input_count > 0) { - UMA_HISTOGRAM_COUNTS( - "Event.InputEventCoalescing.ScrollUpdate.GestureUpdatesPerFrame", - normal_input_count); - } } void CompositorFrameReporter::ReportEventLatencyTraceEvents() const {
diff --git a/cc/paint/oop_pixeltest.cc b/cc/paint/oop_pixeltest.cc index 31876b3..c6104c1 100644 --- a/cc/paint/oop_pixeltest.cc +++ b/cc/paint/oop_pixeltest.cc
@@ -275,7 +275,7 @@ const SkBitmap& bitmap) { ri->WritePixels(mailbox, /*dst_x_offset=*/0, /*dst_y_offset=*/0, /*dst_plane_index=*/0, /*texture_target=*/0, - info.minRowBytes(), info, bitmap.getPixels()); + SkPixmap(info, bitmap.getPixels(), info.minRowBytes())); ri->OrderingBarrierCHROMIUM(); EXPECT_EQ(ri->GetError(), static_cast<unsigned>(GL_NO_ERROR)); } @@ -2197,8 +2197,7 @@ ri->WritePixels(source_mailbox, /*dst_x_offset=*/0, /*dst_y_offset=*/0, /*dst_plane_index=*/0, GL_TEXTURE_2D, - upload_bitmap.rowBytes(), upload_bitmap.info(), - upload_bitmap.getPixels()); + upload_bitmap.pixmap()); } // Create a DisplayP3 SharedImage and copy to it.
diff --git a/cc/raster/one_copy_raster_buffer_provider.cc b/cc/raster/one_copy_raster_buffer_provider.cc index d4d5c2d1..666bcb18 100644 --- a/cc/raster/one_copy_raster_buffer_provider.cc +++ b/cc/raster/one_copy_raster_buffer_provider.cc
@@ -474,7 +474,7 @@ bitmap.eraseColor(raster_source->background_color().toSkColor()); ri->WritePixels(*mailbox, /*dst_x_offset=*/0, /*dst_y_offset=*/0, /*dst_plane_index=*/0, mailbox_texture_target, - clear_bytes_per_row, dst_info, bitmap.getPixels()); + bitmap.pixmap()); } }
diff --git a/cc/slim/frame_sink_impl.cc b/cc/slim/frame_sink_impl.cc index b367db8..8ad82a0 100644 --- a/cc/slim/frame_sink_impl.cc +++ b/cc/slim/frame_sink_impl.cc
@@ -278,6 +278,7 @@ return false; } + TRACE_EVENT0("cc", "slim::FrameSinkImpl::DoBeginFrame"); viz::CompositorFrame frame; base::flat_set<viz::ResourceId> viz_resource_ids; viz::HitTestRegionList hit_test_region_list; @@ -307,7 +308,10 @@ } { - TRACE_EVENT0("cc", "SubmitCompositorFrame"); + TRACE_EVENT_WITH_FLOW1("viz,benchmark", "Graphics.Pipeline", + TRACE_ID_GLOBAL(begin_frame_args.trace_id), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, + "step", "SubmitCompositorFrame"); frame_sink_->SubmitCompositorFrame( local_surface_id_, std::move(frame), send_new_hit_test_region_list ? hit_test_region_list_ : absl::nullopt, @@ -323,6 +327,10 @@ void FrameSinkImpl::SendDidNotProduceFrame( const viz::BeginFrameArgs& begin_frame_args) { + TRACE_EVENT_WITH_FLOW1("viz,benchmark", "Graphics.Pipeline", + TRACE_ID_GLOBAL(begin_frame_args.trace_id), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, + "step", "DidNotProduceFrame"); frame_sink_->DidNotProduceFrame(viz::BeginFrameAck(begin_frame_args, false)); }
diff --git a/cc/slim/layer_tree_impl.cc b/cc/slim/layer_tree_impl.cc index 147a3dc0..4e8fc04 100644 --- a/cc/slim/layer_tree_impl.cc +++ b/cc/slim/layer_tree_impl.cc
@@ -393,7 +393,10 @@ viz::CompositorFrame& out_frame, base::flat_set<viz::ResourceId>& out_resource_ids, viz::HitTestRegionList& out_hit_test_region_list) { - TRACE_EVENT0("cc", "slim::LayerTreeImpl::ProduceFrame"); + TRACE_EVENT_WITH_FLOW1("viz,benchmark", "Graphics.Pipeline", + TRACE_ID_GLOBAL(args.trace_id), + TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT, + "step", "GenerateCompositorFrame"); for (auto& resource_request : ui_resource_manager_.TakeUIResourcesRequests()) {
diff --git a/chrome/VERSION b/chrome/VERSION index c300fbd6..2673ea5 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=114 MINOR=0 -BUILD=5699 +BUILD=5700 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index af8522c..7d685f6 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -298,7 +298,6 @@ "//chrome/browser/notifications/chime/android:java", "//chrome/browser/omaha/android:java", "//chrome/browser/optimization_guide/android:java", - "//chrome/browser/page_annotations/android:java", "//chrome/browser/paint_preview/android:java", "//chrome/browser/partnerbookmarks:delegate_java", "//chrome/browser/partnercustomizations:delegate_java", @@ -706,7 +705,6 @@ "//chrome/browser/commerce/merchant_viewer/android:java", "//chrome/browser/content_creation/notes/internal/android:java", "//chrome/browser/download/internal/android:java", - "//chrome/browser/page_annotations/android:java", "//chrome/browser/password_check:internal_java", "//chrome/browser/password_edit_dialog/android:java", "//chrome/browser/password_entry_edit/android/internal:java", @@ -894,7 +892,6 @@ "//chrome/browser/notifications:junit_tests", "//chrome/browser/omaha/android:java", "//chrome/browser/optimization_guide/android:java", - "//chrome/browser/page_annotations/test/android:junit", "//chrome/browser/partnercustomizations:java", "//chrome/browser/password_edit_dialog/android:junit", "//chrome/browser/password_entry_edit/android/internal:junit", @@ -1452,8 +1449,6 @@ "//chrome/browser/omaha/android:java", "//chrome/browser/optimization_guide/android:java", "//chrome/browser/optimization_guide/android:javatests", - "//chrome/browser/page_annotations/android:java", - "//chrome/browser/page_annotations/test/android:javatests", "//chrome/browser/paint_preview/android:java", "//chrome/browser/paint_preview/android:javatests", "//chrome/browser/partnercustomizations:delegate_java",
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni index 81ffff71..f23c04d 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni
@@ -521,7 +521,6 @@ "java/res/layout/find_toolbar.xml", "java/res/layout/fre_tos_privacy_disclaimer.xml", "java/res/layout/fullscreen_notification.xml", - "java/res/layout/grid_tab_switcher_view_holder.xml", "java/res/layout/history_clear_browsing_data_header.xml", "java/res/layout/history_item_view.xml", "java/res/layout/history_main.xml", @@ -595,6 +594,7 @@ "java/res/layout/sync_passphrase_types.xml", "java/res/layout/tab_switcher_action_menu_layout.xml", "java/res/layout/tab_switcher_module_container.xml", + "java/res/layout/tab_switcher_view_holder.xml", "java/res/layout/top_sites_tile_view.xml", "java/res/layout/top_sites_tile_view_condensed.xml", "java/res/layout/update_menu_item.xml",
diff --git a/chrome/android/expectations/monochrome_public_bundle.proguard_flags.expected b/chrome/android/expectations/monochrome_public_bundle.proguard_flags.expected index 91f5262..7151b56 100644 --- a/chrome/android/expectations/monochrome_public_bundle.proguard_flags.expected +++ b/chrome/android/expectations/monochrome_public_bundle.proguard_flags.expected
@@ -914,7 +914,7 @@ @android.support.annotation.Keep <init>(...); } -# File: ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/kotlinx-coroutines-android-1.6.1.jar:META-INF/com.android.tools/r8-from-1.6.0/coroutines.pro +# File: ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/kotlinx-coroutines-android-1.6.4.jar:META-INF/com.android.tools/r8-from-1.6.0/coroutines.pro # Allow R8 to optimize away the FastServiceLoader. # Together with ServiceLoader optimization in R8 # this results in direct instantiation when loading Dispatchers.Main @@ -926,8 +926,6 @@ boolean ANDROID_DETECTED return true; } --keep class kotlinx.coroutines.android.AndroidDispatcherFactory {*;} - # Disable support for "Missing Main Dispatcher", since we always have Android main dispatcher -assumenosideeffects class kotlinx.coroutines.internal.MainDispatchersKt { boolean SUPPORT_MISSING return false; @@ -940,7 +938,7 @@ boolean getRECOVER_STACK_TRACES() return false; } -# File: ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/kotlinx-coroutines-core-jvm-1.6.1.jar:META-INF/com.android.tools/r8/coroutines.pro +# File: ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/kotlinx-coroutines-core-jvm-1.6.4.jar:META-INF/com.android.tools/r8/coroutines.pro # When editing this file, update the following files as well: # - META-INF/proguard/coroutines.pro # - META-INF/com.android.tools/proguard/coroutines.pro
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java index ffad0dd..64df568a 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewBinder.java
@@ -130,6 +130,7 @@ getCardIcon(chipView.getContext(), item.getSuggestion().getCustomIconUrl(), iconId, R.dimen.keyboard_accessory_bar_item_cc_icon_width, R.dimen.chip_icon_size, + R.dimen.keyboard_accessory_card_art_corner_radius, /* showCustomIcon= */ true), /* tintWithTextColor= */ false); TraceEvent.end("BarItemChipViewHolder#bind");
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewBinder.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewBinder.java index 9aa6b6d..ce3dd26 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewBinder.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewBinder.java
@@ -78,7 +78,8 @@ view.setIcon(getCardIcon(view.getContext(), info.getIconUrl(), getDrawableForOrigin(info.getOrigin()), R.dimen.keyboard_accessory_bar_item_cc_icon_width, - R.dimen.keyboard_accessory_suggestion_icon_size, /* showCustomIcon= */ true)); + R.dimen.keyboard_accessory_suggestion_icon_size, R.dimen.card_art_corner_radius, + /* showCustomIcon= */ true)); } private static @DrawableRes int getDrawableForOrigin(String origin) {
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewTest.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewTest.java index d86d62fd..7185107 100644 --- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewTest.java +++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewTest.java
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -486,7 +487,8 @@ // Return the cached image when // PersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable is called for the // above url. - when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable(any())) + when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable( + any(), anyFloat())) .thenReturn(TEST_CARD_ART_IMAGE); // Create an autofill suggestion and set the `customIconUrl`. AutofillBarItem customIconItem = new AutofillBarItem( @@ -518,7 +520,8 @@ when(customIconUrl.getSpec()).thenReturn(CUSTOM_ICON_URL); // Return the response of PersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable // to null to indicate that the image is not present in the cache. - when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable(any())) + when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable( + any(), anyFloat())) .thenReturn(null); AutofillBarItem customIconItem = new AutofillBarItem( getDefaultAutofillSuggestionBuilder().setCustomIconUrl(customIconUrl).build(),
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewTest.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewTest.java index d8e9245..33f8430 100644 --- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewTest.java +++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewTest.java
@@ -12,6 +12,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -183,7 +184,8 @@ // Return the cached image when // PersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable is called for the // above url. - when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable(any())) + when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable( + any(), anyFloat())) .thenReturn(TEST_CARD_ART_IMAGE); TestThreadUtils.runOnUiThreadBlocking(() -> { @@ -219,7 +221,8 @@ when(iconUrl.getSpec()).thenReturn(CUSTOM_ICON_URL); // Return null when PersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable is // called for the above url. - when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable(any())) + when(mMockPersonalDataManager.getCustomImageForAutofillSuggestionIfAvailable( + any(), anyFloat())) .thenReturn(null); TestThreadUtils.runOnUiThreadBlocking(() -> {
diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherCoordinator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherCoordinator.java index 1885fe7..5f48e48 100644 --- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherCoordinator.java +++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherCoordinator.java
@@ -186,4 +186,11 @@ mContainer.setVisibility(isVisible ? View.VISIBLE : View.GONE); mMediatorOnTablet.setVisibility(isVisible); } + + @VisibleForTesting + public boolean isVisible() { + if (mMediatorOnTablet == null) return false; + + return mMediatorOnTablet.isVisible(); + } }
diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherOnTabletMediator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherOnTabletMediator.java index 9759357..f1d96bb 100644 --- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherOnTabletMediator.java +++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherOnTabletMediator.java
@@ -65,6 +65,10 @@ mPropertyModel.set(IS_VISIBLE, true); } + boolean isVisible() { + return mPropertyModel.get(IS_VISIBLE); + } + /** * Update the favicon of the single tab switcher. */
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceOnTabletTest.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceOnTabletTest.java index dfde044..132ac09 100644 --- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceOnTabletTest.java +++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceOnTabletTest.java
@@ -22,7 +22,8 @@ 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.tabmodel.TabModelUtils; +import org.chromium.chrome.browser.ntp.NewTabPage; +import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.util.browser.Features.DisableFeatures; @@ -60,7 +61,8 @@ StartSurfaceTestUtils.startMainActivityFromLauncher(mActivityTestRule); StartSurfaceTestUtils.waitForTabModel(mActivityTestRule.getActivity()); - verifyTabCountAndActiveTabUrl(mActivityTestRule.getActivity(), 1, TAB_URL); + verifyTabCountAndActiveTabUrl( + mActivityTestRule.getActivity(), 1, TAB_URL, false /* expectHomeSurfaceUiShown */); } @Test @@ -73,7 +75,8 @@ StartSurfaceTestUtils.waitForTabModel(mActivityTestRule.getActivity()); // Verifies that a NTP is created and set as the current Tab. - verifyTabCountAndActiveTabUrl(mActivityTestRule.getActivity(), 2, UrlConstants.NTP_URL); + verifyTabCountAndActiveTabUrl(mActivityTestRule.getActivity(), 2, UrlConstants.NTP_URL, + true /* expectHomeSurfaceUiShown */); } @Test @@ -91,7 +94,8 @@ // Verifies that the existing non active NTP is skipped in Tab restoring, and a new NTP is // created and set as the active Tab. - verifyTabCountAndActiveTabUrl(mActivityTestRule.getActivity(), 2, UrlConstants.NTP_URL); + verifyTabCountAndActiveTabUrl(mActivityTestRule.getActivity(), 2, UrlConstants.NTP_URL, + true /* expectHomeSurfaceUiShown */); } @Test @@ -109,14 +113,19 @@ // Verifies that no new NTP is created, and the existing NTP is reused and set as the // current Tab. - verifyTabCountAndActiveTabUrl(mActivityTestRule.getActivity(), 2, modifiedNtpUrl); + verifyTabCountAndActiveTabUrl(mActivityTestRule.getActivity(), 2, modifiedNtpUrl, + true /* expectHomeSurfaceUiShown */); } - private void verifyTabCountAndActiveTabUrl(ChromeTabbedActivity cta, int tabCount, String url) { + private void verifyTabCountAndActiveTabUrl( + ChromeTabbedActivity cta, int tabCount, String url, boolean expectHomeSurfaceUiShown) { Assert.assertEquals(tabCount, cta.getCurrentTabModel().getCount()); - TestThreadUtils.runOnUiThreadBlocking(() -> { - Assert.assertTrue(TextUtils.equals( - url, TabModelUtils.getCurrentTab(cta.getCurrentTabModel()).getUrl().getSpec())); - }); + Tab tab = StartSurfaceTestUtils.getCurrentTabFromUIThread(cta); + TestThreadUtils.runOnUiThreadBlocking( + () -> { Assert.assertTrue(TextUtils.equals(url, tab.getUrl().getSpec())); }); + if (expectHomeSurfaceUiShown) { + Assert.assertTrue( + ((NewTabPage) tab.getNativePage()).isSingleTabCardVisibleForTesting()); + } } }
diff --git a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTestUtils.java b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTestUtils.java index fe04f70a..7a2cc78 100644 --- a/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTestUtils.java +++ b/chrome/android/features/start_surface/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTestUtils.java
@@ -61,6 +61,7 @@ import org.chromium.chrome.browser.suggestions.tile.TileTitleSource; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabState; +import org.chromium.chrome.browser.tabmodel.TabModelUtils; import org.chromium.chrome.browser.tabmodel.TabPersistentStore; import org.chromium.chrome.browser.tabmodel.TabbedModeTabPersistencePolicy; import org.chromium.chrome.browser.tabpersistence.TabStateDirectory; @@ -356,6 +357,17 @@ } /** + * Gets the current active Tab from UI thread. + * @param cta The ChromeTabbedActivity under test. + */ + public static Tab getCurrentTabFromUIThread(ChromeTabbedActivity cta) { + AtomicReference<Tab> tab = new AtomicReference<>(); + TestThreadUtils.runOnUiThreadBlocking( + () -> tab.set(TabModelUtils.getCurrentTab(cta.getCurrentTabModel()))); + return tab.get(); + } + + /** * @param activityTestRule The test rule of activity under test. * @return Whether the keyboard is shown. */
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java index acee37d3..c0975990 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java
@@ -1922,7 +1922,7 @@ == bottomControls.getImportantForAccessibility()); } if (isTablet(cta)) { - View tabSwitcherViewHolder = cta.findViewById(R.id.grid_tab_switcher_view_holder); + View tabSwitcherViewHolder = cta.findViewById(R.id.tab_switcher_view_holder); assertEquals(isDialogShowing, IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS == tabSwitcherViewHolder.getImportantForAccessibility()); @@ -1944,7 +1944,7 @@ private void verifyGlobalUndoBarAndClick() { // Verify that the dialog undo bar is showing and the default undo bar is hidden. int expectedParent = isTablet(mActivityTestRule.getActivity()) - ? R.id.grid_tab_switcher_view_holder + ? R.id.tab_switcher_view_holder : R.id.bottom_container; onViewWaiting(allOf( withId(R.id.snackbar), isDescendantOfA(withId(expectedParent)), isDisplayed()));
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherTabletTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherTabletTest.java index df5f3d3..c9050a77c 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherTabletTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherTabletTest.java
@@ -155,7 +155,7 @@ Layout layout = sActivityTestRule.getActivity().getLayoutManager().getOverviewLayout(); assertNull("StartSurface layout should not be initialized", layout); ViewStub tabSwitcherStub = (ViewStub) sActivityTestRule.getActivity().findViewById( - R.id.grid_tab_switcher_view_holder_stub); + R.id.tab_switcher_view_holder_stub); assertTrue("TabSwitcher view stub should not be inflated", tabSwitcherStub.getParent() != null); @@ -165,7 +165,7 @@ assertTrue("OverviewLayout should be TabSwitcherAndStartSurfaceLayout layout", layout instanceof TabSwitcherAndStartSurfaceLayout); ViewGroup tabSwitcherViewHolder = - sActivityTestRule.getActivity().findViewById(R.id.grid_tab_switcher_view_holder); + sActivityTestRule.getActivity().findViewById(R.id.tab_switcher_view_holder); assertNotNull("TabSwitcher view should be inflated", tabSwitcherViewHolder); exitGTSAndVerifyThumbnailsAreReleased(1); @@ -255,14 +255,13 @@ @MediumTest public void testGridTabSwitcherOnNoNextTab() throws ExecutionException { // Assert the grid tab switcher is not yet showing. - onView(withId(R.id.grid_tab_switcher_view_holder)) - .check(matches(withEffectiveVisibility(GONE))); + onView(withId(R.id.tab_switcher_view_holder)).check(matches(withEffectiveVisibility(GONE))); // Close the only tab through the tab strip. closeTab(false, sActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId()); // Assert the grid tab switcher is shown automatically, since there is no next tab. - onView(withId(R.id.grid_tab_switcher_view_holder)) + onView(withId(R.id.tab_switcher_view_holder)) .check(matches(withEffectiveVisibility(VISIBLE))); TestThreadUtils.runOnUiThreadBlocking(() @@ -287,7 +286,7 @@ sActivityTestRule.getActivity().getLayoutManager().getTabSwitcherLayoutForTesting(); assertNull("StartSurface layout should not be initialized", layout); ViewStub tabSwitcherStub = (ViewStub) sActivityTestRule.getActivity().findViewById( - R.id.grid_tab_switcher_view_holder_stub); + R.id.tab_switcher_view_holder_stub); assertTrue("TabSwitcher view stub should not be inflated", tabSwitcherStub.getParent() != null); @@ -299,7 +298,7 @@ assertTrue("OverviewLayout should be TabSwitcherAndStartSurfaceLayout layout", layout instanceof TabSwitcherLayout); ViewGroup tabSwitcherViewHolder = - sActivityTestRule.getActivity().findViewById(R.id.grid_tab_switcher_view_holder); + sActivityTestRule.getActivity().findViewById(R.id.tab_switcher_view_holder); assertNotNull("TabSwitcher view should be inflated", tabSwitcherViewHolder); }
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabUiTestHelper.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabUiTestHelper.java index d1630dcd..ebd287d 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabUiTestHelper.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabUiTestHelper.java
@@ -385,7 +385,7 @@ */ public static int getTabSwitcherParentId(Context context) { if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(context)) { - return R.id.grid_tab_switcher_view_holder; + return R.id.tab_switcher_view_holder; } if (getIsStartSurfaceEnabledFromUIThread(context)
diff --git a/chrome/android/java/DEPS b/chrome/android/java/DEPS index 640c19146..4a85f9e 100644 --- a/chrome/android/java/DEPS +++ b/chrome/android/java/DEPS
@@ -23,7 +23,6 @@ "+chrome/browser/password_check/android", "+chrome/browser/settings/android/java", "+chrome/browser/tabmodel/android/java", - "+chrome/browser/page_annotations/android/java", "+chrome/browser/video_tutorials/android", "+components/autofill/android/java/src/org/chromium/components/autofill", "+components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler",
diff --git a/chrome/android/java/res/layout/grid_tab_switcher_view_holder.xml b/chrome/android/java/res/layout/tab_switcher_view_holder.xml similarity index 93% rename from chrome/android/java/res/layout/grid_tab_switcher_view_holder.xml rename to chrome/android/java/res/layout/tab_switcher_view_holder.xml index 0eb3bd4..1b5ae69 100644 --- a/chrome/android/java/res/layout/grid_tab_switcher_view_holder.xml +++ b/chrome/android/java/res/layout/tab_switcher_view_holder.xml
@@ -7,7 +7,7 @@ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/grid_tab_switcher_view_holder" + android:id="@+id/tab_switcher_view_holder" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone"
diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml index e7c10758..20942c12 100644 --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -16,8 +16,8 @@ android:fragment="org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTabsFragment"/> <Preference android:key="privacy_guide" - android:title="@string/prefs_privacy_guide_title" - android:summary="@string/prefs_privacy_guide_summary" + android:title="@string/privacy_guide_pref_title" + android:summary="@string/privacy_guide_pref_summary" android:fragment="org.chromium.chrome.browser.privacy_guide.PrivacyGuideFragment"/> <Preference android:key="safe_browsing"
diff --git a/chrome/android/java/res/xml/privacy_preferences_v2.xml b/chrome/android/java/res/xml/privacy_preferences_v2.xml index f8546dd3..832d8929 100644 --- a/chrome/android/java/res/xml/privacy_preferences_v2.xml +++ b/chrome/android/java/res/xml/privacy_preferences_v2.xml
@@ -18,8 +18,8 @@ android:fragment="org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTabsFragment" /> <Preference android:key="privacy_guide" - android:title="@string/prefs_privacy_guide_title" - android:summary="@string/prefs_privacy_guide_summary" + android:title="@string/privacy_guide_pref_title" + android:summary="@string/privacy_guide_pref_summary" android:fragment="org.chromium.chrome.browser.privacy_guide.PrivacyGuideFragment" /> <org.chromium.components.browser_ui.settings.ChromeBasePreference android:key="third_party_cookies"
diff --git a/chrome/android/java/res_app/layout/main.xml b/chrome/android/java/res_app/layout/main.xml index 01e4cb7..59e797b 100644 --- a/chrome/android/java/res_app/layout/main.xml +++ b/chrome/android/java/res_app/layout/main.xml
@@ -127,11 +127,11 @@ android:layout_height="wrap_content" /> <ViewStub - android:id="@+id/grid_tab_switcher_view_holder_stub" + android:id="@+id/tab_switcher_view_holder_stub" android:layout_width="match_parent" android:layout_height="match_parent" - android:inflatedId="@+id/grid_tab_switcher_view_holder" - android:layout="@layout/grid_tab_switcher_view_holder" /> + android:inflatedId="@+id/tab_switcher_view_holder" + android:layout="@layout/tab_switcher_view_holder" /> <org.chromium.components.messages.MessageContainer android:id="@+id/message_container"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index 98ff6a06..d88a3b52 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -700,7 +700,7 @@ CompositorViewHolder compositorViewHolder = getCompositorViewHolderSupplier().get(); // clang-format off - ViewGroup tabSwitcherViewHolder = findViewById(R.id.grid_tab_switcher_view_holder); + ViewGroup tabSwitcherViewHolder = findViewById(R.id.tab_switcher_view_holder); mLayoutManager = new LayoutManagerChromeTablet(compositorViewHolder, mContentContainer, mStartSurfaceSupplier, mTabSwitcherSupplier, getTabContentManagerSupplier(), mRootUiCoordinator::getTopUiThemeColorProvider, mJankTracker, @@ -857,8 +857,7 @@ ViewGroup containerView = compositorViewHolder; // Inflate view holder for polish GTS. containerView = - (ViewGroup) ((ViewStub) findViewById(R.id.grid_tab_switcher_view_holder_stub)) - .inflate(); + (ViewGroup) ((ViewStub) findViewById(R.id.tab_switcher_view_holder_stub)).inflate(); // Set view in toolbar manager to set toolbar stub. getToolbarManager().setTabSwitcherFullScreenView(containerView); @@ -1299,12 +1298,15 @@ // Never attempt to restore incognito tabs when this activity was previously swiped // away in Recents. http://crbug.com/626629 boolean ignoreIncognitoFiles = !hadCipherData; + + // If the Start surface should be shown on startup, check if the active tab restored + // from disk is an NTP that can be reused for Start. Callback<String> onStandardActiveIndexRead = null; shouldShowHomeSurfaceAtStartupOnTablet = shouldShowNtpHomeSurfaceOnStartup(); if (shouldShowHomeSurfaceAtStartupOnTablet) { onStandardActiveIndexRead = url -> { - if (!mTabModelSelector.isIncognitoSelected() - && UrlUtilities.isNTPUrl(url)) { + if (UrlUtilities.isNTPUrl(url)) { + assert !mTabModelSelector.isIncognitoSelected(); isActiveUrlNTP.set(true); } }; @@ -1347,11 +1349,19 @@ || (shouldShowOverviewPageOnStart() && !mTabModelSelector.isIncognitoSelected()); - if (shouldShowHomeSurfaceAtStartupOnTablet && !isActiveUrlNTP.get() - && !isIntentWithEffect && !hasTabWaitingForReparenting) { - ReturnToChromeUtil.createNewTab(getTabCreator(false)); - activeTabBeingRestored = false; - mCreatedTabOnStartup = true; + if (shouldShowHomeSurfaceAtStartupOnTablet && !isIntentWithEffect + && !hasTabWaitingForReparenting) { + // If a home surface should be shown at startup on tablets and the last active Tab + // is a NTP, we will reuse it to show the home surface UI. Otherwise, we'll create + // one, and set it as the active Tab. + if (isActiveUrlNTP.get()) { + ReturnToChromeUtil.showHomeSurfaceOnNextNtp( + getCurrentTabModel(), mTabModelSelector); + } else { + ReturnToChromeUtil.createNewTabAndShowHomeSurfaceUi(getTabCreator(false)); + activeTabBeingRestored = false; + mCreatedTabOnStartup = true; + } } mTabModelOrchestrator.restoreTabs(activeTabBeingRestored); @@ -3073,9 +3083,11 @@ } /** - * Returns whether to show a NTP as the home surface at startup on tablet. + * Returns whether to show a NTP as the home surface at startup on tablet in regular mode. */ private boolean shouldShowNtpHomeSurfaceOnStartup() { + if (mTabModelSelector.isIncognitoSelected()) return false; + assert mInactivityTracker != null; return ReturnToChromeUtil.shouldShowNtpAsHomeSurfaceAtStartup( isTablet(), getIntent(), mTabModelSelector, mInactivityTracker);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/OverviewListLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/OverviewListLayout.java index ff3ffe5..ebb54b2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/OverviewListLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/OverviewListLayout.java
@@ -83,10 +83,10 @@ if (container == null || mTabModelWrapper.getParent() != null) return; - // Use grid_tab_switcher_view_holder to hold the list layout on tablets. + // Use full-screen tab_switcher_view_holder to hold the list layout on tablets. ViewGroup overviewList = DeviceFormFactor.isNonMultiDisplayContextOnTablet(mTabModelWrapper.getContext()) - ? (ViewGroup) container.findViewById(R.id.grid_tab_switcher_view_holder) + ? (ViewGroup) container.findViewById(R.id.tab_switcher_view_holder) : (ViewGroup) container.findViewById(R.id.overview_list_layout_holder); overviewList.setVisibility(View.VISIBLE); overviewList.addView(mTabModelWrapper);
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 51c5481..149afa1 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
@@ -23,7 +23,6 @@ import org.chromium.chrome.browser.omaha.VersionNumberGetter; import org.chromium.chrome.browser.omnibox.OmniboxFeatures; import org.chromium.chrome.browser.optimization_guide.OptimizationGuidePushNotificationManager; -import org.chromium.chrome.browser.page_annotations.PageAnnotationsServiceConfig; import org.chromium.chrome.browser.tab.state.FilePersistedTabDataStorage; import org.chromium.chrome.browser.tabmodel.TabPersistentStore; import org.chromium.chrome.browser.tasks.tab_management.TabManagementFieldTrial; @@ -144,7 +143,6 @@ OmniboxFeatures.ENABLE_MODERNIZE_VISUAL_UPDATE_ON_TABLET, OmniboxFeatures.MODERNIZE_VISUAL_UPDATE_ACTIVE_COLOR_ON_OMNIBOX, OmniboxFeatures.MODERNIZE_VISUAL_UPDATE_SMALL_BOTTOM_MARGIN, - PageAnnotationsServiceConfig.PAGE_ANNOTATIONS_BASE_URL, CustomTabIntentDataProvider.AUTO_TRANSLATE_ALLOW_ALL_FIRST_PARTIES, CustomTabIntentDataProvider.AUTO_TRANSLATE_PACKAGE_NAME_ALLOWLIST, CustomTabIntentDataProvider.THIRD_PARTIES_DEFAULT_POLICY,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java index 2f42590..41d5268 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillPopupBridge.java
@@ -200,6 +200,7 @@ .setIsBoldLabel(isLabelBold) .setIconDrawable(AutofillUiUtils.getCardIcon(mContext, customIconUrl, iconId, getPopupIconWidthId(), getPopupIconHeightId(), + R.dimen.card_art_corner_radius, /* showCustomIcon= */ true)) .build(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/CardUnmaskPrompt.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/CardUnmaskPrompt.java index cde2f187..ff9029d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/CardUnmaskPrompt.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/CardUnmaskPrompt.java
@@ -6,7 +6,6 @@ import android.app.Activity; import android.content.Context; -import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Handler; import android.text.Editable; @@ -189,6 +188,7 @@ ChromeImageView cardIconView = (ChromeImageView) mMainView.findViewById(R.id.card_icon); cardIconView.setImageDrawable(AutofillUiUtils.getCardIcon(context, cardArtUrl, cardIconId, getCardIconWidthId(), getCardIconHeightId(), + R.dimen.card_art_corner_radius, isVirtualCard || ChromeFeatureList.isEnabled( ChromeFeatureList.AUTOFILL_ENABLE_CARD_ART_IMAGE))); @@ -228,13 +228,12 @@ cvcHintImage.setImageResource(cvcDrawableId); cvcHintImage.setContentDescription(cvcImageAnnouncement); - Resources resources = context.getResources(); PropertyModel.Builder dialogModelBuilder = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) .with(ModalDialogProperties.CONTROLLER, this) .with(ModalDialogProperties.CUSTOM_VIEW, mMainView) .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, confirmButtonLabel) - .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, resources, + .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, context.getResources(), R.string.cancel); mDialogModel = dialogModelBuilder.build();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePrompt.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePrompt.java index 3c5a487..d090920 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePrompt.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/SaveUpdateAddressProfilePrompt.java
@@ -75,7 +75,7 @@ mEditorDialog = new EditorDialog(activity, /*deleteRunnable=*/null, browserProfile); mEditorDialog.setShouldTriggerDoneCallbackBeforeCloseAnimation(true); - mAddressEditor = new AddressEditor(/*saveToDisk=*/false, isMigrationToAccount); + mAddressEditor = new AddressEditor(/*saveToDisk=*/false, isUpdate, isMigrationToAccount); mAddressEditor.setEditorDialog(mEditorDialog); AutofillAddress autofillAddress = new AutofillAddress(activity, autofillProfile); mDialogView.findViewById(R.id.edit_button).setOnClickListener(v -> {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AddressEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AddressEditor.java index fa52027a..9bb7769 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AddressEditor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AddressEditor.java
@@ -49,6 +49,7 @@ private final Map<Integer, EditorFieldModel> mAddressFields = new HashMap<>(); private final Set<CharSequence> mPhoneNumbers = new HashSet<>(); private final boolean mSaveToDisk; + private final boolean mIsUpdate; private final boolean mIsMigrationToAccount; private final PhoneNumberUtil.CountryAwareFormatTextWatcher mPhoneFormatter; private final CountryAwarePhoneNumberValidator mPhoneValidator; @@ -110,11 +111,13 @@ * Builds an address editor. * * @param saveToDisk Whether to save changes to disk after editing. + * @param isUpdate Whether an existing address profile is being edited. * @param isMigrationToAccount Whether this editor is shown during address profile migration to * Google account. */ - public AddressEditor(boolean saveToDisk, boolean isMigrationToAccount) { + public AddressEditor(boolean saveToDisk, boolean isUpdate, boolean isMigrationToAccount) { mSaveToDisk = saveToDisk; + mIsUpdate = isUpdate; mIsMigrationToAccount = isMigrationToAccount; mPhoneFormatter = new PhoneNumberUtil.CountryAwareFormatTextWatcher(); mPhoneValidator = new CountryAwarePhoneNumberValidator(true);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragment.java index 929140b..adb27b7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillPaymentMethodsFragment.java
@@ -155,7 +155,7 @@ // Set card icon. It can be either a custom card art or a network icon. card_pref.setIcon(getCardIcon(getStyledContext(), card.getCardArtUrl(), card.getIssuerIconDrawableId(), getSettingsPageIconWidthId(), - getSettingsPageIconHeightId(), + getSettingsPageIconHeightId(), R.dimen.card_art_corner_radius, ChromeFeatureList.isEnabled(ChromeFeatureList.AUTOFILL_ENABLE_CARD_ART_IMAGE))); if (card.getIsLocal()) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragment.java index f1a40600..ba909c7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillProfilesFragment.java
@@ -224,8 +224,9 @@ } private void editAddress(EditorDialog dialog, AutofillAddress autofillAddress) { - AddressEditor addressEditor = - new AddressEditor(/*saveToDisk=*/true, /*isMigrationToAccount=*/false); + AddressEditor addressEditor = new AddressEditor( + /*saveToDisk=*/true, /*isUpdate=*/autofillAddress != null, + /*isMigrationToAccount=*/false); addressEditor.setEditorDialog(dialog); /*
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillServerCardEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillServerCardEditor.java index 1959237c..801b661 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillServerCardEditor.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/settings/AutofillServerCardEditor.java
@@ -153,7 +153,7 @@ ImageView cardIconContainer = v.findViewById(R.id.card_icon); cardIconContainer.setImageDrawable(getCardIcon(getContext(), mCard.getCardArtUrl(), mCard.getIssuerIconDrawableId(), getSettingsPageIconWidthId(), - getSettingsPageIconHeightId(), + getSettingsPageIconHeightId(), R.dimen.card_art_corner_radius, ChromeFeatureList.isEnabled(ChromeFeatureList.AUTOFILL_ENABLE_CARD_ART_IMAGE))); ((TextView) v.findViewById(R.id.card_name)).setText(mCard.getCardNameForAutofillDisplay());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java index 4108e80..91b328be 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -1070,10 +1070,11 @@ } /** - * Show the module when the current new tab page is been used as the home surface. + * Shows the home surface UI on this NTP. + * TODO(crbug.com/1430906): Investigate better solution to show Home surface UI on NTP upon + * creation. */ - @VisibleForTesting - void showHomeSurfaceUI() { + public void showHomeSurfaceUi() { if (mSingleTabSwitcherCoordinator == null) { initializeSingleTabCard(); } @@ -1124,6 +1125,13 @@ } } + @VisibleForTesting + public boolean isSingleTabCardVisibleForTesting() { + if (mSingleTabSwitcherCoordinator == null) return false; + + return mSingleTabSwitcherCoordinator.isVisible(); + } + /* Destroy the single tab card on the {@link NewTabPageLayout}. */ @VisibleForTesting void destroySingleTabCard() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java index e64c0b3..d2fe519e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
@@ -9,6 +9,9 @@ import android.os.Build; import android.os.Bundle; import android.text.SpannableString; +import android.text.style.ForegroundColorSpan; +import android.text.style.RelativeSizeSpan; +import android.text.style.SuperscriptSpan; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -35,6 +38,7 @@ import org.chromium.chrome.browser.safe_browsing.metrics.SettingsAccessPoint; import org.chromium.chrome.browser.safe_browsing.settings.SafeBrowsingSettingsFragment; import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate; +import org.chromium.chrome.browser.settings.ProfileDependentSetting; import org.chromium.chrome.browser.settings.SettingsLauncherImpl; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; @@ -45,8 +49,8 @@ import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.components.browser_ui.site_settings.ContentSettingsResources; import org.chromium.components.browser_ui.site_settings.SingleCategorySettings; +import org.chromium.components.browser_ui.styles.SemanticColorUtils; import org.chromium.components.browser_ui.util.TraceEventVectorDrawableCompat; -import org.chromium.components.prefs.PrefService; import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.components.user_prefs.UserPrefs; import org.chromium.ui.text.NoUnderlineClickableSpan; @@ -56,7 +60,8 @@ * Fragment to keep track of the all the privacy related preferences. */ public class PrivacySettings extends PreferenceFragmentCompat - implements Preference.OnPreferenceChangeListener, FragmentHelpAndFeedbackLauncher { + implements Preference.OnPreferenceChangeListener, FragmentHelpAndFeedbackLauncher, + ProfileDependentSetting { private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment"; private static final String PREF_PRELOAD_PAGES = "preload_pages"; private static final String PREF_HTTPS_FIRST_MODE = "https_first_mode"; @@ -73,6 +78,7 @@ private IncognitoLockSettings mIncognitoLockSettings; private HelpAndFeedbackLauncher mHelpAndFeedbackLauncher; + private Profile mProfile; @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -106,6 +112,7 @@ RecordHistogram.recordEnumeratedHistogram("Settings.PrivacyGuide.EntryExit", PrivacyGuideInteractions.SETTINGS_LINK_ROW_ENTRY, PrivacyGuideInteractions.MAX_VALUE); + UserPrefs.get(mProfile).setBoolean(Pref.PRIVACY_GUIDE_VIEWED, true); return false; }); if (!ChromeFeatureList.isEnabled(ChromeFeatureList.PRIVACY_GUIDE)) { @@ -142,8 +149,7 @@ public boolean isPreferenceControlledByPolicy(Preference preference) { String key = preference.getKey(); assert PREF_HTTPS_FIRST_MODE.equals(key) : "Unexpected preference key: " + key; - return UserPrefs.get(Profile.getLastUsedRegularProfile()) - .isManagedPreference(Pref.HTTPS_ONLY_MODE_ENABLED); + return UserPrefs.get(mProfile).isManagedPreference(Pref.HTTPS_ONLY_MODE_ENABLED); } @Override @@ -154,8 +160,8 @@ || SafeBrowsingBridge.isUnderAdvancedProtection(); } }); - httpsFirstModePref.setChecked(UserPrefs.get(Profile.getLastUsedRegularProfile()) - .getBoolean(Pref.HTTPS_ONLY_MODE_ENABLED)); + httpsFirstModePref.setChecked( + UserPrefs.get(mProfile).getBoolean(Pref.HTTPS_ONLY_MODE_ENABLED)); if (SafeBrowsingBridge.isUnderAdvancedProtection()) { httpsFirstModePref.setSummary(getContext().getResources().getString( R.string.settings_https_first_mode_with_advanced_protection_summary)); @@ -206,11 +212,9 @@ public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); if (PREF_CAN_MAKE_PAYMENT.equals(key)) { - UserPrefs.get(Profile.getLastUsedRegularProfile()) - .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue); + UserPrefs.get(mProfile).setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue); } else if (PREF_HTTPS_FIRST_MODE.equals(key)) { - UserPrefs.get(Profile.getLastUsedRegularProfile()) - .setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue); + UserPrefs.get(mProfile).setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue); } return true; } @@ -225,17 +229,16 @@ * Updates the preferences. */ public void updatePreferences() { - PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); - ChromeSwitchPreference canMakePaymentPref = (ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT); if (canMakePaymentPref != null) { - canMakePaymentPref.setChecked(prefService.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED)); + canMakePaymentPref.setChecked( + UserPrefs.get(mProfile).getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED)); } Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK); if (doNotTrackPref != null) { - doNotTrackPref.setSummary(prefService.getBoolean(Pref.ENABLE_DO_NOT_TRACK) + doNotTrackPref.setSummary(UserPrefs.get(mProfile).getBoolean(Pref.ENABLE_DO_NOT_TRACK) ? R.string.text_on : R.string.text_off); } @@ -260,7 +263,7 @@ Preference usageStatsPref = findPreference(PREF_USAGE_STATS); if (usageStatsPref != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q - && prefService.getBoolean(Pref.USAGE_STATS_ENABLED)) { + && UserPrefs.get(mProfile).getBoolean(Pref.USAGE_STATS_ENABLED)) { usageStatsPref.setOnPreferenceClickListener(preference -> { UsageStatsConsentDialog .create(getActivity(), true, @@ -289,8 +292,37 @@ Preference thirdPartyCookies = findPreference(PREF_THIRD_PARTY_COOKIES); if (thirdPartyCookies != null) { thirdPartyCookies.setSummary(ContentSettingsResources.getThirdPartyCookieListSummary( - prefService.getInteger(COOKIE_CONTROLS_MODE))); + UserPrefs.get(mProfile).getInteger(COOKIE_CONTROLS_MODE))); } + + updatePrivacyGuidePreferenceTitle(); + } + + // TODO(crbug.com/1431101): This will be removed when the Privacy Guide is rolled out and no + // longer a new feature. + private void updatePrivacyGuidePreferenceTitle() { + Preference privacyGuide = findPreference(PREF_PRIVACY_GUIDE); + if (privacyGuide == null) { + return; + } + + final CharSequence privacyGuidePrefTitle; + if (!UserPrefs.get(mProfile).getBoolean(Pref.PRIVACY_GUIDE_VIEWED)) { + privacyGuidePrefTitle = SpanApplier.applySpans( + getString(R.string.privacy_guide_pref_title), + new SpanApplier.SpanInfo("<new>", "</new>", new SuperscriptSpan(), + new RelativeSizeSpan(0.75f), + new ForegroundColorSpan( + SemanticColorUtils.getDefaultTextColorAccent1(getContext())))); + } else { + privacyGuidePrefTitle = + (CharSequence) (SpanApplier + .removeSpanText( + getString(R.string.privacy_guide_pref_title), + new SpanApplier.SpanInfo("<new>", "</new>")) + .trim()); + } + privacyGuide.setTitle(privacyGuidePrefTitle); } @Override @@ -316,4 +348,9 @@ public void setHelpAndFeedbackLauncher(HelpAndFeedbackLauncher helpAndFeedbackLauncher) { mHelpAndFeedbackLauncher = helpAndFeedbackLauncher; } + + @Override + public void setProfile(Profile profile) { + mProfile = profile; + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java index 856c5e5..46e599b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
@@ -33,6 +33,7 @@ import org.chromium.chrome.browser.homepage.HomepageManager; import org.chromium.chrome.browser.homepage.HomepagePolicyManager; import org.chromium.chrome.browser.locale.LocaleManager; +import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.PrefChangeRegistrar; @@ -43,6 +44,7 @@ import org.chromium.chrome.browser.tab.TabLaunchType; import org.chromium.chrome.browser.tabmodel.TabCreator; import org.chromium.chrome.browser.tabmodel.TabModel; +import org.chromium.chrome.browser.tabmodel.TabModelObserver; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelUtils; import org.chromium.chrome.browser.tabmodel.TabPersistentStore.ActiveTabState; @@ -507,10 +509,28 @@ * Creates a new Tab. * @param tabCreator The {@link TabCreator} object. */ - public static Tab createNewTab(TabCreator tabCreator) { + public static Tab createNewTabAndShowHomeSurfaceUi(TabCreator tabCreator) { // Creates a new Tab if doesn't find an existing to reuse. - return tabCreator.createNewTab( + Tab tab = tabCreator.createNewTab( new LoadUrlParams(UrlConstants.NTP_URL), TabLaunchType.FROM_STARTUP, null); + showHomeSurfaceUiOnNtp(tab); + return tab; + } + + /** + * Shows the home surface UI on the next active NTP. + */ + public static void showHomeSurfaceOnNextNtp( + TabModel currentTabModel, TabModelSelector tabModelSelector) { + TabModelObserver observer = new TabModelObserver() { + @Override + public void didSelectTab(Tab tab, int type, int lastId) { + assert tab.isNativePage() && tab.getNativePage() instanceof NewTabPage; + ReturnToChromeUtil.showHomeSurfaceUiOnNtp(tab); + currentTabModel.removeObserver(this); + } + }; + tabModelSelector.getModel(false).addObserver(observer); } /** @@ -531,8 +551,9 @@ int indexOfFirstNtp = TabModelUtils.getTabIndexByUrl(currentTabModel, UrlConstants.NTP_URL); if (indexOfFirstNtp != TabModel.INVALID_TAB_INDEX) { TabModelUtils.setIndex(currentTabModel, indexOfFirstNtp, false); + showHomeSurfaceUiOnNtp(currentTabModel.getTabAt(indexOfFirstNtp)); } else { - createNewTab(tabCreator); + createNewTabAndShowHomeSurfaceUi(tabCreator); } } @@ -667,4 +688,12 @@ BrowserUiUtils.ModuleTypeOnStartAndNTP.TAB_SWITCHER_BUTTON); } } + + /** + * Shows the home surface UI on the given Ntp on tablets. + */ + private static void showHomeSurfaceUiOnNtp(Tab ntpTab) { + assert ntpTab.isNativePage(); + ((NewTabPage) ntpTab.getNativePage()).showHomeSurfaceUi(); + } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/FullscreenVideoPictureInPictureControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/FullscreenVideoPictureInPictureControllerTest.java index c9138275..26ec1a6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/FullscreenVideoPictureInPictureControllerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/FullscreenVideoPictureInPictureControllerTest.java
@@ -27,6 +27,7 @@ import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.init.AsyncInitializationActivity; import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; @@ -250,12 +251,18 @@ } private void testExitOn(Runnable runnable) throws Throwable { + AsyncInitializationActivity.interceptMoveTaskToBackForTesting(); + enterFullscreen(); triggerAutoPiPAndWait(); runnable.run(); - CriteriaHelper.pollUiThread(() -> !mActivity.getLastPictureInPictureModeForTesting()); + CriteriaHelper.pollUiThread( + AsyncInitializationActivity::wasMoveTaskToBackInterceptedForTesting); + // This logic would run if we hadn't intercepted moveTaskToBack (which is how PiP gets + // exited), so run it now just in case. + mActivity.onPictureInPictureModeChanged(false, mActivity.getResources().getConfiguration()); } /** A TabObserver that tracks whether a navigation has occurred. */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java index 795caad..38bfd56 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/NewTabPageTest.java
@@ -816,7 +816,7 @@ NewTabPage ntp = (NewTabPage) newTab.getNativePage(); NewTabPageLayout ntpLayout = ntp.getNewTabPageLayout(); - TestThreadUtils.runOnUiThreadBlocking(ntp::showHomeSurfaceUI); + TestThreadUtils.runOnUiThreadBlocking(ntp::showHomeSurfaceUi); View singleTabCardView = ntpLayout.findViewById(R.id.single_tab_view); assertEquals("The single tab card is still invisible after initialization.", View.VISIBLE, @@ -849,7 +849,7 @@ NewTabPage ntp = (NewTabPage) newTab.getNativePage(); NewTabPageLayout ntpLayout = ntp.getNewTabPageLayout(); - TestThreadUtils.runOnUiThreadBlocking(ntp::showHomeSurfaceUI); + TestThreadUtils.runOnUiThreadBlocking(ntp::showHomeSurfaceUi); ViewGroup singleTabCardViewContainer = ntpLayout.findViewById(R.id.tab_switcher_module_container); @@ -880,7 +880,7 @@ NewTabPage ntp = (NewTabPage) newTab.getNativePage(); NewTabPageLayout ntpLayout = ntp.getNewTabPageLayout(); - TestThreadUtils.runOnUiThreadBlocking(ntp::showHomeSurfaceUI); + TestThreadUtils.runOnUiThreadBlocking(ntp::showHomeSurfaceUi); ViewGroup singleTabCardViewContainer = ntpLayout.findViewById(R.id.tab_switcher_module_container);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/PrivacySettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/PrivacySettingsFragmentTest.java index 3625b32..d4281c8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/PrivacySettingsFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/PrivacySettingsFragmentTest.java
@@ -13,6 +13,7 @@ import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.chromium.base.test.util.Batch.PER_CLASS; @@ -28,7 +29,6 @@ import org.hamcrest.Matcher; import org.junit.After; import org.junit.Before; -import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -44,18 +44,22 @@ import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthManager; import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthSettingUtils; +import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.privacy_guide.PrivacyGuideInteractions; import org.chromium.chrome.browser.privacy_sandbox.FakePrivacySandboxBridge; import org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxBridgeJni; +import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.settings.SettingsActivityTestRule; +import org.chromium.chrome.test.ChromeBrowserTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.R; import org.chromium.chrome.test.util.ChromeRenderTestRule; import org.chromium.chrome.test.util.browser.Features; +import org.chromium.components.user_prefs.UserPrefs; import org.chromium.content_public.browser.test.util.TestThreadUtils; import java.io.IOException; +import java.util.concurrent.ExecutionException; /** * Tests for {@link PrivacySettings}. @@ -70,9 +74,8 @@ // Name of the histogram to record the entry on Privacy Guide via the S&P link-row. public static final String ENTRY_EXIT_HISTOGRAM = "Settings.PrivacyGuide.EntryExit"; - @ClassRule - public static final ChromeTabbedActivityTestRule sActivityTestRule = - new ChromeTabbedActivityTestRule(); + @Rule + public final ChromeBrowserTestRule mChromeBrowserTestRule = new ChromeBrowserTestRule(); @Rule public final SettingsActivityTestRule<PrivacySettings> mSettingsActivityTestRule = @@ -122,6 +125,20 @@ return null; } + private void setPrivacyGuideViewed(boolean isViewed) { + TestThreadUtils.runOnUiThreadBlocking( + () + -> UserPrefs.get(Profile.getLastUsedRegularProfile()) + .setBoolean(Pref.PRIVACY_GUIDE_VIEWED, isViewed)); + } + + private boolean isPrivacyGuideViewed() throws ExecutionException { + return TestThreadUtils.runOnUiThreadBlocking( + () + -> UserPrefs.get(Profile.getLastUsedRegularProfile()) + .getBoolean(Pref.PRIVACY_GUIDE_VIEWED)); + } + @Before public void setUp() { mFakePrivacySandboxBridge = new FakePrivacySandboxBridge(); @@ -164,6 +181,34 @@ @Test @LargeTest + @Feature({"RenderTest"}) + @Features.EnableFeatures(ChromeFeatureList.PRIVACY_GUIDE) + public void testRenderWhenPrivacyGuideViewed() throws IOException { + setPrivacyGuideViewed(true); + mSettingsActivityTestRule.startSettingsActivity(); + waitForOptionsMenu(); + View view = mSettingsActivityTestRule.getActivity() + .findViewById(android.R.id.content) + .getRootView(); + mRenderTestRule.render(view, "privacy_and_security_privacy_guide_label_without_new"); + } + + @Test + @LargeTest + @Feature({"RenderTest"}) + @Features.EnableFeatures(ChromeFeatureList.PRIVACY_GUIDE) + public void testRenderWhenPrivacyGuideNotViewed() throws IOException { + setPrivacyGuideViewed(false); + mSettingsActivityTestRule.startSettingsActivity(); + waitForOptionsMenu(); + View view = mSettingsActivityTestRule.getActivity() + .findViewById(android.R.id.content) + .getRootView(); + mRenderTestRule.render(view, "privacy_and_security_privacy_guide_label_with_new"); + } + + @Test + @LargeTest @Features.DisableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_SETTINGS_4) public void testPrivacySandboxV3View() throws IOException { mSettingsActivityTestRule.startSettingsActivity(); @@ -255,10 +300,9 @@ public void testPrivacyGuideLinkRowEntryPointUserAction() throws IOException { mSettingsActivityTestRule.startSettingsActivity(); mActionTester = new UserActionTester(); - PrivacySettings fragment = mSettingsActivityTestRule.getFragment(); // Scroll down and open Privacy Guide page. - scrollToSetting(withText(R.string.prefs_privacy_guide_title)); - onView(withText(R.string.prefs_privacy_guide_title)).perform(click()); + scrollToSetting(withText(R.string.privacy_guide_pref_summary)); + onView(withText(R.string.privacy_guide_pref_summary)).perform(click()); // Verify that the user action is emitted when privacy guide is clicked assertTrue( mActionTester.getActions().contains("Settings.PrivacyGuide.StartPrivacySettings")); @@ -269,15 +313,28 @@ @Features.EnableFeatures(ChromeFeatureList.PRIVACY_GUIDE) public void testPrivacyGuideLinkRowEntryExitHistogram() throws IOException { mSettingsActivityTestRule.startSettingsActivity(); - PrivacySettings fragment = mSettingsActivityTestRule.getFragment(); var histogram = HistogramWatcher.newSingleRecordWatcher( ENTRY_EXIT_HISTOGRAM, PrivacyGuideInteractions.SETTINGS_LINK_ROW_ENTRY); // Scroll down and open Privacy Guide page. - scrollToSetting(withText(R.string.prefs_privacy_guide_title)); - onView(withText(R.string.prefs_privacy_guide_title)).perform(click()); + scrollToSetting(withText(R.string.privacy_guide_pref_summary)); + onView(withText(R.string.privacy_guide_pref_summary)).perform(click()); histogram.assertExpected(); } + + @Test + @LargeTest + @Features.EnableFeatures(ChromeFeatureList.PRIVACY_GUIDE) + public void testPrivacyGuideNewLabelVisibility() throws ExecutionException { + setPrivacyGuideViewed(false); + mSettingsActivityTestRule.startSettingsActivity(); + assertFalse(isPrivacyGuideViewed()); + + // Open the privacy guide + onView(withText(R.string.privacy_guide_pref_summary)).perform(click()); + // Tapping on the privacy guide row should mark the privacy guide as viewed + assertTrue(isPrivacyGuideViewed()); + } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/settings/AddressEditorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/settings/AddressEditorTest.java index cf19fc4..252d670 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/settings/AddressEditorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/settings/AddressEditorTest.java
@@ -171,11 +171,6 @@ Locale.setDefault(DEFAULT_LOCALTE); } - private void setUpAddressEditor(boolean isMigrationToAccount) { - mAddressEditor = new AddressEditor(/*saveToDisk=*/false, isMigrationToAccount); - mAddressEditor.setEditorDialog(mEditorDialog); - } - private void setUpSupportedCountries(List<DropdownKeyValue> supportedContries) { doAnswer(invocation -> { List<String> contryCodes = (List<String>) invocation.getArguments()[0]; @@ -217,9 +212,10 @@ setUpAddressUiComponents(addressUiComponents, "US"); } - private void validateTextField(EditorFieldModel field, String value, int inputTypeHint, + private static void validateTextField(EditorFieldModel field, String value, int inputTypeHint, String label, boolean isRequired, boolean isFullLine, boolean hasLengthCounter) { Assert.assertTrue(field.isTextField()); + Assert.assertEquals(field.getValue(), value); Assert.assertEquals(inputTypeHint, field.getInputTypeHint()); Assert.assertEquals(label, field.getLabel()); Assert.assertEquals(isRequired, field.isRequired()); @@ -227,111 +223,259 @@ Assert.assertEquals(hasLengthCounter, field.hasLengthCounter()); } + private static void checkUiStringsHaveExpectedValues(EditorModel editorModel, + String expectedDeleteTitle, String expectedDeleteText, + @Nullable String expectedSourceNotice) { + Assert.assertNotNull(editorModel); + + Assert.assertEquals(expectedDeleteTitle, editorModel.getDeleteConfirmationTitle()); + Assert.assertEquals(expectedDeleteText, editorModel.getDeleteConfirmationText()); + Assert.assertEquals(expectedSourceNotice, editorModel.getFooterMessageText()); + } + + private void validateShownFields( + EditorModel editorModel, AutofillProfile profile, boolean shouldMarkFieldsRequired) { + Assert.assertNotNull(editorModel); + List<EditorFieldModel> editorFields = editorModel.getFields(); + // editorFields[0] - country dropdown. + // editorFields[1] - honorific field. + // editorFields[2] - full name field. + // editorFields[3] - admin area field. + // editorFields[4] - locality field. + // editorFields[5] - dependent locality field. + // editorFields[6] - organization field. + // editorFields[7] - sorting code field. + // editorFields[8] - postal code field. + // editorFields[9] - street address field. + // editorFields[10] - phone number field. + // editorFields[11] - email field. + // editorFields[12] - nickname field. + Assert.assertEquals(13, editorFields.size()); + + // Fields obtained from backend must be placed after the country dropdown. + // Note: honorific prefix always comes before the full name field. + validateTextField(editorFields.get(1), profile.getHonorificPrefix(), + EditorFieldModel.INPUT_TYPE_HINT_NONE, + mActivity.getString(R.string.autofill_profile_editor_honorific_prefix), false, true, + false); + validateTextField(editorFields.get(2), profile.getFullName(), + EditorFieldModel.INPUT_TYPE_HINT_PERSON_NAME, "full name label", + shouldMarkFieldsRequired, true, false); + validateTextField(editorFields.get(3), profile.getRegion(), + EditorFieldModel.INPUT_TYPE_HINT_NONE, "admin area label", false, true, false); + // Locality field is forced to occupy full line. + validateTextField(editorFields.get(4), profile.getLocality(), + EditorFieldModel.INPUT_TYPE_HINT_NONE, "locality label", shouldMarkFieldsRequired, + true, false); + + // Note: dependent locality is a required field for address profiles stored in Google + // account, but it's still marked as optional by the editor when the corresponding field in + // the address profile is empty. + validateTextField(editorFields.get(5), profile.getDependentLocality(), + EditorFieldModel.INPUT_TYPE_HINT_NONE, "dependent locality label", false, true, + false); + + validateTextField(editorFields.get(6), profile.getCompanyName(), + EditorFieldModel.INPUT_TYPE_HINT_NONE, "organization label", false, true, false); + + validateTextField(editorFields.get(7), profile.getSortingCode(), + EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "sorting code label", false, false, + false); + validateTextField(editorFields.get(8), profile.getPostalCode(), + EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "postal code label", + shouldMarkFieldsRequired, false, false); + validateTextField(editorFields.get(9), profile.getStreetAddress(), + EditorFieldModel.INPUT_TYPE_HINT_STREET_LINES, "street address label", + shouldMarkFieldsRequired, true, false); + } + @Test @SmallTest - public void validateUIStrings_NewAddressProfile() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + public void validateCustomDoneButtonText() { + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); setUpAddressUiComponents(new ArrayList()); mAddressEditor.setCustomDoneButtonText("Custom done"); - mAddressEditor.edit(null, unused -> { return; }); + mAddressEditor.edit(null, unused -> {}); EditorModel editorModel = mEditorModelCapture.getValue(); Assert.assertNotNull(editorModel); - Assert.assertEquals( - mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title), - editorModel.getDeleteConfirmationTitle()); Assert.assertEquals("Custom done", editorModel.getCustomDoneButtonText()); - Assert.assertNull(editorModel.getFooterMessageText()); - Assert.assertEquals( - mActivity.getString(R.string.autofill_delete_local_address_source_notice), - editorModel.getDeleteConfirmationText()); + } + + @Test + @SmallTest + public void validateUIStrings_NewAddressProfile() { + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); + setUpAddressUiComponents(new ArrayList()); + mAddressEditor.edit(null, unused -> {}); + + final String deleteTitle = + mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title); + final String deleteText = + mActivity.getString(R.string.autofill_delete_local_address_source_notice); + final String sourceNotice = null; + + checkUiStringsHaveExpectedValues( + mEditorModelCapture.getValue(), deleteTitle, deleteText, sourceNotice); } @Test @SmallTest public void validateUIStrings_LocalOrSyncAddressProfile_AddressSyncDisabled() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); setUpAddressUiComponents(new ArrayList()); - mAddressEditor.setCustomDoneButtonText("Custom done"); - mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> { return; }); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); - EditorModel editorModel = mEditorModelCapture.getValue(); - Assert.assertNotNull(editorModel); + final String deleteTitle = + mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title); + final String deleteText = + mActivity.getString(R.string.autofill_delete_local_address_source_notice); + final String sourceNotice = null; - Assert.assertEquals( - mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title), - editorModel.getDeleteConfirmationTitle()); - Assert.assertEquals("Custom done", editorModel.getCustomDoneButtonText()); - Assert.assertNull(editorModel.getFooterMessageText()); - Assert.assertEquals( - mActivity.getString(R.string.autofill_delete_local_address_source_notice), - editorModel.getDeleteConfirmationText()); + checkUiStringsHaveExpectedValues( + mEditorModelCapture.getValue(), deleteTitle, deleteText, sourceNotice); } @Test @SmallTest public void validateUIStrings_LocalOrSyncAddressProfile_AddressSyncEnabled() { - setUpAddressEditor(/*isMigrationToAccount=*/false); - setUpAddressUiComponents(new ArrayList()); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); when(mSyncService.isSyncFeatureEnabled()).thenReturn(true); when(mSyncService.getSelectedTypes()) .thenReturn(Collections.singleton(UserSelectableType.AUTOFILL)); - mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> { return; }); - EditorModel editorModel = mEditorModelCapture.getValue(); - Assert.assertNotNull(editorModel); - Assert.assertNull(editorModel.getFooterMessageText()); - Assert.assertEquals( - mActivity.getString(R.string.autofill_delete_sync_address_source_notice), - editorModel.getDeleteConfirmationText()); + setUpAddressUiComponents(new ArrayList()); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); + + final String deleteTitle = + mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title); + final String deleteText = + mActivity.getString(R.string.autofill_delete_sync_address_source_notice); + final String sourceNotice = null; + + checkUiStringsHaveExpectedValues( + mEditorModelCapture.getValue(), deleteTitle, deleteText, sourceNotice); + } + + @Test + @SmallTest + public void validateUIStrings_UpdateLocalOrSyncAddressProfile_AddressSyncDisabled() { + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/true, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); + setUpAddressUiComponents(new ArrayList()); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); + + final String deleteTitle = + mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title); + final String deleteText = + mActivity.getString(R.string.autofill_delete_local_address_source_notice); + final String sourceNotice = null; + + checkUiStringsHaveExpectedValues( + mEditorModelCapture.getValue(), deleteTitle, deleteText, sourceNotice); + } + + @Test + @SmallTest + public void validateUIStrings_UpdateLocalOrSyncAddressProfile_AddressSyncEnabled() { + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/true, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); + when(mSyncService.isSyncFeatureEnabled()).thenReturn(true); + when(mSyncService.getSelectedTypes()) + .thenReturn(Collections.singleton(UserSelectableType.AUTOFILL)); + + setUpAddressUiComponents(new ArrayList()); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); + + final String deleteTitle = + mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title); + final String deleteText = + mActivity.getString(R.string.autofill_delete_sync_address_source_notice); + final String sourceNotice = null; + + checkUiStringsHaveExpectedValues( + mEditorModelCapture.getValue(), deleteTitle, deleteText, sourceNotice); } @Test @SmallTest public void validateUIStrings_LocalOrSyncAddressProfile_MigrationToAccount() { - setUpAddressEditor(/*isMigrationToAccount=*/true); - setUpAddressUiComponents(new ArrayList()); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/true); + mAddressEditor.setEditorDialog(mEditorDialog); when(mSyncService.isSyncFeatureEnabled()).thenReturn(true); when(mSyncService.getSelectedTypes()) .thenReturn(Collections.singleton(UserSelectableType.AUTOFILL)); - mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> { return; }); - EditorModel editorModel = mEditorModelCapture.getValue(); - Assert.assertNotNull(editorModel); - Assert.assertEquals( - mActivity.getString(R.string.autofill_edit_account_address_source_notice) - .replace("$1", USER_EMAIL), - editorModel.getFooterMessageText()); - Assert.assertEquals( + setUpAddressUiComponents(new ArrayList()); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); + + final String deleteTitle = + mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title); + final String deleteText = mActivity.getString(R.string.autofill_delete_account_address_source_notice) - .replace("$1", USER_EMAIL), - editorModel.getDeleteConfirmationText()); + .replace("$1", USER_EMAIL); + final String sourceNotice = + mActivity.getString(R.string.autofill_edit_account_address_source_notice) + .replace("$1", USER_EMAIL); + + checkUiStringsHaveExpectedValues( + mEditorModelCapture.getValue(), deleteTitle, deleteText, sourceNotice); } @Test @SmallTest - public void validateUIStrings_AccountAddressProfile() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + public void validateUIStrings_AccountAddressProfile_SaveInAccountFlow() { + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); setUpAddressUiComponents(new ArrayList()); - mAddressEditor.setCustomDoneButtonText("Custom done"); - mAddressEditor.edit(new AutofillAddress(mActivity, sAccountProfile), unused -> { return; }); + mAddressEditor.edit(new AutofillAddress(mActivity, sAccountProfile), unused -> {}); - EditorModel editorModel = mEditorModelCapture.getValue(); - Assert.assertNotNull(editorModel); - - Assert.assertEquals( - mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title), - editorModel.getDeleteConfirmationTitle()); - Assert.assertEquals("Custom done", editorModel.getCustomDoneButtonText()); - Assert.assertEquals( - mActivity.getString(R.string.autofill_edit_account_address_source_notice) - .replace("$1", USER_EMAIL), - editorModel.getFooterMessageText()); - Assert.assertEquals( + final String deleteTitle = + mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title); + final String deleteText = mActivity.getString(R.string.autofill_delete_account_address_source_notice) - .replace("$1", USER_EMAIL), - editorModel.getDeleteConfirmationText()); + .replace("$1", USER_EMAIL); + final String sourceNotice = + mActivity.getString(R.string.autofill_edit_account_address_source_notice) + .replace("$1", USER_EMAIL); + + checkUiStringsHaveExpectedValues( + mEditorModelCapture.getValue(), deleteTitle, deleteText, sourceNotice); + } + + @Test + @SmallTest + public void validateUIStrings_AccountAddressProfile_UpdateAccountProfileFlow() { + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/true, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); + setUpAddressUiComponents(new ArrayList()); + mAddressEditor.edit(new AutofillAddress(mActivity, sAccountProfile), unused -> {}); + + final String deleteTitle = + mActivity.getString(R.string.autofill_delete_address_confirmation_dialog_title); + final String deleteText = + mActivity.getString(R.string.autofill_delete_account_address_source_notice) + .replace("$1", USER_EMAIL); + final String sourceNotice = + mActivity.getString(R.string.autofill_edit_account_address_source_notice) + .replace("$1", USER_EMAIL); + + checkUiStringsHaveExpectedValues( + mEditorModelCapture.getValue(), deleteTitle, deleteText, sourceNotice); } @Test @@ -340,9 +484,11 @@ ChromeFeatureList.AUTOFILL_ENABLE_SUPPORT_FOR_HONORIFIC_PREFIXES}) public void validateDefaultFields_NicknamesDisabled_HonorificDisabled() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); setUpAddressUiComponents(new ArrayList()); - mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> { return; }); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); Assert.assertNotNull(mEditorModelCapture.getValue()); List<EditorFieldModel> editorFields = mEditorModelCapture.getValue().getFields(); @@ -378,9 +524,11 @@ @Test @SmallTest public void validateDefaultFields() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); setUpAddressUiComponents(new ArrayList()); - mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> { return; }); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); Assert.assertNotNull(mEditorModelCapture.getValue()); List<EditorFieldModel> editorFields = mEditorModelCapture.getValue().getFields(); @@ -392,255 +540,101 @@ // editorFields[3] - nickname field. Assert.assertEquals(4, editorFields.size()); - validateTextField(editorFields.get(3), "", EditorFieldModel.INPUT_TYPE_HINT_NONE, "Label", + validateTextField(editorFields.get(3), null, EditorFieldModel.INPUT_TYPE_HINT_NONE, "Label", false, true, false); } @Test @SmallTest public void validateShownFields_NewAddressProfile() { - setUpAddressEditor(/*isMigrationToAccount=*/false); - AutofillProfile emptyProfile = new AutofillProfile(); setUpAddressUiComponents(sSupportedAddressFields); - mAddressEditor.edit(null, unused -> { return; }); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); - Assert.assertNotNull(mEditorModelCapture.getValue()); - List<EditorFieldModel> editorFields = mEditorModelCapture.getValue().getFields(); - // editorFields[0] - country dropdown. - // editorFields[1] - honorific field. - // editorFields[2] - full name field. - // editorFields[3] - admin area field. - // editorFields[4] - locality field. - // editorFields[5] - dependent locality field. - // editorFields[6] - organization field. - // editorFields[7] - sorting code field. - // editorFields[8] - postal code field. - // editorFields[9] - street address field. - // editorFields[10] - phone number field. - // editorFields[11] - email field. - // editorFields[12] - nickname field. - Assert.assertEquals(13, editorFields.size()); - - // Fields obtained from backend must be placed after the country dropdown. - // Note: honorific prefix always comes before the full name field. - validateTextField(editorFields.get(1), emptyProfile.getHonorificPrefix(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, - mActivity.getString(R.string.autofill_profile_editor_honorific_prefix), false, true, - false); - validateTextField(editorFields.get(2), emptyProfile.getFullName(), - EditorFieldModel.INPUT_TYPE_HINT_PERSON_NAME, "full name label", false, true, - false); - validateTextField(editorFields.get(3), emptyProfile.getRegion(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "admin area label", false, true, false); - // Locality field is forced to occupy full line. - validateTextField(editorFields.get(4), emptyProfile.getLocality(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "locality label", false, true, false); - - validateTextField(editorFields.get(5), emptyProfile.getDependentLocality(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "dependent locality label", false, true, - false); - - validateTextField(editorFields.get(6), emptyProfile.getSortingCode(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "organization label", false, true, false); - - validateTextField(editorFields.get(7), emptyProfile.getCompanyName(), - EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "sorting code label", false, false, - false); - validateTextField(editorFields.get(8), emptyProfile.getPostalCode(), - EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "postal code label", false, false, - false); - validateTextField(editorFields.get(9), emptyProfile.getStreetAddress(), - EditorFieldModel.INPUT_TYPE_HINT_STREET_LINES, "street address label", false, true, - false); + mAddressEditor.edit(null, unused -> {}); + validateShownFields(mEditorModelCapture.getValue(), new AutofillProfile(), + /*shouldMarkFieldsRequired=*/false); } @Test @SmallTest - public void validateShownFields_LocalOrSyncAddressProfile() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + public void validateShownFields_LocalOrSyncAddressProfile_SaveLocally() { setUpAddressUiComponents(sSupportedAddressFields); - mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> { return; }); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); - Assert.assertNotNull(mEditorModelCapture.getValue()); - List<EditorFieldModel> editorFields = mEditorModelCapture.getValue().getFields(); - // editorFields[0] - country dropdown. - // editorFields[1] - honorific field. - // editorFields[2] - full name field. - // editorFields[3] - admin area field. - // editorFields[4] - locality field. - // editorFields[5] - dependent locality field. - // editorFields[6] - organization field. - // editorFields[7] - sorting code field. - // editorFields[8] - postal code field. - // editorFields[9] - street address field. - // editorFields[10] - phone number field. - // editorFields[11] - email field. - // editorFields[12] - nickname field. - Assert.assertEquals(13, editorFields.size()); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); + validateShownFields( + mEditorModelCapture.getValue(), sLocalProfile, /*shouldMarkFieldsRequired=*/false); + } - // Fields obtained from backend must be placed after the country dropdown. - // Note: honorific prefix always comes before the full name field. - validateTextField(editorFields.get(1), sLocalProfile.getHonorificPrefix(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, - mActivity.getString(R.string.autofill_profile_editor_honorific_prefix), false, true, - false); - validateTextField(editorFields.get(2), sLocalProfile.getFullName(), - EditorFieldModel.INPUT_TYPE_HINT_PERSON_NAME, "full name label", false, true, - false); - validateTextField(editorFields.get(3), sLocalProfile.getRegion(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "admin area label", false, true, false); - // Locality field is forced to occupy full line. - validateTextField(editorFields.get(4), sLocalProfile.getLocality(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "locality label", false, true, false); + @Test + @SmallTest + public void validateShownFields_LocalOrSyncAddressProfile_UpdateLocally() { + setUpAddressUiComponents(sSupportedAddressFields); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/true, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); - validateTextField(editorFields.get(5), sLocalProfile.getDependentLocality(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "dependent locality label", false, true, - false); - - validateTextField(editorFields.get(6), sLocalProfile.getSortingCode(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "organization label", false, true, false); - - validateTextField(editorFields.get(7), sLocalProfile.getCompanyName(), - EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "sorting code label", false, false, - false); - validateTextField(editorFields.get(8), sLocalProfile.getPostalCode(), - EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "postal code label", false, false, - false); - validateTextField(editorFields.get(9), sLocalProfile.getStreetAddress(), - EditorFieldModel.INPUT_TYPE_HINT_STREET_LINES, "street address label", false, true, - false); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); + validateShownFields( + mEditorModelCapture.getValue(), sLocalProfile, /*shouldMarkFieldsRequired=*/false); } @Test @SmallTest public void validateShownFields_LocalOrSyncAddressProfile_MigrationToAccount() { - setUpAddressEditor(/*isMigrationToAccount=*/true); setUpAddressUiComponents(sSupportedAddressFields); - mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> { return; }); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/true); + mAddressEditor.setEditorDialog(mEditorDialog); - Assert.assertNotNull(mEditorModelCapture.getValue()); - List<EditorFieldModel> editorFields = mEditorModelCapture.getValue().getFields(); - // editorFields[0] - country dropdown. - // editorFields[1] - honorific field. - // editorFields[2] - full name field. - // editorFields[3] - admin area field. - // editorFields[4] - locality field. - // editorFields[5] - dependent locality field. - // editorFields[6] - organization field. - // editorFields[7] - sorting code field. - // editorFields[8] - postal code field. - // editorFields[9] - street address field. - // editorFields[10] - phone number field. - // editorFields[11] - email field. - // editorFields[12] - nickname field. - Assert.assertEquals(13, editorFields.size()); - - // Fields obtained from backend must be placed after the country dropdown. - // Note: honorific prefix always comes before the full name field. - validateTextField(editorFields.get(1), sLocalProfile.getHonorificPrefix(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, - mActivity.getString(R.string.autofill_profile_editor_honorific_prefix), false, true, - false); - validateTextField(editorFields.get(2), sLocalProfile.getFullName(), - EditorFieldModel.INPUT_TYPE_HINT_PERSON_NAME, "full name label", true, true, false); - validateTextField(editorFields.get(3), sLocalProfile.getRegion(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "admin area label", false, true, false); - // Locality field is forced to occupy full line. - validateTextField(editorFields.get(4), sLocalProfile.getLocality(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "locality label", true, true, false); - - // Dependent locality is empty and address profile is going to be stored in account, - // this way it is still considered optional by the editor, although it is required - // for newly created address profiles. Dependenent locality field is forced to occupy - // full line. - validateTextField(editorFields.get(5), sLocalProfile.getDependentLocality(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "dependent locality label", false, true, - false); - - validateTextField(editorFields.get(6), sLocalProfile.getSortingCode(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "organization label", false, true, false); - - validateTextField(editorFields.get(7), sLocalProfile.getCompanyName(), - EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "sorting code label", false, false, - false); - validateTextField(editorFields.get(8), sLocalProfile.getPostalCode(), - EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "postal code label", true, false, - false); - validateTextField(editorFields.get(9), sLocalProfile.getStreetAddress(), - EditorFieldModel.INPUT_TYPE_HINT_STREET_LINES, "street address label", true, true, - false); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); + validateShownFields( + mEditorModelCapture.getValue(), sLocalProfile, /*shouldMarkFieldsRequired=*/true); } @Test @SmallTest - public void validateShownFields_AccountProfile() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + public void validateShownFields_AccountProfile_SaveInAccountFlow() { setUpAddressUiComponents(sSupportedAddressFields); - mAddressEditor.edit(new AutofillAddress(mActivity, sAccountProfile), unused -> { return; }); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); - Assert.assertNotNull(mEditorModelCapture.getValue()); - List<EditorFieldModel> editorFields = mEditorModelCapture.getValue().getFields(); - // editorFields[0] - country dropdown. - // editorFields[1] - honorific field. - // editorFields[2] - full name field. - // editorFields[3] - admin area field. - // editorFields[4] - locality field. - // editorFields[5] - dependent locality field. - // editorFields[6] - organization field. - // editorFields[7] - sorting code field. - // editorFields[8] - postal code field. - // editorFields[9] - street address field. - // editorFields[10] - phone number field. - // editorFields[11] - email field. - // editorFields[12] - nickname field. - Assert.assertEquals(13, editorFields.size()); + mAddressEditor.edit(new AutofillAddress(mActivity, sAccountProfile), unused -> {}); + validateShownFields( + mEditorModelCapture.getValue(), sAccountProfile, /*shouldMarkFieldsRequired=*/true); + } - // Fields obtained from backend must be placed after the country dropdown. - // Note: honorific prefix always comes before the full name field. - validateTextField(editorFields.get(1), sAccountProfile.getHonorificPrefix(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, - mActivity.getString(R.string.autofill_profile_editor_honorific_prefix), false, true, - false); - validateTextField(editorFields.get(2), sAccountProfile.getFullName(), - EditorFieldModel.INPUT_TYPE_HINT_PERSON_NAME, "full name label", true, true, false); - validateTextField(editorFields.get(3), sAccountProfile.getRegion(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "admin area label", false, true, false); - // Locality field is forced to occupy full line. - validateTextField(editorFields.get(4), sAccountProfile.getLocality(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "locality label", true, true, false); + @Test + @SmallTest + public void validateShownFields_AccountProfile_UpdateAlreadySaved() { + setUpAddressUiComponents(sSupportedAddressFields); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/true, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); - // Dependent locality is empty and address profile stored in account, this way it is still - // considered optional by the editor, although it is required for newly created address - // profiles. Dependenent locality field is forced to occupy full line. - validateTextField(editorFields.get(5), sAccountProfile.getDependentLocality(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "dependent locality label", false, true, - false); - - validateTextField(editorFields.get(6), sAccountProfile.getSortingCode(), - EditorFieldModel.INPUT_TYPE_HINT_NONE, "organization label", false, true, false); - - validateTextField(editorFields.get(7), sAccountProfile.getCompanyName(), - EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "sorting code label", false, false, - false); - validateTextField(editorFields.get(8), sAccountProfile.getPostalCode(), - EditorFieldModel.INPUT_TYPE_HINT_ALPHA_NUMERIC, "postal code label", true, false, - false); - validateTextField(editorFields.get(9), sAccountProfile.getStreetAddress(), - EditorFieldModel.INPUT_TYPE_HINT_STREET_LINES, "street address label", true, true, - false); + mAddressEditor.edit(new AutofillAddress(mActivity, sAccountProfile), unused -> {}); + validateShownFields( + mEditorModelCapture.getValue(), sAccountProfile, /*shouldMarkFieldsRequired=*/true); } @Test @SmallTest public void edit_ChangeCountry_FieldsSetChanges() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); setUpAddressUiComponents(List.of(new AddressUiComponent(AddressField.SORTING_CODE, "sorting code label", false, true)), "US"); setUpAddressUiComponents(List.of(new AddressUiComponent(AddressField.STREET_ADDRESS, "street address label", true, true)), "DE"); - mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> { return; }); + mAddressEditor.edit(new AutofillAddress(mActivity, sLocalProfile), unused -> {}); Assert.assertNotNull(mEditorModelCapture.getValue()); List<EditorFieldModel> editorFields = mEditorModelCapture.getValue().getFields(); @@ -681,7 +675,9 @@ @Test @SmallTest public void edit_AlterProfile_Cancel() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); AutofillProfile toEdit = new AutofillProfile(sLocalProfile); setUpAddressUiComponents(sSupportedAddressFields); mAddressEditor.edit(new AutofillAddress(mActivity, toEdit), mDoneCallback); @@ -709,7 +705,9 @@ @Test @SmallTest public void edit_AlterProfile_CommitChanges() { - setUpAddressEditor(/*isMigrationToAccount=*/false); + mAddressEditor = new AddressEditor( + /*saveToDisk=*/false, /*isUpdate=*/false, /*isMigrationToAccount=*/false); + mAddressEditor.setEditorDialog(mEditorDialog); AutofillProfile toEdit = new AutofillProfile(sLocalProfile); setUpAddressUiComponents(sSupportedAddressFields); mAddressEditor.edit(new AutofillAddress(mActivity, toEdit), mDoneCallback);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java index 832d790..07f11a0 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtilUnitTest.java
@@ -45,6 +45,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.homepage.HomepageManager; import org.chromium.chrome.browser.homepage.HomepagePolicyManager; +import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.tab.Tab; @@ -133,6 +134,8 @@ private Tab mTab1; @Mock private Tab mNtpTab; + @Mock + private NewTabPage mNewTabPage; @Before public void setUp() { @@ -548,12 +551,17 @@ doReturn(2).when(mCurrentTabModel).getCount(); doReturn(JUnitTestGURLs.getGURL(JUnitTestGURLs.URL_1)).when(mTab1).getUrl(); doReturn(mTab1).when(mCurrentTabModel).getTabAt(0); + doReturn(JUnitTestGURLs.getGURL(JUnitTestGURLs.NTP_NATIVE_URL)).when(mNtpTab).getUrl(); + doReturn(true).when(mNtpTab).isNativePage(); + doReturn(mNewTabPage).when(mNtpTab).getNativePage(); doReturn(mNtpTab).when(mCurrentTabModel).getTabAt(1); + ReturnToChromeUtil.setInitialOverviewStateOnResumeOnTablet( false, true /* shouldShowNtpHomeSurfaceOnStartup */, mCurrentTabModel, mTabCreater); verify(mTabCreater, never()).createNewTab(any(), eq(TabLaunchType.FROM_STARTUP), eq(null)); verify(mCurrentTabModel).setIndex(eq(1), eq(TabSelectionType.FROM_USER), eq(false)); + verify(mNewTabPage).showHomeSurfaceUi(); } @Test @@ -573,12 +581,15 @@ // Verifies that a new NTP is created when there isn't any existing one to reuse. doReturn(2).when(mNtpTab).getId(); + doReturn(true).when(mNtpTab).isNativePage(); + doReturn(mNewTabPage).when(mNtpTab).getNativePage(); doReturn(mNtpTab) .when(mTabCreater) .createNewTab(any(), eq(TabLaunchType.FROM_STARTUP), eq(null)); ReturnToChromeUtil.setInitialOverviewStateOnResumeOnTablet( false, true /* shouldShowNtpHomeSurfaceOnStartup */, mCurrentTabModel, mTabCreater); verify(mTabCreater, times(1)).createNewTab(any(), eq(TabLaunchType.FROM_STARTUP), eq(null)); + verify(mNewTabPage).showHomeSurfaceUi(); } private Intent createMainIntentFromLauncher() {
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt index d4e8d39..3b89e31 100644 --- a/chrome/android/profiles/newest.txt +++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-114.0.5695.0_rc-r2-merged.afdo.bz2 +chromeos-chrome-amd64-114.0.5697.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/android/webapk/libs/runtime_library/BUILD.gn b/chrome/android/webapk/libs/runtime_library/BUILD.gn index f43d9f9..f192bb1 100644 --- a/chrome/android/webapk/libs/runtime_library/BUILD.gn +++ b/chrome/android/webapk/libs/runtime_library/BUILD.gn
@@ -32,21 +32,13 @@ sources = [ "src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java" ] srcjar_deps = [ ":webapk_service_aidl" ] - deps = [ - "//third_party/androidx:androidx_annotation_annotation_java", - "//third_party/androidx:androidx_core_core_java", - ] } # The subset of runtime_library_from_assets_java needed for tests. android_library("runtime_library_for_tests_java") { sources = [ "src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java" ] - deps = [ - ":webapk_service_aidl_java", - "//third_party/androidx:androidx_annotation_annotation_java", - "//third_party/androidx:androidx_core_core_java", - ] + deps = [ ":webapk_service_aidl_java" ] } dist_dex("webapk_runtime_library") {
diff --git a/chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java b/chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java index 9e970df..1fcf6c7f 100644 --- a/chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java +++ b/chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java
@@ -19,8 +19,6 @@ import android.text.TextUtils; import android.util.Log; -import androidx.core.app.NotificationManagerCompat; - /** * Implements services offered by the WebAPK to Chrome. */ @@ -89,7 +87,9 @@ Log.w(TAG, "Should NOT reach WebApkServiceImpl#notificationPermissionEnabled() because it is" + " deprecated."); - return NotificationManagerCompat.from(mContext).areNotificationsEnabled(); + NotificationManager notificationManager = + (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); + return notificationManager.areNotificationsEnabled(); } @SuppressLint("NewApi")
diff --git a/chrome/app/chrome_command_ids.h b/chrome/app/chrome_command_ids.h index 885be4b..ba6598c45 100644 --- a/chrome/app/chrome_command_ids.h +++ b/chrome/app/chrome_command_ids.h
@@ -148,6 +148,9 @@ #define IDC_CLOSE_FIND_OR_STOP 37003 #define IDC_FIND_MENU 37100 +// Find/Edit sub menu +#define IDC_FIND_AND_EDIT_MENU 37200 + // Zoom #define IDC_ZOOM_MENU 38000 #define IDC_ZOOM_PLUS 38001
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 4475add..7ae810e 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -1177,6 +1177,9 @@ <message name="IDS_FIND" desc="The text label of the Find... menu item"> &Find... </message> + <message name="IDS_FIND_AND_EDIT_MENU" desc="The text label of the Find and edit sub menu item"> + &Find and edit + </message> <message name="IDS_SAVE_PAGE" desc="The text label of the Save Page As menu item"> Save page &as... </message> @@ -1263,6 +1266,9 @@ <message name="IDS_FIND" desc="In Title Case: The text label of the Find... menu item"> &Find... </message> + <message name="IDS_FIND_AND_EDIT_MENU" desc="In Title Case: The text label of the Find and edit sub menu item"> + &Find and Edit + </message> <message name="IDS_SAVE_PAGE" desc="In Title Case: The text label of the Save Page As menu item"> Save Page &As... </message>
diff --git a/chrome/app/generated_resources_grd/IDS_FIND_AND_EDIT_MENU.png.sha1 b/chrome/app/generated_resources_grd/IDS_FIND_AND_EDIT_MENU.png.sha1 new file mode 100644 index 0000000..551a9b78 --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_FIND_AND_EDIT_MENU.png.sha1
@@ -0,0 +1 @@ +7c71ec39dab4d551b962ce4ceb2794776eaccb13 \ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb index da3c45b..45ec2ce 100644 --- a/chrome/app/resources/chromium_strings_ar.xtb +++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -163,7 +163,7 @@ <translation id="4708774505295300557">سجّل شخص ما الدخول من قبل إلى Chromium على جهاز الكمبيوتر هذا باسم <ph name="ACCOUNT_EMAIL_LAST" />. يُرجى إنشاء حساب مستخدم جديد في Chromium للإبقاء على معلوماتك بشكلٍ منفصل.</translation> <translation id="4746050847053251315">هل تريد الخروج من Chromium على أي حال؟</translation> <translation id="4748217263233248895">تم للتو تطبيق تحديث أمان خاص لمتصفِّح Chromium. يمكنك إعادة التشغيل الآن وستتم استعادة علامات التبويب.</translation> -<translation id="4765210420921718862">يمكنك تغيير رأيك متى شئت من خلال إعدادات Chromium. تتم هذه التجارب جنبًا إلى جنب مع الطريقة الحالية لعرض الإعلانات، لذا لن تظهر التغيرات على الفور.</translation> +<translation id="4765210420921718862">يمكنك تغيير رأيك متى شئت من خلال إعدادات Chrome. نجري هذه التجارب بدون إيقاف الإعدادات الحالية لعرض الإعلانات، لذا لن تظهر التغييرات على الفور.</translation> <translation id="4788777615168560705">يتعذّر على Chromium التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة أو <ph name="BEGIN_LINK" />التحقُّق من كلمات المرور في حسابك على Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">يستخدم ذلك المدقق الإملائي نفسه الذي يتم استخدامه في "بحث Google". ويتم إرسال النص الذي تكتبه في المتصفّح إلى Google. يمكنك دائمًا تغيير هذا السلوك في الإعدادات.</translation> <translation id="4888717733111232871">قاعدة الوارد إلى Chromium للسماح بحركة مرور mDNS.</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb index 885448f6..c7ceb407 100644 --- a/chrome/app/resources/chromium_strings_ru.xtb +++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -249,7 +249,7 @@ <translation id="6598877126913850652">Открыть настройки уведомлений Chromium</translation> <translation id="6613594504749178791">Изменения вступят в силу при следующем входе в Chromium.</translation> <translation id="665732753414869868">Для создания 3D-карты места, в котором вы находитесь, браузеру Chromium требуется доступ к камере.</translation> -<translation id="6663852025006259149">Скорее всего, сайты продолжат работать привычным образом, но данные о ваших действиях будут удаляться после закрытия всех окон браузера Chromium</translation> +<translation id="6663852025006259149">Скорее всего, сайты сайты будут работать так, как вы ожидаете, но после закрытия всех окон Chromium данные о ваших действиях будут удаляться</translation> <translation id="6676384891291319759">Доступ в Интернет</translation> <translation id="668175097507315160">Не удалось синхронизировать данные из-за ошибки входа в аккаунт.</translation> <translation id="6709350901466051922">Браузер Chromium запрашивает доступ к микрофону для этого сайта.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 20d40a94..034b422d 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">Sien "Onlangse hoogtepunte" en ander herinneringe hier</translation> <translation id="2114896190328250491">Foto deur <ph name="NAME" /></translation> <translation id="2114995631896158695">Geen SIM-kaart ingesit nie</translation> -<translation id="2116020356255810305">Aktiveer begin van app met afskop</translation> <translation id="2116619964159595185">Werwe koppel gewoonlik aan Bluetooth-toestelle vir kenmerke soos om 'n lae-energiebaken, 'n gesondheid- of fiksheidnaspoorder, of 'n slimgloeilamp op te stel of te sinkroniseer</translation> <translation id="2117655453726830283">Volgende skyfie</translation> <translation id="2119349053129246860">Maak in <ph name="APP" /> oop</translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">Naam</translation> <translation id="3803345858388753269">Videogehalte</translation> <translation id="3803367742635802571">Werwe wat jy besoek, sal dalk nie meer werk soos ontwerp nie</translation> -<translation id="3803583375545057606">Vra jou ouer om hierdie uitbreiding te aktiveer?</translation> <translation id="380408572480438692">As die insameling van prestasiedata geaktiveer word, sal dit Google help om die stelsel oor tyd te verbeter. Geen data word gestuur totdat jy 'n terugvoeringverslag (Alt-Shift-I) indien en prestasiedata insluit nie. Jy kan te eniger tyd na hierdie skerm terugkeer om insameling te deaktiveer.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (uitbreiding-ID "<ph name="EXTENSION_ID" />") word nie op 'n aanmeldskerm toegelaat nie.</translation> <translation id="3807747707162121253">Kanselleer</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Moenie toelaat nie</translation> <translation id="4170314459383239649">Vee uit wanneer uitgegaan is</translation> <translation id="417096670996204801">Kies 'n profiel</translation> -<translation id="41725145403849567">Vra jou ouer om hierdie uitbreiding by te voeg?</translation> <translation id="4175137578744761569">Ligpers en wit</translation> <translation id="4175737294868205930">Aanhoudende berging</translation> <translation id="4176463684765177261">Gedeaktiveer</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN moet minstens 1 karakter wees}other{PIN moet minstens # karakters wees}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> vereis dat jy nou aan wi-fi koppel en 'n opdatering aflaai. Of laai oor 'n beperkte verbinding af (heffings kan geld).</translation> <translation id="5476016146231427848">Herbegin asseblief jou toestel om Steam op Chromebook te gebruik</translation> -<translation id="5476897066181964657">’n Ouer of voog moet sê dat dit aanvaarbaar is vir jou om hierdie uitbreiding by te voeg</translation> <translation id="5481273127572794904">Mag nie outomaties veelvuldige lêers aflaai nie</translation> <translation id="5481941284378890518">Voeg nabygeleë drukkers by</translation> <translation id="5483785310822538350">Herroep lêer- en toesteltoegang</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">Skakel warmkol af</translation> <translation id="5556459405103347317">Herlaai</translation> <translation id="5558129378926964177">Zoem in</translation> -<translation id="5558247502209241936">Aktiveer oopmaak van app in venster</translation> <translation id="5559311991468302423">Vee adres uit</translation> <translation id="55601339223879446">Verstel die grense van jou werkskerm binne die skerm</translation> <translation id="5561162485081632007">Bespeur en waarsku jou oor gevaarlike gevalle wanneer hulle plaasvind</translation> @@ -6032,7 +6027,6 @@ <translation id="6305607932814307878">Globale beleid:</translation> <translation id="6305702903308659374">Speel teen normale volume selfs as ChromeVox besig is om te praat</translation> <translation id="6305909198255586420">Installeer asseblief met jou primêre profiel</translation> -<translation id="630750887748244481">Jou ouer het “Toestemmings vir werwe, programme en uitbreidings” vir Chrome afgeskakel. Hierdie uitbreiding mag nie bygevoeg word nie.</translation> <translation id="6307990684951724544">Stelsel besig</translation> <translation id="6308493641021088955">Aanmelding verskaf deur <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Stoor skakel as …</translation> @@ -6858,7 +6852,6 @@ <translation id="7025190659207909717">Mobieledatadiensbestuur</translation> <translation id="7025895441903756761">Sekuriteit en privaatheid</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Maak almal in &incognitovenster oop}=1{Maak in &incognitovenster oop}other{Maak almal ({COUNT}) in &incognitovenster oop}}</translation> -<translation id="7028057921476386252">’n Ouer of voog moet sê dat dit aanvaarbaar is vir jou om hierdie uitbreiding te aktiveer</translation> <translation id="7029307918966275733">Crostini is nie geïnstalleer nie. Installeer Crostini om krediete te bekyk.</translation> <translation id="7029809446516969842">Wagwoorde</translation> <translation id="7030304022046916278">Stuur URL'e na Veiligblaai toe om hulle na te gaan</translation> @@ -8236,7 +8229,6 @@ <translation id="8251509999076836464">Bind tans saam met <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniprent verwyder.</translation> <translation id="825238165904109940">Wys altyd volle URL'e</translation> -<translation id="8252538334423261825">Kan nie uitbreiding byvoeg nie</translation> <translation id="8252569384384439529">Laai tans op …</translation> <translation id="8253198102038551905">Klik '+' om netwerkeienskappe te kry</translation> <translation id="8255212965098517578">Onlangse foto's, kennisgewings en programme</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index d1ad0a11..7b4401c 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -1336,7 +1336,6 @@ <translation id="2114820389966440614">እዚህ «የቅርብ ጊዜ ድምቀቶችን» እና ሌሎች ትውስታዎችን ይመልከቱ</translation> <translation id="2114896190328250491">ፎቶ በ<ph name="NAME" /></translation> <translation id="2114995631896158695">ምንም ሲም ካርድ አልገባም</translation> -<translation id="2116020356255810305">መተግበሪያን ጅማሬ ላይ ማስጀመርን አንቃ</translation> <translation id="2116619964159595185">ጣቢያዎች እንደ ዝቅተኛ ኃይል ያለው የምልክት ምንጭ፣ የጤና ወይም የአካል ብቃት መከታተያ ወይም የዘመናዊ መብራት አምፖል ማቀናበር ወይም ማስመር ያሉ ባህሪያትን ለማግኘት አብዛኛውን ጊዜ ከብሉቱዝ መሣሪያዎች ጋር ይገናኛሉ።</translation> <translation id="2117655453726830283">ቀጣይ ተንሸራታች</translation> <translation id="2119349053129246860">በ<ph name="APP" /> ውስጥ ክፈት</translation> @@ -3266,7 +3265,6 @@ <translation id="380329542618494757">ስም</translation> <translation id="3803345858388753269">የቪዲዮ ጥራት</translation> <translation id="3803367742635802571">የሚጎበኟቸው ጣቢያዎች እንደተነደፉት መስራታቸውን ሊያቆሙ ይችላሉ</translation> -<translation id="3803583375545057606">ይህን ቅጥያ ለማንቃት ወላጅዎ ይጠየቁ?</translation> <translation id="380408572480438692">የአፈጻጸም ውሂብ ስብስብን ማንቃት Google ከጊዜ ወደ ጊዜ ስርዓቱን እንዲያሻሽለው ያግዘዋል። የግብረ መልስ ሪፖርት ፋይል እስኪያደርጉ (Alt-Shift-I) እና የአፈጻጸም ውሂብ እስኪያካትቱ ድረስ ምንም ውሂብ አይላክም። በማንኛውም ጊዜ ስብስቡን ለማሰናከል ወደዚህ ማያ ገጽ መመለስ ይችላሉ።</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (የቅጥያ መታወቂያ «<ph name="EXTENSION_ID" />») በመግቢያ ገጽ ላይ አይፈቀድም።</translation> <translation id="3807747707162121253">&ይቅር</translation> @@ -3686,7 +3684,6 @@ <translation id="4169535189173047238">አትፍቀድ</translation> <translation id="4170314459383239649">ሲወጣ አጽዳ</translation> <translation id="417096670996204801">መገለጫ ይምረጡ</translation> -<translation id="41725145403849567">ይህን ቅጥያ ለማከል ወላጅዎ ይጠየቁ?</translation> <translation id="4175137578744761569">ፈካ ያለ ወይን ጠጅ እና ነጭ</translation> <translation id="4175737294868205930">ቋሚ ማከማቻ</translation> <translation id="4176463684765177261">ተሰናክሏል</translation> @@ -5099,7 +5096,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{ፒን ቢያንስ አንድ ቁምፊ መሆን አለበት}one{ፒን ቢያንስ # ቁምፊዎች መሆን አለበት}other{ፒን ቢያንስ # ቁምፊዎች መሆን አለበት}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> አሁን ከWi-Fi ጋር እንዲገናኙ እና አንድ ዝማኔ እንዲያወርዱ ይፈልግብዎታል። ወይም ደግሞ ከሚለካ ግንኙነት ያውርዱ (ክፍያዎች ሊከፈልባቸው ይችላል)።</translation> <translation id="5476016146231427848">Chromebook ላይ Steamን ለመጠቀም እባክዎ መሣሪያዎን እንደገና ያስጀምሩ</translation> -<translation id="5476897066181964657">አንድ ወላጅ ወይም አሳዳጊ ይህን ቅጥያ ቢያክሉ ምንም ችግር የለውም ማለት አለባቸው</translation> <translation id="5481273127572794904">ብዙ ፋይሎችን በራስ-ሰር ለማውረድ አልተፈቀደም</translation> <translation id="5481941284378890518">አቅራቢያ ያሉ አታሚዎችን አክል</translation> <translation id="5483785310822538350">የፋይል እና መሣሪያ መዳረሻ ይሻሩ</translation> @@ -5196,7 +5192,6 @@ <translation id="5555639311269196631">መገናኛ ነጥብን አጥፋ</translation> <translation id="5556459405103347317">ዳግም ጫን</translation> <translation id="5558129378926964177">&አጉላ</translation> -<translation id="5558247502209241936">መተግበሪያን በመስኮት ውስጥ መክፈትን አንቃ</translation> <translation id="5559311991468302423">አድራሻን ይሰርዙ</translation> <translation id="55601339223879446">በማሳያው ውስጥ ያለው የእርስዎ ዴስክቶፕ ክፈፎችን ያስተካክሉ</translation> <translation id="5561162485081632007">አደገኛ ክስተቶች ልክ ሲያጋጥሙ ፈልጎ ያገኛቸውና ስለእነሱ ያስጠነቅቅዎታል</translation> @@ -6022,7 +6017,6 @@ <translation id="6305607932814307878">ሁለንተናዊ መመሪያ፦</translation> <translation id="6305702903308659374">ChromeVox እየተናገረ ሳለ በመደበኛ የድምጽ መጠን ላይ አጫውት</translation> <translation id="6305909198255586420">እባክዎ የእርስዎን መደበኛ መገለጫ በመጠቀም ይጫኑ</translation> -<translation id="630750887748244481">የእርስዎ ወላጅ ለChrome «የጣቢያዎች፣ መተግበሪያዎች እና ቅጥያዎች ፈቃዶች»ን አጥፍተዋል። ይህን ቅጥያ ማከል አይፈቀድም።</translation> <translation id="6307990684951724544">ስርዓቱ ስራ ላይ ነው</translation> <translation id="6308493641021088955">በመለያ መግቢያ በ<ph name="EXTENSION_NAME" /> የቀረበ</translation> <translation id="6308937455967653460">አገ&ናኝ አስቀምጥ እንደ…</translation> @@ -6850,7 +6844,6 @@ <translation id="7025190659207909717">የተንቀሳቃሽ ስልክ ውሂብ አገልግሎት ማቀናበር</translation> <translation id="7025895441903756761">ደህንነት እና ግላዊነት</translation> <translation id="7027258625819743915">{COUNT,plural, =0{ሁሉንም በ&ማንነት የማያሳውቅ መስኮት ውስጥ ክፈት}=1{በ&ማንነትን የማያሳውቅ መስኮት ውስጥ ክፈት}one{ሁሉንም ({COUNT}) በ&ማንነት የማያሳውቅ መስኮት ውስጥ ክፈት}other{ሁሉንም ({COUNT}) በ&ማንነት የማያሳውቅ መስኮት ውስጥ ክፈት}}</translation> -<translation id="7028057921476386252">አንድ ወላጅ ወይም አሳዳጊ ይህን ቅጥያ ቢያነቁ ምንም ችግር የለውም ማለት አለባቸው</translation> <translation id="7029307918966275733">Crostini አልተጫነም። ምስጋናዎችን ለመመልከት እባክዎ Crostiniን ይጫኑ።</translation> <translation id="7029809446516969842">የይለፍ ቃላት</translation> <translation id="7030304022046916278">ዩአርኤሎችን ለመፈተሽ ወደ ደህንነቱ የተጠበቀ አሰሳ ይልካቸዋል</translation> @@ -8234,7 +8227,6 @@ <translation id="8251509999076836464">ከ<ph name="DEVICE_NAME" /> ጋር በመጣመር ላይ</translation> <translation id="8251578425305135684">ድንክዬ ተወግዷል።</translation> <translation id="825238165904109940">ሁልጊዜ ሙሉ ዩአርኤሎችን አሳይ</translation> -<translation id="8252538334423261825">ቅጥያ ማከል አልተቻለም</translation> <translation id="8252569384384439529">በመስቀል ላይ…</translation> <translation id="8253198102038551905">የአውታረ መረብ ባህሪያትን ለማግኘት «+»ን ጠቅ ያድርጉ።</translation> <translation id="8255212965098517578">የቅርብ ጊዜ ፎቶዎች፣ ማሳወቂያዎች እና መተግበሪያዎች</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 01d44627..91fa3eb7 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1332,7 +1332,6 @@ <translation id="2114820389966440614">الاطّلاع هنا على "أحدث الصور المميّزة" وغيرها من الذكريات</translation> <translation id="2114896190328250491">صورة <ph name="NAME" /></translation> <translation id="2114995631896158695">لم يتم إدخال أي شريحة SIM.</translation> -<translation id="2116020356255810305">تفعيل خيار "فتح التطبيق عند بدء التشغيل"</translation> <translation id="2116619964159595185">تتّصل المواقع الإلكترونية عادةً بأجهزة تتضمّن بلوتوث لتتيح ميزات مثل إعداد جهاز مرشد منخفض الطاقة أو جهاز تتبُّع للحالة الصحية أو مستوى اللياقة البدنية أو مصباح ذكي أو مزامنة بيانات تلك الأجهزة.</translation> <translation id="2117655453726830283">الشريحة التالية</translation> <translation id="2119349053129246860">فتح في <ph name="APP" /></translation> @@ -3264,7 +3263,6 @@ <translation id="380329542618494757">الاسم</translation> <translation id="3803345858388753269">جودة الفيديو</translation> <translation id="3803367742635802571">المواقع الإلكترونية التي تزورها قد تتوقف عن العمل على النحو المطلوب</translation> -<translation id="3803583375545057606">هل نطلب من أحد والدَيك الموافقة على تفعيل هذه الإضافة؟</translation> <translation id="380408572480438692">يساعد تفعيل جمع بيانات مستوى الأداء Google في تحسين النظام بمرور الوقت. وتجدر الإشارة إلى أنه لا يتم إرسال أي بيانات حتى ترسل تقريرًا بتعليقاتك (Alt-Shift-I) مع تضمين بيانات مستوى الأداء. ويمكنك الرجوع إلى هذه الشاشة لإيقاف جمع البيانات متى شئت.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (معرف الإضافة "<ph name="EXTENSION_ID" />") غير مسموح به على شاشة تسجيل الدخول.</translation> <translation id="3807747707162121253">إل&غاء</translation> @@ -3683,7 +3681,6 @@ <translation id="4169535189173047238">عدم السماح</translation> <translation id="4170314459383239649">محو عند الخروج</translation> <translation id="417096670996204801">اختيار ملف شخصي</translation> -<translation id="41725145403849567">هل نطلب من أحد والديك الموافقة على تثبيت هذه الإضافة؟</translation> <translation id="4175137578744761569">أرجواني فاتح وأبيض</translation> <translation id="4175737294868205930">التخزين الثابت</translation> <translation id="4176463684765177261">غير مفعّل</translation> @@ -5096,7 +5093,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{يجب ألا يقلّ رقم التعريف الشخصي عن حرف واحد.}zero{يجب ألا يقلّ رقم التعريف الشخصي عن # حرف.}two{يجب ألا يقلّ رقم التعريف الشخصي عن حرفَين.}few{يجب ألا يقلّ رقم التعريف الشخصي عن # أحرف.}many{يجب ألا يقلّ رقم التعريف الشخصي عن # حرفًا.}other{يجب ألا يقلّ رقم التعريف الشخصي عن # حرف.}}</translation> <translation id="5474859849784484111">يتطلّب <ph name="MANAGER" /> الاتصال بشبكة Wi-Fi الآن وتنزيل تحديث أو التنزيل من خلال اتصال يفرض تكلفة استخدام ( قد يتم تحصيل رسوم).</translation> <translation id="5476016146231427848">يُرجى إعادة تشغيل جهازك لاستخدام تطبيق Steam on Chromebook.</translation> -<translation id="5476897066181964657">يجب أن يوافق أحد الوالدَين أو الوصي على طلبك لتثبيت هذه الإضافة.</translation> <translation id="5481273127572794904">المواقع الإلكترونية التي لا يُسمح لها بتنزيل الملفات المتعدّدة تلقائيًا</translation> <translation id="5481941284378890518">إضافة طابعات مجاورة</translation> <translation id="5483785310822538350">إبطال الوصول للملف والجهاز</translation> @@ -5193,7 +5189,6 @@ <translation id="5555639311269196631">إيقاف نقطة الاتصال</translation> <translation id="5556459405103347317">إعادة التحميل</translation> <translation id="5558129378926964177">ت&كبير</translation> -<translation id="5558247502209241936">تفعيل خيار "فتح التطبيق في نافذة"</translation> <translation id="5559311991468302423">حذف العنوان</translation> <translation id="55601339223879446">ضبط الحدود لسطح المكتب ضمن الشاشة</translation> <translation id="5561162485081632007">اكتشاف الأحداث الخطيرة عند حدوثها والتحذير منها</translation> @@ -6019,7 +6014,6 @@ <translation id="6305607932814307878">السياسة العامة:</translation> <translation id="6305702903308659374">التشغيل بصوت عادي حتى أثناء تحدُّث ChromeVox</translation> <translation id="6305909198255586420">يُرجى التثبيت باستخدام ملفك الشخصي الأساسي.</translation> -<translation id="630750887748244481">أوقفَ أحد والدَيك الإعداد "الأذونات اللازمة للمواقع الإلكترونية والتطبيقات والإضافات" لمتصفِّح Chrome. غير مسموح لك بتثبيت هذه الإضافة.</translation> <translation id="6307990684951724544">النظام مشغول</translation> <translation id="6308493641021088955">خدمة تسجيل الدخول مقدّمة من <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">حف&ظ الرابط باسم...</translation> @@ -6853,7 +6847,6 @@ <translation id="7025190659207909717">إدارة خدمة بيانات الجوال</translation> <translation id="7025895441903756761">الأمان والخصوصية</translation> <translation id="7027258625819743915">{COUNT,plural, =0{فتح كل العناوين في &نافذة التصفُّح المتخفي}=1{فتح عنوان واحد في نافذة &التصفُّح المتخفي}two{فتح كِلا العنوانَين ({COUNT}) في &نافذة التصفُّح المتخفي}few{فتح كل الـ ({COUNT}) عناوين في &نافذة التصفُّح المتخفي}many{فتح كل الـ ({COUNT}) عنوانًا في &نافذة التصفُّح المتخفي}other{فتح كل الـ ({COUNT}) عنوان في &نافذة التصفُّح المتخفي}}</translation> -<translation id="7028057921476386252">يجب أن يوافق أحد الوالدَين أو الوصي على طلبك لتفعيل هذه الإضافة.</translation> <translation id="7029307918966275733">نظام التشغيل Crostini غير مثبّت. يُرجى تثبيت نظام التشغيل Crostini لعرض أسماء المساهمين.</translation> <translation id="7029809446516969842">كلمات المرور</translation> <translation id="7030304022046916278">يُرسِل هذا الوضع عناوين URL إلى خدمة "التصفّح الآمن" للتحقّق منها.</translation> @@ -8233,7 +8226,6 @@ <translation id="8251509999076836464">جارٍ الإقران بالجهاز <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">تمت إزالة الصورة المصغّرة.</translation> <translation id="825238165904109940">عرض عناوين URL الكاملة دائمًا</translation> -<translation id="8252538334423261825">لا يمكن تثبيت الإضافة</translation> <translation id="8252569384384439529">جارٍ التحميل...</translation> <translation id="8253198102038551905">انقر '+' للحصول على خصائص الشبكة</translation> <translation id="8255212965098517578">الصور والإشعارات والتطبيقات الحديثة</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 722e6d2..4515b26 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">এৰি যাবলৈ ESCAPE টিপক (কেৱল অনানুষ্ঠানিক বিল্ড)।</translation> <translation id="1093457606523402488">দৃশ্যমান নেটৱর্ক:</translation> <translation id="1095761715416917775">নিশ্চিত হৈ লওক যে আপুনি যাতে নিজৰ ছিংক ডেটা সদায়ে এক্সেছ কৰিব পাৰে</translation> +<translation id="1095879482467973146">ৱেবত Google Password Manager</translation> <translation id="109647177154844434">Parallels Desktop আনইনষ্টল কৰিলে আপোনাৰ Windowsৰ প্রতিচ্ছবিখন মচা যাব। ইয়াত এইটোৰ এপ্লিকেশ্বনসমূহ, ছেটিংসমূহ আৰু ডেটা অন্তৰ্ভুক্ত। আপুনি অব্যাহত ৰাখিবলৈ বিচৰাটো নিশ্চিতনে?</translation> <translation id="1097016918605049747">এই পৃষ্ঠাখন অনুবাদ কৰিব পৰা নগ’ল</translation> <translation id="1097658378307015415">ছাইন ইন কৰাৰ আগতে নেটৱৰ্ক <ph name="NETWORK_ID" /> সক্ৰিয় কৰিবলৈ অনুগ্ৰহ কৰি অতিথি হিচাপে প্ৰৱেশ কৰক</translation> @@ -1337,7 +1338,6 @@ <translation id="2114820389966440614">ইয়াত "শেহতীয়া হাইলাইট" আৰু অন্য স্মৃতিসমূহ চাওক</translation> <translation id="2114896190328250491">ফট’খন <ph name="NAME" />এ উঠাইছিল</translation> <translation id="2114995631896158695">কোনো ছিম কাৰ্ড ভৰোৱা নাই</translation> -<translation id="2116020356255810305">ষ্টাৰ্টআপত এপ্ লঞ্চ কৰাৰ সুবিধাটো সক্ষম কৰক</translation> <translation id="2116619964159595185">ছাইটে সচৰাচৰ কম শক্তিৰ আলোক সংকেত, এটা স্বাস্থ্য অথবা শৰীৰচৰ্চা ট্ৰেকাৰ অথবা এটা স্মাৰ্ট লাইটৰ বাল্ব ছেট আপ কৰা অথবা ছিংক কৰাৰ দৰে সুবিধাসমূহৰ বাবে ব্লুটুথ ডিভাইচৰ সৈতে সংযোগ কৰে</translation> <translation id="2117655453726830283">পৰৱৰ্তী শ্লাইড</translation> <translation id="2119349053129246860"><ph name="APP" />ত খোলক</translation> @@ -1497,6 +1497,7 @@ <translation id="2252017960592955005">আনে গোপনে চোৱাৰ বিৰুদ্ধে সুৰক্ষা (বিটা)</translation> <translation id="225240747099314620">সুৰক্ষিত সমলৰ বাবে পৰিচায়কৰ অনুমতি দিয়ক (কম্পিউটাৰ ৰিষ্টাৰ্ট কৰা প্ৰয়োজন হ’ব পাৰে)</translation> <translation id="2253318212986772520"><ph name="PRINTER_NAME" />ৰ বাবে PPD পুনৰুদ্ধাৰ কৰিব পৰা নগ’ল।</translation> +<translation id="2253927598983295051"><ph name="APP_NAME" />ৰ সৈতে কি শ্বেয়াৰ কৰিব বাছনি কৰক</translation> <translation id="2255077166240162850">এই ডিভাইচটো অন্য ড’মেইন বা ম’ডত লক কৰা হৈছে।</translation> <translation id="2255317897038918278">Microsoft Time Stamping</translation> <translation id="2256115617011615191">এতিয়াই ৰিষ্টার্ট কৰক</translation> @@ -1845,6 +1846,7 @@ <translation id="2532589005999780174">হাই কনট্ৰাষ্ট ম’ড</translation> <translation id="2533649878691950253">এই ছাইটটোক আপোনাৰ সঠিক অৱস্থান জনাৰ পৰা অৱৰোধ কৰা হৈছে কিয়নো আপুনি সাধাৰণতে ইয়াৰ অনুমতি নিদিয়ে</translation> <translation id="253434972992662860">&পজ কৰক</translation> +<translation id="253498598929009420">এই ছাইটটোৱে আপোনাৰ স্ক্ৰীনত থকা সমল চাব পাৰিব</translation> <translation id="253557089021624350">সক্রিয় ৰখাৰ সংখ্যা</translation> <translation id="2535799430745250929">কোনো চেলুলাৰ নেটৱৰ্ক নাই</translation> <translation id="2537395079978992874"><ph name="ORIGIN" />এ তলৰ ফাইলসমূহ আৰু ফ’ল্ডাৰসমূহ চাব আৰু সম্পাদনা কৰিব পাৰে</translation> @@ -3267,7 +3269,6 @@ <translation id="380329542618494757">নাম</translation> <translation id="3803345858388753269">ভিডিঅ’ৰ গুণগত মান</translation> <translation id="3803367742635802571">আপুনি চোৱা ছাইটসমূহে ডিজাইন কৰা ধৰণে কাম কৰা বন্ধ কৰিব পাৰে</translation> -<translation id="3803583375545057606">এই এক্সটেনশ্বনটো সক্ষম কৰিবলৈ আপোনাৰ অভিভাৱকক সুধিবনে?</translation> <translation id="380408572480438692">কার্যদক্ষতাৰ ডেটা সংগ্ৰহ কৰাটো সক্ষম কৰা কার্যটোৱে Googleক সময়ৰ লগে লগে ছিষ্টেম উন্নত কৰাত সহায় কৰে। আপুনি মতামতৰ ৰিপর্ট (Alt-Shift-I) নকৰা আৰু কার্যদক্ষতাৰ ডেটা অন্তর্ভুক্ত নকৰা পর্যন্ত কোনো ডেটা পঠিওৱা নহয়। আপুনি সংগ্ৰহ অক্ষম কৰিবলৈ যিকোনো সময়তে এই স্ক্ৰীণলৈ উভতি যাব পাৰে।</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (এক্সটেনশ্বন আইডি "<ph name="EXTENSION_ID" />")ক লগইন স্ক্ৰীনত অনুমোদন জনোৱা নহয়৷</translation> <translation id="3807747707162121253">&বাতিল কৰক</translation> @@ -3688,7 +3689,6 @@ <translation id="4169535189173047238">অনুমতি নিদিব</translation> <translation id="4170314459383239649">প্ৰস্থান কৰিলে মচক</translation> <translation id="417096670996204801">এটা প্ৰ’ফাইল বাছনি কৰক</translation> -<translation id="41725145403849567">এই এক্সটেনশ্বনটো যোগ দিবলৈ আপোনাৰ অভিভাৱকক সুধিবনে?</translation> <translation id="4175137578744761569">পাতল বেঙুনীয়া আৰু বগা</translation> <translation id="4175737294868205930">স্থিৰ ষ্ট’ৰেজ</translation> <translation id="4176463684765177261">অক্ষম আছে</translation> @@ -5102,7 +5102,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{পিনত অতি কমেও এটা বৰ্ণ থাকিবই লাগিব}one{পিনত অতি কমেও # টা বৰ্ণ থাকিবই লাগিব}other{পিনত অতি কমেও # টা বৰ্ণ থাকিবই লাগিব}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" />ৰ বাবে আপুনি এতিয়াই এটা ৱাই-ফাই নেটৱৰ্কৰ সৈতে সংযোগ কৰিব লাগিব আৰু এটা আপডে’ট ডাউনল’ড কৰিব লাগিব। অথবা, এটা নিৰিখ-নিৰ্দিষ্ট সংযোগৰ পৰা ডাউনল’ড কৰক (মাচুল প্ৰযোজ্য হ’ব পাৰে)।</translation> <translation id="5476016146231427848">Chromebookত Steam ব্যৱহাৰ কৰিবলৈ অনুগ্ৰহ কৰি আপোনাৰ ডিভাইচটো ৰিষ্টাৰ্ট কৰক</translation> -<translation id="5476897066181964657">আ্ৰপুনি এই এক্সটেনশ্বনটো যোগ দিয়াত আপত্তি নাই বুলি এগৰাকী অভিভাৱক অথবা প্ৰাপ্তবয়স্ক পৰিয়ালৰ লোকে ক'ব লাগিব</translation> <translation id="5481273127572794904">স্বয়ংক্ৰিয়ভাৱে একাধিক ফাইল ডাউনল’ড কৰাৰ অনুমতি নাই</translation> <translation id="5481941284378890518">নিকটৱৰ্তী প্ৰিণ্টাৰ যোগ কৰক</translation> <translation id="5483785310822538350">ফাইল আৰু ডিভাইচৰ এক্সেছ প্ৰত্যাহাৰ কৰক</translation> @@ -5199,7 +5198,6 @@ <translation id="5555639311269196631">হটস্পট অফ কৰক</translation> <translation id="5556459405103347317">পুনৰ ল’ড কৰক</translation> <translation id="5558129378926964177">জুম &ইন কৰক</translation> -<translation id="5558247502209241936">ৱিণ্ড’ত এপ্ খোলাটো সক্ষম কৰক</translation> <translation id="5559311991468302423">ঠিকনা মচক</translation> <translation id="55601339223879446">আপোনাৰ ডেস্কটপৰ সীমাসমূহ ডিছপ্লে’ৰ ভিতৰত মিলাওক</translation> <translation id="5561162485081632007">বিপজ্জনক ঘটনাবোৰ চিনাক্ত কৰে আৰু সেইবোৰ ঘটাৰ সময়ত আপোনাক সকীয়নি দিয়ে</translation> @@ -6025,7 +6023,6 @@ <translation id="6305607932814307878">গ্ল’বেল নীতি:</translation> <translation id="6305702903308659374">ChromeVoxএ কিবা কৈ থাকিলেও স্বাভাৱিক ভলিউমতেই প্লে’ কৰক</translation> <translation id="6305909198255586420">অনুগ্ৰহ কৰি আপোনাৰ প্ৰাথমিক প্ৰ’ফাইলটো ব্যৱহাৰ কৰি ইনষ্টল কৰক</translation> -<translation id="630750887748244481">আপোনাৰ অভিভাৱকে Chromeৰ বাবে "ছাইট, এপ্ আৰু এক্সটেনশ্বনসমূহৰ বাবে অনুমতি" অফ কৰিছে। এই এক্সটেনশ্বনটো যোগ দিয়াৰ অনুমতি নাই।</translation> <translation id="6307990684951724544">ছিষ্টেম ব্যস্ত আছে</translation> <translation id="6308493641021088955">ছাইন ইনটো <ph name="EXTENSION_NAME" />এ প্ৰদান কৰিছে</translation> <translation id="6308937455967653460">লিং&কটো এইবুলি ছেভ কৰক...</translation> @@ -6853,7 +6850,6 @@ <translation id="7025190659207909717">ম’বাইল ডেটা সেৱাৰ পৰিচালনা</translation> <translation id="7025895441903756761">সুৰক্ষা আৰু গোপনীয়তা</translation> <translation id="7027258625819743915">{COUNT,plural, =0{সকলো &ইনক'গনিট' ৱিণ্ড'ত খোলক}=1{&ইনক'গনিট' ৱিণ্ড'ত খোলক}one{সকলো ({COUNT} টা) &ইনক'গনিট' ৱিণ্ড'ত খোলক}other{সকলো ({COUNT} টা) &ইনক'গনিট' ৱিণ্ড'ত খোলক}}</translation> -<translation id="7028057921476386252">আ্ৰপুনি এই এক্সটেনশ্বনটো সক্ষম কৰাত আপত্তি নাই বুলি এগৰাকী অভিভাৱক অথবা প্ৰাপ্তবয়স্ক পৰিয়ালৰ লোকে ক'ব লাগিব</translation> <translation id="7029307918966275733">Crostini ইনষ্টল কৰা হোৱা নাই। ক্ৰেডিটসমূহ চাবলৈ অনুগ্ৰহ কৰি Crostini ইনষ্টল কৰক।</translation> <translation id="7029809446516969842">পাছৱৰ্ডসমূহ</translation> <translation id="7030304022046916278">URLসমূহ পৰীক্ষা কৰিবলৈ সুৰক্ষিত ব্ৰাউজিঙলৈ পঠিয়ায়</translation> @@ -8231,7 +8227,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" />ৰ সৈতে পেয়াৰ কৰি থকা হৈছে</translation> <translation id="8251578425305135684">থাম্বনেইল আঁতৰোৱা হ'ল।</translation> <translation id="825238165904109940">সদায় সম্পূর্ণ URLসমূহ দেখুৱাওক</translation> -<translation id="8252538334423261825">এক্সটেনশ্বন যোগ দিব নোৱাৰি</translation> <translation id="8252569384384439529">আপল’ড কৰি থকা হৈছে...</translation> <translation id="8253198102038551905">নেটৱর্কৰ বৈশিষ্ট্যসমূহ পাবলৈ ‘+’ ত ক্লিক কৰক</translation> <translation id="8255212965098517578">শেহতীয়া ফট’, জাননী আৰু এপ্সমূহ</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index 997b8aa..0fc287a 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -116,6 +116,7 @@ <translation id="1091767800771861448">Atlamaq üçün Esc basın.</translation> <translation id="1093457606523402488">Görünən Şəbəkələr:</translation> <translation id="1095761715416917775">Sinxronlaşdırma datasına həmişə girişinizin olduğuna əmin olun</translation> +<translation id="1095879482467973146">Vebdə Google Parol Meneceri</translation> <translation id="109647177154844434">Parallels Desktop ləğv edilsə, Windows şəkli də silinəcək. Buraya onun tətbiqləri, ayarları və datası daxildir. Davam etmək istədiyinizə əminsiniz?</translation> <translation id="1097016918605049747">Bu səhifəni tərcümə etmək mümkün olmadı</translation> <translation id="1097658378307015415">Hesaba girmədən öncə <ph name="NETWORK_ID" /> şəbəkəsini aktivləşdirmək üçün Qonaq olaraq daxil olun.</translation> @@ -1323,7 +1324,6 @@ <translation id="2114820389966440614">"Son Vurğulamalar" və digər yaddaşlara burada baxın</translation> <translation id="2114896190328250491"><ph name="NAME" /> adlı şəxsin fotosu</translation> <translation id="2114995631896158695">SİM kart daxil edilməyib</translation> -<translation id="2116020356255810305">Başlanğıcda tətbiqin işə salınmasını aktivləşdirin</translation> <translation id="2116619964159595185">Saytlar, adətən, aşağı enerji mayakını, sağlamlıq və ya fitnes izləyicisini, yaxud smart işıq lampasını qurmaq və ya sinxronlaşdırmaq kimi xüsusiyyətlər üçün Bluetooth cihazlarına qoşulur</translation> <translation id="2117655453726830283">Növbəti slayd</translation> <translation id="2119349053129246860"><ph name="APP" /> tətbiqində açın</translation> @@ -1483,6 +1483,7 @@ <translation id="2252017960592955005">Baxış qorunması (Beta)</translation> <translation id="225240747099314620">Qorunan kontent üçün identifikatorlara icazə verin (kompüterin yenidən başladılması tələb oluna bilər)</translation> <translation id="2253318212986772520"><ph name="PRINTER_NAME" /> üçün PPD əldə etmək olmur.</translation> +<translation id="2253927598983295051"><ph name="APP_NAME" /> ilə paylaşılacaq kontenti seçin</translation> <translation id="2255077166240162850">Bu cihaz müxtəlif domen və ya rejimlə kilidləndi.</translation> <translation id="2255317897038918278">Microsoft Zaman Möhürləməsi</translation> <translation id="2256115617011615191">İndi yenidən başladın</translation> @@ -1831,6 +1832,7 @@ <translation id="2532589005999780174">Yüksək kontrast rejimi</translation> <translation id="2533649878691950253">Adətən icazə vermədiyiniz üçün bu saytın dəqiq yerinizi bilməsi bloklanıb</translation> <translation id="253434972992662860">Durdurun</translation> +<translation id="253498598929009420">Sayt ekrandakı kontenti görə biləcək</translation> <translation id="253557089021624350">İstifadə edilən artırma sayı</translation> <translation id="2535799430745250929">Mobil şəbəkə yoxdur</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> aşağıdakı fayl ilə qovluqlara baxa və redaktə edə bilər</translation> @@ -3253,7 +3255,6 @@ <translation id="380329542618494757">Ad</translation> <translation id="3803345858388753269">Video Keyfiyyəti</translation> <translation id="3803367742635802571">Ziyarət etdiyiniz saytlar nəzərdə tutulduğu kimi fəaliyyətini dayandıra bilər</translation> -<translation id="3803583375545057606">Artırmanı aktivləşdirmək üçün valideynə müraciət edilsin?</translation> <translation id="380408572480438692">Performans datasının toplanmasına icazə vermək Google'a sistemi gəlişdirmək imkanı verir. Geri əlaqə raportu hazırlayana (Alt-Shift-I) və performans datası təqdim edənə qədər heç bir data göndərilmir. Toplamaya qadağa qoymaq üçün buraya istədiyiniz vaxt qayıda bilərsiniz.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (artırma ID'si "<ph name="EXTENSION_ID" />") giriş ekranında icazə verilmir.</translation> <translation id="3807747707162121253">Ləğv edin</translation> @@ -3673,7 +3674,6 @@ <translation id="4169535189173047238">İcazə verməyin</translation> <translation id="4170314459383239649">Çıxarkən silin</translation> <translation id="417096670996204801">Profil seçin</translation> -<translation id="41725145403849567">Artırmanı əlavə etmək üçün valideynə müraciət edilsin?</translation> <translation id="4175137578744761569">Açıq-bənövşəyi və ağ</translation> <translation id="4175737294868205930">Davamlı saxlama yeri</translation> <translation id="4176463684765177261">Deaktiv edildi</translation> @@ -5086,7 +5086,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN minimum bir simvoldan ibarət olmalıdır}other{PIN minimum # simvoldan ibarət olmalıdır}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> sizdən indi Wi-Fi'a qoşulmağınızı və güncəlləməni endirməyinizi tələb edir. Ya da limitli bağlantı vasitəsilə endirin (ödəmə tutula bilər).</translation> <translation id="5476016146231427848">Chromebook'da Steam tətbiqindən istifadə etmək üçün cihazı yenidən başladın</translation> -<translation id="5476897066181964657">Valideyn və ya qəyyum artırmanı əlavə etməyi təsdiqləməlidir</translation> <translation id="5481273127572794904">Çoxsaylı faylların avtomatik endirilməsinə icazə verilmədi</translation> <translation id="5481941284378890518">Yaxınlıqdakı Printerləri əlavə edin</translation> <translation id="5483785310822538350">Fayl və cihaz girişini geri alın</translation> @@ -5183,7 +5182,6 @@ <translation id="5555639311269196631">Hotspotu deaktiv edin</translation> <translation id="5556459405103347317">Yenidən yükləyin</translation> <translation id="5558129378926964177">Böyüdün</translation> -<translation id="5558247502209241936">Tətbiqin pəncərədə açılmasını aktivləşdirin</translation> <translation id="5559311991468302423">Ünvanı silin</translation> <translation id="55601339223879446">Ekran daxilində masaüstü sərhədlərini nizamlayın</translation> <translation id="5561162485081632007">Təhlükəli hadisələr baş verdikdə onları aşkarlayır və sizə xəbərdarlıq edir</translation> @@ -6007,7 +6005,6 @@ <translation id="6305607932814307878">Qlobal Siyasət:</translation> <translation id="6305702903308659374">ChromeVox danışsa belə, normal səs ilə oxudun</translation> <translation id="6305909198255586420">Əsas profilinizdən istifadə edərək quraşdırın</translation> -<translation id="630750887748244481">Valideyniniz Chrome üçün "Saytlar, tətbiqlər və artırmalar üzrə icazələri" deaktiv edib. Bu artırmanı əlavə etməyə icazə verilmir.</translation> <translation id="6307990684951724544">Sistem məşğuldur</translation> <translation id="6308493641021088955">Giriş <ph name="EXTENSION_NAME" /> tərəfindən təmin edilib</translation> <translation id="6308937455967653460">Linkin saxlanma formatı:</translation> @@ -6833,7 +6830,6 @@ <translation id="7025190659207909717">Mobil data xidmətini idarə edin</translation> <translation id="7025895441903756761">Güvənlik və Məxfilik</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Hamısını &Anonim Pəncərədə Açın}=1{&Anonim Pəncərədə Açın}other{Hamısını ({COUNT}) &Anonim Pəncərədə Açın}}</translation> -<translation id="7028057921476386252">Valideyn və ya qəyyum artırmanı aktivləşdirməyi təsdiqləməlidir</translation> <translation id="7029307918966275733">Crostini quraşdırılmayıb. Kreditlərə baxmaq üçün Crostini'ni quraşdırın.</translation> <translation id="7029809446516969842">Parollar</translation> <translation id="7030304022046916278">URL'ləri yoxlamaq üçün onları Təhlükəsiz Baxışa göndərir</translation> @@ -8211,7 +8207,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> ilə birləşdirilir</translation> <translation id="8251578425305135684">Eskiz silindi.</translation> <translation id="825238165904109940">Həmişə Tam URL'ləri Göstərin</translation> -<translation id="8252538334423261825">Artırma əlavə etmək olmur</translation> <translation id="8252569384384439529">Yüklənir...</translation> <translation id="8253198102038551905">Şəbəkə xüsusiyyətlərini əldə etmək üçün '+' klikləyin</translation> <translation id="8255212965098517578">Son fotolar, bildirişlər və tətbiqlər</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 34adcfe..5551808 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Каб прапусціць, націсніце ESC (толькі для неафіцыйных зборак).</translation> <translation id="1093457606523402488">Бачныя сеткі:</translation> <translation id="1095761715416917775">Падбайце аб тым, каб не страціць доступ да сінхранізаваных даных</translation> +<translation id="1095879482467973146">Менеджар пароляў Google (вэб-версія)</translation> <translation id="109647177154844434">Пры выдаленні праграмы Parallels Desktop будзе выдалены вобраз Windows, у тым ліку праграмы, налады і даныя сістэмы. Сапраўды працягнуць?</translation> <translation id="1097016918605049747">Перакласці старонку не ўдалося</translation> <translation id="1097658378307015415">Перш чым увайсці ва ўліковы запіс, увайдзіце ў рэжыме госця, каб актываваць сетку <ph name="NETWORK_ID" /></translation> @@ -1330,7 +1331,6 @@ <translation id="2114820389966440614">"Найлепшыя з нядаўніх фота" і іншыя ўспаміны можна праглядаць тут</translation> <translation id="2114896190328250491">Фота ад аўтара <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM-карта не ўстаўлена</translation> -<translation id="2116020356255810305">Запускаць праграму пры запуску сістэмы</translation> <translation id="2116619964159595185">Сайты звычайна падключаюцца да прылад з Bluetooth для работы такіх функцый, як наладжванне або сінхранізацыя маячкоў з нізкім энергаспажываннем, фітнес-трэкераў або разумных лямпачак</translation> <translation id="2117655453726830283">Наступны слайд</translation> <translation id="2119349053129246860">Адкрыць у праграме <ph name="APP" /></translation> @@ -1490,6 +1490,7 @@ <translation id="2252017960592955005">Абаронены прагляд (бэта-версія)</translation> <translation id="225240747099314620">Дазволіць ідэнтыфікатары для абароненага змесціва (можа спатрэбіцца перазагрузка камп'ютара)</translation> <translation id="2253318212986772520">Не ўдалося атрымаць файл PPD для прынтара "<ph name="PRINTER_NAME" />".</translation> +<translation id="2253927598983295051">Выберыце даныя, якія трэба абагуліць з праграмай "<ph name="APP_NAME" />"</translation> <translation id="2255077166240162850">Гэта прылада прывязана да іншага дамена або зафіксавана ў іншым рэжыме.</translation> <translation id="2255317897038918278">Меткі часу Microsoft</translation> <translation id="2256115617011615191">Перазапусціць</translation> @@ -1835,6 +1836,7 @@ <translation id="2532589005999780174">Рэжым высокай кантраснасці</translation> <translation id="2533649878691950253">Гэтаму сайту быў заблакіраваны доступ да даных пра ваша дакладнае месцазнаходжанне, бо звычайна вы не даяце дазволу на іх выкарыстанне</translation> <translation id="253434972992662860">&Прыпыніць</translation> +<translation id="253498598929009420">Сайт атрымае доступ да змесціва вашага экрана</translation> <translation id="253557089021624350">Лік актыўных працэсаў</translation> <translation id="2535799430745250929">Мабільных сетак няма</translation> <translation id="2537395079978992874">Сайт <ph name="ORIGIN" /> можа праглядаць і змяняць наступныя файлы і папкі</translation> @@ -3255,7 +3257,6 @@ <translation id="380329542618494757">Імя</translation> <translation id="3803345858388753269">Якасць відэа</translation> <translation id="3803367742635802571">Сайты, якія вы наведваеце, могуць перастаць працаваць належным чынам</translation> -<translation id="3803583375545057606">Запытаць у бацькоў дазвол, каб уключыць гэта пашырэнне?</translation> <translation id="380408572480438692">Збор даных аб прадукцыйнасці дапаможа Google з цягам часу палепшыць сістэму. Даныя адпраўляюцца толькі пры адпраўцы справаздачы з водгукам (Alt-Shift-I), калі вы ўключаеце ў яе даныя аб прадукцыйнасці. У любы момант можна вярнуцца да гэтага экрана і выключыць збор даных.</translation> <translation id="3807249107536149332">Пашырэнне <ph name="EXTENSION_NAME" /> (ідэнтыфікатар "<ph name="EXTENSION_ID" />") не дазволена размяшчаць на экране ўваходу ў сістэму.</translation> <translation id="3807747707162121253">&Скасаваць</translation> @@ -3677,7 +3678,6 @@ <translation id="4169535189173047238">Не дазваляць</translation> <translation id="4170314459383239649">Ачысціць пасля выхаду</translation> <translation id="417096670996204801">Выберыце профіль</translation> -<translation id="41725145403849567">Запытаць у бацькоў дазвол, каб дадаць гэта пашырэнне?</translation> <translation id="4175137578744761569">Светла-фіялетавы і белы</translation> <translation id="4175737294868205930">Пастаяннае сховішча</translation> <translation id="4176463684765177261">Выключана</translation> @@ -5090,7 +5090,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-код павінен змяшчаць як мінімум 1 сімвал}one{PIN-код павінен змяшчаць як мінімум # сімвал}few{PIN-код павінен змяшчаць як мінімум # сімвалы}many{PIN-код павінен змяшчаць як мінімум # сімвалаў}other{PIN-код павінен змяшчаць як мінімум # сімвала}}</translation> <translation id="5474859849784484111">Выкарыстанне дамена "<ph name="MANAGER" />" патрабуе падключэння да сеткі Wi-Fi і спампоўвання абнаўлення. Вы можаце таксама спампаваць яго праз падключэнне з падлікам трафіка (можа спаганяцца плата).</translation> <translation id="5476016146231427848">Каб выкарыстоўваць Steam на Chromebook, перазапусціце прыладу.</translation> -<translation id="5476897066181964657">Каб дадаць гэта пашырэнне, трэба атрымаць дазвол аднаго з бацькоў або законнага прадстаўніка</translation> <translation id="5481273127572794904">Не дазволена аўтаматычна спампоўваць некалькі файлаў</translation> <translation id="5481941284378890518">Дадаць прынтары паблізу</translation> <translation id="5483785310822538350">Адклікаць доступ да файлаў і прылад</translation> @@ -5187,7 +5186,6 @@ <translation id="5555639311269196631">Выключыць хот-спот</translation> <translation id="5556459405103347317">Перазагрузіць</translation> <translation id="5558129378926964177">Павялічыць &маштаб</translation> -<translation id="5558247502209241936">Адкрываць праграму ў акне</translation> <translation id="5559311991468302423">Выдаленне адраса</translation> <translation id="55601339223879446">Рэгуліроўка граніц працоўнага стала ў межах дысплэя</translation> <translation id="5561162485081632007">Выяўляе небяспечныя падзеі і папярэджвае пра іх</translation> @@ -6013,7 +6011,6 @@ <translation id="6305607932814307878">Глабальная палітыка:</translation> <translation id="6305702903308659374">Прайграваць са звычайнай гучнасцю, нават калі ChromeVox чытае тэкст</translation> <translation id="6305909198255586420">Для ўсталявання выкарыстайце асноўны профіль</translation> -<translation id="630750887748244481">Вашы бацькі выключылі "Дазволы для сайтаў, праграм і пашырэнняў" для Chrome. Дадаваць гэта пашырэнне забаронена.</translation> <translation id="6307990684951724544">Сістэма занятая</translation> <translation id="6308493641021088955">Уваход забяспечвае сэрвіс <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Захаваць &спасылку як...</translation> @@ -6845,7 +6842,6 @@ <translation id="7025190659207909717">Кіраванне сэрвісам мабільнай перадачы даных</translation> <translation id="7025895441903756761">Бяспека і прыватнасць</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Адкрыць усе ў &акне ў рэжыме інкогніта}=1{Адкрыць у &акне ў рэжыме інкогніта}one{Адкрыць усе ({COUNT}) у &акне ў рэжыме інкогніта}few{Адкрыць усе ({COUNT}) у &акне ў рэжыме інкогніта}many{Адкрыць усе ({COUNT}) у &акне ў рэжыме інкогніта}other{Адкрыць усе ({COUNT}) у &акне ў рэжыме інкогніта}}</translation> -<translation id="7028057921476386252">Каб уключыць гэта пашырэнне, трэба атрымаць дазвол аднаго з бацькоў або законнага прадстаўніка</translation> <translation id="7029307918966275733">Crostini не ўсталяваны. Каб праглядаць баланс, усталюйце Crostini.</translation> <translation id="7029809446516969842">Паролі</translation> <translation id="7030304022046916278">Адпраўляе URL-адрасы на праверку ў Бяспечны прагляд</translation> @@ -8223,7 +8219,6 @@ <translation id="8251509999076836464">Ідзе спалучэнне з прыладай "<ph name="DEVICE_NAME" />"</translation> <translation id="8251578425305135684">Мініяцюра выдалена.</translation> <translation id="825238165904109940">Заўсёды паказваць поўныя URL-адрасы</translation> -<translation id="8252538334423261825">Дадаць пашырэнне нельга</translation> <translation id="8252569384384439529">Ідзе запампоўванне...</translation> <translation id="8253198102038551905">Націсніце "+", каб праглядзець параметры сеткі</translation> <translation id="8255212965098517578">Нядаўнія фота, апавяшчэнні і праграмы</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 844f008..750a9b0b 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Натиснете „ESCAPE“ за пропускане (само в неофициалните версии).</translation> <translation id="1093457606523402488">Видими мрежи:</translation> <translation id="1095761715416917775">Обезпечете си непрекъснат достъп до синхронизираните си данни</translation> +<translation id="1095879482467973146">Google Мениджър на пароли в мрежата</translation> <translation id="109647177154844434">Ако деинсталирате Parallels Desktop, образът ви на Windows ще бъде изтрит. Това включва приложенията, настройките и данните в него. Наистина ли искате да продължите?</translation> <translation id="1097016918605049747">Страницата не бе преведена</translation> <translation id="1097658378307015415">Преди да влезете в профила си, моля, влезте като гост, за да активирате мрежата <ph name="NETWORK_ID" /></translation> @@ -1335,7 +1336,6 @@ <translation id="2114820389966440614">Вижте „Скорошни акценти“ и други спомени тук</translation> <translation id="2114896190328250491">Снимка от <ph name="NAME" /></translation> <translation id="2114995631896158695">Няма поставена SIM карта</translation> -<translation id="2116020356255810305">Активиране на изпълнението на приложението при стартиране</translation> <translation id="2116619964159595185">Сайтовете обикновено се свързват с устройства с Bluetooth, за да осигуряват функции като настройване или синхронизиране на маяци с нисък разход на енергия, инструменти за проследяване на здравословното състояние или физическата активност или интелигентни електрически крушки</translation> <translation id="2117655453726830283">Следващият слайд</translation> <translation id="2119349053129246860">Отваряне в/ъв <ph name="APP" /></translation> @@ -1495,6 +1495,7 @@ <translation id="2252017960592955005">Защита срещу надничане (бета-версия)</translation> <translation id="225240747099314620">Да се разрешат идентификаторите за защитено съдържание (може да е необходимо рестартиране на компютъра)</translation> <translation id="2253318212986772520">PPD файлът за <ph name="PRINTER_NAME" /> не може да бъде извлечен.</translation> +<translation id="2253927598983295051">Избиране какво да се споделя с(ъс) <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Това устройство е заключено в друг домейн или режим.</translation> <translation id="2255317897038918278">Поставяне на времево клеймо от Microsoft</translation> <translation id="2256115617011615191">Рестартиране сега</translation> @@ -1843,6 +1844,7 @@ <translation id="2532589005999780174">Режим на висок контраст</translation> <translation id="2533649878691950253">Достъпът на този сайт до точното ви местоположение бе блокиран, защото обикновено не го разрешавате</translation> <translation id="253434972992662860">&Пауза</translation> +<translation id="253498598929009420">Сайтът ще може да вижда съдържанието на екрана ви</translation> <translation id="253557089021624350">Брой на активно използващите</translation> <translation id="2535799430745250929">Няма мобилна мрежа</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> може да преглежда и редактира следните файлове и папки</translation> @@ -3265,7 +3267,6 @@ <translation id="380329542618494757">Име</translation> <translation id="3803345858388753269">Качество на картината</translation> <translation id="3803367742635802571">Сайтовете, които посещавате, може да спрат да работят нормално</translation> -<translation id="3803583375545057606">Искате ли да помолите родителя си да активирате това разширение?</translation> <translation id="380408572480438692">Активирането на функцията за събиране на данни за ефективността ще помогне на Google да подобри системата с течение на времето. Те не се изпращат, докато не изготвите отчет с отзиви (Alt-Shift-I) и не включите в него съответната информация. Можете да се върнете към този екран по всяко време, за да деактивирате събирането й.</translation> <translation id="3807249107536149332">Разширението <ph name="EXTENSION_NAME" /> (идентификатор <ph name="EXTENSION_ID" />) не е разрешено на екрана за вход.</translation> <translation id="3807747707162121253">&Отказ</translation> @@ -3688,7 +3689,6 @@ <translation id="4169535189173047238">Забраняване</translation> <translation id="4170314459383239649">Изчистване при изход</translation> <translation id="417096670996204801">Избор на потребителски профил</translation> -<translation id="41725145403849567">Искате ли да помолите родителя си да добавите това разширение?</translation> <translation id="4175137578744761569">Светлолилаво и бяло</translation> <translation id="4175737294868205930">Постоянно хранилище</translation> <translation id="4176463684765177261">Деактивирано</translation> @@ -5102,7 +5102,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{ПИН кодът трябва да е с дължина поне един знак}other{ПИН кодът трябва да е с дължина поне # знака}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> изисква да се свържете с Wi-Fi сега и да изтеглите актуализация. За целта можете да използвате и връзка с отчитане (възможно е да ви бъдат начислени такси).</translation> <translation id="5476016146231427848">Рестартирайте устройството си, за да използвате Steam на Chromebook</translation> -<translation id="5476897066181964657">Родител или настойник трябва да разреши да добавите това разширение</translation> <translation id="5481273127572794904">Сайтове без разрешение за автоматично изтегляне на няколко файла</translation> <translation id="5481941284378890518">Добавяне на принтери в близост</translation> <translation id="5483785310822538350">Отмяна на достъпа до файловете и устройството</translation> @@ -5199,7 +5198,6 @@ <translation id="5555639311269196631">Изключване на точката за достъп</translation> <translation id="5556459405103347317">Повторно зареждане</translation> <translation id="5558129378926964177">&Увеличаване</translation> -<translation id="5558247502209241936">Активиране на отварянето на приложението в прозорец</translation> <translation id="5559311991468302423">Изтриване на адреса</translation> <translation id="55601339223879446">Коригиране на границите на работния плот в рамките на екрана</translation> <translation id="5561162485081632007">Открива опасни събития, когато се случват, и ви предупреждава за тях</translation> @@ -6026,7 +6024,6 @@ <translation id="6305607932814307878">Глобално правило:</translation> <translation id="6305702903308659374">Възпроизвеждане с нормална сила на звука дори ако ChromeVox говори</translation> <translation id="6305909198255586420">Моля, инсталирайте чрез основния си потребителски профил</translation> -<translation id="630750887748244481">Някой от родителите ви е изключил разрешенията за сайтове, приложения и разширения за Chrome. Добавянето на това разширение е забранено.</translation> <translation id="6307990684951724544">Системата е заета</translation> <translation id="6308493641021088955">Влизането се осигурява от <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">З&апазване на връзката като...</translation> @@ -6852,7 +6849,6 @@ <translation id="7025190659207909717">Управление на мобилната услуга за данни</translation> <translation id="7025895441903756761">Сигурност и поверителност</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Отваряне на всички в прозорец в режим „&инкогнито“}=1{Отваряне в прозорец в режим „&инкогнито“}other{Отваряне на всички ({COUNT}) в прозорец в режим „&инкогнито“}}</translation> -<translation id="7028057921476386252">Родител или настойник трябва да разреши да активирате това разширение</translation> <translation id="7029307918966275733">Не сте инсталирали Crostini. Направете това, за да видите файла за признание.</translation> <translation id="7029809446516969842">Пароли</translation> <translation id="7030304022046916278">URL адресите се изпращат до Безопасно сърфиране за проверка</translation> @@ -8231,7 +8227,6 @@ <translation id="8251509999076836464">Извършва се сдвояване с устройството <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Миниизображението е премахнато.</translation> <translation id="825238165904109940">Пълните URL адреси да се показват винаги</translation> -<translation id="8252538334423261825">Разширението не може да се добави</translation> <translation id="8252569384384439529">Качва се...</translation> <translation id="8253198102038551905">Кликнете върху „+“, за да получите свойствата на мрежата</translation> <translation id="8255212965098517578">Скорошни снимки, известия и приложения</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index cbfaf97..6e3f531 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -1341,7 +1341,6 @@ <translation id="2114820389966440614">এখানে "সাম্প্রতিক হাইলাইট" অন্যান্য মেমরি দেখুন</translation> <translation id="2114896190328250491"><ph name="NAME" /> এর থেকে পাওয়া ফটো</translation> <translation id="2114995631896158695">কোনও সিম কার্ড যোগ করা হয়নি</translation> -<translation id="2116020356255810305">স্টার্টআপে অ্যাপ চালু করার বিকল্প চালু করুন</translation> <translation id="2116619964159595185">সাইটগুলি সাধারণত লো-এনার্জি বিকন, স্বাস্থ্য বা ফিটনেস ট্র্যাকার অথবা স্মার্ট আলোর বাল্বের মতো ফিচার সেট আপ অথবা সিঙ্ক করতে ব্লুটুথ ডিভাইস কানেক্ট করে</translation> <translation id="2117655453726830283">পরবর্তী স্লাইড</translation> <translation id="2119349053129246860"><ph name="APP" /> এ খুলুন</translation> @@ -3273,7 +3272,6 @@ <translation id="380329542618494757">নাম</translation> <translation id="3803345858388753269">ভিডিও কোয়ালিটি</translation> <translation id="3803367742635802571">যেমনভাবে ডিজাইন করা হয়েছে আপনার ভিজিট করা সাইট তেমনভাবে কাজ করা বন্ধ করতে পারে</translation> -<translation id="3803583375545057606">আপনার অভিভাবককে এই এক্সটেনশন চালু করতে বলুন?</translation> <translation id="380408572480438692">কার্য-সম্পাদনা ডেটার সংগ্রহ চালু করলে দিনে দিনে এটি Google কে তার সিস্টেম উন্নত করতে সাহায্য করবে৷ আপনি যতক্ষণ না কোনও প্রতিবার্তা রিপোর্ট (Alt-Shift-I) এবং কার্য-সম্পাদনার ডেটা অন্তর্ভুক্ত করবেন ততক্ষণ কোনও ডেটা পাঠানো হয় না৷ সংগ্রহ বন্ধ করতে আপনি যেকোনও সময়ে এই স্ক্রিনে ফিরে আসতে পারেন৷</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (extension ID "<ph name="EXTENSION_ID" />") is not allowed on a login screen.</translation> <translation id="3807747707162121253">&বাতিল</translation> @@ -3695,7 +3693,6 @@ <translation id="4169535189173047238">অনুমতি দেবেন না</translation> <translation id="4170314459383239649">ছেড়ে গেলে কুকিজ মুছে দিন</translation> <translation id="417096670996204801">প্রোফাইল বেছে নিন</translation> -<translation id="41725145403849567">আপনার অভিভাবককে এই এক্সটেনশন যোগ করতে বলুন?</translation> <translation id="4175137578744761569">হালকা বেগুনি ও সাদা</translation> <translation id="4175737294868205930">অনবরত স্টোরেজ</translation> <translation id="4176463684765177261">অক্ষম হয়েছে</translation> @@ -5110,7 +5107,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{পিন অন্তত একটি অক্ষরের হতে হবে}one{পিন অন্তত # অক্ষরের হতে হবে}other{পিন অন্তত # অক্ষরের হতে হবে}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" />-এর প্রয়োজন অনুযায়ী, আপনাকে এখনই ওয়াই-ফাই নেটওয়ার্কে কানেক্ট করতে হবে এবং একটি আপডেট ডাউনলোড করতে হবে। অথবা, মিটার্ড ইন্টারনেট কানেকশন ব্যবহার করেও ডাউনলোড করতে পারবেন (এর জন্য চার্জ দিতে হতে পারে)।</translation> <translation id="5476016146231427848">Chromebook-এ Steam ব্যবহার করতে আপনার ডিভাইস রিস্টার্ট করুন</translation> -<translation id="5476897066181964657">একজন প্যারেন্ট বা অভিভাবককে বলতে হবে যে এই এক্সটেনশনটি যোগ করা আপনার পক্ষে ঠিক আছে</translation> <translation id="5481273127572794904">একাধিক ফাইল অটোমেটিক ডাউনলোড করার অনুমতি দেওয়া হয়নি</translation> <translation id="5481941284378890518">আশেপাশের প্রিন্টারগুলি যোগ করুন</translation> <translation id="5483785310822538350">ফাইল এবং ডিভাইসের অ্যাক্সেস প্রত্যাহার করুন</translation> @@ -5207,7 +5203,6 @@ <translation id="5555639311269196631">হটস্পট বন্ধ করুন</translation> <translation id="5556459405103347317">রিলোড করুন</translation> <translation id="5558129378926964177">বড়ো করুন</translation> -<translation id="5558247502209241936">উইন্ডোতে অ্যাপ খোলার বিকল্প চালু করুন</translation> <translation id="5559311991468302423">ঠিকানা মুছুন</translation> <translation id="55601339223879446">প্রদর্শনের মধ্যে আপনার ডেস্কটপ সীমানার সামঞ্জস্যবিধান করুন</translation> <translation id="5561162485081632007">ব্রাউজ করার সময় কোনও ঝুঁকিপূর্ণ ঘটনা ঘটলে সেটি শনাক্ত করে আপনাকে সতর্ক করা হয়</translation> @@ -6035,7 +6030,6 @@ <translation id="6305607932814307878">সার্বিক নীতি:</translation> <translation id="6305702903308659374">ChromeVox কথা বলতে থাকলেও সাধারণ ভলিউমে বাজান</translation> <translation id="6305909198255586420">আপনার প্রাইমারি প্রোফাইল ব্যবহার করে ইনস্টল করুন</translation> -<translation id="630750887748244481">তোমার অভিভাবক Chrome-এ "সাইট, অ্যাপ ও এক্সটেনশনের অনুমতি" বন্ধ করে দিয়েছেন। এই এক্সটেনশন যোগ করার অনুমতি নেই।</translation> <translation id="6307990684951724544">সিস্টেম ব্যস্ত আছে</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> এক্সটেনশন দিয়ে সাইন-ইন করুন</translation> <translation id="6308937455967653460">লি&ঙ্ক এই রূপে সেভ করুন...</translation> @@ -6863,7 +6857,6 @@ <translation id="7025190659207909717">মোবাইল ডেটা পরিষেবা পরিচালন</translation> <translation id="7025895441903756761">নিরাপত্তা ও গোপনীয়তা</translation> <translation id="7027258625819743915">{COUNT,plural, =0{সবকটি &ছদ্মবেশী উইন্ডোতে খুলুন}=1{&ছদ্মবেশী উইন্ডোতে খুলুন}one{সবকটি ({COUNT}টি) &ছদ্মবেশী উইন্ডোতে খুলুন}other{সবকটি ({COUNT}টি) &ছদ্মবেশী উইন্ডোতে খুলুন}}</translation> -<translation id="7028057921476386252">একজন প্যারেন্ট বা অভিভাবককে বলতে হবে যে এই এক্সটেনশনটি চালু করা আপনার পক্ষে ঠিক আছে</translation> <translation id="7029307918966275733">Crostini ইনস্টল করা হয়নি। ক্রেডিট দেখার জন্য Crostini ইনস্টল করুন।</translation> <translation id="7029809446516969842">পাসওয়ার্ড</translation> <translation id="7030304022046916278">URL চেক করতে Safe Browsing-এ পাঠায়</translation> @@ -8241,7 +8234,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" />-এর সাথে পেয়ার করা হচ্ছে</translation> <translation id="8251578425305135684">থাম্বনেল সরানো হয়েছে৷</translation> <translation id="825238165904109940">সবসময় সম্পূর্ণ ইউআরএল দেখুন</translation> -<translation id="8252538334423261825">এক্সটেনশন যোগ করা যাবে না</translation> <translation id="8252569384384439529">আপলোড হচ্ছে…</translation> <translation id="8253198102038551905">নেটওয়ার্কের প্রোপাটিজ পেতে '+'-এ ক্লিক করুন</translation> <translation id="8255212965098517578">সাম্প্রতিক ফটো, বিজ্ঞপ্তি ও অ্যাপ</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 2604b72..84e8330 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -1339,7 +1339,6 @@ <translation id="2114820389966440614">Pogledajte "Nedavno istaknuto" i druge uspomene ovdje</translation> <translation id="2114896190328250491">Fotografija autora <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM kartica nije umetnuta</translation> -<translation id="2116020356255810305">Omogućavanje pokretanja aplikacije prilikom pokretanja</translation> <translation id="2116619964159595185">Web lokacije se obično povezuju s Bluetooth uređajima radi funkcija kao što je postavljanje ili sinhroniziranje signala male potrošnje energije, uređaja za praćenje zdravlja ili fitnesa ili pametne sijalice</translation> <translation id="2117655453726830283">Sljedeći slajd</translation> <translation id="2119349053129246860">Otvori u aplikaciji <ph name="APP" /></translation> @@ -3271,7 +3270,6 @@ <translation id="380329542618494757">Ime</translation> <translation id="3803345858388753269">Kvalitet videozapisa</translation> <translation id="3803367742635802571">Web lokacije koje posjećujete mogu prestati funkcionirati kao što je predviđeno</translation> -<translation id="3803583375545057606">Pitati roditelja da omogući ovu ekstenziju?</translation> <translation id="380408572480438692">Omogućavanje prikupljanja podataka o performansama će pomoći Googleu da poboljša sistem tokom vremena. Podaci se ne šalju dok vi ne dostavite izvještaj o povratnim informacijama (Alt + Shift + I) u koji ste uključili podatke o performansama. Uvijek se možete vratiti na ovaj ekran da onemogućite prikupljanje.</translation> <translation id="3807249107536149332">Ekstenzija <ph name="EXTENSION_NAME" /> (ID ekstenzije "<ph name="EXTENSION_ID" />") nije dozvoljena na ekranu za prijavu.</translation> <translation id="3807747707162121253">Otkaži</translation> @@ -3693,7 +3691,6 @@ <translation id="4169535189173047238">Nemoj dozvoliti</translation> <translation id="4170314459383239649">Obriši pri zatvaranju</translation> <translation id="417096670996204801">Odaberite profil</translation> -<translation id="41725145403849567">Pitati roditelja da doda ovu ekstenziju?</translation> <translation id="4175137578744761569">Svijetloljubičasta i bijela</translation> <translation id="4175737294868205930">Trajna pohrana</translation> <translation id="4176463684765177261">Onemogućeno</translation> @@ -5107,7 +5104,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN mora sadržavati najmanje jedan znak.}one{PIN mora sadržavati najmanje # znak.}few{PIN mora sadržavati najmanje # znaka.}other{PIN mora sadržavati najmanje # znakova.}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> zahtijeva da se sada povežete s WiFi mrežom i preuzmete ažuriranje. Možete ga preuzeti i putem veze s naplatom (mogu nastati troškovi).</translation> <translation id="5476016146231427848">Ponovo pokrenite uređaj da koristite Steam na Chromebooku</translation> -<translation id="5476897066181964657">Roditelj ili staratelj mora reći da možeš dodati ovu ekstenziju</translation> <translation id="5481273127572794904">Nije dozvoljeno automatsko preuzimanje više fajlova</translation> <translation id="5481941284378890518">Dodaj štampače u blizini</translation> <translation id="5483785310822538350">Opozovi pristup fajlu i uređaju</translation> @@ -5204,7 +5200,6 @@ <translation id="5555639311269196631">Isključi pristupnu tačku</translation> <translation id="5556459405103347317">Učitaj ponovo</translation> <translation id="5558129378926964177">Uve&ćaj</translation> -<translation id="5558247502209241936">Omogućavanje otvaranja aplikacije u prozoru</translation> <translation id="5559311991468302423">Izbrišite adresu</translation> <translation id="55601339223879446">Podesite granice radne površine unutar ekrana</translation> <translation id="5561162485081632007">Otkriva opasne događaje i upozorava vas na njih kada nastupe</translation> @@ -6030,7 +6025,6 @@ <translation id="6305607932814307878">Globalno pravilo:</translation> <translation id="6305702903308659374">Reproduciraj pri normalnoj jačini zvuka kada ChromeVox govori</translation> <translation id="6305909198255586420">Instalirajte pomoću primarnog profila</translation> -<translation id="630750887748244481">Tvoj roditelj je isključio "Odobrenja za web lokacije, aplikacije i ekstenzije" za Chrome. Dodavanje ove ekstenzije nije dozvoljeno.</translation> <translation id="6307990684951724544">Sistem je zauzet</translation> <translation id="6308493641021088955">Prijavu omogućava <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Sačuvaj lin&k kao...</translation> @@ -6860,7 +6854,6 @@ <translation id="7025190659207909717">Upravljanje uslugom prijenosa podataka na mobilnoj mreži</translation> <translation id="7025895441903756761">Sigurnost i privatnost</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Otvori sve u &anonimnom prozoru}=1{Otvori u &anonimnom prozoru}one{Otvori sve ({COUNT}) u &anonimnom prozoru}few{Otvori sve ({COUNT}) u &anonimnom prozoru}other{Otvori sve ({COUNT}) u &anonimnom prozoru}}</translation> -<translation id="7028057921476386252">Roditelj ili staratelj mora reći da možeš omogućiti ovu ekstenziju</translation> <translation id="7029307918966275733">Crostini nije instaliran. Instalirajte Crostini da vidite zahvale.</translation> <translation id="7029809446516969842">Lozinke</translation> <translation id="7030304022046916278">Šalje URL-ove Sigurnom pregledanju na provjeru</translation> @@ -8239,7 +8232,6 @@ <translation id="8251509999076836464">Uparivanje s uređajem <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Sličica je uklonjena.</translation> <translation id="825238165904109940">Uvijek prikaži pune URL-ove</translation> -<translation id="8252538334423261825">Nije moguće dodati ekstenziju</translation> <translation id="8252569384384439529">Otpremanje...</translation> <translation id="8253198102038551905">Klliknite na "+" da dođete do karakteristika mreže</translation> <translation id="8255212965098517578">Nedavne fotografije, obavještenja i aplikacije</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 70f7a41..c658b34 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1328,7 +1328,6 @@ <translation id="2114820389966440614">Consulta aquí "Fotos destacades recents" i altres records</translation> <translation id="2114896190328250491">Foto feta per <ph name="NAME" /></translation> <translation id="2114995631896158695">No hi ha cap targeta SIM inserida</translation> -<translation id="2116020356255810305">Activa l'execució de l'aplicació a l'inici</translation> <translation id="2116619964159595185">Els llocs web solen connectar-se a dispositius Bluetooth per a funcions com ara configurar o sincronitzar una balisa de baix consum, una aplicació de seguiment de fitnes o salut, o una bombeta intel·ligent</translation> <translation id="2117655453726830283">Diapositiva següent</translation> <translation id="2119349053129246860">Obre a <ph name="APP" /></translation> @@ -3257,7 +3256,6 @@ <translation id="380329542618494757">Nom</translation> <translation id="3803345858388753269">Qualitat de vídeo</translation> <translation id="3803367742635802571">És possible que els llocs web que visites deixin de funcionar de la manera prevista</translation> -<translation id="3803583375545057606">Vols demanar al teu pare o mare que activi aquesta extensió?</translation> <translation id="380408572480438692">L'activació de la recollida de dades de rendiment ajudarà Google a millorar el sistema amb el temps. No s'enviarà cap dada fins que no empleneu un informe de suggeriments (Alt-Maj-I) i les dades de rendiment. Podeu tornar a aquesta pantalla per desactivar la recopilació en qualsevol moment.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (amb identificador d'extensió "<ph name="EXTENSION_ID" />") no es permet a les pantalles d'inici de sessió.</translation> <translation id="3807747707162121253">&Cancel·la</translation> @@ -3678,7 +3676,6 @@ <translation id="4169535189173047238">No permetis</translation> <translation id="4170314459383239649">Esborra en sortir</translation> <translation id="417096670996204801">Selecciona un perfil</translation> -<translation id="41725145403849567">Vols demanar al teu pare o mare que afegeixi aquesta extensió?</translation> <translation id="4175137578744761569">Porpra clar i blanc</translation> <translation id="4175737294868205930">Emmagatzematge permanent</translation> <translation id="4176463684765177261">Desactivat</translation> @@ -4473,7 +4470,7 @@ <translation id="4885692421645694729">Aquesta extensió no té accés a cap lloc web addicional</translation> <translation id="4887424188275796356">Obre amb el lector del sistema</translation> <translation id="488785315393301722">Mostra els detalls</translation> -<translation id="488862352499217187">Crea una carpeta nova</translation> +<translation id="488862352499217187">Crea una carpeta</translation> <translation id="4890773143211625964">Mostra les opcions avançades de la impressora</translation> <translation id="4891089016822695758">Fòrum per a la versió beta</translation> <translation id="4892229439761351791">El lloc web pot fer servir Bluetooth</translation> @@ -5092,7 +5089,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{El PIN ha de tenir almenys 1 caràcter}other{El PIN ha de tenir almenys # caràcters}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> requereix que et connectis a la Wi-Fi ara i que baixis una actualització. També pots baixar-la amb una connexió d'ús mesurat, però és possible que s'apliquin càrrecs.</translation> <translation id="5476016146231427848">Reinicia el dispositiu per utilitzar Steam a Chromebook</translation> -<translation id="5476897066181964657">El teu pare, mare o tutor ha de dir si pots afegir aquesta extensió</translation> <translation id="5481273127572794904">Sense permís per baixar automàticament diversos fitxers</translation> <translation id="5481941284378890518">Afegeix impressores properes</translation> <translation id="5483785310822538350">Revoca l'accés al dispositiu i al fitxer</translation> @@ -5189,7 +5185,6 @@ <translation id="5555639311269196631">Desactiva el punt d'accés Wi‑Fi</translation> <translation id="5556459405103347317">Torna a carregar</translation> <translation id="5558129378926964177">&Amplia</translation> -<translation id="5558247502209241936">Permet obrir l'aplicació en una finestra</translation> <translation id="5559311991468302423">Suprimeix l'adreça</translation> <translation id="55601339223879446">Ajusta els límits de l'escriptori dins de la pantalla</translation> <translation id="5561162485081632007">Detecta esdeveniments perillosos quan es produeixen i t'avisa</translation> @@ -6013,7 +6008,6 @@ <translation id="6305607932814307878">Política global:</translation> <translation id="6305702903308659374">Reprodueix a un volum normal encara que ChromeVox parli</translation> <translation id="6305909198255586420">Instal·la utilitzant el teu perfil principal</translation> -<translation id="630750887748244481">El teu pare o mare ha desactivat Permisos per a llocs web, aplicacions i extensions a Chrome. Aquesta extensió no es permet afegir.</translation> <translation id="6307990684951724544">El sistema està ocupat</translation> <translation id="6308493641021088955">Inici de sessió proporcionat per <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Desa l'en&llaç com a...</translation> @@ -6839,7 +6833,6 @@ <translation id="7025190659207909717">Gestió de serveis de dades mòbils</translation> <translation id="7025895441903756761">Seguretat i privadesa</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Obre-les totes en una finestra d'&incògnit}=1{Obre en una finestra d'&incògnit}other{Obre-les totes ({COUNT}) en una finestra d'&incògnit}}</translation> -<translation id="7028057921476386252">El teu pare, mare o tutor ha de dir si pots activar aquesta extensió</translation> <translation id="7029307918966275733">Crostini no està instal·lat. Instal·la'l per veure els crèdits.</translation> <translation id="7029809446516969842">Contrasenyes</translation> <translation id="7030304022046916278">Envia els URL a Navegació segura perquè els comprovi</translation> @@ -8218,7 +8211,6 @@ <translation id="8251509999076836464">S'està vinculant a <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">S'ha eliminat la miniatura.</translation> <translation id="825238165904109940">Mostra sempre els URL complets</translation> -<translation id="8252538334423261825">No es pot afegir l'extensió</translation> <translation id="8252569384384439529">S'està penjant...</translation> <translation id="8253198102038551905">Feu clic a "+" per consultar les propietats de la xarxa</translation> <translation id="8255212965098517578">Fotos, notificacions i aplicacions recents</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index d439657..1a92834 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Akci přeskočíte stisknutím klávesy Esc (pouze neoficiální sestavení).</translation> <translation id="1093457606523402488">Viditelné sítě:</translation> <translation id="1095761715416917775">Zajistěte, abyste k synchronizovaným datům měli vždy přístup</translation> +<translation id="1095879482467973146">Správce hesel Google na webu</translation> <translation id="109647177154844434">Odinstalováním nástroje Parallels Desktop smažete i obraz systému Windows. To zahrnuje i aplikace, nastavení a data. Opravdu chcete pokračovat?</translation> <translation id="1097016918605049747">Stránku se nepodařilo přeložit</translation> <translation id="1097658378307015415">Chcete-li aktivovat síť <ph name="NETWORK_ID" />, vstupte prosím před přihlášením jako host</translation> @@ -1329,7 +1330,6 @@ <translation id="2114820389966440614">Zde můžete zobrazit „Výběr nedávných fotek“ a další vzpomínky</translation> <translation id="2114896190328250491">Autor fotografie: <ph name="NAME" /></translation> <translation id="2114995631896158695">Není vložena žádná SIM karta</translation> -<translation id="2116020356255810305">Povolit spuštění aplikace po zapnutí</translation> <translation id="2116619964159595185">Weby se k zařízením Bluetooth obvykle připojují kvůli funkcím, jako je nastavení nebo synchronizace nízkoenergetických lokátorů, zařízení ke sledování kondice a zdraví nebo chytrých žárovek</translation> <translation id="2117655453726830283">Další snímek</translation> <translation id="2119349053129246860">Otevřít v aplikaci <ph name="APP" /></translation> @@ -1489,6 +1489,7 @@ <translation id="2252017960592955005">Ochrana před špehováním (beta)</translation> <translation id="225240747099314620">Aktivovat identifikátory chráněného obsahu (může být vyžadován restart počítače)</translation> <translation id="2253318212986772520">PPD pro tiskárnu <ph name="PRINTER_NAME" /> se nepodařilo načíst.</translation> +<translation id="2253927598983295051">Vyberte, co chcete sdílet s aplikací <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Toto zařízení bylo uzamknuto pro jinou doménu nebo režim.</translation> <translation id="2255317897038918278">Časové razítko standardu Microsoft</translation> <translation id="2256115617011615191">Restartovat</translation> @@ -1834,6 +1835,7 @@ <translation id="2532589005999780174">Režim vysokého kontrastu</translation> <translation id="2533649878691950253">Přístup tohoto webu k vaší přesné poloze byl zablokován, protože ho obvykle nepovolujete</translation> <translation id="253434972992662860">&Pozastavit</translation> +<translation id="253498598929009420">Web bude moci vidět obsah vaší obrazovky</translation> <translation id="253557089021624350">Aktivity zabraňující ukončení</translation> <translation id="2535799430745250929">Žádná mobilní síť není k dispozici</translation> <translation id="2537395079978992874">Web <ph name="ORIGIN" /> může zobrazovat a upravovat následující soubory a složky</translation> @@ -3256,7 +3258,6 @@ <translation id="380329542618494757">Název</translation> <translation id="3803345858388753269">Kvalita videa</translation> <translation id="3803367742635802571">Navštívené weby mohou přestat fungovat podle očekávání</translation> -<translation id="3803583375545057606">Požádat rodičeo zapnutí tohoto rozšíření?</translation> <translation id="380408572480438692">Pokud aktivujete shromažďování údajů o výkonu, pomůžete společnosti Google systém postupně zlepšovat. Žádné údaje nebudou odesílány, dokud neodešlete zprávu se zpětnou vazbou (Alt+Shift+I) a údaje o výkonu v něm neuvedete. Shromažďování dat můžete na této stránce kdykoli deaktivovat.</translation> <translation id="3807249107536149332">Rozšíření <ph name="EXTENSION_NAME" /> (ID: <ph name="EXTENSION_ID" />) na přihlašovací obrazovce není povoleno.</translation> <translation id="3807747707162121253">Zrušit</translation> @@ -3677,7 +3678,6 @@ <translation id="4169535189173047238">Nepovolovat</translation> <translation id="4170314459383239649">Smazat při ukončení</translation> <translation id="417096670996204801">Vybrat profil</translation> -<translation id="41725145403849567">Požádat rodiče o přidání tohoto rozšíření?</translation> <translation id="4175137578744761569">Světle nachová a bílá</translation> <translation id="4175737294868205930">Trvalé úložiště</translation> <translation id="4176463684765177261">Vypnuto</translation> @@ -5090,7 +5090,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN musí obsahovat nejméně 1 znak}few{PIN musí obsahovat nejméně # znaky}many{PIN musí obsahovat nejméně # znaku}other{PIN musí obsahovat nejméně # znaků}}</translation> <translation id="5474859849784484111">Doména <ph name="MANAGER" /> vyžaduje, abyste se připojili k síti Wi-Fi a stáhli aktualizaci. Případně ji můžete stáhnout přes měřené připojení (mohou být účtovány poplatky).</translation> <translation id="5476016146231427848">Pokud chcete používat Steam na Chromebooku, restartujte zařízení</translation> -<translation id="5476897066181964657">Přidání tohoto rozšíření ti musí schválit rodič nebo zákonný zástupce</translation> <translation id="5481273127572794904">Zákaz stahovat automaticky několik souborů</translation> <translation id="5481941284378890518">Přidat tiskárny v okolí</translation> <translation id="5483785310822538350">Zrušit přístup k souborům a zařízení</translation> @@ -5187,7 +5186,6 @@ <translation id="5555639311269196631">Vypnout hotspot</translation> <translation id="5556459405103347317">Načíst znovu</translation> <translation id="5558129378926964177">&Přiblížit</translation> -<translation id="5558247502209241936">Povolit otevření aplikace v okně</translation> <translation id="5559311991468302423">Smazat adresu</translation> <translation id="55601339223879446">Úprava ohraničení plochy v rámci obrazovky</translation> <translation id="5561162485081632007">Rozpoznává nebezpečné události a upozorňuje vás na ně, když k nim dojde.</translation> @@ -6010,7 +6008,6 @@ <translation id="6305607932814307878">Globální zásada:</translation> <translation id="6305702903308659374">Při hlasové odezvě ChromeVox zachovat normální hlasitost přehrávání</translation> <translation id="6305909198255586420">K instalaci použijte svůj primární profil</translation> -<translation id="630750887748244481">Tvůj rodič pro Chrome vypnul možnost Oprávnění pro weby, aplikace a rozšíření. Přidání tohoto rozšíření není povoleno.</translation> <translation id="6307990684951724544">Systém je zaneprázděný</translation> <translation id="6308493641021088955">Poskytovatel přihlášení: <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Uložit od&kaz jako...</translation> @@ -6840,7 +6837,6 @@ <translation id="7025190659207909717">Správa mobilních datových služeb</translation> <translation id="7025895441903756761">Zabezpečení a ochrana soukromí</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Otevřít vše v &anonymním okně}=1{Otevřít v &anonymním okně}few{Otevřít vše ({COUNT}) v &anonymním okně}many{Otevřít vše ({COUNT}) v &anonymním okně}other{Otevřít vše ({COUNT}) v &anonymním okně}}</translation> -<translation id="7028057921476386252">Zapnutí tohoto rozšíření ti musí schválit rodič nebo zákonný zástupce</translation> <translation id="7029307918966275733">Plugin Crostini není nainstalován. Chcete-li zobrazit seznam přispěvatelů, nainstalujte Crostini.</translation> <translation id="7029809446516969842">Hesla</translation> <translation id="7030304022046916278">Odesílá adresy URL ke kontrole ve funkci Bezpečné prohlížení</translation> @@ -8218,7 +8214,6 @@ <translation id="8251509999076836464">Párování se zařízením <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatura byla odstraněna.</translation> <translation id="825238165904109940">Vždy zobrazovat úplné adresy URL</translation> -<translation id="8252538334423261825">Rozšíření nelze přidat</translation> <translation id="8252569384384439529">Nahrávání...</translation> <translation id="8253198102038551905">Vlastnosti sítě otevřete kliknutím na +.</translation> <translation id="8255212965098517578">Nedávné fotky, oznámení a aplikace</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb index 19cd825..eca1888 100644 --- a/chrome/app/resources/generated_resources_cy.xtb +++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Pwyswch ESCAPE i hepgor (Datblygiadau answyddogol yn unig).</translation> <translation id="1093457606523402488">Rhwydweithiau Gweladwy:</translation> <translation id="1095761715416917775">Gwnewch yn siŵr eich bod bob amser yn gallu cael mynediad at eich data cysoni</translation> +<translation id="1095879482467973146">Rheolwr Cyfrineiriau Google ar y we</translation> <translation id="109647177154844434">Bydd dadosod Parallels Desktop yn dileu eich delwedd Windows. Mae hyn yn cynnwys ei hapiau, ei gosodiadau a'i data. Ydych chi'n siŵr eich bod am barhau?</translation> <translation id="1097016918605049747">Nid oedd modd cyfieithu'r dudalen hon</translation> <translation id="1097658378307015415">Cyn mewngofnodi, defnyddiwch y modd Gwestai i weithredu'r rhwydwaith <ph name="NETWORK_ID" /></translation> @@ -1342,7 +1343,6 @@ <translation id="2114820389966440614">Gweld "Uchafbwyntiau Diweddar" ac atgofion eraill yma</translation> <translation id="2114896190328250491">Llun gan <ph name="NAME" /></translation> <translation id="2114995631896158695">Dim cerdyn SIM wedi'i fewnosod</translation> -<translation id="2116020356255810305">Galluogi lansio ap wrth gychwyn</translation> <translation id="2116619964159595185">Mae gwefannau fel arfer yn cysylltu â dyfeisiau Bluetooth ar gyfer nodweddion megis gosod neu gysoni golau ynni isel, olrheiniwr iechyd neu ffitrwydd, neu fwlb golau smart</translation> <translation id="2117655453726830283">Sleid nesaf</translation> <translation id="2119349053129246860">Agor yn <ph name="APP" /></translation> @@ -1502,6 +1502,7 @@ <translation id="2252017960592955005">Diogelwch gwylio (Beta)</translation> <translation id="225240747099314620">Caniatáu dynodwyr ar gyfer cynnwys gwarchodedig (mae'n bosib y bydd angen ailgychwyn y cyfrifiadur)</translation> <translation id="2253318212986772520">Methu ag adfer PPD ar gyfer <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Dewiswch beth i'w rannu â <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Mae'r ddyfais hon wedi'i chloi i barth neu fodd gwahanol.</translation> <translation id="2255317897038918278">Stampio Amser Microsoft</translation> <translation id="2256115617011615191">Ailgychwyn nawr</translation> @@ -1850,6 +1851,7 @@ <translation id="2532589005999780174">Modd cyferbyniad uchel</translation> <translation id="2533649878691950253">Cafodd y wefan hon ei rhwystro rhag gwybod eich union leoliad oherwydd fel rheol nid ydych yn caniatáu hyn</translation> <translation id="253434972992662860">&Seibio</translation> +<translation id="253498598929009420">Bydd y wefan yn gallu gweld cynnwys eich sgrîn</translation> <translation id="253557089021624350">Cyfrif cadw'n fyw</translation> <translation id="2535799430745250929">Nid oes rhwydwaith symudol yn bodoli</translation> <translation id="2537395079978992874">Gall <ph name="ORIGIN" /> weld a golygu'r ffeiliau a'r ffolderi canlynol</translation> @@ -3272,7 +3274,6 @@ <translation id="380329542618494757">Enw</translation> <translation id="3803345858388753269">Ansawdd Fideo</translation> <translation id="3803367742635802571">Mae'n bosib y bydd gwefannau y byddwch yn ymweld â nhw yn peidio â gweithio fel y'u cynlluniwyd</translation> -<translation id="3803583375545057606">Gofyn i dy riant alluogi'r estyniad hwn?</translation> <translation id="380408572480438692">Bydd galluogi casglu data perfformiad yn helpu Google i wella'r system dros amser. Ni anfonir unrhyw ddata nes i chi ffeilio adroddiad adborth (Alt-Shift-I) a chynnwys data perfformiad. Gallwch ddychwelyd i'r sgrîn hon i analluogi casglu ar unrhyw adeg.</translation> <translation id="3807249107536149332">Ni chaniateir <ph name="EXTENSION_NAME" /> (rhif adnabod yr estyniad "<ph name="EXTENSION_ID" />") ar sgrîn mewngofnodi.</translation> <translation id="3807747707162121253">&Canslo</translation> @@ -3694,7 +3695,6 @@ <translation id="4169535189173047238">Peidio â chaniatáu</translation> <translation id="4170314459383239649">Clirio Wrth Adael</translation> <translation id="417096670996204801">Dewiswch broffil</translation> -<translation id="41725145403849567">Gofyn i dy riant ychwanegu'r estyniad hwn?</translation> <translation id="4175137578744761569">Porffor golau a gwyn</translation> <translation id="4175737294868205930">Storio parhaus</translation> <translation id="4176463684765177261">Mae wedi'i analluogi</translation> @@ -5108,7 +5108,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Rhaid i'r PIN fod o leiaf un nod}zero{Rhaid i'r PIN fod o leiaf # nod}two{Rhaid i'r PIN fod o leiaf # nod}few{Rhaid i'r PIN fod o leiaf # nod}many{Rhaid i'r PIN fod o leiaf # nod}other{Rhaid i'r PIN fod o leiaf # nod}}</translation> <translation id="5474859849784484111">Mae <ph name="MANAGER" /> yn gofyn i chi gysylltu â Wi-Fi nawr a lawrlwytho diweddariad. Neu, gallwch lawrlwytho o gysylltiad â mesurydd (gall taliadau fod yn berthnasol).</translation> <translation id="5476016146231427848">Ailgychwynnwch eich dyfais i ddefnyddio Steam ar Chromebook</translation> -<translation id="5476897066181964657">Mae'n rhaid i riant neu warcheidwad ddweud ei bod yn iawn i ti ychwanegu'r estyniad hwn</translation> <translation id="5481273127572794904">Ni chaniateir i lawrlwytho sawl ffeil yn awtomatig</translation> <translation id="5481941284378890518">Ychwanegu Argraffwyr Gerllaw</translation> <translation id="5483785310822538350">Dirymu mynediad ffeil a dyfais</translation> @@ -5205,7 +5204,6 @@ <translation id="5555639311269196631">Diffodd poethfan</translation> <translation id="5556459405103347317">Ail-lwytho</translation> <translation id="5558129378926964177">Chwyddo&</translation> -<translation id="5558247502209241936">Galluogi agor ap mewn ffenestr</translation> <translation id="5559311991468302423">Dileu cyfeiriad</translation> <translation id="55601339223879446">Addasu ffiniau eich bwrdd gwaith o fewn y sgrîn</translation> <translation id="5561162485081632007">Yn canfod ac yn eich rhybuddio am ddigwyddiadau peryglus pan fyddant yn digwydd</translation> @@ -6031,7 +6029,6 @@ <translation id="6305607932814307878">Polisi Cyffredinol:</translation> <translation id="6305702903308659374">Chwarae ar lefel sain arferol hyd yn oed os yw ChromeVox yn siarad</translation> <translation id="6305909198255586420">Gosodwch gan ddefnyddio'ch prif broffil</translation> -<translation id="630750887748244481">Mae dy riant wedi diffodd "Caniatâd ar gyfer gwefannau, apiau ac estyniadau" ar gyfer Chrome. Ni chaniateir ychwanegu'r estyniad hwn.</translation> <translation id="6307990684951724544">Mae'r system yn brysur</translation> <translation id="6308493641021088955">Mae mewngofnodi wedi'i ddarparu gan <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Cadw'r ddole&n fel…</translation> @@ -6865,7 +6862,6 @@ <translation id="7025190659207909717">Rheoli gwasanaeth data symudol</translation> <translation id="7025895441903756761">Diogelwch a Phreifatrwydd</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Agor Pob Un mewn &Ffenestr Anhysbys}=1{Agor mewn &Ffenestr Anhysbys}two{Agor Pob Un ({COUNT}) mewn &Ffenestr Anhysbys}few{Agor Pob Un ({COUNT}) mewn &Ffenestr Anhysbys}many{Agor Pob Un ({COUNT}) mewn &Ffenestr Anhysbys}other{Agor Pob Un ({COUNT}) mewn &Ffenestr Anhysbys}}</translation> -<translation id="7028057921476386252">Mae'n rhaid i riant neu warcheidwad ddweud ei bod yn iawn i ti alluogi'r estyniad hwn</translation> <translation id="7029307918966275733">Nid yw Crostini wedi'i osod. Gosodwch Crostini i weld credydau.</translation> <translation id="7029809446516969842">Cyfrineiriau</translation> <translation id="7030304022046916278">Yn anfon cyfeiriadau URL i Pori'n Ddiogel i'w gwirio</translation> @@ -8243,7 +8239,6 @@ <translation id="8251509999076836464">Wrthi'n paru i <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Tynnwyd mân-lun.</translation> <translation id="825238165904109940">Dangos cyfeiriadau URL Llawn Bob Amser</translation> -<translation id="8252538334423261825">Ni ellir ychwanegu'r estyniad</translation> <translation id="8252569384384439529">Wrthi'n uwchlwytho...</translation> <translation id="8253198102038551905">Cliciwch '+' i gael priodweddau'r rhwydwaith</translation> <translation id="8255212965098517578">Lluniau, hysbysiadau ac apiau diweddar</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index dfb31d8..44a9fd6 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Tryk på ESC for at springe over (kun uofficielle builds).</translation> <translation id="1093457606523402488">Synlige netværk:</translation> <translation id="1095761715416917775">Sørg for, at du altid kan få adgang til dine synkroniserede data</translation> +<translation id="1095879482467973146">Google Adgangskodeadministrator på nettet</translation> <translation id="109647177154844434">Hvis du afinstallerer Parallels Desktop, slettes dit Windows-billede. Dette omfatter dens apps, indstillinger og data. Er du sikker på, at du vil fortsætte?</translation> <translation id="1097016918605049747">Denne side kunne ikke oversættes</translation> <translation id="1097658378307015415">Før du logger ind, skal du starte en gæstesession for at aktivere netværket <ph name="NETWORK_ID" /></translation> @@ -1340,7 +1341,6 @@ <translation id="2114820389966440614">Se "Seneste øjeblikke" og andre minder her</translation> <translation id="2114896190328250491">Foto af <ph name="NAME" /></translation> <translation id="2114995631896158695">Der er ikke indsat et SIM-kort</translation> -<translation id="2116020356255810305">Aktivér åbning af app ved opstart</translation> <translation id="2116619964159595185">Websites opretter normalt forbindelse til Bluetooth-enheder i forbindelse med funktioner som f.eks. konfiguration eller synkronisering af en lavenergibeacon, en sundheds- eller motionstracker eller en smartpære</translation> <translation id="2117655453726830283">Næste dias</translation> <translation id="2119349053129246860">Åbn i <ph name="APP" /></translation> @@ -1500,6 +1500,7 @@ <translation id="2252017960592955005">Visningsbeskyttelse (beta)</translation> <translation id="225240747099314620">Tillad id'er for beskyttet indhold (genstart af computeren kan være påkrævet)</translation> <translation id="2253318212986772520">PPD-filen for <ph name="PRINTER_NAME" /> kunne ikke vises.</translation> +<translation id="2253927598983295051">Vælg, hvad du vil dele med <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Denne enhed blev låst til brug på et andet domæne eller i en anden tilstand.</translation> <translation id="2255317897038918278">Microsoft-tidsstempling</translation> <translation id="2256115617011615191">Genstart nu</translation> @@ -1848,6 +1849,7 @@ <translation id="2532589005999780174">Tilstanden Høj kontrast</translation> <translation id="2533649878691950253">Dette websites adgang til din præcise placering blev blokeret, fordi du normalt ikke tillader denne adgang</translation> <translation id="253434972992662860">&Pause</translation> +<translation id="253498598929009420">Websitet vil kunne se indholdet på din skærm</translation> <translation id="253557089021624350">Antal aktiviteter, der bruger udvidelsen</translation> <translation id="2535799430745250929">Der er intet mobilnetværk</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> kan se og redigere følgende filer og mapper</translation> @@ -3270,7 +3272,6 @@ <translation id="380329542618494757">Navn</translation> <translation id="3803345858388753269">Videokvalitet</translation> <translation id="3803367742635802571">Websites, du besøger, holder muligvis op med at fungere som forventet</translation> -<translation id="3803583375545057606">Vil du bede din forælder om lov til at aktivere denne udvidelse?</translation> <translation id="380408572480438692">Aktiverer registrering af ydelsesdata, der hjælper Google med at forbedre systemet med tiden. Der sendes ingen data, før du indgiver en feedbackrapport (Alt-Shift-I) og medtager ydelsesdata. Du kan altid vende tilbage til dette skærmbillede for at deaktivere registreringen.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (udvidelses-id "<ph name="EXTENSION_ID" />") er ikke tilladt på en loginskærm.</translation> <translation id="3807747707162121253">&Annuller</translation> @@ -3692,7 +3693,6 @@ <translation id="4169535189173047238">Tillad ikke</translation> <translation id="4170314459383239649">Ryd ved lukning</translation> <translation id="417096670996204801">Vælg en profil</translation> -<translation id="41725145403849567">Vil du bede din forælder om lov til at tilføje denne udvidelse?</translation> <translation id="4175137578744761569">Lyslilla og hvid</translation> <translation id="4175737294868205930">Vedvarende lagring</translation> <translation id="4176463684765177261">Deaktiveret</translation> @@ -5106,7 +5106,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Pinkoden skal være på mindst ét tegn}one{Pinkoden skal være på mindst # tegn}other{Pinkoden skal være på mindst # tegn}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> kræver, at du opretter forbindelse til Wi-Fi nu og downloader en opdatering. Du kan også downloade via en forbrugsafregnet forbindelse (du opkræves muligvis et gebyr).</translation> <translation id="5476016146231427848">Genstart enheden for at bruge Steam på Chromebook</translation> -<translation id="5476897066181964657">En forælder eller værge skal give dig lov til at tilføje denne udvidelse</translation> <translation id="5481273127572794904">Har ikke tilladelse til at downloade flere filer automatisk</translation> <translation id="5481941284378890518">Tilføj printere i nærheden</translation> <translation id="5483785310822538350">Tilbagekald adgang til fil og enhed</translation> @@ -5203,7 +5202,6 @@ <translation id="5555639311269196631">Deaktiver hotspot</translation> <translation id="5556459405103347317">Genindlæs</translation> <translation id="5558129378926964177">Zoom &ind</translation> -<translation id="5558247502209241936">Aktivér åbning af app i vindue</translation> <translation id="5559311991468302423">Slet adresse</translation> <translation id="55601339223879446">Tilpas grænserne for dit skrivebord inden for skærmvisningen</translation> <translation id="5561162485081632007">Registrerer og advarer dig om skadelige hændelser, når de opstår</translation> @@ -6029,7 +6027,6 @@ <translation id="6305607932814307878">Global politik:</translation> <translation id="6305702903308659374">Afspil ved normal lydstyrke, selvom ChromeVox taler</translation> <translation id="6305909198255586420">Installer ved hjælp af din primære profil</translation> -<translation id="630750887748244481">Din forælder har deaktiveret "Tilladelser for websites, apps og udvidelser" for Chrome. Det er ikke tilladt at tilføje denne udvidelse.</translation> <translation id="6307990684951724544">Systemet er optaget</translation> <translation id="6308493641021088955">Login leveres af <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Gem lin&k som...</translation> @@ -6857,7 +6854,6 @@ <translation id="7025190659207909717">Administration af mobildatatjeneste</translation> <translation id="7025895441903756761">Sikkerhed og privatliv</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Åbn alle i &inkognitovindue}=1{Åbn i &inkognitovindue}one{Åbn ({COUNT}) i &inkognitovindue}other{Åbn alle ({COUNT}) i &inkognitovindue}}</translation> -<translation id="7028057921476386252">En forælder eller værge skal give dig lov til at aktivere denne udvidelse</translation> <translation id="7029307918966275733">Crostini er ikke installeret. Installer Crostini for at se krediteringer.</translation> <translation id="7029809446516969842">Adgangskoder</translation> <translation id="7030304022046916278">Webadresser sendes til tjek i Beskyttet browsing</translation> @@ -8235,7 +8231,6 @@ <translation id="8251509999076836464">Parrer med <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniaturen blev fjernet.</translation> <translation id="825238165904109940">Vis altid komplette webadresser</translation> -<translation id="8252538334423261825">Udvidelsen kan ikke tilføjes</translation> <translation id="8252569384384439529">Uploader…</translation> <translation id="8253198102038551905">Klik på "+" for at få vist netværksegenskaber</translation> <translation id="8255212965098517578">Seneste billeder, notifikationer og apps</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 9faec791..631c6470 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1325,7 +1325,6 @@ <translation id="2114820389966440614">„Aktuelle Highlights“ und andere Erinnerungen hier ansehen</translation> <translation id="2114896190328250491">Foto von <ph name="NAME" /></translation> <translation id="2114995631896158695">Keine SIM-Karte eingelegt</translation> -<translation id="2116020356255810305">Öffnen der App beim Start aktivieren</translation> <translation id="2116619964159595185">Websites verwenden Bluetooth-Geräte normalerweise für Funktionen wie das Einrichten oder Synchronisieren eines LE-Beacons, eines Gesundheits- oder Fitnesstrackers oder einer intelligenten Lampe</translation> <translation id="2117655453726830283">Nächste Folie</translation> <translation id="2119349053129246860">In <ph name="APP" /> öffnen</translation> @@ -3254,7 +3253,6 @@ <translation id="380329542618494757">Name</translation> <translation id="3803345858388753269">Videoqualität</translation> <translation id="3803367742635802571">Websites funktionieren möglicherweise nicht mehr erwartungsgemäß</translation> -<translation id="3803583375545057606">Möchtest du deinen Elternteil darum bitten, diese Erweiterung zu aktivieren?</translation> <translation id="380408572480438692">Bei Aktivierung der Erfassung von Leistungsdaten kann Google das System mit der Zeit verbessern. Daten werden erst gesendet, wenn du mittels Alt+Umschalttaste+I einen Feedback-Bericht mit Leistungsdaten einreichst. Du kannst jederzeit zu diesem Bildschirm zurückkehren, um die Datenerfassung zu deaktivieren.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (Erweiterungs-ID "<ph name="EXTENSION_ID" />") ist auf Anmeldeseiten nicht zulässig.</translation> <translation id="3807747707162121253">Abbre&chen</translation> @@ -3676,7 +3674,6 @@ <translation id="4169535189173047238">Nicht zulassen</translation> <translation id="4170314459383239649">Beim Beenden löschen</translation> <translation id="417096670996204801">Profil auswählen</translation> -<translation id="41725145403849567">Möchtest du deinen Elternteil darum bitten, diese Erweiterung hinzuzufügen?</translation> <translation id="4175137578744761569">Hellviolett und Weiß</translation> <translation id="4175737294868205930">Permanentspeicher</translation> <translation id="4176463684765177261">Deaktiviert</translation> @@ -5089,7 +5086,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Die PIN muss aus mindestens 1 Zeichen bestehen}other{Die PIN muss aus mindestens # Zeichen bestehen}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> erfordert, dass du dein Gerät jetzt mit dem WLAN verbindest und ein Update herunterlädst. Das Update kann auch über eine kostenpflichtige Verbindung heruntergeladen werden (hierfür können zusätzliche Gebühren anfallen).</translation> <translation id="5476016146231427848">Bitte starte dein Gerät neu, um Steam auf Chromebook verwenden zu können</translation> -<translation id="5476897066181964657">Ein Elternteil oder Erziehungsberechtigter muss dir erlauben, diese Erweiterung hinzuzufügen</translation> <translation id="5481273127572794904">Dürfen nicht automatisch mehrere Dateien herunterladen</translation> <translation id="5481941284378890518">Drucker in der Nähe hinzufügen</translation> <translation id="5483785310822538350">Datei- und Gerätezugriff aufheben</translation> @@ -5186,7 +5182,6 @@ <translation id="5555639311269196631">Hotspot deaktivieren</translation> <translation id="5556459405103347317">Neu laden</translation> <translation id="5558129378926964177">Ver&größern</translation> -<translation id="5558247502209241936">Öffnen der App im Fenster aktivieren</translation> <translation id="5559311991468302423">Adresse löschen</translation> <translation id="55601339223879446">Die Ränder des Desktops an den Bildschirm anpassen</translation> <translation id="5561162485081632007">Erkennt schädliche Ereignisse, sobald diese passieren, und warnt dich entsprechend</translation> @@ -6009,7 +6004,6 @@ <translation id="6305607932814307878">Globale Richtlinien:</translation> <translation id="6305702903308659374">Mit normaler Lautstärke wiedergeben, auch wenn eine Sprachausgabe durch ChromeVox stattfindet</translation> <translation id="6305909198255586420">Bitte installiere Steam über dein primäres Profil</translation> -<translation id="630750887748244481">Dein Elternteil hat „Berechtigungen für Websites, Apps und Erweiterungen“ für Chrome deaktiviert. Deshalb kann diese Erweiterung nicht hinzugefügt werden.</translation> <translation id="6307990684951724544">System ausgelastet</translation> <translation id="6308493641021088955">Anmeldung zur Verfügung gestellt von <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">&Link speichern unter...</translation> @@ -6835,7 +6829,6 @@ <translation id="7025190659207909717">Verwaltung mobiler Datendienste</translation> <translation id="7025895441903756761">Sicherheit und Datenschutz</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Alle in &Inkognitofenster öffnen}=1{In &Inkognitofenster öffnen}other{Alle ({COUNT}) in &Inkognitofenster öffnen}}</translation> -<translation id="7028057921476386252">Ein Elternteil oder Erziehungsberechtigter muss dir erlauben, diese Erweiterung zu aktivieren</translation> <translation id="7029307918966275733">Crostini ist nicht installiert. Bitte installiere Crostini, um die Credits anzuzeigen.</translation> <translation id="7029809446516969842">Passwörter</translation> <translation id="7030304022046916278">Sendet URLs an Safe Browsing, um sie zu prüfen</translation> @@ -8214,7 +8207,6 @@ <translation id="8251509999076836464">Wird mit „<ph name="DEVICE_NAME" />“ gekoppelt</translation> <translation id="8251578425305135684">Miniaturansicht wurde entfernt.</translation> <translation id="825238165904109940">Immer vollständige URLs anzeigen</translation> -<translation id="8252538334423261825">Erweiterung kann nicht hinzugefügt werden</translation> <translation id="8252569384384439529">Wird hochgeladen…</translation> <translation id="8253198102038551905">Auf "+" klicken, um die Netzwerkeigenschaften anzuzeigen</translation> <translation id="8255212965098517578">Letzte Fotos, Benachrichtigungen und Apps</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index d5cc3c9b..285613b 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">Δείτε εδώ το άλμπουμ Πρόσφατες καλύτερες στιγμές και άλλες αναμνήσεις</translation> <translation id="2114896190328250491">Φωτογραφία από <ph name="NAME" /></translation> <translation id="2114995631896158695">Δεν έχει εισαχθεί κάρτα SIM</translation> -<translation id="2116020356255810305">Ενεργοποίηση του ανοίγματος εφαρμογής κατά την εκκίνηση</translation> <translation id="2116619964159595185">Οι ιστότοποι συνδέονται συνήθως με συσκευές Bluetooth για λειτουργίες όπως η ρύθμιση ή ο συγχρονισμός ενός beacon χαμηλής ενέργειας, ενός συστήματος παρακολούθησης υγείας ή φυσικής κατάστασης ή ενός λαμπτήρα έξυπνου φωτισμού.</translation> <translation id="2117655453726830283">Επόμενη διαφάνεια</translation> <translation id="2119349053129246860">Άνοιγμα σε <ph name="APP" /></translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">Όνομα</translation> <translation id="3803345858388753269">Ποιότητα βίντεο</translation> <translation id="3803367742635802571">Οι ιστότοποι που επισκέπτεστε ενδέχεται να σταματήσουν να λειτουργούν με τον αναμενόμενο τρόπο</translation> -<translation id="3803583375545057606">Θέλεις να ζητήσεις άδεια από τον γονέα σου για να ενεργοποιήσεις αυτήν την επέκταση;</translation> <translation id="380408572480438692">Η ενεργοποίηση της συλλογής δεδομένων απόδοσης θα διευκολύνει την Google να βελτιώσει το σύστημα με την πάροδο του χρόνου. Δεν αποστέλλονται δεδομένα χωρίς να καταθέσετε πρώτα αναφορά σχολίων (Alt-Shift-I) και να συμπεριλάβετε τα δεδομένα απόδοσης. Μπορείτε να επιστρέψετε σε αυτήν την οθόνη για να απενεργοποιήσετε τη συλλογή ανά πάσα στιγμή.</translation> <translation id="3807249107536149332">Η επέκταση <ph name="EXTENSION_NAME" /> (αναγνωριστικό επέκτασης "<ph name="EXTENSION_ID" />") δεν επιτρέπεται σε μια οθόνη σύνδεσης.</translation> <translation id="3807747707162121253">&Ακύρωση</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Να μην επιτρέπεται</translation> <translation id="4170314459383239649">Διαγραφή κατά την έξοδο</translation> <translation id="417096670996204801">Επιλέξτε προφίλ</translation> -<translation id="41725145403849567">Θέλεις να ζητήσεις άδεια από τον γονέα σου για να προσθέσεις αυτήν την επέκταση;</translation> <translation id="4175137578744761569">Ανοιχτό μοβ και λευκό</translation> <translation id="4175737294868205930">Μόνιμος αποθηκευτικός χώρος</translation> <translation id="4176463684765177261">Απενεργοποιημένο</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Το PIN πρέπει να αποτελείται τουλάχιστον από έναν χαρακτήρα.}other{Το PIN πρέπει να αποτελείται τουλάχιστον από # χαρακτήρες.}}</translation> <translation id="5474859849784484111">Ο τομέας <ph name="MANAGER" /> απαιτεί να συνδεθείτε άμεσα σε Wi-Fi και να κατεβάσετε μια ενημέρωση. Εναλλακτικά, μπορείτε να την κατεβάσετε από μια σύνδεση με ογκοχρέωση (ενδέχεται να ισχύουν χρεώσεις).</translation> <translation id="5476016146231427848">Επανεκκινήστε τη συσκευή σας για να χρησιμοποιήσετε το Steam στο Chromebook</translation> -<translation id="5476897066181964657">Για να προσθέσεις αυτήν την επέκταση, πρέπει να δώσει την άδεια ένας γονέας ή κηδεμόνας</translation> <translation id="5481273127572794904">Δεν επιτρέπεται να πραγματοποιούν αυτόματη λήψη πολλών αρχείων</translation> <translation id="5481941284378890518">Προσθήκη εκτυπωτών σε κοντινή απόσταση</translation> <translation id="5483785310822538350">Ανάκληση πρόσβασης στο αρχείο και τη συσκευή</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">Απενεργοποίηση σημείου πρόσβασης Wi-Fi</translation> <translation id="5556459405103347317">Επαναφόρτωση</translation> <translation id="5558129378926964177">Μεγέθυνση</translation> -<translation id="5558247502209241936">Ενεργοποίηση του ανοίγματος εφαρμογής σε παράθυρο</translation> <translation id="5559311991468302423">Διαγραφή διεύθυνσης</translation> <translation id="55601339223879446">Προσαρμογή των ορίων της επιφάνειας εργασίας εντός της οθόνης</translation> <translation id="5561162485081632007">Εντοπίζει και σας προειδοποιεί για επικίνδυνα συμβάντα, όταν αυτά εμφανίζονται.</translation> @@ -6032,7 +6027,6 @@ <translation id="6305607932814307878">Καθολική πολιτική:</translation> <translation id="6305702903308659374">Αναπαραγωγή σε κανονική ένταση ακόμα και κατά την εκφώνηση από το ChromeVox</translation> <translation id="6305909198255586420">Χρησιμοποιήστε το κύριο προφίλ σας για την εγκατάσταση</translation> -<translation id="630750887748244481">Ο γονέας σου απενεργοποίησε την επιλογή "Άδειες για ιστοτόπους, εφαρμογές και επεκτάσεις" για το Chrome. Δεν επιτρέπεται η προσθήκη αυτής της επέκτασης.</translation> <translation id="6307990684951724544">Το σύστημα είναι απασχολημένο</translation> <translation id="6308493641021088955">Η σύνδεση παρέχεται από <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Αποθήκευση συν&δέσμου ως...</translation> @@ -6858,7 +6852,6 @@ <translation id="7025190659207909717">Διαχείριση υπηρεσιών δεδομένων κινητής συσκευής</translation> <translation id="7025895441903756761">Ασφάλεια και απόρρητο</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Άνοιγμα όλων σε παράθυρο για &ανώνυμη περιήγηση}=1{Άνοιγμα σε παράθυρο για &ανώνυμη περιήγηση}other{Άνοιγμα όλων ({COUNT}) σε παράθυρο για &ανώνυμη περιήγηση}}</translation> -<translation id="7028057921476386252">Για να ενεργοποιήσεις αυτήν την επέκταση, πρέπει να δώσει την άδεια ένας γονέας ή κηδεμόνας</translation> <translation id="7029307918966275733">Το Crostini δεν έχει εγκατασταθεί. Εγκαταστήστε το Crostini για να δείτε τους συντελεστές.</translation> <translation id="7029809446516969842">Κωδ. πρόσβασης</translation> <translation id="7030304022046916278">Στέλνει URL στην Ασφαλή περιήγηση για να τα ελέγξει</translation> @@ -8237,7 +8230,6 @@ <translation id="8251509999076836464">Σύζευξη με τη συσκευή <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Η μικρογραφία καταργήθηκε.</translation> <translation id="825238165904109940">Να εμφανίζονται πάντα ολόκληρα URL</translation> -<translation id="8252538334423261825">Δεν είναι δυνατή η προσθήκη της επέκτασης</translation> <translation id="8252569384384439529">Μεταφόρτωση…</translation> <translation id="8253198102038551905">Κάντε κλικ στο "+" για να δείτε τις ιδιότητες δικτύου</translation> <translation id="8255212965098517578">Πρόσφατες φωτογραφίες ειδοποιήσεις και εφαρμογές</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 3198b43..bf3bcb1 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">See 'Recent highlights' and other memories here</translation> <translation id="2114896190328250491">Photo by <ph name="NAME" /></translation> <translation id="2114995631896158695">No SIM card inserted</translation> -<translation id="2116020356255810305">Enable launching app at startup</translation> <translation id="2116619964159595185">Sites usually connect to Bluetooth devices for features like setting up or syncing a low-energy beacon, a health or fitness tracker, or a smart light bulb</translation> <translation id="2117655453726830283">Next slide</translation> <translation id="2119349053129246860">Open in <ph name="APP" /></translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">Name</translation> <translation id="3803345858388753269">Video quality</translation> <translation id="3803367742635802571">Sites that you visit may stop working as designed</translation> -<translation id="3803583375545057606">Ask your parent or guardian to enable this extension?</translation> <translation id="380408572480438692">Enabling collection of performance data will help Google improve the system over time. No data is sent until you file a feedback report (Alt-Shift-I) and include performance data. You can return to this screen to disable collection at any time.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (extension ID "<ph name="EXTENSION_ID" />") is not allowed on a login screen.</translation> <translation id="3807747707162121253">&Cancel</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Don't allow</translation> <translation id="4170314459383239649">Clear On Exit</translation> <translation id="417096670996204801">Choose a profile</translation> -<translation id="41725145403849567">Ask your parent or guardian to add this extension?</translation> <translation id="4175137578744761569">Light purple and white</translation> <translation id="4175737294868205930">Persistent storage</translation> <translation id="4176463684765177261">Disabled</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN must be at least one character}other{PIN must be at least # characters}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> requires you to connect to Wi-Fi now and download an update. Or, download from a metered connection (charges may apply).</translation> <translation id="5476016146231427848">Please restart your device to use Steam on Chromebook</translation> -<translation id="5476897066181964657">A parent or guardian has to say that it's OK for you to add this extension</translation> <translation id="5481273127572794904">Not allowed to automatically download multiple files</translation> <translation id="5481941284378890518">Add Nearby Printers</translation> <translation id="5483785310822538350">Revoke file and device access</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">Turn off hotspot</translation> <translation id="5556459405103347317">Reload</translation> <translation id="5558129378926964177">Zoom &In</translation> -<translation id="5558247502209241936">Enable opening app in window</translation> <translation id="5559311991468302423">Delete address</translation> <translation id="55601339223879446">Adjust the boundaries of your desktop within the display</translation> <translation id="5561162485081632007">Detects and warns you about dangerous events when they happen</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">Global Policy:</translation> <translation id="6305702903308659374">Play at normal volume even if ChromeVox is speaking</translation> <translation id="6305909198255586420">Please install using your primary profile</translation> -<translation id="630750887748244481">Your parent has turned off 'Permissions for sites, apps and extensions' for Chrome. Adding this extension is not allowed.</translation> <translation id="6307990684951724544">System busy</translation> <translation id="6308493641021088955">Sign-in provided by <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Save lin&k as...</translation> @@ -6857,7 +6851,6 @@ <translation id="7025190659207909717">Mobile data service management</translation> <translation id="7025895441903756761">Security and privacy</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Open All in &Incognito Window}=1{Open in &Incognito Window}other{Open All ({COUNT}) in &Incognito Window}}</translation> -<translation id="7028057921476386252">A parent or guardian has to say that it's OK for you to enable this extension</translation> <translation id="7029307918966275733">Crostini is not installed. Please install Crostini to view credits.</translation> <translation id="7029809446516969842">Passwords</translation> <translation id="7030304022046916278">Sends URLs to Safe Browsing to check them</translation> @@ -8236,7 +8229,6 @@ <translation id="8251509999076836464">Pairing to <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Thumbnail removed.</translation> <translation id="825238165904109940">Always Show Full URLs</translation> -<translation id="8252538334423261825">Can't add extension</translation> <translation id="8252569384384439529">Uploading…</translation> <translation id="8253198102038551905">Click '+' to get network properties</translation> <translation id="8255212965098517578">Recent photos, notifications and apps</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 4439907..29bfac32a 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -1325,7 +1325,6 @@ <translation id="2114820389966440614">Ver las "Destacadas recientes" y otros recuerdos aquí</translation> <translation id="2114896190328250491">Foto de <ph name="NAME" /></translation> <translation id="2114995631896158695">No se insertó ninguna tarjeta SIM</translation> -<translation id="2116020356255810305">Habilitar la ejecución de la app al inicio</translation> <translation id="2116619964159595185">Por lo general, los sitios se conectan a dispositivos Bluetooth para usarlos en funciones, como configurar o sincronizar una baliza electrónica, un monitor de actividad física o de salud, o una lámpara inteligente.</translation> <translation id="2117655453726830283">Siguiente diapositiva</translation> <translation id="2119349053129246860">Abrir en <ph name="APP" /></translation> @@ -1606,7 +1605,7 @@ <translation id="2336228925368920074">Agregar a favoritos todas las pestañas...</translation> <translation id="2336376423977300504">Siempre borrar las cookies cuando se cierren las ventanas</translation> <translation id="2336381494582898602">Powerwash</translation> -<translation id="2337236196941929873">Precarga las páginas que Chrome cree que puedas visitar. Para hacerlo, es posible que Chrome utilice cookies, si las permites, encripte las páginas y las envíe a través de Google para ocultar tu identidad en los sitios.</translation> +<translation id="2337236196941929873">Precarga las páginas que Chrome cree que puedas visitar. Para hacerlo, es posible que Chrome utilice cookies, si las permites, y que encripte las páginas y las envíe a través de Google para ocultar tu identidad en los sitios.</translation> <translation id="2340239562261172947">No se puede descargar el archivo <ph name="FILE_NAME" /> de forma segura</translation> <translation id="2342180549977909852">Tu hijo puede usar un número (PIN) en lugar de una contraseña para desbloquear este dispositivo. Puedes configurar un PIN más tarde en Configuración.</translation> <translation id="2342740338116612727">Se agregaron favoritos</translation> @@ -2403,7 +2402,7 @@ <translation id="3024374909719388945">Utilizar reloj de 24 horas</translation> <translation id="3025174326431589540">{COUNT,plural, =0{No hay contraseñas guardadas}=1{Se revisaron las contraseñas de {COUNT} sitio}other{Se revisaron las contraseñas de {COUNT} sitios y apps}}</translation> <translation id="3027296729579831126">Activar Compartir con Nearby</translation> -<translation id="3027644380269727216">Según tu actividad en un sitio. Esta configuración está activada.</translation> +<translation id="3027644380269727216">Según tu actividad en un sitio. Este parámetro de configuración está activado.</translation> <translation id="3029276696788198026">Sin precarga</translation> <translation id="3029466929721441205">Mostrar herramientas de la pluma stylus en la biblioteca</translation> <translation id="3029808567601324798">Hora de bloquear</translation> @@ -2662,7 +2661,7 @@ <translation id="3289856944988573801">Para comprobar si hay actualizaciones, utiliza una conexión Ethernet o Wi-Fi.</translation> <translation id="3289886661311231677">Puedes bloquear los temas que no quieres compartir con los sitios. Chrome también borra los temas de forma automática luego de 4 semanas.</translation> <translation id="3290249595466894471">También envía una pequeña muestra de páginas, descargas, información del sistema y actividad de extensiones para ayudar a descubrir nuevas amenazas.</translation> -<translation id="3293181007446299124">Se mantendrá la privacidad del historial de navegación en tu dispositivo y los informes se enviarán con demora para proteger tu identidad</translation> +<translation id="3293181007446299124">Se mantendrá la privacidad del historial de navegación en tu dispositivo y los informes se enviarán con demora para proteger tu identidad.</translation> <translation id="3293644607209440645">Enviar esta página</translation> <translation id="32939749466444286">No se inició el contenedor de Linux. Vuelve a intentarlo.</translation> <translation id="3294437725009624529">Invitado</translation> @@ -3254,7 +3253,6 @@ <translation id="380329542618494757">Nombre</translation> <translation id="3803345858388753269">Calidad del video</translation> <translation id="3803367742635802571">Es posible que los sitios que visitas dejen de funcionar según lo diseñado</translation> -<translation id="3803583375545057606">¿Quieres pedirle a tu madre o padre que habilite esta extensión?</translation> <translation id="380408572480438692">Si habilitas la recopilación de datos de rendimiento, ayudarás a Google a mejorar el sistema con el tiempo. Para que se envíen los datos, debes presentar un informe de comentarios (Alt+Mayúscula+I) e incluir datos de rendimiento. Puedes volver a esta pantalla para inhabilitar la recopilación en cualquier momento.</translation> <translation id="3807249107536149332">No se permite <ph name="EXTENSION_NAME" /> (ID de la extensión "<ph name="EXTENSION_ID" />") en una pantalla de acceso.</translation> <translation id="3807747707162121253">&Cancelar</translation> @@ -3676,7 +3674,6 @@ <translation id="4169535189173047238">No permitir</translation> <translation id="4170314459383239649">Borrar al salir</translation> <translation id="417096670996204801">Elige un perfil</translation> -<translation id="41725145403849567">¿Quieres pedirle a tu madre o padre que agregue esta extensión?</translation> <translation id="4175137578744761569">Púrpura claro y blanco</translation> <translation id="4175737294868205930">Almacenamiento persistente</translation> <translation id="4176463684765177261">Inhabilitado</translation> @@ -4665,7 +4662,7 @@ <translation id="508059534790499809">Actualizar un ticket de Kerberos</translation> <translation id="5081960376148623587">Elige si deseas precargar páginas</translation> <translation id="5084328598860513926">Se interrumpió el flujo de aprovisionamiento. Vuelve a intentarlo o comunícate con el administrador o propietario de tu dispositivo. Código de error: <ph name="ERROR_CODE" />.</translation> -<translation id="5084622689760736648">Es más probable que los sitios funcionen como esperas</translation> +<translation id="5084622689760736648">Es más probable que los sitios funcionen como esperas.</translation> <translation id="5085162214018721575">Buscando actualizaciones...</translation> <translation id="5086082738160935172">Dispositivos de interfaz humana (HID)</translation> <translation id="508645147179720015">La nota tiene más de 1,000 caracteres</translation> @@ -5089,7 +5086,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{El PIN debe tener al menos un carácter}other{El PIN debe tener al menos # caracteres}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> requiere que te conectes a una red Wi-Fi ahora y descargues una actualización. También puedes descargarla con una conexión de uso medido (es posible que se apliquen cargos).</translation> <translation id="5476016146231427848">Para usar Steam en la Chromebook, reinicia el dispositivo</translation> -<translation id="5476897066181964657">Para poder agregar esta extensión, tu madre, padre o tutor debe aprobar tu solicitud</translation> <translation id="5481273127572794904">No puede descargar múltiples archivos de forma automática</translation> <translation id="5481941284378890518">Agregar impresoras cercanas</translation> <translation id="5483785310822538350">Revocar acceso al archivo y al dispositivo</translation> @@ -5186,7 +5182,6 @@ <translation id="5555639311269196631">Desactiva el hotspot</translation> <translation id="5556459405103347317">Volver a cargar</translation> <translation id="5558129378926964177">Acercar</translation> -<translation id="5558247502209241936">Habilitar que se abra la app en una ventana</translation> <translation id="5559311991468302423">Borrar dirección</translation> <translation id="55601339223879446">Ajustar los límites de tu escritorio en la pantalla</translation> <translation id="5561162485081632007">Detecta eventos peligrosos cuando ocurren y te advierte sobre ellos.</translation> @@ -6012,7 +6007,6 @@ <translation id="6305607932814307878">Política global:</translation> <translation id="6305702903308659374">Reproducir a un volumen normal incluso cuando ChromeVox esté hablando</translation> <translation id="6305909198255586420">Instálala usando tu perfil principal</translation> -<translation id="630750887748244481">Tu padre o madre desactivaron la opción "Permisos para sitios, apps y extensiones" para Chrome. No se permite agregar esta extensión.</translation> <translation id="6307990684951724544">Sistema ocupado</translation> <translation id="6308493641021088955">Acceso proporcionado por <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Guardar &enlace como...</translation> @@ -6838,7 +6832,6 @@ <translation id="7025190659207909717">Administración del servicio de datos para celulares</translation> <translation id="7025895441903756761">Seguridad y privacidad</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Abrir todo en una ventana de &incógnito}=1{Abrir en una ventana de &incógnito}other{Abrir todo ({COUNT}) en una ventana de &incógnito}}</translation> -<translation id="7028057921476386252">Para poder habilitar esta extensión, tu madre, padre o tutor debe aprobar tu solicitud</translation> <translation id="7029307918966275733">No se instaló Crostini. Instálalo para ver los créditos.</translation> <translation id="7029809446516969842">Contraseñas</translation> <translation id="7030304022046916278">Envía las URL a la Navegación segura para revisarlas.</translation> @@ -8217,7 +8210,6 @@ <translation id="8251509999076836464">Vinculando con el dispositivo <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatura eliminada.</translation> <translation id="825238165904109940">Mostrar siempre las URL completas</translation> -<translation id="8252538334423261825">No se puede agregar la extensión</translation> <translation id="8252569384384439529">Subiendo…</translation> <translation id="8253198102038551905">Haz clic en "+" para ver las propiedades de red.</translation> <translation id="8255212965098517578">Fotos, notificaciones y apps recientes</translation> @@ -9179,7 +9171,7 @@ <translation id="9100765901046053179">Configuración avanzada</translation> <translation id="9101691533782776290">Iniciar aplicación</translation> <translation id="9102610709270966160">Habilitar extensión</translation> -<translation id="9102864637938129124">Los sitios y anunciantes pueden entender el rendimiento de los anuncios. Esta configuración está activada.</translation> +<translation id="9102864637938129124">Los sitios y anunciantes pueden entender el rendimiento de los anuncios. Este parámetro de configuración está activado.</translation> <translation id="9103479157856427471">La pantalla acercada sigue el enfoque del teclado</translation> <translation id="9103868373786083162">Presiona para retroceder; usa el menú contextual para consultar el historial</translation> <translation id="9108035152087032312">Nombrar la &ventana…</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 2c200fd9..bf627e7 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Pulsa Esc para omitir este paso (solo para compilaciones no oficiales).</translation> <translation id="1093457606523402488">Redes visibles:</translation> <translation id="1095761715416917775">Asegúrate de que siempre puedas acceder a tus datos sincronizados</translation> +<translation id="1095879482467973146">Gestor de contraseñas de Google en la Web</translation> <translation id="109647177154844434">Si desinstalas Parallels Desktop, se eliminará tu imagen de Windows, lo que incluye sus aplicaciones, ajustes y datos. ¿Seguro que quieres continuar?</translation> <translation id="1097016918605049747">No se ha podido traducir esta página</translation> <translation id="1097658378307015415">Antes de iniciar sesión, entra como invitado para activar la red <ph name="NETWORK_ID" />.</translation> @@ -1238,7 +1239,7 @@ <translation id="2050339315714019657">Vertical</translation> <translation id="2051555741181591333">Inhabilitar punto de acceso automáticamente</translation> <translation id="2052572566310583903">Instaladas en tus otros dispositivos</translation> -<translation id="2053105195397337973">Estamos explorando formas de restringir el seguimiento, así como que los sitios puedan detener el spam publicitario y el fraude.</translation> +<translation id="2053105195397337973">Estamos buscando formas de restringir el seguimiento, al tiempo que permitimos que los sitios puedan detener el spam publicitario y el fraude.</translation> <translation id="2053312383184521053">Datos de estado de inactividad</translation> <translation id="2054240652864153171">¿Borrar datos del sitio <ph name="SITE_NAME" /> con particiones en <ph name="PARTITION_SITE_NAME" />?</translation> <translation id="2055585478631012616">Se cerrarán tus sesiones en esos sitios (también en las pestañas abiertas)</translation> @@ -1327,7 +1328,6 @@ <translation id="2114820389966440614">Ver Destacadas recientes y otros recuerdos aquí</translation> <translation id="2114896190328250491">Foto de <ph name="NAME" /></translation> <translation id="2114995631896158695">No hay ninguna tarjeta SIM insertada.</translation> -<translation id="2116020356255810305">Habilitar inicio de la aplicación al iniciar</translation> <translation id="2116619964159595185">Los sitios se suelen conectar a dispositivos Bluetooth para usarlos en funciones como configurar o sincronizar una baliza electrónica, un monitor de actividad física o de salud, o una bombilla inteligente</translation> <translation id="2117655453726830283">Diapositiva siguiente</translation> <translation id="2119349053129246860">Abrir en <ph name="APP" /></translation> @@ -1487,6 +1487,7 @@ <translation id="2252017960592955005">Protección contra fisgones (beta)</translation> <translation id="225240747099314620">Permitir identificadores para contenido protegido (es posible que sea necesario reiniciar el ordenador)</translation> <translation id="2253318212986772520">No se puede obtener el PPD de <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Elige qué quieres compartir con <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Este dispositivo ha sido bloqueado en un dominio o modo diferente.</translation> <translation id="2255317897038918278">Impresión de fecha de Microsoft</translation> <translation id="2256115617011615191">Reiniciar ahora</translation> @@ -1833,6 +1834,7 @@ <translation id="2532589005999780174">Modo Contraste alto</translation> <translation id="2533649878691950253">Se ha bloqueado el acceso a tu ubicación precisa en este sitio, ya que normalmente no concedes este permiso</translation> <translation id="253434972992662860">&Pausa</translation> +<translation id="253498598929009420">El sitio podrá ver el contenido de tu pantalla</translation> <translation id="253557089021624350">Número de actividades en curso</translation> <translation id="2535799430745250929">No existe ninguna red móvil</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> puede ver y editar los siguientes archivos y carpetas</translation> @@ -2750,7 +2752,7 @@ <translation id="3371140690572404006">Dispositivo USB tipo C (puerto frontal derecho)</translation> <translation id="337286756654493126">Lee carpetas que abras en la aplicación</translation> <translation id="3373059063088819384">Abrir en modo Lectura</translation> -<translation id="3373701465337594448">Cuando está activada la opción, una lista de los sitios que visitas y que estiman tus intereses se muestra aquí.</translation> +<translation id="3373701465337594448">Cuando está activada la opción, aquí se muestra una lista de los sitios que visitas y que estiman tus intereses.</translation> <translation id="3374294321938930390">Se ha movido "<ph name="BOOKMARK_TITLE" />" a "<ph name="NEW_FOLDER_TITLE" />".</translation> <translation id="3378572629723696641">Esta extensión puede estar dañada.</translation> <translation id="3378627645871606983">Los permisos concedidos a Steam se aplicarán a todos los juegos y aplicaciones de Steam.</translation> @@ -3255,7 +3257,6 @@ <translation id="380329542618494757">Nombre</translation> <translation id="3803345858388753269">Calidad de vídeo</translation> <translation id="3803367742635802571">Es posible que los sitios que visites dejen de funcionar como deben</translation> -<translation id="3803583375545057606">¿Pedirle a tu padre o madre que habilite esta extensión?</translation> <translation id="380408572480438692">Habilitar la recogida de datos de rendimiento ayudará a Google a mejorar el sistema en el futuro. No se enviará ningún dato hasta que no envíes un informe de comentarios (Alt-Mayús-I) e incluyas datos de rendimiento. Puedes volver a esta pantalla para inhabilitar la recogida de datos en cualquier momento.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ID de extensión "<ph name="EXTENSION_ID" />") no se puede utilizar en una pantalla de inicio de sesión.</translation> <translation id="3807747707162121253">&Cancelar</translation> @@ -3676,7 +3677,6 @@ <translation id="4169535189173047238">No permitir</translation> <translation id="4170314459383239649">Borrar al salir</translation> <translation id="417096670996204801">Elige un perfil</translation> -<translation id="41725145403849567">¿Pedirle a tu padre o madre que añada esta extensión?</translation> <translation id="4175137578744761569">Morado claro y blanco</translation> <translation id="4175737294868205930">Almacenamiento permanente</translation> <translation id="4176463684765177261">Inhabilitado</translation> @@ -3877,7 +3877,7 @@ <translation id="4366138410738374926">Impresión iniciada</translation> <translation id="4367513928820380646">Revisar permisos quitados</translation> <translation id="4369215744064167350">Solicitud de sitio web aprobada</translation> -<translation id="4369735607080757018">Algunos tipos de datos (como la hora del día en la que has visto un anuncio) se compartirán entre los sitios para medir el rendimiento de los anuncios.</translation> +<translation id="4369735607080757018">Algunos tipos de datos limitados (como la hora del día en la que has visto un anuncio) se compartirán entre los sitios para medir el rendimiento de los anuncios.</translation> <translation id="4370975561335139969">La dirección de correo electrónico y la contraseña que has introducido no coinciden</translation> <translation id="4374805630006466253">Usar otro teléfono o tablet</translation> <translation id="4374831787438678295">Instalador de Linux</translation> @@ -5089,7 +5089,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{El PIN debe tener al menos un carácter}other{El PIN debe tener al menos # caracteres}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> necesita que te conectes a una red Wi‑Fi para descargar una actualización. También puedes descargarla con una conexión de uso medido (sujeto a cargos).</translation> <translation id="5476016146231427848">Reinicia tu dispositivo para usar Steam en Chromebook</translation> -<translation id="5476897066181964657">Tu padre, madre o tutor/a debe darte permiso para que añadas esta extensión</translation> <translation id="5481273127572794904">No puede descargar varios archivos automáticamente</translation> <translation id="5481941284378890518">Añadir impresoras cercanas</translation> <translation id="5483785310822538350">Revocar acceso al archivo y al dispositivo</translation> @@ -5186,7 +5185,6 @@ <translation id="5555639311269196631">Desactivar punto de acceso</translation> <translation id="5556459405103347317">Volver a cargar</translation> <translation id="5558129378926964177">&Ampliar</translation> -<translation id="5558247502209241936">Permitir que se abra la aplicación en una ventana</translation> <translation id="5559311991468302423">Eliminar dirección</translation> <translation id="55601339223879446">Ajusta los extremos de tu escritorio en la pantalla</translation> <translation id="5561162485081632007">Detecta y te advierte de los eventos peligrosos cuando suceden</translation> @@ -6012,7 +6010,6 @@ <translation id="6305607932814307878">Política global:</translation> <translation id="6305702903308659374">Reproducir a un volumen normal aunque ChromeVox hable</translation> <translation id="6305909198255586420">Instálalo usando tu perfil principal</translation> -<translation id="630750887748244481">Tus padres han desactivado "Permisos de sitios web, aplicaciones y extensiones" en Chrome. No se puede añadir esta extensión.</translation> <translation id="6307990684951724544">Sistema ocupado</translation> <translation id="6308493641021088955">Inicio de sesión proporcionado por <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Guardar &enlace como...</translation> @@ -6838,7 +6835,6 @@ <translation id="7025190659207909717">Administración de servicio de datos para móviles</translation> <translation id="7025895441903756761">Seguridad y privacidad</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Abrir todas en una ventana de &incógnito}=1{Abrir en una ventana de &incógnito}other{Abrir todas ({COUNT}) en una ventana de &incógnito}}</translation> -<translation id="7028057921476386252">Tu padre, madre o tutor/a debe darte permiso para que habilites esta extensión</translation> <translation id="7029307918966275733">Crostini no está instalado. Para ver los créditos, instala Crostini.</translation> <translation id="7029809446516969842">Contraseñas</translation> <translation id="7030304022046916278">Envía URLs a Navegación segura para comprobarlas.</translation> @@ -8217,7 +8213,6 @@ <translation id="8251509999076836464">Emparejando con <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatura eliminada</translation> <translation id="825238165904109940">Mostrar siempre URL completas</translation> -<translation id="8252538334423261825">No se pueden añadir extensiones</translation> <translation id="8252569384384439529">Subiendo...</translation> <translation id="8253198102038551905">Haz clic en + para consultar las propiedades de la red</translation> <translation id="8255212965098517578">Fotos, notificaciones y aplicaciones recientes</translation> @@ -8673,7 +8668,7 @@ <translation id="8666759526542103597">Acerca de la personalización de anuncios basada en el navegador</translation> <translation id="8667261224612332309">Tienes contraseñas que se pueden mejorar</translation> <translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> se muestra ahora en pantalla completa y ha inhabilitado el cursor del ratón.</translation> -<translation id="8667760277771450375">Estamos explorando formas de restringir el seguimiento entre sitios, así como que los sitios puedan detener el spam publicitario y el fraude.</translation> +<translation id="8667760277771450375">Estamos explorando formas de restringir el seguimiento entre sitios, al tiempo que permitimos que los sitios puedan detener el spam publicitario y el fraude.</translation> <translation id="8668378421690365723">Es posible que tu dispositivo ya no funcione correctamente y que tenga problemas de seguridad y rendimiento.</translation> <translation id="8669284339312441707">Más cálido</translation> <translation id="8670537393737592796">Para volver aquí rápidamente, instala <ph name="APP_NAME" /> haciendo clic en el botón Instalar</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 18c1801c..ac98fd4 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -1331,7 +1331,6 @@ <translation id="2114820389966440614">Vaadake siin albumit „Hiljutised esiletõstud“ ja muid mälestusi</translation> <translation id="2114896190328250491">Foto autor: <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM-kaarti pole sisestatud</translation> -<translation id="2116020356255810305">Luba rakenduse aktiveerimine käivitamisel</translation> <translation id="2116619964159595185">Saidid loovad Bluetooth-seadmetega ühenduse tavaliselt teatud funktsioonide jaoks, nagu väikese energiakuluga majaka, tervise- või treeningurakenduse või nutivalgusti pirni seadistamine või sünkroonimine</translation> <translation id="2117655453726830283">Järgmine slaid</translation> <translation id="2119349053129246860">Avamine rakenduses <ph name="APP" /></translation> @@ -3263,7 +3262,6 @@ <translation id="380329542618494757">Nimi</translation> <translation id="3803345858388753269">Videokvaliteet</translation> <translation id="3803367742635802571">Külastatavad saidid võivad lõpetada ootuspäraselt toimimise</translation> -<translation id="3803583375545057606">Kas paluda vanemal see laiendus lubada?</translation> <translation id="380408572480438692">Kui lubate toimivusandmete kogumise, siis aitab see Google'il aja jooksul süsteemi täiustada. Andmed saadetakse alles siis, kui saadate tagasiside aruande (Alt-tõstuklahv-I) ja lisate toimivusandmed. Võite igal ajal naasta sellele kuvale ja keelata andmete kogumise.</translation> <translation id="3807249107536149332">Laiendus <ph name="EXTENSION_NAME" /> (laienduse ID „<ph name="EXTENSION_ID" />”) pole sisselogimisekraanil lubatud.</translation> <translation id="3807747707162121253">&Loobu</translation> @@ -3685,7 +3683,6 @@ <translation id="4169535189173047238">Ära luba</translation> <translation id="4170314459383239649">Kustuta väljumisel</translation> <translation id="417096670996204801">Valige profiil</translation> -<translation id="41725145403849567">Kas paluda vanemal see laiendus lisada?</translation> <translation id="4175137578744761569">Helelilla ja valge</translation> <translation id="4175737294868205930">Püsiv salvestusruum</translation> <translation id="4176463684765177261">Keelatud</translation> @@ -5098,7 +5095,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-kood peab koosnema vähemalt ühest tähemärgist}other{PIN-kood peab koosnema vähemalt # tähemärgist}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> nõuab, et looksite kohe WiFi-ühenduse ja laadiksite alla värskenduse. Võite allalaadimiseks kasutada ka mahupõhist ühendust (rakenduda võivad tasud).</translation> <translation id="5476016146231427848">Taaskäivitage seade, et kasutada Steami Chromebookis</translation> -<translation id="5476897066181964657">Vanem või eestkostja peab andma sulle loa selle laienduse lisamiseks</translation> <translation id="5481273127572794904">Pole lubatud automaatselt mitut faili alla laadida</translation> <translation id="5481941284378890518">Läheduses olevate printerite lubamine</translation> <translation id="5483785310822538350">Tühista juurdepääs failile ja seadmele</translation> @@ -5195,7 +5191,6 @@ <translation id="5555639311269196631">Lülita kuumkoht välja</translation> <translation id="5556459405103347317">Laadi uuesti</translation> <translation id="5558129378926964177">Suum&i</translation> -<translation id="5558247502209241936">Luba rakenduse avamine aknas</translation> <translation id="5559311991468302423">Kustuta aadress</translation> <translation id="55601339223879446">Töölaua piiride reguleerimine ekraani ulatuses</translation> <translation id="5561162485081632007">Tuvastab ohtlikke sündmusi ja hoiatab teid enne, kui need juhtuvad</translation> @@ -6021,7 +6016,6 @@ <translation id="6305607932814307878">Üldised eeskirjad:</translation> <translation id="6305702903308659374">Esita tavapärase helitugevusega isegi siis, kui ChromeVox räägib</translation> <translation id="6305909198255586420">Kasutage installimiseks oma peamist profiili</translation> -<translation id="630750887748244481">Sinu vanem lülitas Chrome'i puhul valiku „Saitide, rakenduste ja laienduste load” välja. Selle laienduse lisamine pole lubatud.</translation> <translation id="6307990684951724544">Süsteem on hõivatud</translation> <translation id="6308493641021088955">Sisselogimise funktsiooni pakub <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Salvesta lin&k nimega...</translation> @@ -6847,7 +6841,6 @@ <translation id="7025190659207909717">Mobiilse andmesideteenuse haldus</translation> <translation id="7025895441903756761">Turvalisus ja privaatsus</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Ava kõik &inkognito aknas}=1{Ava &inkognito aknas}other{Ava kõik ({COUNT}) &inkognito aknas}}</translation> -<translation id="7028057921476386252">Vanem või eestkostja peab andma sulle loa selle laienduse lubamiseks</translation> <translation id="7029307918966275733">Crostini pole installitud. Krediidi vaatamiseks installige Crostini.</translation> <translation id="7029809446516969842">Paroolid</translation> <translation id="7030304022046916278">Saadab URL-id kontrollimiseks teenusele Google'i ohutu sirvimine.</translation> @@ -8226,7 +8219,6 @@ <translation id="8251509999076836464">Sidumine seadmega <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Pisipilt eemaldatud.</translation> <translation id="825238165904109940">Kuva alati täielikud URL-id</translation> -<translation id="8252538334423261825">Laiendust ei saa lisada</translation> <translation id="8252569384384439529">Üleslaadimine …</translation> <translation id="8253198102038551905">Võrguatribuutide hankimiseks klõpsake märgil „+”</translation> <translation id="8255212965098517578">Hiljutised fotod, märguanded ja rakendused</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 44767a0..d1949a1 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Saltatzeko, sakatu Ihes tekla (ofizialak ez diren konpilazioak soilik).</translation> <translation id="1093457606523402488">Ikusgai dauden sareak:</translation> <translation id="1095761715416917775">Izan beti sinkronizatutako datuetarako sarbidea</translation> +<translation id="1095879482467973146">Sareko Google-ren Pasahitz-kudeatzailea</translation> <translation id="109647177154844434">Parallels Desktop desinstalatzen baduzu, Windows-en irudia ezabatuko da. Besteak beste, aplikazioak, ezarpenak eta datuak ezabatuko dira. Ziur aurrera egin nahi duzula?</translation> <translation id="1097016918605049747">Ezin izan da itzuli orri hau</translation> <translation id="1097658378307015415">Saioa hasi aurretik, sartu gonbidatu gisa <ph name="NETWORK_ID" /> sarea aktibatzeko</translation> @@ -1327,7 +1328,6 @@ <translation id="2114820389966440614">Ikusi "Azkenaldiko aipagarriak" eta beste oroitzapen batzuk hemen</translation> <translation id="2114896190328250491">Argazkiaren egilea: <ph name="NAME" /></translation> <translation id="2114995631896158695">Ez da sartu SIM txartelik</translation> -<translation id="2116020356255810305">Gaitu abiaraztean aplikazioa exekutatzeko aukera</translation> <translation id="2116619964159595185">Webguneak Bluetooth bidezko gailuetara konektatu ohi dira kontsumo txikiko kokapen-adierazle bat, osasunaren edo fitnessaren jarraipena egiteko gailu bat, edo bonbilla adimendun bat konfiguratzeko edo sinkronizatzeko, eta antzeko eginbideak eskaintzeko</translation> <translation id="2117655453726830283">Hurrengo diapositiba</translation> <translation id="2119349053129246860">Ireki <ph name="APP" /> aplikazioan</translation> @@ -1487,6 +1487,7 @@ <translation id="2252017960592955005">Baimenik gabe ikustearen aurkako babesa (beta-bertsioa)</translation> <translation id="225240747099314620">Baimendu identifikatzaileak babestutako edukietan (baliteke ordenagailua berrabiarazi behar izatea)</translation> <translation id="2253318212986772520">Ezin da eskuratu <ph name="PRINTER_NAME" /> inprimagailuaren PPDa.</translation> +<translation id="2253927598983295051">Aukeratu zer partekatu nahi duzun <ph name="APP_NAME" /> aplikazioarekin</translation> <translation id="2255077166240162850">Beste domeinu edo modu batekin blokeatu da gailua.</translation> <translation id="2255317897038918278">Microsoft denbora-zigilua</translation> <translation id="2256115617011615191">Berrabiarazi</translation> @@ -1832,6 +1833,7 @@ <translation id="2532589005999780174">Kontraste handiko modua</translation> <translation id="2533649878691950253">Webgune honi blokeatu egin zaio zure kokapen zehatza hautemateko aukera, normalean ez duzulako ematen</translation> <translation id="253434972992662860">&Pausatu</translation> +<translation id="253498598929009420">Webguneak pantailan agertzen dena ikusi ahal izango du</translation> <translation id="253557089021624350">Aktibo mantentzen dutenak</translation> <translation id="2535799430745250929">Ez dago sare mugikorrik</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> webguneak fitxategi eta karpeta hauek ikusi eta edita ditzake</translation> @@ -3254,7 +3256,6 @@ <translation id="380329542618494757">Izena</translation> <translation id="3803345858388753269">Bideoaren kalitatea</translation> <translation id="3803367742635802571">Bisitatzen dituzun webguneek agian ez dute behar bezala funtzionatuko</translation> -<translation id="3803583375545057606">Gurasoari luzapena gaitzeko eskatu nahi diozu?</translation> <translation id="380408572480438692">Errendimendu-datuak biltzeko aukera gaitzen baduzu, Google-k sistema hobetuko du denbora pasa ahala. Ez da daturik bidaliko errendimendu-datuak dituen informazio-txosten bat aurkezten duzun (Alt-Maius-I). Pantaila honetara itzul zaitezke datuen bilketa edonoiz desgaitzeko.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (luzapenaren IDa: "<ph name="EXTENSION_ID" />") ezin da erabili saioa hasteko pantailan.</translation> <translation id="3807747707162121253">&Utzi</translation> @@ -3676,7 +3677,6 @@ <translation id="4169535189173047238">Ez eman baimenik</translation> <translation id="4170314459383239649">Garbitu irteterakoan</translation> <translation id="417096670996204801">Aukeratu profil bat</translation> -<translation id="41725145403849567">Gurasoari luzapena gehitzeko eskatu nahi diozu?</translation> <translation id="4175137578744761569">More argia eta zuria</translation> <translation id="4175737294868205930">Memoria iraunkorra</translation> <translation id="4176463684765177261">Desgaituta</translation> @@ -5089,7 +5089,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN kodeak karaktere bat izan behar du gutxienez}other{PIN kodeak # karaktere izan behar ditu gutxienez}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> domeinuak wifi-sare batera konektatzea eta eguneratze bat deskargatzea eskatzen du. Bestela, deskarga ezazu neurtutako konexio batetik (baliteke zerbait ordaindu behar izatea).</translation> <translation id="5476016146231427848">Chromebook-ean Steam erabiltzeko, berrabiarazi gailua</translation> -<translation id="5476897066181964657">Guraso edo tutore batek luzapena gehitzeko baimena eman behar dizu</translation> <translation id="5481273127572794904">Ezin dituzte hainbat fitxategi deskargatu automatikoki</translation> <translation id="5481941284378890518">Gehitu inguruko inprimagailuak</translation> <translation id="5483785310822538350">Kendu fitxategietarako eta gailurako sarbidea</translation> @@ -5186,7 +5185,6 @@ <translation id="5555639311269196631">Desaktibatu wifi-gunea</translation> <translation id="5556459405103347317">Kargatu berriro</translation> <translation id="5558129378926964177">&Handitu</translation> -<translation id="5558247502209241936">Gaitu aplikazioa leiho batean irekitzeko aukera</translation> <translation id="5559311991468302423">Ezabatu helbidea</translation> <translation id="55601339223879446">Doitu mahaigainaren mugak pantailaren barruan</translation> <translation id="5561162485081632007">Gertaera arriskutsuak hautematen ditu eta haien berri ematen dizu gertatu ahala</translation> @@ -6009,7 +6007,6 @@ <translation id="6305607932814307878">Gidalerro orokorra:</translation> <translation id="6305702903308659374">Erreproduzitu bolumen normalean ChromeVox hitz egiten ari bada ere</translation> <translation id="6305909198255586420">Instalatu profil nagusia erabilita</translation> -<translation id="630750887748244481">Zure gurasoak "Webguneen, aplikazioen eta luzapenen baimenak" desaktibatu ditu Chrome-n. Ezin da gehitu luzapen hau.</translation> <translation id="6307990684951724544">Sistema okupatuta dago</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> luzapenaren bidezko saio-hasiera</translation> <translation id="6308937455967653460">Gorde &esteka honela…</translation> @@ -6835,7 +6832,6 @@ <translation id="7025190659207909717">Mugikorretarako datu-zerbitzuaren kudeaketa</translation> <translation id="7025895441903756761">Segurtasuna eta pribatutasuna</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Ireki guztiak &ezkutuko moduko leiho batean}=1{Ireki &ezkutuko moduko leiho batean}other{Ireki guztiak ({COUNT}) &ezkutuko moduko leiho batean}}</translation> -<translation id="7028057921476386252">Guraso edo tutore batek luzapena gaitzeko baimena eman behar dizu</translation> <translation id="7029307918966275733">Crostini ez dago instalatuta. Zerrendak ikusi nahi badituzu, instalatu Crostini.</translation> <translation id="7029809446516969842">Pasahitzak</translation> <translation id="7030304022046916278">URLak Arakatze segurua eginbideari bidaltzen dizkio egiazta ditzan.</translation> @@ -8212,7 +8208,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> gailuarekin parekatzen</translation> <translation id="8251578425305135684">Irudi txikia kendu egin da.</translation> <translation id="825238165904109940">Erakutsi beti URL osoak</translation> -<translation id="8252538334423261825">Ezin da gehitu luzapena</translation> <translation id="8252569384384439529">Kargatzen…</translation> <translation id="8253198102038551905">Sakatu "+" sarearen propietateak ikusteko</translation> <translation id="8255212965098517578">Azken argazkiak, jakinarazpenak eta aplikazioak</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 004ff251..4b703ca0 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -1027,7 +1027,7 @@ <translation id="1850508293116537636">چرخاندن در جهت &عقربههای ساعت</translation> <translation id="185111092974636561"><ph name="BEGIN_PARAGRAPH1" />پیشاز ثبتنام، باید TPM را پاک کنید تا <ph name="DEVICE_OS" /> بتواند مالک این دستگاه شود.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />همچنین میتوانید دستگاه TPM را بهطور کامل خاموش کنید. دادههای شما همچنان بااستفاده از رمزگذاری نرمافزار بهطور ایمن ذخیره میشود، اما برخیاز ویژگیهای امنیتی مثل گواهینامههای دارای پشتیبان سختافزاری غیرفعال میشود.<ph name="END_PARAGRAPH2" /> - <ph name="BEGIN_PARAGRAPH3" />میتوانید با راهاندازی مجدد سیستم و وارد شدن به تنظیمات BIOS/UEFI سیستم، تنظیمات TPM را تغییر دهید. مراحل بسته به مدل دستگاه متفاوت است. برای کسب اطلاعات بیشتر، پیشاز راهاندازی مجدد، اسناد <ph name="DEVICE_OS" /> را در دستگاه دیگری باز کنید: g.co/flex/TPMHelp<ph name="END_PARAGRAPH3" /></translation> + <ph name="BEGIN_PARAGRAPH3" />میتوانید با بازراهاندازی سیستم و وارد شدن به تنظیمات BIOS/UEFI سیستم، تنظیمات TPM را تغییر دهید. مراحل بسته به مدل دستگاه متفاوت است. برای کسب اطلاعات بیشتر، پیشاز بازراهاندازی، اسناد <ph name="DEVICE_OS" /> را در دستگاه دیگری باز کنید: g.co/flex/TPMHelp<ph name="END_PARAGRAPH3" /></translation> <translation id="1852141627593563189">یافتن نرمافزارهای مضر</translation> <translation id="1852799913675865625">خطایی در حین خواندن این فایل وجود داشت: <ph name="ERROR_TEXT" /></translation> <translation id="1854049213067042715">کارتان را از جایی که متوقف کردهاید ادامه دهید. در «تنظیمات» میتوانید برنامهها را طوری تنظیم کنید که همیشه هنگام راهاندازی بازیابی شوند یا بازیابی را خاموش کنید.</translation> @@ -1311,7 +1311,7 @@ https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-features <ph name="BR" /> <ph name="BR" /> - <ph name="BEGIN_BOLD" />توجه:<ph name="END_BOLD" /> سیستم درطول پردازش مجدداً راهاندازی میشود.</translation> + <ph name="BEGIN_BOLD" />توجه:<ph name="END_BOLD" /> سیستم درطول پردازش بازراهاندازی میشود.</translation> <translation id="2095774564753225041">انواع فایلهای پشتیبانیشده</translation> <translation id="2097616539631531348">وقتی این برگه غیرفعال بود، «بهینهسازی حافظ» حافظه را برای کارهای دیگر آزاد کرد.</translation> <translation id="2098805196501063469">بررسی گذرواژههای باقیمانده</translation> @@ -1337,7 +1337,6 @@ <translation id="2114820389966440614">«عکسهای برگزیده اخیر» و خاطرات دیگر را اینجا ببینید</translation> <translation id="2114896190328250491">عکس از <ph name="NAME" /></translation> <translation id="2114995631896158695">سیم کارتی وارد نشده است</translation> -<translation id="2116020356255810305">فعال کردن راهاندازی برنامه هنگام شروع به کار</translation> <translation id="2116619964159595185">سایتها معمولاً برای ارائه ویژگیهایی مثل راهاندازی یا همگامسازی نشانفرست کممصرف، ردیاب سلامت یا تناسب اندام، یا چراغ حبابی هوشمند، به دستگاههای بلوتوث متصل میشوند</translation> <translation id="2117655453726830283">اسلاید بعدی</translation> <translation id="2119349053129246860">باز کردن در <ph name="APP" /></translation> @@ -1574,7 +1573,7 @@ https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-features <ph name="BR" /> <ph name="BR" /> - <ph name="BEGIN_BOLD" />توجه:<ph name="END_BOLD" /> سیستم درطول پردازش مجدداً راهاندازی میشود.</translation> + <ph name="BEGIN_BOLD" />توجه:<ph name="END_BOLD" /> سیستم درطول پردازش بازراهاندازی میشود.</translation> <translation id="23030561267973084">«<ph name="EXTENSION_NAME" />» اجازههای جانبی درخواست کرده است.</translation> <translation id="2307462900900812319">پیکربندی شبکه</translation> <translation id="2307553512430195144">اگر موافقت کنید، «دستیار Google» در حالت آمادهبهکار منتظر میماند تا گفته شدن «Ok Google» را تشخیص دهد و میتواند تشخیص دهد که <ph name="SUPERVISED_USER_NAME" /> درحال صحبت کردن با Voice Match است. @@ -1920,7 +1919,7 @@ <translation id="2605668923777146443">برای دیدن گزینههای Better Together، به <ph name="LINK_BEGIN" />تنظیمات<ph name="LINK_END" /> بروید.</translation> <translation id="2606246518223360146">دادههای پیوند</translation> <translation id="2606454609872547359">نه، بدون ChromeVox ادامه داده شود</translation> -<translation id="2606568927909309675">بهطور خودکار برای صدا و ویدیوی انگلیسی زیرنویس ناشنوایان ایجاد میکند. صداها و زیرنویس ناشنوایان هرگز از دستگاهتان خارج نمیشوند.</translation> +<translation id="2606568927909309675">بهطور خودکار برای صدا و ویدیو انگلیسی زیرنویس ناشنوایان ایجاد میکند. صداها و زیرنویس ناشنوایان هرگز از دستگاهتان خارج نمیشوند.</translation> <translation id="2607101320794533334">اطلاعات کلید عمومی موضوع</translation> <translation id="2609896558069604090">ایجاد میانبرها...</translation> <translation id="2609980095400624569">اتصال برقرار نشد</translation> @@ -2882,7 +2881,7 @@ <translation id="3468999815377931311">تلفن Android</translation> <translation id="3469583217479686109">ابزار انتخاب</translation> <translation id="3470392222765168737">دنبال کردن سایت</translation> -<translation id="3471876058939596279">نمیتوان بهطور همزمان از درگاههای HDMI و USB نوع C برای ویدیو استفاده کرد. از درگاه ویدیوی دیگری استفاده کنید.</translation> +<translation id="3471876058939596279">نمیتوان بهطور همزمان از درگاههای HDMI و USB نوع C برای ویدیو استفاده کرد. از درگاه ویدیو دیگری استفاده کنید.</translation> <translation id="3472469028191701821">در برگه جدید باز میشود</translation> <translation id="3473241910002674503">با دکمههای «حالت رایانه لوحی» به صفحه اصلی پیمایش کنید، به صفحه قبل برگردید، و بین برنامهها جابهجا شوید.</translation> <translation id="3473479545200714844">ذرهبین صفحه</translation> @@ -2986,7 +2985,7 @@ <translation id="3564334271939054422">احتمالاً شبکه Wi-Fi مورد استفادهتان (<ph name="NETWORK_ID" />) نیاز دارد که به یک صفحه ورود به سیستم بروید.</translation> <translation id="3564848315152754834">کلید امنیتی USB</translation> <translation id="3566325075220776093">از این دستگاه</translation> -<translation id="3566721612727112615">سایتی اضافه نشد</translation> +<translation id="3566721612727112615">سایتی اضافه نشده است</translation> <translation id="3567284462585300767">برای دریافت و پذیرفتن فایلهای افرادی که در اطرافتان هستند، نمایان شوید</translation> <translation id="3569382839528428029">آیا میخواهید <ph name="APP_NAME" /> صفحه شما را به اشتراک بگذارد؟</translation> <translation id="3569682580018832495"><ph name="ORIGIN" /> میتواند فایلها و پوشههای زیر را مشاهده کند</translation> @@ -3269,7 +3268,6 @@ <translation id="380329542618494757">نام</translation> <translation id="3803345858388753269">کیفیت ویدیو</translation> <translation id="3803367742635802571">ممکن است سایتهایی که بازدید میکنید دیگر مطابق طراحی عمل نکنند</translation> -<translation id="3803583375545057606">از ولیتان خواسته شود این افزونه را فعال کند؟</translation> <translation id="380408572480438692">فعال کردن جمعآوری دادههای عملکرد به Google کمک میکند به تدریج سیستم را بهبود ببخشد. تا وقتیکه شما گزارش بازخورد ارائه ندهید (Alt-Shift-I) و دادههای عملکرد را اضافه نکنید، هیچ دادهای ارسال نخواهد شد. هر زمان که بخواهید میتوانید به این صفحه بازگردید و جمعآوری را غیرفعال کنید.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (شناسه افزونه «<ph name="EXTENSION_ID" />») در صفحه ورود به سیستم مجاز نیست.</translation> <translation id="3807747707162121253">&لغو</translation> @@ -3667,7 +3665,7 @@ <translation id="4139326893730851150">بهروزرسانیهای سفتافزار</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="4144218403971135344">دریافت ویدیو با کیفیت بهتر و افزایش ماندگاری شارژ باتری. ویدیو فقط در صفحهنمایش سازگار با Cast پخش خواهد شد.</translation> <translation id="4144468798716165316">فرمانهای سریع</translation> <translation id="4146026355784316281">همیشه با نظارهگر سیستم باز شود</translation> <translation id="4146785383423576110">بارنشانی و پاک کردن</translation> @@ -3691,7 +3689,6 @@ <translation id="4169535189173047238">اجازه داده نشود</translation> <translation id="4170314459383239649">پاک کردن هنگام خروج</translation> <translation id="417096670996204801">انتخاب نمایه</translation> -<translation id="41725145403849567">از ولیتان خواسته شود این افزونه را اضافه کند؟</translation> <translation id="4175137578744761569">بنفش روشن و سفید</translation> <translation id="4175737294868205930">محل ذخیرهسازی دائمی</translation> <translation id="4176463684765177261">غیرفعال شد</translation> @@ -3768,7 +3765,7 @@ <translation id="4252899949534773101">بلوتوث غیرفعال است</translation> <translation id="4252996741873942488"><ph name="WINDOW_TITLE" /> - محتوای برگه به اشتراک گذاشته شده است</translation> <translation id="4253168017788158739">یادداشت</translation> -<translation id="4253183225471855471">شبکهای پیدا نشد. لطفاً سیمکارت را وارد کنید، دستگاه را راهاندازی مجدد کنید، و سپس دوباره امتحان کنید.</translation> +<translation id="4253183225471855471">شبکهای پیدا نشد. لطفاً سیمکارت را وارد کنید، دستگاه را بازراهاندازی و دوباره امتحان کنید.</translation> <translation id="4254414375763576535">اشارهگر بزرگ</translation> <translation id="4254813446494774748">زبان ترجمه:</translation> <translation id="425573743389990240">نسبت تخلیه باتری به وات (مقدار منفی به معنی این است که باتری در حال شارژ شدن است)</translation> @@ -4423,7 +4420,7 @@ <translation id="4838836835474292213">دسترسی برای خواندن محتوای بریدهدان مجاز شد</translation> <translation id="4838907349371614303">گذرواژه بهروزرسانی شد</translation> <translation id="4838958829619609362">مورد انتخابشده به زبان <ph name="LANGUAGE" /> نیست</translation> -<translation id="4839303808932127586">ذ&خیره فایل ویدیوی بهعنوان...</translation> +<translation id="4839303808932127586">ذ&خیره فایل ویدیو بهعنوان...</translation> <translation id="4839910546484524995">دستگاهتان را بررسی کنید</translation> <translation id="4840096453115567876">درهرصورت از «حالت ناشناس» خارج میشوید؟</translation> <translation id="4841741146571978176">یکی از ماشینهای مجازی ضروری موجود نیست. برای ادامه، لطفاً <ph name="VM_TYPE" /> را راهاندازی کنید</translation> @@ -5105,7 +5102,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{پین باید حداقل یک نویسه داشته باشد}one{پین باید حداقل # نویسه داشته باشد}other{پین باید حداقل # نویسه داشته باشد}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> از شما میخواهد اکنون به Wi-Fi متصل شوید و بهروزرسانی را بارگیری کنید. یا آن را ازطریق اتصال محدود بارگیری کنید (ممکن است هزینه اعمال شود).</translation> <translation id="5476016146231427848">برای استفاده از Steam در Chromebook، لطفاً دستگاهتان را بازراهاندازی کنید</translation> -<translation id="5476897066181964657">ولی یا سرپرست باید اضافه شدن این افزونه را برای شما تأیید کند</translation> <translation id="5481273127572794904">اجازه ندارد چند فایل را بهطور خودکار بارگیری کند</translation> <translation id="5481941284378890518">افزودن چاپگرهای اطراف</translation> <translation id="5483785310822538350">لغو دسترسی به فایل و دستگاه</translation> @@ -5202,7 +5198,6 @@ <translation id="5555639311269196631">خاموش کردن نقطه اتصال</translation> <translation id="5556459405103347317">بار کردن مجدد</translation> <translation id="5558129378926964177">&بزرگنمایی</translation> -<translation id="5558247502209241936">فعال کردن باز شدن برنامه در پنجره</translation> <translation id="5559311991468302423">حذف نشانی</translation> <translation id="55601339223879446">تنظیم محدوه دسکتاپ شما در صفحه نمایشگر</translation> <translation id="5561162485081632007">رویدادهای خطرناک را درصورت وقوع شناسایی میکند و به شما هشدار میدهد</translation> @@ -6028,7 +6023,6 @@ <translation id="6305607932814307878">خطمشی کلی:</translation> <translation id="6305702903308659374">پخش با صدایی معمولی حتی اگر ChromeVox درحال صحبت کردن باشد</translation> <translation id="6305909198255586420">لطفاً نصب را بااستفاده از نمایه اصلی انجام دهید</translation> -<translation id="630750887748244481">ولیتان «اجازههای مربوط به سایتها، برنامهها، و افزونهها» را برای Chrome خاموش کرده است. اضافه کردن این افزونه مجاز نیست.</translation> <translation id="6307990684951724544">سیستم مشغول است</translation> <translation id="6308493641021088955">ورود به سیستم ارائهشده توسط <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">ذخیره پی&وند بهعنوان...</translation> @@ -6856,7 +6850,6 @@ <translation id="7025190659207909717">مدیریت خدمات دادههای تلفن همراه</translation> <translation id="7025895441903756761">امنیت و حریم خصوصی</translation> <translation id="7027258625819743915">{COUNT,plural, =0{باز کردن همه در پنجره ناشناس}=1{باز کردن در پنجره ناشناس}one{باز کردن همه ({COUNT}) در پنجره ناشناس}other{باز کردن همه ({COUNT}) در پنجره ناشناس}}</translation> -<translation id="7028057921476386252">ولی یا سرپرست باید فعال شدن این افزونه را برای شما تأیید کند</translation> <translation id="7029307918966275733">Crostini نصب نشده است. لطفاً برای مشاهده اعتبارها، Crostini را نصب کنید.</translation> <translation id="7029809446516969842">گذرواژهها</translation> <translation id="7030304022046916278">نشانیهای وب را به «مرور ایمن» ارسال میکند تا بررسی شوند</translation> @@ -8234,7 +8227,6 @@ <translation id="8251509999076836464">درحال مرتبطسازی <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">تصویر کوچک حذف شد.</translation> <translation id="825238165904109940">همیشه نشانیهای وب کامل نشان داده شود</translation> -<translation id="8252538334423261825">نمیتوان افزونه اضافه کرد</translation> <translation id="8252569384384439529">درحال بارگذاری…</translation> <translation id="8253198102038551905">روی «+» کلیک کنید تا مشخصات شبکه را دریافت کنید</translation> <translation id="8255212965098517578">عکسها، اعلانها، و برنامههای اخیر</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 9f3aa66f..6c5e7d7d 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Ohita painamalla ESCAPE (vain epävirallisissa ohjelmistoversioissa).</translation> <translation id="1093457606523402488">Näkyvät verkot:</translation> <translation id="1095761715416917775">Varmista, että sinulla on aina pääsy synkronoituun dataasi</translation> +<translation id="1095879482467973146">Google Salasanat verkossa</translation> <translation id="109647177154844434">Parallels Desktopin poistaminen poistaa Windows-näköistiedoston. Se sisältää sen sovellukset, asetukset ja datan. Haluatko varmasti jatkaa?</translation> <translation id="1097016918605049747">Sivua ei voitu kääntää</translation> <translation id="1097658378307015415">Aloita vierailijakäyttö ennen sisäänkirjautumista aktivoidaksesi verkon <ph name="NETWORK_ID" />.</translation> @@ -1338,7 +1339,6 @@ <translation id="2114820389966440614">Katso "Uusimmat kohokohdat" ja muita muistoja täällä</translation> <translation id="2114896190328250491">Kuvaaja: <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM-korttia ei ole asetettu</translation> -<translation id="2116020356255810305">Ota sovelluksen käynnistäminen käyttöön käynnistyksen yhteydessä</translation> <translation id="2116619964159595185">Sivustot yhdistävät yleensä Bluetooth-laitteisiin esim. ottaakseen käyttöön tai synkronoidakseen vähän virtaa käyttävän majakan, terveys- tai liikuntaseurannan tai älylampun</translation> <translation id="2117655453726830283">Seuraava dia</translation> <translation id="2119349053129246860">Avaa sovelluksessa <ph name="APP" /></translation> @@ -1498,6 +1498,7 @@ <translation id="2252017960592955005">Urkinnan esto (beta)</translation> <translation id="225240747099314620">Salli suojatun sisällön tunnisteet (voi edellyttää tietokoneen uudelleenkäynnistystä)</translation> <translation id="2253318212986772520">PPD:n noutaminen ei onnistu: <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Valitse, mitä sisältöä <ph name="APP_NAME" /> saa</translation> <translation id="2255077166240162850">Laite on lukittu toiseen verkkotunnukseen tai tilaan.</translation> <translation id="2255317897038918278">Microsoftin aikaleimaus</translation> <translation id="2256115617011615191">Käynnistä uudelleen</translation> @@ -1846,6 +1847,7 @@ <translation id="2532589005999780174">Suuri kontrasti -tila</translation> <translation id="2533649878691950253">Tämä sivusto ei saanut tietää tarkkaa sijaintiasi, koska et yleensä ole sallinut sitä</translation> <translation id="253434972992662860">&Tauko</translation> +<translation id="253498598929009420">Sivusto voi nähdä näytön sisällön</translation> <translation id="253557089021624350">Käyttävien toimintojen määrä</translation> <translation id="2535799430745250929">Matkapuhelinverkkoja ei ole olemassa</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> saa nähdä seuraavat tiedostot ja kansiot ja muokata niitä</translation> @@ -3268,7 +3270,6 @@ <translation id="380329542618494757">Nimi</translation> <translation id="3803345858388753269">Videon laatu</translation> <translation id="3803367742635802571">Avaamasi sivustot voivat lakata toimimasta suunnitellusti</translation> -<translation id="3803583375545057606">Pyydetäänkö vanhempaasi ottamaan tämä laajennus käyttöön?</translation> <translation id="380408572480438692">Ottamalla tehokkuustietojen keräämisen käyttöön autat Googlea parantamaan järjestelmää ajan myötä. Tietoja lähetetään vasta luodessasi palauteraportin (Alt-Shift-I) ja lisätessäsi siihen tehokkuustiedot. Voit poistaa tietojen keräämisen käytöstä milloin tahansa palaamalla tähän ruutuun.</translation> <translation id="3807249107536149332">Laajennusta <ph name="EXTENSION_NAME" /> (<ph name="EXTENSION_ID" />) ei sallita kirjautumisnäytöllä.</translation> <translation id="3807747707162121253">&Peruuta</translation> @@ -3687,7 +3688,6 @@ <translation id="4169535189173047238">Älä salli</translation> <translation id="4170314459383239649">Tyhjennä poistuttaessa</translation> <translation id="417096670996204801">Valitse profiili</translation> -<translation id="41725145403849567">Pyydetäänkö vanhempaasi lisäämään tämä laajennus?</translation> <translation id="4175137578744761569">Vaalea violetti ja valkoinen</translation> <translation id="4175737294868205930">Pysyvä tallennustila</translation> <translation id="4176463684765177261">Pois käytöstä</translation> @@ -5101,7 +5101,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-koodissa on oltava ainakin yksi merkki}other{PIN-koodissa on oltava ainakin # merkkiä}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> edellyttää, että yhdistät Wi-Fi-verkkoon nyt ja lataat päivityksen. Voit myös ladata sen maksullisella yhteydellä (tästä voidaan veloittaa).</translation> <translation id="5476016146231427848">Käynnistä laite uudelleen, jotta voit käyttää Steamia Chromebookilla</translation> -<translation id="5476897066181964657">Vanhemman tai huoltajan on hyväksyttävä tämän laajennuksen lisääminen</translation> <translation id="5481273127572794904">Useiden tiedostojen automaattinen lataaminen kielletty</translation> <translation id="5481941284378890518">Lisää lähellä olevia tulostimia</translation> <translation id="5483785310822538350">Peru tiedoston ja laitteen käyttöoikeudet</translation> @@ -5198,7 +5197,6 @@ <translation id="5555639311269196631">Laita hotspot pois päältä</translation> <translation id="5556459405103347317">Lataa uudelleen</translation> <translation id="5558129378926964177">&Lähennä</translation> -<translation id="5558247502209241936">Ota käyttöön sovelluksen avaaminen ikkunassa</translation> <translation id="5559311991468302423">Osoitteen poistaminen</translation> <translation id="55601339223879446">Säädä työpöydän rajoja näytön sisällä</translation> <translation id="5561162485081632007">Havaitsee vaaralliset tapahtumat ja varoittaa niistä etukäteen</translation> @@ -6024,7 +6022,6 @@ <translation id="6305607932814307878">Yleinen käytäntö:</translation> <translation id="6305702903308659374">Käytä normaalia äänenvoimakkuutta, vaikka ChromeVox puhuu.</translation> <translation id="6305909198255586420">Asenna käyttäen ensisijaista profiilia</translation> -<translation id="630750887748244481">Vanhempasi on laittanut Chromen sivustojen, sovellusten ja laajennusten käyttöluvat pois päältä. Laajennuksen lisääminen ei ole sallittua.</translation> <translation id="6307990684951724544">Järjestelmä on varattu</translation> <translation id="6308493641021088955">Kirjautumisen tarjoaa <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Tallenna lin&kki nimellä...</translation> @@ -6850,7 +6847,6 @@ <translation id="7025190659207909717">Mobiilitiedonsiirtopalvelun hallinta</translation> <translation id="7025895441903756761">Tietosuoja ja yksityisyys</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Avaa kaikki &incognito-ikkunassa}=1{Avaa &incognito-ikkunassa}other{Avaa kaikki ({COUNT}) &incognito-ikkunassa}}</translation> -<translation id="7028057921476386252">Vanhemman tai huoltajan on hyväksyttävä tämän laajennuksen käyttöönotto</translation> <translation id="7029307918966275733">Crostinia ei ole asennettu. Asenna Crostini nähdäksesi tekijätiedot.</translation> <translation id="7029809446516969842">Salasanat</translation> <translation id="7030304022046916278">Lähettää URL-osoitteita Selaussuojan tarkistettavaksi</translation> @@ -8228,7 +8224,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> muodostaa laiteparia</translation> <translation id="8251578425305135684">Pikkukuva poistettu.</translation> <translation id="825238165904109940">Näytä aina täydet URL-osoitteet</translation> -<translation id="8252538334423261825">Laajennusta ei voi lisätä</translation> <translation id="8252569384384439529">Ladataan…</translation> <translation id="8253198102038551905">Tarkastele verkon ominaisuuksia klikkaamalla +</translation> <translation id="8255212965098517578">Viimeisimmät kuvat, ilmoitukset ja sovellukset</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index c512dba9..843805b 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1341,7 +1341,6 @@ <translation id="2114820389966440614">Tingnan ang "Mga Kamakailang Highlight" at iba pang alaala dito</translation> <translation id="2114896190328250491">Larawan ni <ph name="NAME" /></translation> <translation id="2114995631896158695">Walang nakalagay na SIM card</translation> -<translation id="2116020356255810305">I-enable ang paglunsad ng app sa startup</translation> <translation id="2116619964159595185">Karaniwang kumokonekta ang mga site sa mga Bluetooth device para sa mga feature na tulad ng pag-set up o pag-sync ng low-energy beacon, tracker ng kalusugan o fitness, o smart light bulb</translation> <translation id="2117655453726830283">Susunod na slide</translation> <translation id="2119349053129246860">Buksan sa <ph name="APP" /></translation> @@ -3273,7 +3272,6 @@ <translation id="380329542618494757">Pangalan</translation> <translation id="3803345858388753269">Kalidad ng Video</translation> <translation id="3803367742635802571">Posibleng hindi na gumana ayon sa disenyo ang mga site na binibisita mo</translation> -<translation id="3803583375545057606">Hihilingin sa iyong magulang na i-enable ang extension na ito?</translation> <translation id="380408572480438692">Makakatulong sa Google ang pag-e-enable sa pagkolekta ng data ng pagganap na pahusayin ang system sa paglipas ng panahon. Walang ipinapadalang data hanggang sa maghain ka ng ulat ng feedback (Alt-Shift-I) at magsama ng data ng pagganap. Makakabalik ka sa screen na ito upang i-disable ang pagkolekta anumang oras.</translation> <translation id="3807249107536149332">Ang <ph name="EXTENSION_NAME" /> (extension ID "<ph name="EXTENSION_ID" />") ay hindi pinapayagan sa screen sa pag-login.</translation> <translation id="3807747707162121253">&Kanselahin</translation> @@ -3695,7 +3693,6 @@ <translation id="4169535189173047238">Huwag payagan</translation> <translation id="4170314459383239649">I-clear sa Paglabas</translation> <translation id="417096670996204801">Pumili ng profile</translation> -<translation id="41725145403849567">Hihilingin sa iyong magulang na idagdag ang extension na ito?</translation> <translation id="4175137578744761569">Light purple at puti</translation> <translation id="4175737294868205930">Matagalang storage</translation> <translation id="4176463684765177261">Hindi pinapagana</translation> @@ -5109,7 +5106,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Dapat ay hindi bababa sa isang character ang PIN}one{Dapat ay hindi bababa sa # character ang PIN}other{Dapat ay hindi bababa sa # na character ang PIN}}</translation> <translation id="5474859849784484111">Hinihiling sa iyo ng <ph name="MANAGER" /> na kumonekta ka sa Wi-Fi ngayon at mag-download ng update. O mag-download mula sa isang nakametrong koneksyon (posibleng may nalalapat na mga singil).</translation> <translation id="5476016146231427848">Paki-restart ang iyong device para magamit ang Steam sa Chromebook</translation> -<translation id="5476897066181964657">Kailangang sabihin ng magulang o tagapag-alaga na OK na idagdag mo ang extension na ito</translation> <translation id="5481273127572794904">Hindi pinapayagang awtomatikong mag-download ng maraming file</translation> <translation id="5481941284378890518">Magdagdag ng Mga Printer na Nasa Malapit</translation> <translation id="5483785310822538350">Bawiin ang access sa file at device</translation> @@ -5206,7 +5202,6 @@ <translation id="5555639311269196631">I-off ang hotspot</translation> <translation id="5556459405103347317">I-reload</translation> <translation id="5558129378926964177">Mag-zoom &In</translation> -<translation id="5558247502209241936">I-enable ang pagbubukas ng app sa window</translation> <translation id="5559311991468302423">I-delete ang address</translation> <translation id="55601339223879446">Isaayos ang mga hangganan ng iyong desktop sa display</translation> <translation id="5561162485081632007">Nagde-detect ng mga mapanganib na event at nagbibigay sa iyo ng babala tungkol sa mga ito kapag nangyari ang mga ito</translation> @@ -6032,7 +6027,6 @@ <translation id="6305607932814307878">Pandaigdigang Patakaran:</translation> <translation id="6305702903308659374">I-play sa normal na volume kahit na nagsasalita ang ChromeVox</translation> <translation id="6305909198255586420">Paki-install gamit ang iyong pangunahing profile</translation> -<translation id="630750887748244481">Na-off ng iyong magulang ang "Mga pahintulot para sa mga site, app, at extension" para sa Chrome. Hindi pinapayagan ang pagdagdag sa extension na ito.</translation> <translation id="6307990684951724544">Abala ang system</translation> <translation id="6308493641021088955">Ibinibigay ng <ph name="EXTENSION_NAME" /> ang pag-sign in</translation> <translation id="6308937455967653460">I-save ang lin&k bilang...</translation> @@ -6860,7 +6854,6 @@ <translation id="7025190659207909717">Pamamahala sa serbisyo ng data ng mobile</translation> <translation id="7025895441903756761">Seguridad at Privacy</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Buksan Lahat sa &Incognito Window}=1{Buksan sa &Incognito Window}one{Buksan Lahat ({COUNT}) sa &Incognito Window}other{Buksan Lahat ({COUNT}) sa &Incognito Window}}</translation> -<translation id="7028057921476386252">Kailangang sabihin ng magulang o tagapag-alaga na OK na i-enable mo ang extension na ito</translation> <translation id="7029307918966275733">Hindi naka-install ang Crostini. Paki-install ang Crostini para matingnan ang mga credit.</translation> <translation id="7029809446516969842">Mga Password</translation> <translation id="7030304022046916278">Nagpapadala ng mga URL sa Ligtas na Pag-browse para masuri ang mga ito</translation> @@ -8239,7 +8232,6 @@ <translation id="8251509999076836464">Ipinapares sa <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Naalis ang thumbnail.</translation> <translation id="825238165904109940">Palaging Ipakita ang Mga Buong URL</translation> -<translation id="8252538334423261825">Hindi maidagdag ang extension</translation> <translation id="8252569384384439529">Ina-upload...</translation> <translation id="8253198102038551905">I-click '+' upang makita ang mga property ng network</translation> <translation id="8255212965098517578">Mga kamakailang larawan, notification, at app</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 401a32a5..9ca5aa7 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Appuyez sur ÉCHAP pour ne pas faire la mise à jour (versions non officielles uniquement).</translation> <translation id="1093457606523402488">Réseaux visibles :</translation> <translation id="1095761715416917775">Assurez-vous de toujours pouvoir accéder à vos données de synchronisation</translation> +<translation id="1095879482467973146">Gestionnaire de mots de passe Google sur le Web</translation> <translation id="109647177154844434">La désinstallation de Parallels Desktop supprimera votre image Windows. Cela comprend ses applications, ses paramètres et ses données. Souhaitez-vous vraiment continuer?</translation> <translation id="1097016918605049747">Impossible de traduire cette page</translation> <translation id="1097658378307015415">Avant de vous connecter, veuillez démarrer une session d'invité afin d'activer le réseau <ph name="NETWORK_ID" /></translation> @@ -1328,7 +1329,6 @@ <translation id="2114820389966440614">Découvrez les « Sélections récentes » et d'autres souvenirs ici</translation> <translation id="2114896190328250491">Photo de <ph name="NAME" /></translation> <translation id="2114995631896158695">Aucune carte SIM dans l'appareil</translation> -<translation id="2116020356255810305">Activer le lancement de l'application au démarrage</translation> <translation id="2116619964159595185">Les sites se connectent généralement aux appareils Bluetooth pour proposer des fonctionnalités comme la configuration ou la synchronisation d'une balise à faible consommation d'énergie, d'un moniteur de santé ou d'activité physique, ou d'une ampoule intelligente</translation> <translation id="2117655453726830283">Diapositive suivante</translation> <translation id="2119349053129246860">Ouvrir dans <ph name="APP" /></translation> @@ -1488,6 +1488,7 @@ <translation id="2252017960592955005">Protection de l'affichage (bêta)</translation> <translation id="225240747099314620">Autoriser les identificateurs de contenu protégé (le redémarrage de l'ordinateur peut être nécessaire)</translation> <translation id="2253318212986772520">Impossible de récupérer le PPD pour <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Choisissez quoi partager avec <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Cet appareil a été verrouillé dans un autre mode ou avec un autre domaine.</translation> <translation id="2255317897038918278">Enregistrement des informations de date Microsoft</translation> <translation id="2256115617011615191">Redémarrer maintenant</translation> @@ -1833,6 +1834,7 @@ <translation id="2532589005999780174">Mode de contraste élevé</translation> <translation id="2533649878691950253">Votre position exacte est bloquée pour ce site parce que vous refusez habituellement de la communiquer</translation> <translation id="253434972992662860">Sus&pendre</translation> +<translation id="253498598929009420">Le site pourra voir le contenu de votre écran</translation> <translation id="253557089021624350">Compte de conservation de connexion active</translation> <translation id="2535799430745250929">Aucun réseau cellulaire n'est accessible</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> peut afficher et modifier les fichiers et les dossiers suivants</translation> @@ -3256,7 +3258,6 @@ <translation id="380329542618494757">Nom</translation> <translation id="3803345858388753269">Qualité de la vidéo</translation> <translation id="3803367742635802571">Les sites que vous visitez peuvent cesser de fonctionner comme prévu</translation> -<translation id="3803583375545057606">Demander à tes parents d'activer cette extension?</translation> <translation id="380408572480438692">L'activation de la collecte de données relatives aux performances nous permet d'améliorer le système au fil du temps. Aucune donnée n'est envoyée avant que vous envoyiez un rapport de commentaires (Alt-Maj-I) comprenant des données relatives aux performances. Vous pouvez revenir à cet écran afin de désactiver la collecte des données à tout moment.</translation> <translation id="3807249107536149332">L'extension <ph name="EXTENSION_NAME" /> (identifiant d'extension « <ph name="EXTENSION_ID" /> ») n'est pas autorisée sur l'écran de connexion.</translation> <translation id="3807747707162121253">&Annuler</translation> @@ -3678,7 +3679,6 @@ <translation id="4169535189173047238">Ne pas autoriser</translation> <translation id="4170314459383239649">Effacement à la sortie</translation> <translation id="417096670996204801">Choisir un profil</translation> -<translation id="41725145403849567">Demander à tes parents d'ajouter cette extension?</translation> <translation id="4175137578744761569">Violet clair et blanc</translation> <translation id="4175737294868205930">Stockage persistant</translation> <translation id="4176463684765177261">Désactivé</translation> @@ -5091,7 +5091,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Le NIP doit comprendre au moins un caractère}one{Le NIP doit comprendre au moins # caractère}other{Le NIP doit comprendre au moins # caractères}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> exige que vous vous connectiez au Wi-Fi maintenant et que vous téléchargiez une mise à jour. Autrement, téléchargez-la à l'aide d'une connexion mesurée (des frais pourraient s'appliquer).</translation> <translation id="5476016146231427848">Veuillez redémarrer votre appareil pour utiliser Steam pour Chromebook</translation> -<translation id="5476897066181964657">Un parent ou un tuteur doit indiquer que tu as l'autorisation d'activer cette extension</translation> <translation id="5481273127572794904">Non autorisés à télécharger automatiquement plusieurs fichiers</translation> <translation id="5481941284378890518">Ajouter des imprimantes à proximité</translation> <translation id="5483785310822538350">Retirer l'accès au fichier et à l'appareil</translation> @@ -5188,7 +5187,6 @@ <translation id="5555639311269196631">Désactiver le point d'accès sans fil</translation> <translation id="5556459405103347317">Actualiser</translation> <translation id="5558129378926964177">Zoom &avant</translation> -<translation id="5558247502209241936">Activer l'ouverture de l'application dans la fenêtre</translation> <translation id="5559311991468302423">Supprimer l'adresse</translation> <translation id="55601339223879446">Ajustez les limites de votre bureau dans l'affichage</translation> <translation id="5561162485081632007">Il détecte les événements dangereux et vous en informe lorsqu'ils surviennent</translation> @@ -6014,7 +6012,6 @@ <translation id="6305607932814307878">Politique globale :</translation> <translation id="6305702903308659374">Utiliser un volume de lecture normal même si ChromeVox est en train de parler</translation> <translation id="6305909198255586420">Veuillez utiliser votre profil principal pour l'installer</translation> -<translation id="630750887748244481">Ton parent a désactivé le paramètre « Autorisations pour les sites, les applications et les extensions » dans Chrome. L'ajout de cette extension n'est pas autorisé.</translation> <translation id="6307990684951724544">Système occupé</translation> <translation id="6308493641021088955">Service de connexion fourni par <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Enregistrer le lie&n sous...</translation> @@ -6842,7 +6839,6 @@ <translation id="7025190659207909717">Gestion des services de données mobiles</translation> <translation id="7025895441903756761">Sécurité et confidentialité</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Tout ouvrir dans une fenêtre de &navigation privée}=1{Ouvrir dans une fenêtre de &navigation privée}one{Tout ouvrir ({COUNT}) dans une fenêtre de &navigation privée}other{Tout ouvrir ({COUNT}) dans une fenêtre de &navigation privée}}</translation> -<translation id="7028057921476386252">Un parent ou un tuteur doit indiquer que tu as l'autorisation d'activer cette extension</translation> <translation id="7029307918966275733">Crostini n'est pas installé. Veuillez installer Crostini pour voir le générique.</translation> <translation id="7029809446516969842">Mots de passe</translation> <translation id="7030304022046916278">Il envoie des URL à la navigation sécurisée pour les vérifier</translation> @@ -8220,7 +8216,6 @@ <translation id="8251509999076836464">Association avec l'appareil suivant :<ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniature supprimée.</translation> <translation id="825238165904109940">Toujours afficher les URL en entier</translation> -<translation id="8252538334423261825">Il n'est pas possible d'ajouter cette extension</translation> <translation id="8252569384384439529">Téléversement en cours…</translation> <translation id="8253198102038551905">Cliquez sur « + » pour afficher les propriétés du réseau</translation> <translation id="8255212965098517578">Photos, notifications et applications récentes</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 60b40d8d..85aac5b 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Appuyez sur ECHAP pour ignorer (versions non officielles uniquement).</translation> <translation id="1093457606523402488">Réseaux visibles :</translation> <translation id="1095761715416917775">Veillez à toujours avoir accès à vos données synchronisées</translation> +<translation id="1095879482467973146">Gestionnaire de mots de passe de Google sur le Web</translation> <translation id="109647177154844434">Si vous désinstallez Parallels Desktop, cela supprimera aussi l'image Windows, y compris ses applications, ses paramètres et ses données. Voulez-vous vraiment continuer ?</translation> <translation id="1097016918605049747">Impossible de traduire cette page</translation> <translation id="1097658378307015415">Avant de vous connecter, veuillez vous connecter en tant qu'invité afin d'activer le réseau <ph name="NETWORK_ID" />.</translation> @@ -1328,7 +1329,6 @@ <translation id="2114820389966440614">Voir "Sélection du moment" et d'autres souvenirs ici</translation> <translation id="2114896190328250491">Photo : <ph name="NAME" /></translation> <translation id="2114995631896158695">Aucune carte SIM insérée</translation> -<translation id="2116020356255810305">Activer le lancement de l'appli au démarrage</translation> <translation id="2116619964159595185">Les sites se connectent généralement aux appareils Bluetooth pour proposer des fonctionnalités comme la configuration ou la synchronisation d'une balise à faible consommation d'énergie, d'un moniteur de santé ou d'activité physique, ou d'une ampoule connectée</translation> <translation id="2117655453726830283">Diapositive suivante</translation> <translation id="2119349053129246860">Ouvrir dans <ph name="APP" /></translation> @@ -1488,6 +1488,7 @@ <translation id="2252017960592955005">Protection anti-regard (bêta)</translation> <translation id="225240747099314620">Autoriser les identifiants pour le contenu protégé (le redémarrage de l'ordinateur peut être nécessaire)</translation> <translation id="2253318212986772520">Impossible de récupérer le PPD pour <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Choisir les informations à partager avec <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Cet appareil a été verrouillé dans un autre mode ou avec un autre domaine.</translation> <translation id="2255317897038918278">Enregistrement des informations de date Microsoft</translation> <translation id="2256115617011615191">Redémarrer maintenant</translation> @@ -1833,6 +1834,7 @@ <translation id="2532589005999780174">Mode Contraste élevé</translation> <translation id="2533649878691950253">Votre position exacte est bloquée pour ce site, car vous refusez habituellement de la communiquer</translation> <translation id="253434972992662860">&Pause</translation> +<translation id="253498598929009420">Le site pourra voir le contenu de votre écran</translation> <translation id="253557089021624350">Nombre d'activités en cours</translation> <translation id="2535799430745250929">Aucun réseau mobile disponible</translation> <translation id="2537395079978992874">Le site <ph name="ORIGIN" /> peut afficher et modifier les fichiers et les dossiers suivants</translation> @@ -1945,7 +1947,7 @@ <translation id="2640299212685523844">Utiliser GTK</translation> <translation id="264083724974021997">Connexion à votre téléphone – Boîte de dialogue</translation> <translation id="2642111877055905627">Ballon de football</translation> -<translation id="2643064289437760082">Vous pouvez toujours supprimer les données de mesure des performances des annonces en supprimant vos données de navigation</translation> +<translation id="2643064289437760082">Vous pouvez toujours supprimer les données de mesure des annonces en supprimant vos données de navigation</translation> <translation id="2643698698624765890">Pour gérer les extensions, cliquer sur "Extensions" dans le menu "Fenêtre"</translation> <translation id="2645047101481282803">Votre appareil est géré par <ph name="PROFILE_NAME" /></translation> <translation id="2645388244376970260">Caster cet onglet sur <ph name="DEVICE_NAME" /></translation> @@ -2560,7 +2562,7 @@ <translation id="3183944777708523606">Mode d'affichage du moniteur</translation> <translation id="3184536091884214176">Configurer ou gérer des imprimantes CUPS. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="3185014249447200271">{NUM_APPS,plural, =1{Cette appli est bloquée}one{Cette appli est bloquée}other{Certaines applis sont bloquées}}</translation> -<translation id="3187472288455401631">Performances des annonces</translation> +<translation id="3187472288455401631">Mesure des annonces</translation> <translation id="3188257591659621405">Mes fichiers</translation> <translation id="3188465121994729530">Moyenne glissante</translation> <translation id="3189187154924005138">Grand curseur</translation> @@ -3255,7 +3257,6 @@ <translation id="380329542618494757">Nom</translation> <translation id="3803345858388753269">Qualité de la vidéo</translation> <translation id="3803367742635802571">Les sites que vous consultez ne fonctionneront peut-être plus comme prévu</translation> -<translation id="3803583375545057606">Demander à ton parent d'activer cette extension ?</translation> <translation id="380408572480438692">L'activation de la collecte d'informations relatives aux performances nous permet d'améliorer le système au fil du temps. Aucune information n'est envoyée jusqu'à ce que vous envoyiez un rapport de commentaires (Alt-Shift-I) comprenant des informations relatives aux performances. Vous pouvez revenir sur cet écran afin de désactiver la collecte des informations à tout moment.</translation> <translation id="3807249107536149332">L'extension <ph name="EXTENSION_NAME" /> (ID d'extension "<ph name="EXTENSION_ID" />") n'est pas autorisée sur un écran de connexion.</translation> <translation id="3807747707162121253">&Annuler</translation> @@ -3677,7 +3678,6 @@ <translation id="4169535189173047238">Interdire</translation> <translation id="4170314459383239649">Supprimer en fin de session</translation> <translation id="417096670996204801">Choisir un profil</translation> -<translation id="41725145403849567">Demander à ton parent d'ajouter cette extension ?</translation> <translation id="4175137578744761569">Violet clair et blanc</translation> <translation id="4175737294868205930">Stockage persistant</translation> <translation id="4176463684765177261">Désactivé</translation> @@ -4230,7 +4230,7 @@ <translation id="4666472247053585787">Afficher les notifications de votre téléphone sur votre <ph name="DEVICE_TYPE" /></translation> <translation id="4666911709726371538">Plus d'applications</translation> <translation id="4667027203988048332">Quelles sont les données utilisées :</translation> -<translation id="4668279686271488041">Les données de mesure des performances des annonces sont régulièrement supprimées de votre appareil</translation> +<translation id="4668279686271488041">Les données de mesure des annonces sont régulièrement supprimées de votre appareil</translation> <translation id="4672759829555593783">Ouvrir <ph name="FILE_NAME" /> maintenant</translation> <translation id="46733273239502219">Les données hors connexion des applications installées seront également effacées</translation> <translation id="4673442866648850031">Ouvrir les outils de stylet lors du retrait du stylet</translation> @@ -5090,7 +5090,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Ce code doit comporter au moins 1 caractère}one{Ce code doit comporter au moins # caractère}other{Ce code doit comporter au moins # caractères}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> vous demande de vous connecter au Wi-Fi maintenant et de télécharger une mise à jour. Vous pouvez aussi la télécharger via une connexion facturée à l'usage (susceptible d'entraîner des frais).</translation> <translation id="5476016146231427848">Veuillez redémarrer votre appareil pour utiliser Steam sur Chromebook</translation> -<translation id="5476897066181964657">Un parent ou un représentant légal doit approuver l'ajout de cette extension</translation> <translation id="5481273127572794904">Non autorisé à télécharger automatiquement plusieurs fichiers</translation> <translation id="5481941284378890518">Ajouter des imprimantes à proximité</translation> <translation id="5483785310822538350">Retirer les droits d'accès aux fichiers et aux appareils</translation> @@ -5187,7 +5186,6 @@ <translation id="5555639311269196631">Désactiver le point d'accès</translation> <translation id="5556459405103347317">Actualiser</translation> <translation id="5558129378926964177">Zoom &avant</translation> -<translation id="5558247502209241936">Activer l'ouverture de l'appli dans une fenêtre</translation> <translation id="5559311991468302423">Supprimer l'adresse</translation> <translation id="55601339223879446">Adaptez les dimensions de votre Bureau à l'écran</translation> <translation id="5561162485081632007">Il détecte les événements dangereux et vous en informe lorsqu'ils surviennent</translation> @@ -6014,7 +6012,6 @@ <translation id="6305607932814307878">Règlement global :</translation> <translation id="6305702903308659374">Lire le contenu à un volume sonore normal, même pendant la diffusion des commentaires audio ChromeVox</translation> <translation id="6305909198255586420">Veuillez l'installer avec votre profil principal</translation> -<translation id="630750887748244481">L'un de tes parents a désactivé l'option "Autorisations des sites, applications et extensions" pour Chrome. Tu ne peux pas ajouter cette extension.</translation> <translation id="6307990684951724544">Système occupé.</translation> <translation id="6308493641021088955">Connexion fournie par <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Enregistrer le lie&n sous...</translation> @@ -6842,7 +6839,6 @@ <translation id="7025190659207909717">Gestion des services Internet mobiles</translation> <translation id="7025895441903756761">Sécurité et confidentialité</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Tout ouvrir dans une fenêtre de navigation &privée}=1{Ouvrir dans une fenêtre de navigation &privée}one{Tout ouvrir ({COUNT}) dans une fenêtre de navigation &privée}other{Tout ouvrir ({COUNT}) dans une fenêtre de navigation &privée}}</translation> -<translation id="7028057921476386252">Un parent ou un représentant légal doit approuver l'activation de cette extension</translation> <translation id="7029307918966275733">Crostini n'est pas installé. Veuillez installer Crostini pour afficher le fichier des crédits.</translation> <translation id="7029809446516969842">Mots de passe</translation> <translation id="7030304022046916278">Les URL sont envoyées à la navigation sécurisée pour vérification</translation> @@ -7074,7 +7070,7 @@ <translation id="7258192266780953209">Transformations</translation> <translation id="7258225044283673131">L'application ne répond pas. Sélectionnez "Forcer la fermeture" pour la fermer.</translation> <translation id="7260186537988033909">Enregistrement de l'appareil avec Kiosk & Signage terminé</translation> -<translation id="7260367682327802201">Votre appareil Android peut inclure un paramètre similaire. Si la mesure des performances des annonces est activée dans Chrome et sur votre appareil Android, une entreprise peut mesurer l'efficacité d'une annonce sur les sites Web que vous consultez et dans les applis que vous utilisez.</translation> +<translation id="7260367682327802201">Votre appareil Android peut inclure un paramètre similaire. Si la mesure des annonces est activée dans Chrome et sur votre appareil Android, une entreprise peut mesurer l'efficacité d'une annonce sur les sites Web que vous consultez et dans les applis que vous utilisez.</translation> <translation id="7261612856573623172">Voix de la synthèse vocale du système</translation> <translation id="7262004276116528033">Ce service de connexion est hébergé par <ph name="SAML_DOMAIN" />.</translation> <translation id="7263162347647986485">{NUM_SITES,plural, =1{Autorisations supprimées pour 1 site}one{Autorisations supprimées pour {NUM_SITES} site}other{Autorisations supprimées pour {NUM_SITES} sites}}</translation> @@ -8221,7 +8217,6 @@ <translation id="8251509999076836464">Association à <ph name="DEVICE_NAME" />…</translation> <translation id="8251578425305135684">Miniature supprimée</translation> <translation id="825238165904109940">Toujours afficher les URL en entier</translation> -<translation id="8252538334423261825">Impossible d'ajouter l'extension</translation> <translation id="8252569384384439529">Importation…</translation> <translation id="8253198102038551905">Cliquez sur "+" pour accéder aux propriétés réseau.</translation> <translation id="8255212965098517578">Photos, notifications et applis récentes</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 3b296ef..17c6497 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -1327,7 +1327,6 @@ <translation id="2114820389966440614">Mostrar aquí Destacadas recentes e outras lembranzas</translation> <translation id="2114896190328250491">Foto de <ph name="NAME" /></translation> <translation id="2114995631896158695">Non se inseriu ningunha tarxeta SIM</translation> -<translation id="2116020356255810305">Activar a opción de abrir a aplicación ao iniciar</translation> <translation id="2116619964159595185">Os sitios adoitan conectarse a dispositivos Bluetooth para ofrecerche determinadas funcións (por exemplo, configurar ou sincronizar unha baliza de baixo consumo, un dispositivo de seguimento da saúde ou da forma física, ou unha lámpada de luz intelixente)</translation> <translation id="2117655453726830283">Seguinte diapositiva</translation> <translation id="2119349053129246860">Abrir na aplicación <ph name="APP" /></translation> @@ -3256,7 +3255,6 @@ <translation id="380329542618494757">Nome</translation> <translation id="3803345858388753269">Calidade do vídeo</translation> <translation id="3803367742635802571">É posible que os sitios que visites deixen de funcionar segundo o previsto</translation> -<translation id="3803583375545057606">Queres pedirlle ao teu pai ou nai permiso para activar esta extensión?</translation> <translation id="380408572480438692">Activar a recompilación de datos de rendemento axudará a Google a mellorar o sistema co tempo. Non se enviarán datos ata que presentes un informe de comentarios (Alt-Maiús-I) e inclúas datos sobre o rendemento. Podes volver a esta pantalla para desactivar a recompilación cando queiras.</translation> <translation id="3807249107536149332">Non se permite o uso de <ph name="EXTENSION_NAME" /> (ID da extensión "<ph name="EXTENSION_ID" />") nunha pantalla de inicio de sesión.</translation> <translation id="3807747707162121253">&Cancelar</translation> @@ -3678,7 +3676,6 @@ <translation id="4169535189173047238">Non permitir</translation> <translation id="4170314459383239649">Borrar as cookies ao saír</translation> <translation id="417096670996204801">Seleccionar un perfil</translation> -<translation id="41725145403849567">Queres pedirlle ao teu pai ou nai permiso para engadir esta extensión?</translation> <translation id="4175137578744761569">Púrpura claro e branco</translation> <translation id="4175737294868205930">Almacenamento persistente</translation> <translation id="4176463684765177261">Desactivado</translation> @@ -5091,7 +5088,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{O PIN debe ter como mínimo 1 carácter}other{O PIN debe ter como mínimo # caracteres}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> require que te conectes agora á wifi e descargues unha actualización. Tamén podes descargala desde unha conexión de pago por consumo (pódense aplicar cargos).</translation> <translation id="5476016146231427848">Reinicia o dispositivo para usar Steam no Chromebook</translation> -<translation id="5476897066181964657">Para poderes engadir esta extensión, ten que darche permiso o teu pai, nai, titor ou titora</translation> <translation id="5481273127572794904">Sitios que non poden descargar automaticamente varios ficheiros</translation> <translation id="5481941284378890518">Engadir impresoras que estean cerca</translation> <translation id="5483785310822538350">Revogar acceso a ficheiros e dispositivos</translation> @@ -5188,7 +5184,6 @@ <translation id="5555639311269196631">Desactivar zona wifi</translation> <translation id="5556459405103347317">Volver cargar</translation> <translation id="5558129378926964177">Achegar</translation> -<translation id="5558247502209241936">Activar a opción de abrir a aplicación nunha ventá</translation> <translation id="5559311991468302423">Eliminar o enderezo</translation> <translation id="55601339223879446">Axustar os límites do escritorio dentro da pantalla</translation> <translation id="5561162485081632007">Móstrache unha advertencia cando detecta eventos perigosos</translation> @@ -6011,7 +6006,6 @@ <translation id="6305607932814307878">Política global:</translation> <translation id="6305702903308659374">Manter o volume de reprodución aínda que ChromeVox estea falando</translation> <translation id="6305909198255586420">Realiza a instalación co perfil principal</translation> -<translation id="630750887748244481">O teu pai ou nai desactivou esta opción en Chrome: Permisos para sitios, aplicacións e extensións. Non se permite engadir esta extensión.</translation> <translation id="6307990684951724544">Sistema ocupado</translation> <translation id="6308493641021088955">Inicio de sesión fornecido por <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Gardar liga&zón como...</translation> @@ -6837,7 +6831,6 @@ <translation id="7025190659207909717">Xestión de servizos de datos móbiles</translation> <translation id="7025895441903756761">Seguranza e privacidade</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Abrir todos nunha ventá de &incógnito}=1{Abrir nunha ventá de &incógnito}other{Abrir todos ({COUNT}) nunha ventá de &incógnito}}</translation> -<translation id="7028057921476386252">Para poderes activar esta extensión, ten que darche permiso o teu pai, nai, titor ou titora</translation> <translation id="7029307918966275733">Crostini non está instalado. Instálao para ver os créditos.</translation> <translation id="7029809446516969842">Contrasinais</translation> <translation id="7030304022046916278">Envía enderezos URL á función Navegación segura para comprobalos</translation> @@ -8215,7 +8208,6 @@ <translation id="8251509999076836464">Vinculándose a <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatura eliminada.</translation> <translation id="825238165904109940">Mostrar sempre URL completos</translation> -<translation id="8252538334423261825">Non se pode engadir a extensión</translation> <translation id="8252569384384439529">Cargando…</translation> <translation id="8253198102038551905">Facer clic en "+" para obter as propiedades da rede</translation> <translation id="8255212965098517578">Aplicacións, notificacións e fotos recentes</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index c9fa96a..5029a952 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1323,7 +1323,6 @@ <translation id="2114820389966440614">"તાજેતરની હાઇલાઇટ" અને અન્ય યાદગીરીઓ અહીં જુઓ</translation> <translation id="2114896190328250491"><ph name="NAME" /> દ્વારા ફોટો</translation> <translation id="2114995631896158695">કોઈ સિમ કાર્ડ શામેલ નથી</translation> -<translation id="2116020356255810305">શરૂ કરવા પર લૉન્ચિંગ ઍપ ચાલુ કરો</translation> <translation id="2116619964159595185">ઓછી-ઊર્જાવાળું બીકન, સ્વાસ્થ્ય કે ફિટનેસ ટ્રૅકર અથવા સ્માર્ટ લાઇટ બલ્બનું સેટઅપ કરવા કે તેને સિંક કરવા જેવી સુવિધાઓ માટે, સાઇટ સામાન્ય રીતે બ્લૂટૂથ ડિવાઇસ સાથે કનેક્ટ કરે છે</translation> <translation id="2117655453726830283">આગલી સ્લાઇડ</translation> <translation id="2119349053129246860"><ph name="APP" />માં ખોલો</translation> @@ -3251,7 +3250,6 @@ <translation id="380329542618494757">નામ</translation> <translation id="3803345858388753269">વીડિયોની ક્વૉલિટી</translation> <translation id="3803367742635802571">તમે મુલાકાત લો છો તે સાઇટ જે હેતુ માટે તૈયાર કરવામાં આવી છે તે મુજબ કામ કરવાનું બંધ કરી શકે છે</translation> -<translation id="3803583375545057606">શું તમારા માતાપિતાને આ એક્સ્ટેન્શન ચાલુ કરવાનું પૂછવું છે?</translation> <translation id="380408572480438692">પ્રદર્શન ડેટાના સંગ્રહને ચાલુ કરવું Googleને સમય જતા સિસ્ટમને બહેતર બનાવવામાં મદદ કરશે. જ્યાં સુધી તમે પ્રતિસાદ રિપોર્ટ (Alt-Shift-I) ફાઇલ નહીંં કરો અને પ્રદર્શન ડેટાને સામેલ નહીંં કરો ત્યાં સુધી કોઈ ડેટા મોકલવામાં આવશે નહીંં. તમે કોઈપણ સમયે સંગ્રહને બંધ કરવા માટે આ સ્ક્રીન પર પાછા આવી શકો છો.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (એક્સ્ટેન્શન ID "<ph name="EXTENSION_ID" />") ને લોગિન સ્ક્રીન પર મંજૂરી નથી.</translation> <translation id="3807747707162121253">&કેન્સલ કરો</translation> @@ -3673,7 +3671,6 @@ <translation id="4169535189173047238">મંજૂરી આપશો નહીં</translation> <translation id="4170314459383239649">બહાર નીકળવા પર સાફ કરો</translation> <translation id="417096670996204801">કોઈ પ્રોફાઇલ પસંદ કરો</translation> -<translation id="41725145403849567">શું તમારા માતાપિતાને આ એક્સ્ટેન્શન ઉમેરવાનું પૂછવું છે?</translation> <translation id="4175137578744761569">આછો જાંબલી અને સફેદ</translation> <translation id="4175737294868205930">સતત સ્ટોરેજ</translation> <translation id="4176463684765177261">અક્ષમ કરેલું</translation> @@ -5086,7 +5083,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{પિન ઓછામાં ઓછો એક અક્ષરનો હોવો આવશ્યક છે}one{પિન ઓછામાં ઓછો # અક્ષરનો હોવો આવશ્યક છે}other{પિન ઓછામાં ઓછો # અક્ષરનો હોવો આવશ્યક છે}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> માટે જરૂરી છે કે તમે હમણાં વાઇ-ફાઇથી કનેક્ટ થાઓ અને અપડેટ ડાઉનલોડ કરો. અથવા મીટર્ડ (ડેટા નિયંત્રણ) કનેક્શન પરથી ડાઉનલોડ કરો (શુલ્ક લાગુ થઈ શકે છે).</translation> <translation id="5476016146231427848">Chromebook પર Steamનો ઉપયોગ કરવા માટે, કૃપા કરીને તમારું ડિવાઇસ ફરી શરૂ કરો</translation> -<translation id="5476897066181964657">માતાપિતા અથવા વાલીએ જણાવવું આવશ્યક છે કે તમે આ એક્સ્ટેન્શન ઉમેરશો તો કોઈ વાંધો નહીં</translation> <translation id="5481273127572794904">એકથી વધારે ફાઇલો ઑટોમૅટિક રીતે ડાઉનલોડ કરવાની મંજૂરી નથી</translation> <translation id="5481941284378890518">નજીકના પ્રિન્ટર્સ ઉમેરો</translation> <translation id="5483785310822538350">ફાઇલ અને ઉપકરણ ઍક્સેસને રદબાતલ કરો</translation> @@ -5183,7 +5179,6 @@ <translation id="5555639311269196631">હૉટસ્પૉટ બંધ કરો</translation> <translation id="5556459405103347317">ફરીથી લોડ કરો</translation> <translation id="5558129378926964177">Zoom &In</translation> -<translation id="5558247502209241936">વિન્ડોમાં શરૂઆતની ઍપ ચાલુ કરો</translation> <translation id="5559311991468302423">ઍડ્રેસ ડિલીટ કરો</translation> <translation id="55601339223879446">ડિસ્પ્લેની અંદર તમારા ડેસ્કટૉપની સીમાઓ ગોઠવો</translation> <translation id="5561162485081632007">જોખમકારક ઇવેન્ટ થતી હોય ત્યારે તેની ભાળ મેળવીને તેના વિશે તમને ચેતવણી આપે છે</translation> @@ -6010,7 +6005,6 @@ <translation id="6305607932814307878">વૈશ્વિક પૉલિસી:</translation> <translation id="6305702903308659374">ChromeVox બોલી રહ્યું હોય ત્યારે પણ સામાન્ય અવાજે ચલાવો</translation> <translation id="6305909198255586420">કૃપા કરીને તમારી પ્રાથમિક પ્રોફાઇલનો ઉપયોગ કરીને ઇન્સ્ટૉલ કરો</translation> -<translation id="630750887748244481">તમારા માતાપિતાએ Chrome માટે "સાઇટ, ઍપ અને એક્સ્ટેન્શન માટેની પરવાનગીઓ" બંધ કરી છે. આ એક્સ્ટેન્શન ઉમેરવાની મંજૂરી નથી.</translation> <translation id="6307990684951724544">સિસ્ટમ વ્યસ્ત છે</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> દ્વારા આપવામાં આવેલું સાઇન-ઇન</translation> <translation id="6308937455967653460">લિં&કને આ રીતે સાચવો...</translation> @@ -6838,7 +6832,6 @@ <translation id="7025190659207909717">મોબાઇલ ડેટા સેવા મેનેજમેન્ટ</translation> <translation id="7025895441903756761">સુરક્ષા અને પ્રાઇવસી</translation> <translation id="7027258625819743915">{COUNT,plural, =0{તમામ URLને &છૂપી વિન્ડોમાં ખોલો}=1{&છૂપી વિન્ડોમાં ખોલો}one{તમામ ({COUNT}) URLને &છૂપી વિન્ડોમાં ખોલો}other{તમામ ({COUNT}) URLને &છૂપી વિન્ડોમાં ખોલો}}</translation> -<translation id="7028057921476386252">માતાપિતા અથવા વાલીએ જણાવવું આવશ્યક છે કે તમે આ એક્સ્ટેન્શન ચાલુ કરશો તો કોઈ વાંધો નહીં</translation> <translation id="7029307918966275733">Crostini ઇન્સ્ટૉલ કરેલી નથી. કૃપા કરીને ક્રેડિટ જોવા માટે Crostini ઇન્સ્ટૉલ કરો.</translation> <translation id="7029809446516969842">પાસવર્ડ</translation> <translation id="7030304022046916278">URLs ચેક કરવા માટે તેમને Safe Browsing પર મોકલે છે</translation> @@ -8210,7 +8203,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" />સાથે જોડાણ કરી રહ્યાં છીએ</translation> <translation id="8251578425305135684">થંબનેલ દૂર કર્યું.</translation> <translation id="825238165904109940">હંમેશાં પૂર્ણ URLs બતાવો</translation> -<translation id="8252538334423261825">એક્સ્ટેન્શન ઉમેરી શકતાં નથી</translation> <translation id="8252569384384439529">અપલોડ કરી રહ્યાં છીએ...</translation> <translation id="8253198102038551905">નેટવર્ક ગુણધર્મો મેળવવા માટે '+' ક્લિક કરો</translation> <translation id="8255212965098517578">તાજેતરના ફોટા, નોટિફિકેશન અને ઍપ</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 8f7250a..d13b195 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1341,7 +1341,6 @@ <translation id="2114820389966440614">"हाल की बेहतरीन फ़ोटो" और दूसरी यादें यहां देखें</translation> <translation id="2114896190328250491"><ph name="NAME" /> की फ़ोटो</translation> <translation id="2114995631896158695">कोई सिम कार्ड नहीं डाला गया</translation> -<translation id="2116020356255810305">डिवाइस के चालू होने पर, ऐप्लिकेशन लॉन्च होने की सुविधा चालू करें</translation> <translation id="2116619964159595185">आम तौर पर साइटें, कम ऊर्जा वाले बीकन, हेल्थ या फ़िटनेस ट्रैकर या स्मार्ट लाइट बल्ब को सेट अप या सिंक करने जैसी सुविधाओं के लिए ब्लूटूथ डिवाइसों से कनेक्ट करती हैं</translation> <translation id="2117655453726830283">अगली स्लाइड</translation> <translation id="2119349053129246860"><ph name="APP" /> में खोलें</translation> @@ -3273,7 +3272,6 @@ <translation id="380329542618494757">नाम</translation> <translation id="3803345858388753269">वीडियो की क्वालिटी</translation> <translation id="3803367742635802571">ऐसा हो सकता है कि विज़िट की गई साइटें ठीक तरह से काम करना बंद कर दें</translation> -<translation id="3803583375545057606">क्या अपने माता-पिता से इस एक्सटेंशन को चालू करने की अनुमति मांगनी है?</translation> <translation id="380408572480438692">परफ़ॉर्मेंस डेटा इकट्ठा करने की प्रक्रिया चालू करने से, Google को समय के साथ सिस्टम बेहतर बनाने में सहायता मिलेगी. जब तक आप फ़ीडबैक रिपोर्ट (Alt-Shift-I) फ़ाइल नहीं कर देते और परफ़ॉर्मेंस डेटा शामिल नहीं कर लेते, तब तक कोई डेटा नहीं भेजा जाता. डेटा इकट्ठा करने यह प्रक्रिया बंद करने के लिए आप किसी भी समय इस स्क्रीन पर वापस आ सकते हैं.</translation> <translation id="3807249107536149332">लॉगिन स्क्रीन पर <ph name="EXTENSION_NAME" /> (एक्सटेंशन आईडी "<ph name="EXTENSION_ID" />") की अनुमति नहीं है.</translation> <translation id="3807747707162121253">&रद्द करें</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">अनुमति न दें</translation> <translation id="4170314459383239649">बाहर निकलने पर मिटाएं</translation> <translation id="417096670996204801">कोई प्रोफ़ाइल चुनें</translation> -<translation id="41725145403849567">क्या अपने माता-पिता से इस एक्सटेंशन को जोड़ने की अनुमति मांगनी है?</translation> <translation id="4175137578744761569">हल्का बैंगनी और सफ़ेद</translation> <translation id="4175737294868205930">स्थायी जगह</translation> <translation id="4176463684765177261">बंद किया गया</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{पिन में कम से कम 1 वर्ण होना ज़रूरी है}one{पिन में कम से कम # वर्ण होना ज़रूरी है}other{पिन में कम से कम # वर्ण होने ज़रूरी हैं}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> के लिए ज़रूरी है कि आप अभी वाई-फ़ाई से कनेक्ट करें और अपडेट डाउनलोड करें. इसके अलावा, आप सीमित डेटा वाले कनेक्शन से भी डाउनलोड कर सकते हैं. इसके लिए शुल्क लिया जा सकता है.</translation> <translation id="5476016146231427848">Chromebook पर Steam इस्तेमाल करने के लिए, कृपया अपना डिवाइस रीस्टार्ट करें</translation> -<translation id="5476897066181964657">इस एक्सटेंशन को जोड़ने के लिए, आपके पास अपने माता-पिता या अभिभावक की अनुमति होनी चाहिए</translation> <translation id="5481273127572794904">एक से ज़्यादा फ़ाइलों को अपने-आप डाउनलोड करने की अनुमति नहीं है</translation> <translation id="5481941284378890518">आस-पास के प्रिंटर जोड़ें</translation> <translation id="5483785310822538350">फ़ाइल और डिवाइस के एक्सेस रद्द करें</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">हॉटस्पॉट बंद करें</translation> <translation id="5556459405103347317">फिर लोड करें</translation> <translation id="5558129378926964177">ज़ूम &इन करें</translation> -<translation id="5558247502209241936">ऐप्लिकेशन को विंडो में खोलने की सुविधा चालू करें</translation> <translation id="5559311991468302423">पता मिटाएं</translation> <translation id="55601339223879446">डिसप्ले के भीतर अपने डेस्कटॉप की सीमाएं समायोजित करें</translation> <translation id="5561162485081632007">नुकसान पहुंचाने वाली घटनाएं होने पर उनकी पहचान करता है और उनके बारे में आपको चेतावनी देता है.</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">वैश्विक नीति:</translation> <translation id="6305702903308659374">ChromeVox के बोल रहे होने पर भी, सामान्य वॉल्यूम में ही चलाएं</translation> <translation id="6305909198255586420">कृपया अपनी मुख्य प्रोफ़ाइल का इस्तेमाल करके इंस्टॉल करें</translation> -<translation id="630750887748244481">आपके माता-पिता ने Chrome के लिए, "साइटों, ऐप्लिकेशन, और एक्सटेंशन के लिए अनुमतियां" बंद कर दी हैं. इस एक्सटेंशन को जोड़ने की अनुमति नहीं है.</translation> <translation id="6307990684951724544">सिस्टम व्यस्त है</translation> <translation id="6308493641021088955">साइन-इन की सुविधा <ph name="EXTENSION_NAME" /> ने दी है</translation> <translation id="6308937455967653460">लिंक को इस रूप में सेव करें...</translation> @@ -6859,7 +6853,6 @@ <translation id="7025190659207909717">मोबाइल डेटा सेवा प्रबंधन</translation> <translation id="7025895441903756761">सुरक्षा और निजता</translation> <translation id="7027258625819743915">{COUNT,plural, =0{सभी यूआरएल को &गुप्त विंडो में खोलें}=1{यूआरएल को &गुप्त विंडो में खोलें}one{दिया गया ({COUNT}) यूआरएल &गुप्त विंडो में खोलें}other{सभी ({COUNT}) यूआरएल को &गुप्त विंडो में खोलें}}</translation> -<translation id="7028057921476386252">इस एक्सटेंशन को चालू करने के लिए, आपके पास अपने माता-पिता या अभिभावक की अनुमति होनी चाहिए</translation> <translation id="7029307918966275733">Crostini इंस्टॉल नहीं है. क्रेडिट देखने के लिए कृपया Crostini इंस्टॉल करें.</translation> <translation id="7029809446516969842">पासवर्ड</translation> <translation id="7030304022046916278">सुरक्षित ब्राउज़िंग की सेवा को यूआरएल भेजे जाते हैं, ताकि उनकी जांच की जा सके</translation> @@ -8236,7 +8229,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> से जोड़ा जा रहा है</translation> <translation id="8251578425305135684">थंबनेल निकाला गया.</translation> <translation id="825238165904109940">हमेशा पूरे यूआरएल दिखाएं</translation> -<translation id="8252538334423261825">एक्सटेंशन जोड़ा नहीं जा सकता</translation> <translation id="8252569384384439529">अपलोड हो रही है...</translation> <translation id="8253198102038551905">नेटवर्क प्रॉपर्टी पाने के लिए '+' बटन पर क्लिक करें</translation> <translation id="8255212965098517578">हाल ही की फ़ोटो, सूचनाएं, और ऐप्लिकेशन</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 00ac42e..a700ce7 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Pritisnite tipku ESCAPE za preskakanje (samo neslužbene međuverzije).</translation> <translation id="1093457606523402488">Vidljive mreže:</translation> <translation id="1095761715416917775">Pobrinite se da uvijek možete pristupiti sinkroniziranim podacima</translation> +<translation id="1095879482467973146">Google upravitelj zaporki na webu</translation> <translation id="109647177154844434">Deinstaliranjem Parallels Desktopa izbrisat će se slika za Windows. To uključuje njegove aplikacije, postavke i podatke. Jeste li sigurni da želite nastaviti?</translation> <translation id="1097016918605049747">Stranica nije prevedena</translation> <translation id="1097658378307015415">Prije nego što se prijavite, uđite kao gost da biste aktivirali mrežu <ph name="NETWORK_ID" /></translation> @@ -1329,7 +1330,6 @@ <translation id="2114820389966440614">Ovdje pogledajte "Nedavno istaknuto" i ostale uspomene</translation> <translation id="2114896190328250491">Fotografija, <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM kartica nije umetnuta</translation> -<translation id="2116020356255810305">Omogući pokretanje aplikacije pri pokretanju uređaja</translation> <translation id="2116619964159595185">Web-lokacije se obično povezuju s Bluetooth uređajima radi značajki poput postavljanja ili sinkroniziranja niskoenergetskog lokatora, uređaja za praćenje zdravlja ili fitnessa ili male žarulje</translation> <translation id="2117655453726830283">Sljedeći slajd</translation> <translation id="2119349053129246860">Otvori u aplikaciji <ph name="APP" /></translation> @@ -1489,6 +1489,7 @@ <translation id="2252017960592955005">Zaštita prilikom pregleda (beta)</translation> <translation id="225240747099314620">Omogući identifikatore za zaštićeni sadržaj (možda će trebati ponovo pokrenuti računalo)</translation> <translation id="2253318212986772520">Nije moguće dohvatiti PPD za <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Odaberite što će se dijeliti s aplikacijom <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Uređaj je zaključan za neku drugu domenu ili način rada.</translation> <translation id="2255317897038918278">Microsoftovo vremensko označavanje</translation> <translation id="2256115617011615191">Ponovo pokreni sad</translation> @@ -1835,6 +1836,7 @@ <translation id="2532589005999780174">Način visokog kontrasta</translation> <translation id="2533649878691950253">Web-lokaciji je blokiran pristup vašoj točnoj lokaciji jer to obično ne dopuštate</translation> <translation id="253434972992662860">&Pauziraj</translation> +<translation id="253498598929009420">Web-lokacija će moći vidjeti sadržaj vašeg zaslona</translation> <translation id="253557089021624350">Broj aktivnosti održavanja</translation> <translation id="2535799430745250929">Ne postoji nijedna mobilna mreža</translation> <translation id="2537395079978992874">Web-lokacija <ph name="ORIGIN" /> može pregledavati i uređivati sljedeće datoteke i mape</translation> @@ -3257,7 +3259,6 @@ <translation id="380329542618494757">Ime</translation> <translation id="3803345858388753269">Kvaliteta videoreprodukcije</translation> <translation id="3803367742635802571">Web-lokacije koje posjećujete mogu prestati funkcionirati kao što je predviđeno</translation> -<translation id="3803583375545057606">Zamoli roditelja da omogući ovo proširenje?</translation> <translation id="380408572480438692">Omogućavanje prikupljanja podatka o izvedbi pomoći će Googleu da vremenom poboljša sustav. Podaci se ne šalju dok ne podnesete izvješće o povratnim informacijama (Alt+Shift+I) i uključite podatke o izvedbi. Uvijek se možete vratiti na taj zaslon i onemogućiti prikupljanje.</translation> <translation id="3807249107536149332">Proširenje <ph name="EXTENSION_NAME" /> (ID proširenja "<ph name="EXTENSION_ID" />") nije dopušteno na zaslonu za prijavu.</translation> <translation id="3807747707162121253">&Odustani</translation> @@ -3679,7 +3680,6 @@ <translation id="4169535189173047238">Nemoj dopustiti</translation> <translation id="4170314459383239649">Izbriši pri izlazu</translation> <translation id="417096670996204801">Odabir profila</translation> -<translation id="41725145403849567">Zamoli roditelja da doda ovo proširenje?</translation> <translation id="4175137578744761569">Svijetloljubičasta i bijela</translation> <translation id="4175737294868205930">Stalna pohrana</translation> <translation id="4176463684765177261">Onemogućeno</translation> @@ -5092,7 +5092,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN mora imati najmanje jedan znak}one{PIN mora imati najmanje # znak}few{PIN mora imati najmanje # znaka}other{PIN mora imati najmanje # znakova}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> zahtijeva da se odmah povežete s Wi-Fijem i preuzmete ažuriranje. Možete ga preuzeti i putem veze s ograničenim prometom (moguća je naplata naknada).</translation> <translation id="5476016146231427848">Ponovo pokrenite uređaj da biste koristili Steam na Chromebooku</translation> -<translation id="5476897066181964657">Roditelj ili skrbnik mora ti dopustiti da dodaš ovo proširenje</translation> <translation id="5481273127572794904">Nije dopušteno automatsko preuzimanje više datoteka</translation> <translation id="5481941284378890518">Dodaj pisače u blizini</translation> <translation id="5483785310822538350">Opozovi pristup datotekama i uređaju</translation> @@ -5189,7 +5188,6 @@ <translation id="5555639311269196631">Isključi žarišnu točku</translation> <translation id="5556459405103347317">Ponovno učitaj</translation> <translation id="5558129378926964177">Zoom &In (Povećaj)</translation> -<translation id="5558247502209241936">Omogući otvaranje aplikacije u prozoru</translation> <translation id="5559311991468302423">Brisanje adrese</translation> <translation id="55601339223879446">Prilagodba granica radne površine unutar zaslona</translation> <translation id="5561162485081632007">Otkriva opasne događaje i upozorava vas na njih kada se dogode</translation> @@ -6012,7 +6010,6 @@ <translation id="6305607932814307878">Globalna pravila:</translation> <translation id="6305702903308659374">Zadrži normalnu glasnoću reprodukcije čak i kad ChromeVox govori</translation> <translation id="6305909198255586420">Instalirajte putem primarnog profila</translation> -<translation id="630750887748244481">Tvoj je roditelj isključio postavku Dopuštenja za web-lokacije, aplikacije i proširenja za Chrome. Dodavanje tog proširenja nije dopušteno.</translation> <translation id="6307990684951724544">Sustav je zauzet</translation> <translation id="6308493641021088955">Prijavu pruža <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Spremi ve&zu kao...</translation> @@ -6842,7 +6839,6 @@ <translation id="7025190659207909717">Upravljanje podatkovnom uslugom za mobilne uređaje</translation> <translation id="7025895441903756761">Sigurnost i privatnost</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Otvori sve u &anonimnom prozoru}=1{Otvori u &anonimnom prozoru}one{Otvori sve ({COUNT}) u &anonimnom prozoru}few{Otvori sve ({COUNT}) u &anonimnom prozoru}other{Otvori sve ({COUNT}) u &anonimnom prozoru}}</translation> -<translation id="7028057921476386252">Roditelj ili skrbnik mora ti dopustiti da omogućiš ovo proširenje</translation> <translation id="7029307918966275733">Crostini nije instaliran. Instalirajte Crostini da biste vidjeli bonuse.</translation> <translation id="7029809446516969842">Zaporke</translation> <translation id="7030304022046916278">Šalje URL-ove sigurnom pregledavanju na provjeru</translation> @@ -8221,7 +8217,6 @@ <translation id="8251509999076836464">Uparivanje s uređajem <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Sličica je uklonjena.</translation> <translation id="825238165904109940">Uvijek prikaži cijele URL-ove</translation> -<translation id="8252538334423261825">Nije moguće dodati proširenje</translation> <translation id="8252569384384439529">Prijenos...</translation> <translation id="8253198102038551905">Kliknite "+" za proširenje svojstava mreže</translation> <translation id="8255212965098517578">Nedavne fotografije, obavijesti i aplikacije</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 2cafc54..3825e51a 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1339,7 +1339,6 @@ <translation id="2114820389966440614">„A közelmúlt legjobb pillanatai“ és más emlékek megtekintése itt</translation> <translation id="2114896190328250491">A fotót készítette: <ph name="NAME" /></translation> <translation id="2114995631896158695">Nincs SIM-kártya az eszközben</translation> -<translation id="2116020356255810305">Alkalmazás indításkor történő elindulásának engedélyezése</translation> <translation id="2116619964159595185">A webhelyek általában olyan funkciók használatához csatlakoznak Bluetooth-eszközökhöz, mint például a kevés energiát fogyasztó jelzők, egészségügyi vagy sportsegédeszközök, illetve okosizzók beállítása és szinkronizálása.</translation> <translation id="2117655453726830283">Következő dia</translation> <translation id="2119349053129246860">Megnyitás a következőben: <ph name="APP" /></translation> @@ -3271,7 +3270,6 @@ <translation id="380329542618494757">Név</translation> <translation id="3803345858388753269">Videóminőség</translation> <translation id="3803367742635802571">Előfordulhat, hogy az Ön által felkeresett webhelyek nem rendeltetésszerűen működnek</translation> -<translation id="3803583375545057606">Szeretnéd megkérni a szülődet a bővítmény engedélyezésére?</translation> <translation id="380408572480438692">A teljesítményadatok gyűjtésének engedélyezésével hozzásegíti a Google-t a rendszer továbbfejlesztéséhez. A rendszer nem küld adatokat, amíg Ön nem nyújt be visszajelzést (Alt-Shift-I), illetve nem mellékeli a teljesítményadatokat. Bármikor visszatérhet erre a képernyőre a gyűjtés letiltásához.</translation> <translation id="3807249107536149332">A(z) <ph name="EXTENSION_NAME" /> (bővítményazonosító: „<ph name="EXTENSION_ID" />”) használata nem engedélyezett a bejelentkezési képernyőn.</translation> <translation id="3807747707162121253">&Törlés</translation> @@ -3692,7 +3690,6 @@ <translation id="4169535189173047238">Tiltás</translation> <translation id="4170314459383239649">Törlés kilépéskor</translation> <translation id="417096670996204801">Profil választása</translation> -<translation id="41725145403849567">Szeretnéd megkérni a szülődet a bővítmény hozzáadására?</translation> <translation id="4175137578744761569">Világoslila-fehér</translation> <translation id="4175737294868205930">Állandó tárhely</translation> <translation id="4176463684765177261">Letiltva</translation> @@ -5107,7 +5104,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{A PIN-kódnak legalább egy karakterből kell állnia}other{A PIN-kódnak legalább # karakterből kell állnia}}</translation> <translation id="5474859849784484111">A(z) <ph name="MANAGER" /> megköveteli, hogy eszközével most Wi-Fi-hálózathoz csatlakozzon, és letöltse a szükséges frissítést. A letöltés forgalomkorlátos kapcsolaton is végrehajtható (ez esetben a szolgáltató díjat számíthat fel).</translation> <translation id="5476016146231427848">A Steam Chromebookon való használatához indítsa újra eszközét</translation> -<translation id="5476897066181964657">Valamelyik szülődnek vagy gyámodnak jóvá kell hagynia számodra ennek a bővítménynek a hozzáadását</translation> <translation id="5481273127572794904">Nem tölthetnek le automatikusan egyszerre több fájlt</translation> <translation id="5481941284378890518">Közeli nyomtatók hozzáadása</translation> <translation id="5483785310822538350">Fájl- és eszközhozzáférés visszavonása</translation> @@ -5204,7 +5200,6 @@ <translation id="5555639311269196631">Hotspot kikapcsolása</translation> <translation id="5556459405103347317">Újratöltés</translation> <translation id="5558129378926964177">&Nagyítás</translation> -<translation id="5558247502209241936">Alkalmazás ablakban való megnyitásának engedélyezése</translation> <translation id="5559311991468302423">Cím törlése</translation> <translation id="55601339223879446">Beállíthatja az asztal határait a kijelzőn</translation> <translation id="5561162485081632007">Már a bekövetkezésük idején észleli a veszélyes eseményeket, és figyelmezteti Önt rájuk.</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">Globális irányelvek:</translation> <translation id="6305702903308659374">Lejátszás normál hangerőn akkor is, ha a ChromeVox beszél</translation> <translation id="6305909198255586420">Kérjük, az elsődleges profiljával végezze el a telepítést</translation> -<translation id="630750887748244481">Szülőd kikapcsolta a Chrome „Engedélyek webhelyek, alkalmazások és bővítmények számára” beállítását. A bővítmény hozzáadása nem engedélyezett.</translation> <translation id="6307990684951724544">A rendszer foglalt</translation> <translation id="6308493641021088955">A bejelentkezést biztosítja: <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Link mentése &másként...</translation> @@ -6857,7 +6851,6 @@ <translation id="7025190659207909717">Mobil adatátviteli szolgáltatás kezelése</translation> <translation id="7025895441903756761">Biztonság és adatvédelem</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Összes megnyitása &inkognitó ablakban}=1{Megnyitás &inkognitó ablakban}other{Összes ({COUNT}) megnyitása &inkognitó ablakban}}</translation> -<translation id="7028057921476386252">Valamelyik szülődnek vagy gyámodnak jóvá kell hagynia számodra ennek a bővítménynek az engedélyezését</translation> <translation id="7029307918966275733">A Crostini nincs telepítve. Telepítse a Crostinit a fájl megtekintéséhez.</translation> <translation id="7029809446516969842">Jelszavak</translation> <translation id="7030304022046916278">Elküldi az URL-eket a Biztonságos Böngészésnek ellenőrzésre.</translation> @@ -8235,7 +8228,6 @@ <translation id="8251509999076836464">Folyamatban van a következőhöz való párosítás: <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Indexkép eltávolítva.</translation> <translation id="825238165904109940">Mindig mutassa a teljes URL-eket</translation> -<translation id="8252538334423261825">A bővítményt nem lehet hozzáadni</translation> <translation id="8252569384384439529">Feltöltés…</translation> <translation id="8253198102038551905">Kattintson a „+” gombra a hálózati tulajdonságok lekéréséhez.</translation> <translation id="8255212965098517578">Friss fotók, értesítések és alkalmazások</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 27b8d4f..3520bf9 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Բաց թողնելու համար սեղմեք ESCAPE (միայն ոչ պաշտոնական կառույցներ):</translation> <translation id="1093457606523402488">Տեսանելի ցանցեր՝</translation> <translation id="1095761715416917775">Համոզվեք, որ ձեր համաժամացված տվյալները միշտ հասանելի են ձեզ</translation> +<translation id="1095879482467973146">Google գաղտնաբառերի կառավարչի վեբ տարբերակը</translation> <translation id="109647177154844434">Parallels Desktop-ը ապատեղադրելու դեպքում ձեր Windows-ի պատկերը, այդ թվում՝ դրա հավելվածները, կարգավորումները և տվյալները կջնջվեն։ Շարունակե՞լ։</translation> <translation id="1097016918605049747">Չհաջողվեց թարգմանել այս էջը</translation> <translation id="1097658378307015415">Մինչ մուտք գործելը` <ph name="NETWORK_ID" /> ցանցն ակտիվացնելու համար մտեք որպես Հյուր</translation> @@ -1329,7 +1330,6 @@ <translation id="2114820389966440614">Ցույց տալ «Նոր ընտրանի» հիշողությունն ու այլ հիշողություններ այստեղ</translation> <translation id="2114896190328250491">Լուսանկարի հեղինակ՝ <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM քարտ տեղադրված չէ</translation> -<translation id="2116020356255810305">Միացնել հավելվածի՝ մեկնարկի ժամանակ գործարկումը</translation> <translation id="2116619964159595185">Կայքերը սովորաբար միանում են Bluetooth սարքերին՝ առողջության հետագծիչ, էներգախնայող փարոս, խելացի լամպ կարգավորելու/համաժամացնելու և նման այլ գործառույթների համար</translation> <translation id="2117655453726830283">Հաջորդ սլայդը</translation> <translation id="2119349053129246860">Բացել <ph name="APP" /> հավելվածում</translation> @@ -1489,6 +1489,7 @@ <translation id="2252017960592955005">Անվտանգ դիտում (բետա)</translation> <translation id="225240747099314620">Օգտագործել նույնացուցիչները պաշտպանված բովանդակության համար (կարող է անհրաժեշտ լինել, որ համակարգիչը վերագործարկվի)</translation> <translation id="2253318212986772520">Չհաջողվեց բեռնել <ph name="PRINTER_NAME" /> տպիչի PPD ֆայլը։</translation> +<translation id="2253927598983295051">Ընտրեք՝ ինչ տվյալներով կիսվել <ph name="APP_NAME" /> հավելվածի հետ</translation> <translation id="2255077166240162850">Այս սարքն արդեն կողպվել է այլ տիրույթում կամ ռեժիմում։</translation> <translation id="2255317897038918278">Microsoft ժամադրոշմ</translation> <translation id="2256115617011615191">Վերագործարկել հիմա</translation> @@ -1834,6 +1835,7 @@ <translation id="2532589005999780174">Բարձր ցայտունության ռեժիմ</translation> <translation id="2533649878691950253">Ձեր ճշգրիտ տեղադրության տվյալների հասանելիությունն արգելափակված է այս կայքի համար, քանի որ դուք սովորաբար ընտրում եք նման կարգավորումներ։</translation> <translation id="253434972992662860">&Դադարեցնել</translation> +<translation id="253498598929009420">Կայքը կկարողանա տեսնել ձեր էկրանի բովանդակությունը</translation> <translation id="253557089021624350">Keepalive կապակցումների քանակը</translation> <translation id="2535799430745250929">Բջջային ցանց չկա</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> կայքը կարող է դիտել և փոփոխել հետևյալ ֆայլերն ու պանակները</translation> @@ -3256,7 +3258,6 @@ <translation id="380329542618494757">Անուն</translation> <translation id="3803345858388753269">Տեսանյութի որակը</translation> <translation id="3803367742635802571">Կայքերը, որոնք այցելում եք, հնարավոր է, դադարեն աշխատել նախատեսված ձևով</translation> -<translation id="3803583375545057606">Ծնողից խնդրե՞լ այս հավելումը միացնելու թույլտվություն</translation> <translation id="380408572480438692">Միացնելով կատարողականության տվյալների հավաքումը՝ Google-ին կօգնեք ժամանակի ընթացքում բարելավել համակարգը: Ոչ մի տվյալ չի ուղարկվի, մինչև դուք չուղարկեք արձագանքը (Alt-Shift-I) և չներառեք կատարողականության տվյալները: Ցանկացած պահի կարող եք վերադառնալ այս էկրանին և անջատել տվյալների հավաքումը:</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> ընդլայնումը (ID-ն՝ «<ph name="EXTENSION_ID" />») չի թույլատրվում մուտքի էկրանին։</translation> <translation id="3807747707162121253">&Չեղարկել</translation> @@ -3678,7 +3679,6 @@ <translation id="4169535189173047238">Չեղարկել</translation> <translation id="4170314459383239649">Մաքրել ելնելիս</translation> <translation id="417096670996204801">Ընտրեք պրոֆիլ</translation> -<translation id="41725145403849567">Ծնողից խնդրե՞լ այս հավելումն ավելացնելու թույլտվություն</translation> <translation id="4175137578744761569">Բաց մանուշակագույն և սպիտակ</translation> <translation id="4175737294868205930">Հիմնական հիշողություն</translation> <translation id="4176463684765177261">Անջատված է</translation> @@ -5094,7 +5094,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN կոդը պետք է կազմված լինի առնվազն 1 նիշից}one{PIN կոդը պետք է կազմված լինի առնվազն # նիշից}other{PIN կոդը պետք է կազմված լինի առնվազն # նիշից}}</translation> <translation id="5474859849784484111">Տիրույթի (<ph name="MANAGER" />) կանոնների համաձայն՝ այժմ անհրաժեշտ է միանալ Wi-Fi-ին և ներբեռնել թարմացումը։ Ինչպես նաև կարող եք օգտվել վճարովի կապից (կարող է գումար գանձվել)։</translation> <translation id="5476016146231427848">Steam-ը Chromebook-ում օգտագործելու համար վերագործարկեք ձեր սարքը</translation> -<translation id="5476897066181964657">Այս ընդլայնումն ավելացնելու համար դուք պետք է ունենաք ծնողի կամ խնամակալի թույլտվությունը</translation> <translation id="5481273127572794904">Չի թույլատրվում ավտոմատ ներբեռնել մի քանի ֆայլ</translation> <translation id="5481941284378890518">Ավելացնել մոտակա տպիչներ</translation> <translation id="5483785310822538350">Արգելել ֆայլերի և սարքերի օգտագործումը</translation> @@ -5191,7 +5190,6 @@ <translation id="5555639311269196631">Անջատել թեժ կետը</translation> <translation id="5556459405103347317">Վերաբեռնել</translation> <translation id="5558129378926964177">Խոշո&րացնել</translation> -<translation id="5558247502209241936">Միացնել հավելվածի՝ պատուհանում բացումը</translation> <translation id="5559311991468302423">Հասցեի ջնջում</translation> <translation id="55601339223879446">Կարգավորեք աշխատասեղանի սահմանագծերը տվյալ էկրանում</translation> <translation id="5561162485081632007">Հայտնաբերում է վտանգավոր իրադարձություններն ու զգուշացնում դրանց մասին</translation> @@ -6014,7 +6012,6 @@ <translation id="6305607932814307878">Գլոբալ քաղաքականություն՝</translation> <translation id="6305702903308659374">Նվագարկել սովորական ձայնով, երբ ChromeVox-ը միացված է</translation> <translation id="6305909198255586420">Տեղադրեք ձեր հիմնական պրոֆիլի միջոցով</translation> -<translation id="630750887748244481">Ձեր ծնողն անջատել է «Թույլտվություններ կայքերի, հավելվածների և ընդլայնումների համար» պարամետրը Chrome-ում։ Այս ընդլայնումը չի թույլատրվում ավելացնել։</translation> <translation id="6307990684951724544">Համակարգը զբաղված է</translation> <translation id="6308493641021088955">Մուտք «<ph name="EXTENSION_NAME" />» ընդլայնման միջոցով</translation> <translation id="6308937455967653460">Պահել հղ&ումը որպես…</translation> @@ -6842,7 +6839,6 @@ <translation id="7025190659207909717">Բջջային ցանցերում տվյալների փոխանցման կառավարում</translation> <translation id="7025895441903756761">Անվտանգություն և գաղտնիություն</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Բացել բոլորը &ինկոգնիտո պատուհանում}=1{Բացել &ինկոգնիտո պատուհանում}one{Բացել բոլորը ({COUNT}) &ինկոգնիտո պատուհանում}other{Բացել բոլորը ({COUNT}) &ինկոգնիտո պատուհանում}}</translation> -<translation id="7028057921476386252">Այս ընդլայնումը միացնելու համար դուք պետք է ունենաք ծնողի կամ խնամակալի թույլտվությունը</translation> <translation id="7029307918966275733">Crostini-ն տեղադրված չէ։ Տեղադրեք Crostini-ն՝ բոնուսները տեսնելու համար։</translation> <translation id="7029809446516969842">Գաղտնաբառեր</translation> <translation id="7030304022046916278">Ուղարկում է URL-ները Ապահով դիտարկմանը՝ դրանք ստուգելու համար։</translation> @@ -8219,7 +8215,6 @@ <translation id="8251509999076836464">Զուգակցում «<ph name="DEVICE_NAME" />» սարքի հետ</translation> <translation id="8251578425305135684">Մանրապատկերը հեռացվել է:</translation> <translation id="825238165904109940">Միշտ ցույց տալ ամբողջական URL-ները</translation> -<translation id="8252538334423261825">Չհաջողվեց ավելացնել ընդլայնումը</translation> <translation id="8252569384384439529">Վերբեռնում...</translation> <translation id="8253198102038551905">Ցանցի հատկությունները տեսնելու համար սեղմեք «+»</translation> <translation id="8255212965098517578">Նոր լուսանկարներ, ծանուցումներ և հավելվածներ</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index cf16943..00ce5de7 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">Lihat "Highlight terbaru" dan kenangan lainnya di sini</translation> <translation id="2114896190328250491">Foto oleh <ph name="NAME" /></translation> <translation id="2114995631896158695">Tidak ada kartu SIM yang dimasukkan</translation> -<translation id="2116020356255810305">Aktifkan peluncuran aplikasi saat browser dimulai</translation> <translation id="2116619964159595185">Situs biasanya terhubung ke perangkat Bluetooth untuk fitur seperti penyiapan atau sinkronisasi beacon hemat energi, pelacak kesehatan atau kebugaran, atau bohlam lampu smart</translation> <translation id="2117655453726830283">Slide berikutnya</translation> <translation id="2119349053129246860">Buka di <ph name="APP" /></translation> @@ -1883,7 +1882,7 @@ <translation id="2561211427862644160">Lihat semua bookmark Anda di sini</translation> <translation id="2564520396658920462">Eksekusi JavaScript melalui AppleScript dinonaktifkan. Untuk mengaktifkannya, buka panel menu lalu pilih View > Developer > Allow JavaScript from Apple Events. Untuk informasi selengkapnya: https://support.google.com/chrome/?p=applescript</translation> <translation id="2564653188463346023">Pemeriksaan ejaan yang disempurnakan</translation> -<translation id="2568694057933302218">Selama dalam mode Samaran, situs tidak dapat menggunakan cookie Anda untuk melihat aktivitas penjelajahan Anda di seluruh situs. Aktivitas penjelajahan Anda tidak digunakan untuk hal-hal seperti mempersonalisasi iklan. Fitur di beberapa situs mungkin tidak berfungsi.</translation> +<translation id="2568694057933302218">Selama dalam mode Samaran, situs tidak dapat menggunakan cookie Anda untuk melihat aktivitas penjelajahan Anda di berbagai situs. Aktivitas penjelajahan Anda tidak digunakan untuk hal-hal seperti mempersonalisasi iklan. Fitur di beberapa situs mungkin tidak berfungsi.</translation> <translation id="2568774940984945469">Infobar Container</translation> <translation id="2569972178052279830">Nama Retailer</translation> <translation id="257088987046510401">Tema</translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">Nama</translation> <translation id="3803345858388753269">Kualitas Video</translation> <translation id="3803367742635802571">Situs yang Anda buka mungkin tidak berfungsi sebagaimana mestinya</translation> -<translation id="3803583375545057606">Minta orang tuamu mengaktifkan ekstensi ini?</translation> <translation id="380408572480438692">Mengaktifkan koleksi data kinerja akan membantu meningkatkan sistem sepanjang waktu. Tidak ada data yang terkirim hingga mengajukan laporan masukan (Alt-Shift-I) dan menyertakan data kinerja. Anda dapat kembali ke layar ini untuk menonaktifkan koleksi kapan saja.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ID ekstensi "<ph name="EXTENSION_ID" />") tidak diizinkan di layar login.</translation> <translation id="3807747707162121253">&Batal</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Jangan izinkan</translation> <translation id="4170314459383239649">Hapus Saat Keluar</translation> <translation id="417096670996204801">Pilih profil</translation> -<translation id="41725145403849567">Minta orang tuamu menambahkan ekstensi ini?</translation> <translation id="4175137578744761569">Ungu muda dan putih</translation> <translation id="4175737294868205930">Penyimpanan tetap</translation> <translation id="4176463684765177261">Dinonaktifkan</translation> @@ -4164,7 +4161,7 @@ <translation id="4595560905247879544">Aplikasi dan ekstensi hanya dapat diubah oleh pengelola (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4596295440756783523">Anda memiliki sertifikat pada file yang mengidentifikasi server ini</translation> <translation id="4598345735110653698">Kelola kunci sandi</translation> -<translation id="4598549027014564149">Selama dalam mode Samaran, situs tidak dapat menggunakan cookie Anda untuk melihat aktivitas penjelajahan Anda di seluruh situs, bahkan situs yang terkait. Aktivitas penjelajahan Anda tidak digunakan untuk hal-hal seperti mempersonalisasi iklan. Fitur tertentu di beberapa situs mungkin tidak berfungsi.</translation> +<translation id="4598549027014564149">Selama dalam mode Samaran, situs tidak dapat menggunakan cookie Anda untuk melihat aktivitas penjelajahan Anda di berbagai situs, bahkan situs yang terkait. Aktivitas penjelajahan Anda tidak digunakan untuk hal-hal seperti mempersonalisasi iklan. Fitur tertentu di beberapa situs mungkin tidak berfungsi.</translation> <translation id="4598556348158889687">Pengelolaan penyimpanan</translation> <translation id="4598776695426288251">Wi-Fi tersedia melalui beberapa perangkat</translation> <translation id="4600071396330666617">Jumlah saran</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN harus berisi minimal satu karakter}other{PIN harus berisi minimal # karakter}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> mengharuskan Anda terhubung ke Wi-Fi sekarang dan mendownload update. Atau, Anda dapat mendownload dengan koneksi berbayar (dapat dikenai biaya).</translation> <translation id="5476016146231427848">Mulai ulang perangkat Anda untuk menggunakan Steam di Chromebook</translation> -<translation id="5476897066181964657">Orang tua atau wali harus menyatakan bahwa kamu boleh menambahkan ekstensi ini</translation> <translation id="5481273127572794904">Tidak diizinkan mendownload otomatis beberapa file</translation> <translation id="5481941284378890518">Tambahkan Printer di Sekitar</translation> <translation id="5483785310822538350">Cabut akses perangkat dan file</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">Nonaktifkan hotspot</translation> <translation id="5556459405103347317">Muat ulang</translation> <translation id="5558129378926964177">Per&besar</translation> -<translation id="5558247502209241936">Aktifkan membuka aplikasi di jendela</translation> <translation id="5559311991468302423">Hapus alamat</translation> <translation id="55601339223879446">Menyesuaikan batas desktop Anda dalam tampilan</translation> <translation id="5561162485081632007">Mendeteksi dan memberikan peringatan terkait peristiwa berbahaya ketika terjadi</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">Kebijakan Global:</translation> <translation id="6305702903308659374">Putar dengan volume normal meskipun ChromeVox sedang berbicara</translation> <translation id="6305909198255586420">Instal menggunakan profil utama Anda</translation> -<translation id="630750887748244481">Orang tuamu telah menonaktifkan "Izin untuk situs, aplikasi, dan ekstensi" untuk Chrome. Kamu tidak diizinkan menambahkan ekstensi ini.</translation> <translation id="6307990684951724544">Sistem sibuk</translation> <translation id="6308493641021088955">Login disediakan oleh <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Simpan tau&tan sebagai...</translation> @@ -6857,7 +6851,6 @@ <translation id="7025190659207909717">Pengelolaan layanan data seluler</translation> <translation id="7025895441903756761">Keamanan dan Privasi</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Buka Semua di &Jendela Samaran}=1{Buka di &Jendela Samaran}other{Buka Semua ({COUNT}) di &Jendela Samaran}}</translation> -<translation id="7028057921476386252">Orang tua atau wali harus menyatakan bahwa kamu boleh mengaktifkan ekstensi ini</translation> <translation id="7029307918966275733">Crostini tidak diinstal. Instal Crostini untuk melihat kredit.</translation> <translation id="7029809446516969842">Sandi</translation> <translation id="7030304022046916278">Mengirimkan URL ke Safe Browsing untuk memeriksanya</translation> @@ -7920,7 +7913,7 @@ <translation id="7978412674231730200">Kunci pribadi</translation> <translation id="7978450511781612192">Tindakan ini akan membuat Anda logout dari Akun Google. Bookmark, histori, sandi, dan lainnya tidak akan disinkronkan lagi.</translation> <translation id="7980084013673500153">ID Aset: <ph name="ASSET_ID" /></translation> -<translation id="7981313251711023384">Pramuat halaman agar browsing dan menelusuri lebih cepat</translation> +<translation id="7981313251711023384">Pramuat halaman agar penjelajahan dan penelusuran jadi lebih cepat</translation> <translation id="7981662863948574132">Tampilkan pop-up EID perangkat dan Kode QR</translation> <translation id="7981670705071137488">Setelah ini, update software akan dilakukan di latar belakang. Anda dapat meninjau preferensi update di Setelan.</translation> <translation id="7982083145464587921">Reset perangkat Anda untuk memperbaiki kesalahan ini.</translation> @@ -8235,7 +8228,6 @@ <translation id="8251509999076836464">Menyambungkan ke <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Gambar kecil dihapus.</translation> <translation id="825238165904109940">Selalu Tampilkan URL Lengkap</translation> -<translation id="8252538334423261825">Tidak bisa menambahkan ekstensi</translation> <translation id="8252569384384439529">Mengupload...</translation> <translation id="8253198102038551905">Klik '+' untuk mendapatkan properti jaringan</translation> <translation id="8255212965098517578">Foto terbaru, notifikasi, dan aplikasi</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index 9f0da78..b0fb084 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -1341,7 +1341,6 @@ <translation id="2114820389966440614">Sjá „nýlega hápunkta“ og aðrar minningar hér</translation> <translation id="2114896190328250491">Mynd eftir <ph name="NAME" /></translation> <translation id="2114995631896158695">Ekkert SIM-kort sett inn</translation> -<translation id="2116020356255810305">Kveikja á að opna forrit við ræsingu</translation> <translation id="2116619964159595185">Yfirleitt tengjast vefsvæði Bluetooth-tækjum til að nota eiginleika eins og að setja upp eða samstilla lágspennuvita, heilsu- eða hreystimæli eða snjallljós</translation> <translation id="2117655453726830283">Næsta skyggna</translation> <translation id="2119349053129246860">Opna í <ph name="APP" /></translation> @@ -3273,7 +3272,6 @@ <translation id="380329542618494757">Nafn</translation> <translation id="3803345858388753269">Myndgæði</translation> <translation id="3803367742635802571">Vefsvæði sem þú skoðar gætu hætt að virka sem skyldi</translation> -<translation id="3803583375545057606">Biðja foreldri þitt um að virkja þessa viðbót?</translation> <translation id="380408572480438692">Ef söfnun afkastagagna er gerð virk hjálpar það Google að bæta kerfið með tímanum. Engin gögn eru send nema þú sendir inn skýrslu með ábendingum þínum (Alt-Shift-I) og látir gögn um afköst fylgja með. Þú getur komið aftur hingað hvenær sem er til að slökkva á gagnasöfnuninni.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (auðkenni viðbótar „<ph name="EXTENSION_ID" />“) er ekki leyfð á innskráningarskjá.</translation> <translation id="3807747707162121253">Hætta við</translation> @@ -3695,7 +3693,6 @@ <translation id="4169535189173047238">Ekki leyfa</translation> <translation id="4170314459383239649">Hreinsa við lokun</translation> <translation id="417096670996204801">Veldu prófíl</translation> -<translation id="41725145403849567">Biðja foreldri þitt um að bæta þessari viðbót við?</translation> <translation id="4175137578744761569">Ljósfjólublár og hvítur</translation> <translation id="4175737294868205930">Langtímageymsla</translation> <translation id="4176463684765177261">Óvirkt</translation> @@ -5109,7 +5106,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-númer verður að vera minnst einn stafur}one{PIN-númer verður að vera að minnst # stafur}other{PIN-númer verður að vera að minnst # stafir}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> fer fram á að þú tengist Wi-Fi núna og sækir uppfærslu. Þú getur einnig hlaðið niður með gagnamældri tengingu (gjöld kunna að eiga við).</translation> <translation id="5476016146231427848">Endurræstu tækið til að nota Steam í Chromebook</translation> -<translation id="5476897066181964657">Foreldri eða forsjáraðili verður að samþykkja að þú bætir þessari viðbót við</translation> <translation id="5481273127572794904">Mega ekki sækja margar skrár sjálfkrafa</translation> <translation id="5481941284378890518">Bæta nálægum prenturum við</translation> <translation id="5483785310822538350">Afturkalla skráa- og tækjaaðgang</translation> @@ -5206,7 +5202,6 @@ <translation id="5555639311269196631">Slökkva á heitum reit</translation> <translation id="5556459405103347317">Endurhlaða</translation> <translation id="5558129378926964177">Auka aðdrátt</translation> -<translation id="5558247502209241936">Kveikja á að opna forrit í glugga</translation> <translation id="5559311991468302423">Eyða heimilisfangi</translation> <translation id="55601339223879446">Stilla mörk skjáborðsins innan skjásins</translation> <translation id="5561162485081632007">Greinir hættuleg atvik og varar þig við þeim þegar þau eiga sér stað</translation> @@ -6032,7 +6027,6 @@ <translation id="6305607932814307878">Altæk regla:</translation> <translation id="6305702903308659374">Spila með venjulegum hljóðstyrk jafnvel þótt ChromeVox sé að tala</translation> <translation id="6305909198255586420">Settu upp með aðalprófílnum þínum</translation> -<translation id="630750887748244481">Foreldri þitt hefur slökkt á „Heimildum fyrir vefsvæði, forrit og viðbætur" fyrir Chrome. Óheimilt er að bæta þessari viðbót við.</translation> <translation id="6307990684951724544">Kerfi upptekið</translation> <translation id="6308493641021088955">Innskráning veitt af <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Vista tengil sem...</translation> @@ -6860,7 +6854,6 @@ <translation id="7025190659207909717">Stjórnun farsímagagnaþjónustu</translation> <translation id="7025895441903756761">Öryggi og persónuvernd</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Opna allt í &huliðsglugga}=1{Opna í &huliðsglugga}one{Opna allt ({COUNT}) í &huliðsglugga}other{Opna allt ({COUNT}) í &huliðsglugga}}</translation> -<translation id="7028057921476386252">Foreldri eða forsjáraðili verður að samþykkja að þú notir þessa viðbót</translation> <translation id="7029307918966275733">Crostini er ekki sett upp. Settu upp Crostini til að skoða einingar.</translation> <translation id="7029809446516969842">Aðgangsorð</translation> <translation id="7030304022046916278">Sendir vefslóðir til athugunar í öruggri vefskoðun</translation> @@ -8238,7 +8231,6 @@ <translation id="8251509999076836464">Parar við <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Smámynd fjarlægð.</translation> <translation id="825238165904109940">Sýna alltaf vefslóðir í fullri lengd</translation> -<translation id="8252538334423261825">Ekki er hægt að bæta viðbót við</translation> <translation id="8252569384384439529">Hleður inn...</translation> <translation id="8253198102038551905">Smelltu á „+“ til að fá upp neteiginleika</translation> <translation id="8255212965098517578">Nýlegar myndir, tilkynningar og forrit</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index e44c1b2..cc6e4bf 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -77,7 +77,7 @@ <translation id="1061373870045429865">Crea codice QR per questo link</translation> <translation id="1061904396131502319">È quasi ora di fare una pausa</translation> <translation id="1062407476771304334">Sostituisci</translation> -<translation id="1062628064301375934">Aiutaci a rendere il Web più privato</translation> +<translation id="1062628064301375934">Aiutaci a rendere il web più privato</translation> <translation id="1067048845568873861">Data creazione</translation> <translation id="1067661089446014701">Per maggiore sicurezza, puoi criptare le password sul dispositivo prima che vengano salvate nel tuo Account Google</translation> <translation id="1067922213147265141">Altri servizi Google</translation> @@ -1328,7 +1328,6 @@ <translation id="2114820389966440614">Vedi "Foto recenti in evidenza" e altri ricordi presenti qui</translation> <translation id="2114896190328250491">Foto di <ph name="NAME" /></translation> <translation id="2114995631896158695">Nessuna scheda SIM inserita</translation> -<translation id="2116020356255810305">Attiva l'apertura dell'app all'avvio</translation> <translation id="2116619964159595185">Solitamente i siti si connettono ai dispositivi Bluetooth per funzionalità quali la configurazione o la sincronizzazione di beacon a bassa energia, di tracker per il monitoraggio dell'attività fisica o dello stato di salute oppure di lampadine smart</translation> <translation id="2117655453726830283">Diapositiva successiva</translation> <translation id="2119349053129246860">Apri in <ph name="APP" /></translation> @@ -3207,7 +3206,7 @@ <translation id="3764753550716962406">Vuoi consentire a Google di trovare sconti disponibili in base agli articoli nel tuo carrello?</translation> <translation id="3764974059056958214">{COUNT,plural, =1{Invio di <ph name="ATTACHMENTS" /> al dispositivo <ph name="DEVICE_NAME" />}other{Invio di <ph name="ATTACHMENTS" /> al dispositivo <ph name="DEVICE_NAME" />}}</translation> <translation id="3765246971671567135">Impossibile leggere le norme offline relative alla modalità demo.</translation> -<translation id="3765696567014520261">I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti web, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili</translation> +<translation id="3765696567014520261">I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili</translation> <translation id="3766687283066842296">Scopri di più su Phone Hub</translation> <translation id="3766811143887729231"><ph name="REFRESH_RATE" /> Hz</translation> <translation id="377050016711188788">Gelato</translation> @@ -3257,7 +3256,6 @@ <translation id="380329542618494757">Nome</translation> <translation id="3803345858388753269">Qualità video</translation> <translation id="3803367742635802571">I siti che visiti potrebbero non funzionare più come previsto</translation> -<translation id="3803583375545057606">Vuoi chiedere al tuo genitore di attivare questa estensione?</translation> <translation id="380408572480438692">Se attivi la raccolta dei dati sul rendimento, consenti a Google di migliorare il sistema nel tempo. I dati vengono inviati soltanto quando presenti un rapporto di feedback (Alt+Maiusc+I) e includi dati sul rendimento. Puoi tornare in qualsiasi momento in questa schermata per disattivare la raccolta.</translation> <translation id="3807249107536149332">L'estensione <ph name="EXTENSION_NAME" /> (ID estensione "<ph name="EXTENSION_ID" />") non è consentita in una schermata di accesso.</translation> <translation id="3807747707162121253">&Annulla</translation> @@ -3679,7 +3677,6 @@ <translation id="4169535189173047238">Non consentire</translation> <translation id="4170314459383239649">Cancella all'uscita</translation> <translation id="417096670996204801">Scegli un profilo</translation> -<translation id="41725145403849567">Vuoi chiedere al tuo genitore di aggiungere questa estensione?</translation> <translation id="4175137578744761569">Lilla e bianco</translation> <translation id="4175737294868205930">Archiviazione persistente</translation> <translation id="4176463684765177261">Disattivato</translation> @@ -5092,7 +5089,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Il PIN deve contenere almeno un carattere}other{Il PIN deve contenere almeno # caratteri}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> richiede l'immediata connessione a una rete Wi-Fi per scaricare un aggiornamento. In alternativa, puoi eseguire il download tramite una connessione a consumo (potrebbero essere applicati costi).</translation> <translation id="5476016146231427848">Riavvia il dispositivo per usare Steam su Chromebook</translation> -<translation id="5476897066181964657">Un genitore o un tutore deve autorizzarti ad aggiungere questa estensione</translation> <translation id="5481273127572794904">Non possono scaricare automaticamente più file</translation> <translation id="5481941284378890518">Aggiungi stampanti nelle vicinanze</translation> <translation id="5483785310822538350">Revoca accesso a file e dispositivi</translation> @@ -5170,7 +5166,7 @@ <translation id="5544482392629385159">Dispositivo <ph name="DEVICE_INDEX" /> of <ph name="DEVICE_COUNT" />, <ph name="DEVICE_NAME" /></translation> <translation id="554517701842997186">Renderer</translation> <translation id="5545335608717746497">{NUM_TABS,plural, =1{Aggiungi scheda a gruppo}other{Aggiungi schede a gruppo}}</translation> -<translation id="5545693483061321551">I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti web, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili.</translation> +<translation id="5545693483061321551">I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili.</translation> <translation id="5546865291508181392">Trova</translation> <translation id="5548075230008247516">Tutti gli elementi deselezionati, modalità di selezione disattivata.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" e 1 altra scheda}other{"<ph name="TAB_TITLE" />" e altre # schede}}</translation> @@ -5189,7 +5185,6 @@ <translation id="5555639311269196631">Disattiva l'hotspot</translation> <translation id="5556459405103347317">Ricarica</translation> <translation id="5558129378926964177">&Ingrandisci</translation> -<translation id="5558247502209241936">Attiva l'apertura dell'app nella finestra</translation> <translation id="5559311991468302423">Elimina indirizzo</translation> <translation id="55601339223879446">Regola i bordi del desktop all'interno del display</translation> <translation id="5561162485081632007">Rileva e ti avvisa quando si verificano eventi pericolosi</translation> @@ -6012,7 +6007,6 @@ <translation id="6305607932814307878">Norme globali:</translation> <translation id="6305702903308659374">Riproduci con volume normale anche durante la lettura vocale di ChromeVox</translation> <translation id="6305909198255586420">Installa utilizzando il tuo profilo principale</translation> -<translation id="630750887748244481">Uno dei tuoi genitori ha disattivato "Autorizzazioni per siti, app ed estensioni" per Chrome. L'aggiunta di questa estensione non è consentita.</translation> <translation id="6307990684951724544">Sistema occupato</translation> <translation id="6308493641021088955">Accesso fornito da <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Salva lin&k con nome...</translation> @@ -6757,7 +6751,7 @@ <translation id="6965978654500191972">Dispositivo</translation> <translation id="6966370001499648704">Stabilisci quali telefoni utilizzi come token di sicurezza</translation> <translation id="6967430741871315905">Impossibile controllare se il dispositivo è consentito</translation> -<translation id="696780070563539690">I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su siti diversi, ad esempio per personalizzare gli annunci</translation> +<translation id="696780070563539690">I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci</translation> <translation id="6968288415730398122">Inserisci la password per configurare il blocco schermo</translation> <translation id="6969047215179982698">Disattiva Condivisione nelle vicinanze</translation> <translation id="6969216690072714773">Inserisci nuove informazioni o aggiorna informazioni esistenti da associare a questo dispositivo.</translation> @@ -6838,7 +6832,6 @@ <translation id="7025190659207909717">Gestione del servizio dati mobile</translation> <translation id="7025895441903756761">Sicurezza e privacy</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Apri tutti nella finestra di navigazione in &incognito}=1{Apri nella finestra di navigazione in &incognito}other{Apri tutti ({COUNT}) nella finestra di navigazione in &incognito}}</translation> -<translation id="7028057921476386252">Un genitore o tutore deve autorizzarti ad attivare questa estensione</translation> <translation id="7029307918966275733">Crostini non è installato. Per visualizzare i crediti, installa Crostini.</translation> <translation id="7029809446516969842">Password</translation> <translation id="7030304022046916278">Invia gli URL a Navigazione sicura per controllarli</translation> @@ -8217,7 +8210,6 @@ <translation id="8251509999076836464">Accoppiamento con <ph name="DEVICE_NAME" /> in corso…</translation> <translation id="8251578425305135684">Miniatura rimossa.</translation> <translation id="825238165904109940">Mostra sempre URL completi</translation> -<translation id="8252538334423261825">Impossibile aggiungere l'estensione</translation> <translation id="8252569384384439529">Caricamento...</translation> <translation id="8253198102038551905">Fai clic su "+" per visualizzare le proprietà della rete</translation> <translation id="8255212965098517578">App, notifiche e foto recenti</translation> @@ -8298,7 +8290,7 @@ <translation id="8322814362483282060">A questa pagina è stato impedito l'accesso al microfono.</translation> <translation id="8323167517179506834">Digita un URL</translation> <translation id="8323317289166663449">Leggere e modificare tutti i tuoi dati sul computer e su tutti i siti web</translation> -<translation id="8324784016256120271">I siti possono utilizzare i cookie per conoscere la tua attività di navigazione su siti diversi, ad esempio per personalizzare gli annunci</translation> +<translation id="8324784016256120271">I siti possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci</translation> <translation id="8325413836429495820">Non possono accedere agli appunti</translation> <translation id="8326478304147373412">PKCS #7, catena di certificati</translation> <translation id="8327386430364625757">Carattere matematico</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 4959c6d1..12fa570f 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1339,7 +1339,6 @@ <translation id="2114820389966440614">כאן ניתן לעיין באלבום 'המיטב מהזמן האחרון' ובזיכרונות נוספים</translation> <translation id="2114896190328250491">צילום מאת <ph name="NAME" /></translation> <translation id="2114995631896158695">אין כרטיס SIM</translation> -<translation id="2116020356255810305">פתיחת האפליקציה בזמן ההפעלה</translation> <translation id="2116619964159595185">בדרך כלל, אתרים מתחברים למכשירי Bluetooth כדי לתמוך בתכונות כמו הגדרת איתות Bluetooth בעל מתח נמוך או סנכרון עם איתות כזה, מכשיר מעקב אחר נתוני בריאות או כושר או נורה חכמה</translation> <translation id="2117655453726830283">לשקף הבא</translation> <translation id="2119349053129246860">פתיחה באמצעות <ph name="APP" /></translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">שם</translation> <translation id="3803345858388753269">איכות הווידאו</translation> <translation id="3803367742635802571">יכול להיות שאתרים שביקרת בהם יפסיקו לפעול כמו שצריך</translation> -<translation id="3803583375545057606">לבקש מהורה להפעיל את התוסף הזה?</translation> <translation id="380408572480438692">הפעלת האפשרות לאיסוף נתוני ביצועים תסייע ל-Google לשפר את המערכת עם הזמן. הנתונים נשלחים רק לאחר שמגישים דוח משוב (Alt-Shift-I) וכוללים את נתוני הביצועים. ניתן לחזור למסך זה כדי להשבית את איסוף הנתונים בכל עת.</translation> <translation id="3807249107536149332">לא ניתן להשתמש ב-<ph name="EXTENSION_NAME" /> (מזהה תוסף "<ph name="EXTENSION_ID" />") במסך התחברות.</translation> <translation id="3807747707162121253">&ביטול</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">לא לאפשר</translation> <translation id="4170314459383239649">מחיקה ביציאה</translation> <translation id="417096670996204801">בחירת פרופיל</translation> -<translation id="41725145403849567">לבקש מהורה להוסיף את התוסף הזה?</translation> <translation id="4175137578744761569">סגול בהיר ולבן</translation> <translation id="4175737294868205930">אחסון קבוע</translation> <translation id="4176463684765177261">מושבת</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{קוד האימות חייב להיות באורך של תו אחד לפחות}one{קוד האימות חייב להיות באורך של # תווים לפחות}two{קוד האימות חייב להיות באורך של # תווים לפחות}other{קוד האימות חייב להיות באורך של # תווים לפחות}}</translation> <translation id="5474859849784484111">כדי להיכנס אל <ph name="MANAGER" />, מתחברים עכשיו לרשת Wi-Fi ומורידים עדכון. ניתן גם לבצע את ההורדה דרך חיבור עם חיוב לפי שימוש בנתונים (עשויים לחול חיובים).</translation> <translation id="5476016146231427848">צריך להפעיל מחדש את Chromebook כדי להשתמש ב-Steam</translation> -<translation id="5476897066181964657">כדי להוסיף את התוסף הזה, עליך לקבל אישור מהורה או מאפוטרופוס</translation> <translation id="5481273127572794904">לא מורשים להוריד מספר קבצים באופן אוטומטי</translation> <translation id="5481941284378890518">הוספת מדפסות קרובות</translation> <translation id="5483785310822538350">ביטול גישה לקבצים ולמכשירים</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">כיבוי הנקודה לשיתוף אינטרנט</translation> <translation id="5556459405103347317">טעינה מחדש</translation> <translation id="5558129378926964177">הת&קרבות</translation> -<translation id="5558247502209241936">פתיחת האפליקציה בחלון</translation> <translation id="5559311991468302423">מחיקת הכתובת</translation> <translation id="55601339223879446">שינוי גבולות שולחן העבודה שלך בצג</translation> <translation id="5561162485081632007">מזהה אירועים מסוכנים כשהם מתרחשים ומזהיר אותך על כך</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">מדיניות גלובלית:</translation> <translation id="6305702903308659374">הפעלה בעוצמת שמע רגילה גם אם מכשיר ה-ChromeVox מקריא</translation> <translation id="6305909198255586420">יש לבצע את ההתקנה עם הפרופיל הראשי</translation> -<translation id="630750887748244481">ההגדרה 'הרשאות לאתרים, לאפליקציות ולתוספים' הושבתה ב-Chrome על ידי ההורה שלך. ההוספה של התוסף הזה אסורה.</translation> <translation id="6307990684951724544">המערכת עמוסה</translation> <translation id="6308493641021088955">הכניסה מבוצעת בעזרת <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">שמירת קישור& בשם...</translation> @@ -6861,7 +6855,6 @@ <translation id="7025190659207909717">ניהול שירות של נתונים סלולריים</translation> <translation id="7025895441903756761">אבטחה ופרטיות</translation> <translation id="7027258625819743915">{COUNT,plural, =0{פתיחת כול הכתובות בחלון &אנונימי}=1{פתיחה בחלון &אנונימי}one{פתיחת כול הכתובות ({COUNT}) בחלון &אנונימי}two{פתיחת כול הכתובות ({COUNT}) בחלון &אנונימי}other{פתיחת כול הכתובות ({COUNT}) בחלון &אנונימי}}</translation> -<translation id="7028057921476386252">כדי להפעיל את התוסף הזה, עליך לקבל אישור מהורה או מאפוטרופוס</translation> <translation id="7029307918966275733">Crostini לא מותקן. יש להתקין את Crostini כדי להציג קרדיטים.</translation> <translation id="7029809446516969842">סיסמאות</translation> <translation id="7030304022046916278">שליחת כתובות URL לבדיקה על ידי 'גלישה בטוחה'</translation> @@ -8241,7 +8234,6 @@ <translation id="8251509999076836464">מתבצעת התאמה ל-<ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">התמונה הממוזערת הוסרה.</translation> <translation id="825238165904109940">הצגה של כתובות URL מלאות בכל המקרים</translation> -<translation id="8252538334423261825">אי אפשר להוסיף את התוסף</translation> <translation id="8252569384384439529">ההעלאה מתבצעת...</translation> <translation id="8253198102038551905">יש ללחוץ על '+' כדי לקבל מאפייני רשת</translation> <translation id="8255212965098517578">התמונות, ההתראות והאפליקציות מהזמן האחרון</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 789641a5d..14333a66 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -1325,7 +1325,6 @@ <translation id="2114820389966440614">「最近のハイライト」や他の思い出をここで見ることができます</translation> <translation id="2114896190328250491">撮影者: <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM カードが挿入されていません</translation> -<translation id="2116020356255810305">起動時にアプリを開く</translation> <translation id="2116619964159595185">Bluetooth Low Energy ビーコン、ヘルス トラッカー、フィットネス トラッカー、スマート電球の設定や同期などの機能に対応するために、多くのサイトは Bluetooth デバイスに接続します</translation> <translation id="2117655453726830283">次のスライド</translation> <translation id="2119349053129246860"><ph name="APP" /> で開く</translation> @@ -3250,7 +3249,6 @@ <translation id="380329542618494757">名前</translation> <translation id="3803345858388753269">画質</translation> <translation id="3803367742635802571">アクセスするサイトが想定どおりに機能しなくなる可能性があります</translation> -<translation id="3803583375545057606">この拡張機能を有効にするよう、保護者にリクエストしますか?</translation> <translation id="380408572480438692">パフォーマンス データの収集を有効にすると、Google によるシステムの改善に役立てることができます。フィードバック レポートを作成(Alt-Shift-I)してパフォーマンス データを追加するまでは、データは送信されません。いつでもこの画面に戻って、データの収集を無効にできます。</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" />(拡張機能 ID「<ph name="EXTENSION_ID" />」)はログイン画面ではインストールできません。</translation> <translation id="3807747707162121253">キャンセル(&C)</translation> @@ -3672,7 +3670,6 @@ <translation id="4169535189173047238">許可しない</translation> <translation id="4170314459383239649">終了時に削除</translation> <translation id="417096670996204801">プロフィールを選択してください</translation> -<translation id="41725145403849567">この拡張機能を追加するよう、保護者にリクエストしますか?</translation> <translation id="4175137578744761569">明るい紫と白</translation> <translation id="4175737294868205930">永続的ストレージ</translation> <translation id="4176463684765177261">停止中</translation> @@ -5082,7 +5079,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN は 1 文字以上で入力してください}other{PIN は # 文字以上で入力してください}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> が、アップデートを今すぐダウンロードするよう求めています。Wi-Fi に接続するか、現在の従量制接続でのダウンロードを許可してください(通信料が発生することがあります)。</translation> <translation id="5476016146231427848">Steam on Chromebook を使用するには、デバイスを再起動してください</translation> -<translation id="5476897066181964657">この拡張機能を追加することを保護者に承諾してもらう必要があります</translation> <translation id="5481273127572794904">複数のファイルの自動ダウンロードを許可しないサイト</translation> <translation id="5481941284378890518">近くのプリンタを追加</translation> <translation id="5483785310822538350">ファイルとデバイスのアクセスを取り消す</translation> @@ -5179,7 +5175,6 @@ <translation id="5555639311269196631">アクセス ポイントをオフにする</translation> <translation id="5556459405103347317">再読み込み</translation> <translation id="5558129378926964177">拡大(&I)</translation> -<translation id="5558247502209241936">ウィンドウでアプリを開く</translation> <translation id="5559311991468302423">アドレスを削除</translation> <translation id="55601339223879446">ディスプレイ内のデスクトップの境界線を調整します</translation> <translation id="5561162485081632007">危険なイベントの発生を検出して警告します</translation> @@ -6005,7 +6000,6 @@ <translation id="6305607932814307878">グローバル ポリシー:</translation> <translation id="6305702903308659374">ChromeVox の読み上げ中も通常の音量で再生する</translation> <translation id="6305909198255586420">メインのプロファイルを使用してインストールしてください</translation> -<translation id="630750887748244481">保護者が Chrome の「サイト、アプリ、拡張機能の権限」をオフにしました。この拡張機能は追加できません。</translation> <translation id="6307990684951724544">システムがビジー状態です</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> によるログイン</translation> <translation id="6308937455967653460">名前を付けてリンク先を保存(&K)...</translation> @@ -6829,7 +6823,6 @@ <translation id="7025190659207909717">モバイル データ サービスの管理</translation> <translation id="7025895441903756761">セキュリティとプライバシー</translation> <translation id="7027258625819743915">{COUNT,plural, =0{すべてをシークレット ウィンドウで開く(&I)}=1{シークレット ウィンドウで開く(&I)}other{すべて({COUNT} 個)をシークレット ウィンドウで開く(&I)}}</translation> -<translation id="7028057921476386252">この拡張機能を有効にすることを保護者に承諾してもらう必要があります</translation> <translation id="7029307918966275733">Crostini はインストールされていません。クレジットを表示するには Crostini をインストールしてください。</translation> <translation id="7029809446516969842">パスワード</translation> <translation id="7030304022046916278">セーフ ブラウジングに URL を送信して安全性を確認します</translation> @@ -8206,7 +8199,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> とペア設定</translation> <translation id="8251578425305135684">サムネイルを削除しました。</translation> <translation id="825238165904109940">URL 全体を常に表示</translation> -<translation id="8252538334423261825">拡張機能を追加できません</translation> <translation id="8252569384384439529">アップロードしています...</translation> <translation id="8253198102038551905">ネットワークのプロパティを表示するには [+] をクリック</translation> <translation id="8255212965098517578">最近の写真、通知、アプリ</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index b595881..282fbca 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -1328,7 +1328,6 @@ <translation id="2114820389966440614">გაეცანით „ბოლოდროინდელ ციმებსა“ და სხვა მოგონებებს აქ</translation> <translation id="2114896190328250491">ფოტოს ავტორი: <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM ბარათი ჩასმული არ არის</translation> -<translation id="2116020356255810305">სისტემის გაშვებისას აპის გახსნის ჩართვა</translation> <translation id="2116619964159595185">როგორც წესი, საიტები Bluetooth მოწყობილობებს უკავშირდება ისეთი ფუნქციების უზრუნველსაყოფად, როგორიცაა, მაგალითად, დაბალი ენერგომოხმარების შუქურის, ჯანმრთელობისა თუ ფიტნესის აღმნუსხველების ან გონიერი განათების ნათურების დაყენება/სინქრონიზაცია</translation> <translation id="2117655453726830283">შემდეგი სლაიდი</translation> <translation id="2119349053129246860"><ph name="APP" />-ში გახსნა</translation> @@ -3257,7 +3256,6 @@ <translation id="380329542618494757">სახელი</translation> <translation id="3803345858388753269">ვიდეოს ხარისხი</translation> <translation id="3803367742635802571">საიტებმა, რომლებსაც სტუმრობთ, შესაძლოა, აღარ იმუშაოს დანიშნულებისამებრ</translation> -<translation id="3803583375545057606">გსურთ, ვთხოვოთ თქვენს მშობელს ამ გაფართოების ჩართვა?</translation> <translation id="380408572480438692">ეფექტურობის მონაცემების შეგროვების ჩართვის შემთხვევაში თქვენ დაეხმარებით Google-ს სისტემის გაუმჯობესებაში. მონაცემები არ გაიგზავნება, სანამ არ გაგზავნით შეფასების მოხსენებას (Alt-Shift-I) ეფექტურობის მონაცემებით. შეგიძლიათ ნებისმიერ დროს გამორთოთ შეგროვების ფუნქცია ამ ფანჯარაში.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (გაფართოების ID „<ph name="EXTENSION_ID" />“) არ არის ნებადართული შესვლის ეკრანზე.</translation> <translation id="3807747707162121253">&გაუქმება</translation> @@ -3679,7 +3677,6 @@ <translation id="4169535189173047238">აკრძალვა</translation> <translation id="4170314459383239649">გასუფთავება გასვლისას</translation> <translation id="417096670996204801">აირჩიეთ პროფილი</translation> -<translation id="41725145403849567">გსურთ, ვთხოვოთ თქვენს მშობელს ამ გაფართოების დამატება?</translation> <translation id="4175137578744761569">ღია მეწამული და თეთრი</translation> <translation id="4175737294868205930">მუდმივი მეხსიერება</translation> <translation id="4176463684765177261">გამორთული</translation> @@ -5092,7 +5089,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-კოდი უნდა შეიცავდეს მინიმუმ 1 სიმბოლოს}other{PIN-კოდი უნდა შეიცავდეს მინიმუმ # სიმბოლოს}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> საჭიროებს Wi-Fi ქსელთან დაკავშირებას განახლების ჩამოსატვირთად. სურვილისამებრ, ჩამოტვირთვა შეგიძლიათ ლიმიტირებული კავშირით (შეიძლება დაკავშირებული იყოს ხარჯებთან).</translation> <translation id="5476016146231427848">Steam on Chromebook რომ გამოიყენოთ, გადატვირთეთ თქვენი მოწყობილობა</translation> -<translation id="5476897066181964657">მშობელმა ან მეურვემ უნდა დაადასტუროს, რომ ამ გაფართოების დამატება შეგიძლიათ</translation> <translation id="5481273127572794904">რამდენიმე ფაილის ავტომატურად ჩამოტვირთვა დაუშვებელია</translation> <translation id="5481941284378890518">ახლომახლო პრინტერების დამატება</translation> <translation id="5483785310822538350">ფაილებსა და მოწყობილობებზე წვდომის გაუქმება</translation> @@ -5189,7 +5185,6 @@ <translation id="5555639311269196631">უსადენო ქსელის გამორთვა</translation> <translation id="5556459405103347317">ხელახლა ჩატვირთვა</translation> <translation id="5558129378926964177">მასშტაბის &გადიდება</translation> -<translation id="5558247502209241936">აპის ფანჯარაში გახსნის ჩართვა</translation> <translation id="5559311991468302423">მისამართის წაშლა</translation> <translation id="55601339223879446">ეკრანის ფარგლებში თქვენი დესკტოპის საზღვრების დარეგულირება</translation> <translation id="5561162485081632007">აღმოაჩენს სახიფათო მოვლენებს და გაგაფრთხილებთ მათ შესახებ</translation> @@ -6015,7 +6010,6 @@ <translation id="6305607932814307878">გლობალური წესები:</translation> <translation id="6305702903308659374">ჩვეულებრივ ხმაზე დაკვრა, როცა ChromeVox საუბრობს</translation> <translation id="6305909198255586420">შეასრულეთ ინსტალაცია თქვენი ძირითადი პროფილის მეშვეობით</translation> -<translation id="630750887748244481">თქვენმა მშობელმა გამორთო „ნებართვები საიტებისთვის, აპებისა და გაფართოებებისთვის“ Chrome-ისთვის. ამ გაფართოების დამატება დაშვებული არ არის.</translation> <translation id="6307990684951724544">სისტემა დაკავებულია</translation> <translation id="6308493641021088955">შესვლას უზრუნველყოფს <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">ბმულ&ის შენახვა, როგორც…</translation> @@ -6841,7 +6835,6 @@ <translation id="7025190659207909717">მობილური მონაცემების სერვისის მართვა</translation> <translation id="7025895441903756761">უსაფრთხოება და კონფიდენციალურობა</translation> <translation id="7027258625819743915">{COUNT,plural, =0{ყველას &ინკოგნიტო ფანჯარაში გახსნა}=1{&ინკოგნიტო ფანჯარაში გახსნა}other{{COUNT}-ვეს &ინკოგნიტო ფანჯარაში გახსნა}}</translation> -<translation id="7028057921476386252">მშობელმა ან მეურვემ უნდა დაადასტუროს, რომ ამ გაფართოების ჩართვა შეგიძლიათ</translation> <translation id="7029307918966275733">Crostini არ არის დაინსტალირებული. გთხოვთ, დააინსტალიროთ Crostini, რათა იხილოთ კრედიტები.</translation> <translation id="7029809446516969842">პაროლები</translation> <translation id="7030304022046916278">URL-ები შესამოწმებლად გაეგზავნება Safe Browsing-ს</translation> @@ -8218,7 +8211,6 @@ <translation id="8251509999076836464">მიმდინარეობს <ph name="DEVICE_NAME" />-თან დაწყვილება</translation> <translation id="8251578425305135684">ესკიზები წაშლილია.</translation> <translation id="825238165904109940">URL-ების ყოველთვის სრულად გამოჩენა</translation> -<translation id="8252538334423261825">გაფართოების დამატება ვერ მოხერხდა</translation> <translation id="8252569384384439529">მიმდინარეობს ატვირთვა...</translation> <translation id="8253198102038551905">ქსელის თვისებების მიღებისათვის, დააჭირეთ „+“</translation> <translation id="8255212965098517578">ბოლოდროინდელი ფოტოები, შეტყობინებები და აპები</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 77038d4..9df82be 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1325,7 +1325,6 @@ <translation id="2114820389966440614">"Соңғы үздік суреттер" және басқа да естеліктерді осы жерде көріңіз</translation> <translation id="2114896190328250491"><ph name="NAME" /> суреті</translation> <translation id="2114995631896158695">Ешқандай SIM картасы салынбаған.</translation> -<translation id="2116020356255810305">Жүйе іске қосылғанда қолданбаны ашу</translation> <translation id="2116619964159595185">Сайттар әдетте төмен қуатты сигналды, денсаулық немесе фитнес трекерін, сондай-ақ смарт жарық көзін орнату немесе синхрондау сияқты функциялар үшін Bluetooth құрылғыларына қосылады.</translation> <translation id="2117655453726830283">Келесі слайд</translation> <translation id="2119349053129246860"><ph name="APP" /> қолданбасынан ашу</translation> @@ -3254,7 +3253,6 @@ <translation id="380329542618494757">Аты</translation> <translation id="3803345858388753269">Бейне сапасы</translation> <translation id="3803367742635802571">Сіз кірген сайттар жобаланғандай жұмысын тоқтатуы мүмкін</translation> -<translation id="3803583375545057606">Ата-анаңыздан осы кеңейтімді қосуын сұрау керек пе?</translation> <translation id="380408572480438692">Өнімділік деректерін жинау мүмкіндігі Google компаниясына уақыт өте келе жүйені жақсартуға көмектеседі. Пікір есебін жасап (Alt-Shift-I), оған өнімділік деректерін енгізбейінше, деректер жіберілмейді. Кез келген уақытта осы экранға оралып, дерек жинау функциясын өшіруіңізге болады.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> ("<ph name="EXTENSION_ID" />" кеңейтім идентификаторы) кеңейтіміне жүйеге кіру экранында рұқсат берілмеген.</translation> <translation id="3807747707162121253">&Бас тарту</translation> @@ -3676,7 +3674,6 @@ <translation id="4169535189173047238">Рұқсат бермеу</translation> <translation id="4170314459383239649">Шыққан кезде тазалау</translation> <translation id="417096670996204801">Профиль таңдаңыз</translation> -<translation id="41725145403849567">Ата-анаңыздан осы кеңейтімді қосуын сұрау керек пе?</translation> <translation id="4175137578744761569">Ашық күлгін және ақ</translation> <translation id="4175737294868205930">Тұрақты жад</translation> <translation id="4176463684765177261">Өшірілген</translation> @@ -5089,7 +5086,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN коды кемі 1 таңбадан тұруы керек.}other{PIN коды ең кемі # таңбадан тұруы керек.}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> дереккөзі Wi-Fi желісіне қосылып, жаңа нұсқаны жүктеп алуды талап етеді. Оны трафик саналатын байланыс арқылы жүктеп алуға да болады (ақы алынуы мүмкін).</translation> <translation id="5476016146231427848">Chromebook-та Steam пайдалану үшін құрылғыны өшіріп қосыңыз.</translation> -<translation id="5476897066181964657">Ата-ана немесе қамқоршы осы кеңейтімді қоса алатыныңызды хабарлауы керек.</translation> <translation id="5481273127572794904">Бірнеше файлды автоматты түрде жүктеп алуға рұқсаты жоқтар</translation> <translation id="5481941284378890518">Маңайдағы принтерлерді енгізу</translation> <translation id="5483785310822538350">Файл мен құрылғыға кіру құқығын қайтарып алу</translation> @@ -5186,7 +5182,6 @@ <translation id="5555639311269196631">Хотспотты өшіру</translation> <translation id="5556459405103347317">Қайта жүктеу</translation> <translation id="5558129378926964177">Үлкей&ту</translation> -<translation id="5558247502209241936">Қолданбаны терезеде ашу</translation> <translation id="5559311991468302423">Мекенжайды жою</translation> <translation id="55601339223879446">Дисплейдегі жұмыс үстелінің жиектерін реттеу</translation> <translation id="5561162485081632007">Орын алған қауіпті іс-шараларды анықтайды және хабарлайды.</translation> @@ -6009,7 +6004,6 @@ <translation id="6305607932814307878">Ғаламдық саясат:</translation> <translation id="6305702903308659374">ChromeVox экраннан оқып жатқанда, қалыпты дыбыс деңгейінде ойнату</translation> <translation id="6305909198255586420">Негізгі профиліңіз арқылы орнатыңыз.</translation> -<translation id="630750887748244481">Ата-анаңыз Chrome браузері үшін "Сайттар, қолданбалар және кеңейтімдер бойынша рұқсаттар" параметрін өшірді. Бұл кеңейтімді қосуға рұқсат етілмейді.</translation> <translation id="6307990684951724544">Жүйе бос емес</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> кеңейтімі арқылы кіру керек</translation> <translation id="6308937455967653460">С&ілтемені басқаша сақтау…</translation> @@ -6835,7 +6829,6 @@ <translation id="7025190659207909717">Мобильді деректер қызметін басқару</translation> <translation id="7025895441903756761">Қауіпсіздік және құпиялық</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Барлығын &инкогнито терезесінде ашу}=1{&Инкогнито терезесінде ашу}other{Барлығын ({COUNT}) &инкогнито терезесінде ашу}}</translation> -<translation id="7028057921476386252">Ата-ана немесе қамқоршы осы кеңейтімді қоса алатыныңызды хабарлауы керек.</translation> <translation id="7029307918966275733">Crostini орнатылмаған. Балансты көру үшін Crostini қолданбасын орнатыңыз.</translation> <translation id="7029809446516969842">Құпия сөздер</translation> <translation id="7030304022046916278">URL сілтемелерін тексеру үшін Safe Browsing қызметіне жібереді.</translation> @@ -8212,7 +8205,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> құрылғысымен жұпталуда</translation> <translation id="8251578425305135684">Нобай жойылды.</translation> <translation id="825238165904109940">URL мекенжайларын әрдайым толық көрсету</translation> -<translation id="8252538334423261825">Кеңейтімді қосу мүмкін емес.</translation> <translation id="8252569384384439529">Жүктеп салынуда…</translation> <translation id="8253198102038551905">Желілік сипаттарын алу үшін "+" белгісін басыңыз</translation> <translation id="8255212965098517578">Соңғы фотосуреттер, хабарландырулар мен қолданбалар</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index 2b03f06..c1f35ff 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">មើល "ការរំលេចថ្មីៗ" និងអនុស្សាវរីយ៍ផ្សេងទៀតនៅទីនេះ</translation> <translation id="2114896190328250491">រូបថតដោយ <ph name="NAME" /></translation> <translation id="2114995631896158695">មិនបានស៊កបញ្ចូលស៊ីមកាតទេ</translation> -<translation id="2116020356255810305">អនុញ្ញាតឱ្យបើកដំណើរការកម្មវិធីនៅពេលចាប់ផ្ដើម</translation> <translation id="2116619964159595185">ជាធម្មតា គេហទំព័រភ្ជាប់ជាមួយឧបករណ៍ប៊្លូធូសសម្រាប់មុខងារផ្សេងៗដូចជា ការរៀបចំ ឬការធ្វើសមកាលកម្មសញ្ញាថាមពលទាប កម្មវិធីតាមដានសម្បទាឬសុខភាព ឬអំពូលភ្លើងឆ្លាតវៃជាដើម</translation> <translation id="2117655453726830283">ស្លាយបន្ទាប់</translation> <translation id="2119349053129246860">បើកនៅក្នុង <ph name="APP" /></translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">ឈ្មោះ</translation> <translation id="3803345858388753269">គុណភាពវីដេអូ</translation> <translation id="3803367742635802571">គេហទំព័រដែលអ្នកចូលមើលអាចឈប់ដំណើរការដូចអ្វីដែលបានរៀបចំ</translation> -<translation id="3803583375545057606">ស្នើសុំមាតាបិតារបស់អ្នកឱ្យបើកកម្មវិធីបន្ថែមនេះឬ?</translation> <translation id="380408572480438692">ការបើកដំណើរការការប្រមូលទិន្នន័យប្រតិបត្តិការនឹងជួយឲ្យ Google ធ្វើឲ្យប្រព័ន្ធប្រសើរឡើងមានពេលខាងមុខ។ គ្មានទិន្នន័យណាមួយត្រូវបានផ្ញើទេ លុះត្រាអ្នកផ្ញើរបាយការណ៍មតិ (Alt-Shift-I) ហើយរាប់បញ្ចូលទាំងទិន្នន័យប្រតិបត្តិការរបស់អ្នក។ អ្នកអាចត្រលប់ទៅអេក្រង់នេះដើម្បីបិទដំណើរការការប្រមូលទិន្នន័យគ្រប់ពេល។</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (លេខសម្គាល់កម្មវិធីបន្ថែម "<ph name="EXTENSION_ID" />") មិនត្រូវបានអនុញ្ញាតឲ្យប្រើនៅលើអេក្រង់ចូលទេ។</translation> <translation id="3807747707162121253">បដិសេធ</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">កុំអនុញ្ញាត</translation> <translation id="4170314459383239649">សម្អាតនៅពេលចាកចេញ</translation> <translation id="417096670996204801">ជ្រើសរើសកម្រងព័ត៌មាន</translation> -<translation id="41725145403849567">ស្នើសុំមាតាបិតារបស់អ្នកឱ្យបញ្ចូលកម្មវិធីបន្ថែមនេះឬ?</translation> <translation id="4175137578744761569">ស្វាយខ្ចី និងស</translation> <translation id="4175737294868205930">ទំហំផ្ទុកអចិន្ត្រៃយ៍</translation> <translation id="4176463684765177261">បានបិទដំណើរការ</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{កូដ PIN ត្រូវតែមានតួអក្សរយ៉ាងហោចណាស់មួយតួ}other{កូដ PIN ត្រូវតែមានតួអក្សរយ៉ាងហោចណាស់ # តួ}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> តម្រូវឱ្យអ្នកភ្ជាប់ Wi-Fi ឥឡូវនេះ ដើម្បីទាញយកកំណែថ្មី។ ឬទាញយកតាមរយៈការតភ្ជាប់ផ្អែកតាមទិន្នន័យដែលប្រើ (អាចមានការគិតថ្លៃ)។</translation> <translation id="5476016146231427848">សូមចាប់ផ្ដើមឧបករណ៍របស់អ្នកឡើងវិញ ដើម្បីប្រើ Steam នៅលើ Chromebook</translation> -<translation id="5476897066181964657">មាតាបិតា ឬអាណាព្យាបាលចាំបាច់ត្រូវនិយាយថាមិនអីទេ ដើម្បីឱ្យអ្នកអាចបញ្ចូលកម្មវិធីបន្ថែមនេះបាន</translation> <translation id="5481273127572794904">មិនអនុញ្ញាតឱ្យទាញយកឯកសារច្រើនដោយស្វ័យប្រវត្តិទេ</translation> <translation id="5481941284378890518">បន្ថែមម៉ាស៊ីនបោះពុម្ពនៅក្បែរ</translation> <translation id="5483785310822538350">បញ្ឈប់សុពលភាពការចូលប្រើឯកសារ និងឧបករណ៍</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">បិទហតស្ប៉ត</translation> <translation id="5556459405103347317">ដំណើរការឡើងវិញ</translation> <translation id="5558129378926964177">ពង្រីក</translation> -<translation id="5558247502209241936">អនុញ្ញាតឱ្យបើកកម្មវិធីនៅក្នុងវិនដូ</translation> <translation id="5559311991468302423">លុបអាសយដ្ឋាន</translation> <translation id="55601339223879446">កែសម្រួលដែនកំណត់នៃដេស៍ថបរបស់អ្នកសម្រាប់អេក្រង់នេះ</translation> <translation id="5561162485081632007">រកមើល និងព្រមានអ្នកអំពីព្រឹត្តិការណ៍គ្រោះថ្នាក់ នៅពេលព្រឹត្តិការណ៍ទាំងនោះកើតឡើង</translation> @@ -6032,7 +6027,6 @@ <translation id="6305607932814307878">គោលការណ៍សកល៖</translation> <translation id="6305702903308659374">ចាក់ក្នុងកម្រិតសំឡេងធម្មតា បើទោះបីជា ChromeVox កំពុងនិយាយក៏ដោយ</translation> <translation id="6305909198255586420">សូមដំឡើងដោយប្រើប្រាស់កម្រងព័ត៌មានចម្បងរបស់អ្នក</translation> -<translation id="630750887748244481">មាតាបិតារបស់អ្នកបានបិទ "ការអនុញ្ញាតសម្រាប់គេហទំព័រ កម្មវិធី និងកម្មវិធីបន្ថែម" លើ Chrome។ ការបញ្ចូលកម្មវិធីបន្ថែមនេះមិនត្រូវបានអនុញ្ញាតទេ។</translation> <translation id="6307990684951724544">ប្រព័ន្ធជាប់រវល់</translation> <translation id="6308493641021088955">ការចូលគណនីដែលផ្ដល់ដោយ <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">រក្សាតំណជា...</translation> @@ -6858,7 +6852,6 @@ <translation id="7025190659207909717">ការគ្រប់គ្រងសេវាកម្មទិន្នន័យទូរស័ព្ទ</translation> <translation id="7025895441903756761">សុវត្ថិភាព និងឯកជនភាព</translation> <translation id="7027258625819743915">{COUNT,plural, =0{បើកទាំងអស់នៅក្នុង&ផ្ទាំងឯកជន}=1{បើកនៅក្នុង&ផ្ទាំងឯកជន}other{បើកទាំងអស់ ({COUNT}) នៅក្នុង&ផ្ទាំងឯកជន}}</translation> -<translation id="7028057921476386252">មាតាបិតា ឬអាណាព្យាបាលចាំបាច់ត្រូវនិយាយថាមិនអីទេ ដើម្បីឱ្យអ្នកអាចបើកកម្មវិធីបន្ថែមនេះបាន</translation> <translation id="7029307918966275733">Crostini មិនត្រូវបានដំឡើងទេ។ សូមដំឡើង Crostini ដើម្បីមើលបញ្ជីឈ្មោះអ្នកបង្កើត។</translation> <translation id="7029809446516969842">ពាក្យសម្ងាត់</translation> <translation id="7030304022046916278">បញ្ជូន URL ទៅការរុករកដោយសុវត្ថិភាព ដើម្បីពិនិត្យមើល</translation> @@ -8236,7 +8229,6 @@ <translation id="8251509999076836464">កំពុងផ្គូផ្គងជាមួយ <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">រូបតំណាងតូចត្រូវបានដកចេញ។</translation> <translation id="825238165904109940">បង្ហាញ URL ពេញលេញជានិច្ច</translation> -<translation id="8252538334423261825">មិនអាចបញ្ចូលកម្មវិធីបន្ថែមបានទេ</translation> <translation id="8252569384384439529">កំពុងបង្ហោះ...</translation> <translation id="8253198102038551905">ចុច '+' ដើម្បីទទួលយកលក្ខណៈសម្បត្តិបណ្តាញ</translation> <translation id="8255212965098517578">រូបថត ការជូនដំណឹង និងកម្មវិធីថ្មីៗ</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 02ab2bc0..67ab76602 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1333,7 +1333,6 @@ <translation id="2114820389966440614">"ಇತ್ತೀಚಿನ ಹೈಲೈಟ್ಗಳು" ಮತ್ತು ಇತರ ಸವಿನೆನಪುಗಳನ್ನು ಇಲ್ಲಿ ನೋಡಿ</translation> <translation id="2114896190328250491"><ph name="NAME" /> ಅವರಿಂದ ಫೋಟೋ</translation> <translation id="2114995631896158695">ಯಾವುದೇ ಸಿಮ್ ಕಾರ್ಡ್ ಸೇರಿಸಿಲ್ಲ</translation> -<translation id="2116020356255810305">ಸ್ಟಾರ್ಟ್ಅಪ್ನಲ್ಲಿ ಆ್ಯಪ್ ಪ್ರಾರಂಭಿಸುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="2116619964159595185">ಕಡಿಮೆ-ಶಕ್ತಿಯ ಬೀಕನ್, ಆರೋಗ್ಯ ಅಥವಾ ಫಿಟ್ನೆಸ್ ಟ್ರ್ಯಾಕರ್ ಅಥವಾ ಸ್ಮಾರ್ಟ್ ಲೈಟ್ ಬಲ್ಬ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡುವ ಅಥವಾ ಸಿಂಕ್ ಮಾಡುವಂತಹ ಫೀಚರ್ಗಳಿಗಾಗಿ, ಸೈಟ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳಿಗೆ ಕನೆಕ್ಟ್ ಆಗುತ್ತವೆ</translation> <translation id="2117655453726830283">ಮುಂದಿನ ಸ್ಲೈಡ್</translation> <translation id="2119349053129246860"><ph name="APP" /> ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation> @@ -3266,7 +3265,6 @@ <translation id="380329542618494757">ಹೆಸರು</translation> <translation id="3803345858388753269">ವೀಡಿಯೊ ಗುಣಮಟ್ಟ</translation> <translation id="3803367742635802571">ನೀವು ಭೇಟಿ ನೀಡುವ ಸೈಟ್ಗಳು ವಿನ್ಯಾಸಗೊಳಿಸಿದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಬಹುದು</translation> -<translation id="3803583375545057606">ಈ ವಿಸ್ತರಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿಮ್ಮ ಪೋಷಕರನ್ನು ಕೇಳಬೇಕೆ?</translation> <translation id="380408572480438692">ಕಾರ್ಯಕ್ಷಮತೆಯ ಸಂಗ್ರಹ ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಕಾಲಕ್ರಮೇಣ ಸಿಸ್ಟಂ ಸುಧಾರಿಸಲು Google ಗೆ ಡೇಟಾ ನೆರವಾಗುತ್ತದೆ. ನೀವು ಪ್ರತಿಕ್ರಿಯೆ ವರದಿ ಫೈಲ್ ಮಾಡುವವರೆಗೂ (Alt-Shift-I) ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆ ಡೇಟಾ ಸೇರಿಸುವವರೆಗೂ ಯಾವುದೇ ಡೇಟಾವನ್ನು ಕಳುಹಿಸುವುದಿಲ್ಲ. ಸಂಗ್ರಹ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ನೀವು ಈ ಸೆಷನ್ಗೆ ಯಾವ ಸಮಯದಲ್ಲಾದರೂ ಹಿಂತಿರುಗಬಹುದು.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ವಿಸ್ತರಣೆ ID"<ph name="EXTENSION_ID" />") ಲಾಗಿನ್ ಪರದೆಯಲ್ಲಿ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="3807747707162121253">&ರದ್ದುಮಾಡು</translation> @@ -3688,7 +3686,6 @@ <translation id="4169535189173047238">ಅನುಮತಿಸಬೇಡಿ</translation> <translation id="4170314459383239649">ನಿರ್ಗಮಿಸುವಲ್ಲಿ ತೆರವುಗೊಳಿಸಿ</translation> <translation id="417096670996204801">ಪ್ರೊಫೈಲ್ ಅನ್ನು ಆರಿಸಿ</translation> -<translation id="41725145403849567">ಈ ವಿಸ್ತರಣೆಯನ್ನು ಸೇರಿಸಲು ನಿಮ್ಮ ಪೋಷಕರನ್ನು ಕೇಳಬೇಕೆ?</translation> <translation id="4175137578744761569">ತಿಳಿ ನೇರಳೆ ಮತ್ತು ಬಿಳಿ</translation> <translation id="4175737294868205930">ಶಾಶ್ವತವಾಗಿರುವ ಸಂಗ್ರಹಣೆ</translation> <translation id="4176463684765177261">ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> @@ -5102,7 +5099,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{ಪಿನ್ ಕನಿಷ್ಠ ಒಂದು ಅಕ್ಷರವನ್ನು ಹೊಂದಿರಬೇಕು}one{ಪಿನ್ ಕನಿಷ್ಠ # ಅಕ್ಷರಗಳನ್ನು ಹೊಂದಿರಬೇಕು}other{ಪಿನ್ ಕನಿಷ್ಠ # ಅಕ್ಷರಗಳನ್ನು ಹೊಂದಿರಬೇಕು}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" />, ನೀವು ಇದೀಗ ವೈ-ಫೈಗೆ ಕನೆಕ್ಟ್ ಆಗುವ ಮೂಲಕ ಅಪ್ಡೇಟ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿಕೊಳ್ಳಬೇಕೆಂದು ಬಯಸುತ್ತದೆ. ಅಥವಾ ಮಾಪನ ಮಾಡಲಾದ ಕನೆಕ್ಷನ್ನಿಂದ ಡೌನ್ಲೋಡ್ ಮಾಡಿಕೊಳ್ಳಿ (ಶುಲ್ಕಗಳು ಅನ್ವಯವಾಗಬಹುದು).</translation> <translation id="5476016146231427848">Chromebook ನಲ್ಲಿ Steam ಬಳಸಲು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation> -<translation id="5476897066181964657">ನೀವು ಈ ವಿಸ್ತರಣೆಯನ್ನು ಸೇರಿಸಲು ನಿಮ್ಮ ಪೋಷಕರ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation> <translation id="5481273127572794904">ಬಹು ಫೈಲ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="5481941284378890518">ಸಮೀಪದ ಪ್ರಿಂಟರ್ಗಳನ್ನು ಸೇರಿಸು</translation> <translation id="5483785310822538350">ಫೈಲ್ ಮತ್ತು ಸಾಧನ ಪ್ರವೇಶವನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ</translation> @@ -5199,7 +5195,6 @@ <translation id="5555639311269196631">ಹಾಟ್ಸ್ಪಾಟ್ ಆಫ್ ಮಾಡಿ</translation> <translation id="5556459405103347317">ಮರುಲೋಡ್</translation> <translation id="5558129378926964177">ಝೂಮ್ &ಇನ್</translation> -<translation id="5558247502209241936">ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯುವ ಆ್ಯಪ್ ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="5559311991468302423">ವಿಳಾಸವನ್ನು ಅಳಿಸಿ</translation> <translation id="55601339223879446">ಡಿಸ್ಪ್ಲೇ ಒಳಗೆ ನಿಮ್ಮ ಡೆಸ್ಕ್ಟಾಪ್ನ ಎಲ್ಲೆಗಳನ್ನು ಸರಿಹೊಂದಿಸಿ</translation> <translation id="5561162485081632007">ಆಪಾಯಕಾರಿ ಘಟನೆಗಳು ಸಂಭವಿಸಿದಾಗ, ಅವುಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುತ್ತದೆ ಮತ್ತು ನಿಮಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತದೆ</translation> @@ -6026,7 +6021,6 @@ <translation id="6305607932814307878">ಜಾಗತಿಕ ನೀತಿ:</translation> <translation id="6305702903308659374">ChromeVox ಮಾತನಾಡುತ್ತಿರುವಾಗಲೂ ಸಹ ಸಾಮಾನ್ಯ ವಾಲ್ಯೂಮ್ನಲ್ಲಿ ಪ್ಲೇ ಮಾಡಿ</translation> <translation id="6305909198255586420">ನಿಮ್ಮ ಪ್ರಾಥಮಿಕ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಬಳಸಿ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ</translation> -<translation id="630750887748244481">ನಿಮ್ಮ ಪೋಷಕರು Chrome ನಲ್ಲಿ "ಸೈಟ್ಗಳು, ಆ್ಯಪ್ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳ ಅನುಮತಿಗಳನ್ನು" ಆಫ್ ಮಾಡಿದ್ದಾರೆ. ಈ ವಿಸ್ತರಣೆ ಸೇರಿಸುವುದನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="6307990684951724544">ಸಿಸ್ಟಂ ಕಾರ್ಯನಿರತವಾಗಿದೆ</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" />, ಸೈನ್ ಇನ್ ಅನ್ನು ಒದಗಿಸಿದೆ</translation> <translation id="6308937455967653460">ಇದರಂತೆ ಲಿಂ&ಕ್ ಅನ್ನು ಉಳಿಸಿ...</translation> @@ -6855,7 +6849,6 @@ </translation> <translation id="7025895441903756761">ಸುರಕ್ಷತೆ ಮತ್ತು ಗೌಪ್ಯತೆ</translation> <translation id="7027258625819743915">{COUNT,plural, =0{&ಅಜ್ಞಾತ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲವನ್ನೂ ತೆರೆಯಿರಿ}=1{&ಅಜ್ಞಾತ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ}one{&ಅಜ್ಞಾತ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲಾ ({COUNT}) ಗಳನ್ನು ತೆರೆಯಿರಿ}other{&ಅಜ್ಞಾತ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲಾ ({COUNT}) ಗಳನ್ನು ತೆರೆಯಿರಿ}}</translation> -<translation id="7028057921476386252">ನೀವು ಈ ವಿಸ್ತರಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿಮ್ಮ ಪೋಷಕರ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation> <translation id="7029307918966275733">Crostini ಅನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿಲ್ಲ. ಕ್ರೆಡಿಟ್ಗಳನ್ನು ವೀಕ್ಷಿಸಲು Crostini ಅನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ.</translation> <translation id="7029809446516969842">ಪಾಸ್ವರ್ಡ್ಗಳು</translation> <translation id="7030304022046916278">URL ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು, ಅವುಗಳನ್ನು ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation> @@ -8229,7 +8222,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> ಗೆ ಜೋಡಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="8251578425305135684">ಥಂಬ್ನೇಲ್ ತೆಗೆದುಹಾಕಲಾಗಿದೆ.</translation> <translation id="825238165904109940">ಯಾವಾಗಲೂ ಪೂರ್ಣ URL ಗಳನ್ನು ತೋರಿಸಿ</translation> -<translation id="8252538334423261825">ವಿಸ್ತರಣೆಯನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="8252569384384439529">ಅಪ್ಲೋಡ್ ಆಗುತ್ತಿದೆ...</translation> <translation id="8253198102038551905">ನೆಟ್ವರ್ಕ್ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಪಡೆಯಲು '+' ಕ್ಲಿಕ್ ಮಾಡಿ</translation> <translation id="8255212965098517578">ಇತ್ತೀಚಿನ ಫೋಟೋಗಳು, ಅಧಿಸೂಚನೆಗಳು ಮತ್ತು ಆ್ಯಪ್ಗಳು</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index cfd57e1..1fa4f3f 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -1341,7 +1341,6 @@ <translation id="2114820389966440614">여기에서 '최근 하이라이트' 및 다른 추억을 확인하세요</translation> <translation id="2114896190328250491">사진 제공: <ph name="NAME" /></translation> <translation id="2114995631896158695">삽입된 SIM 카드 없음</translation> -<translation id="2116020356255810305">시작 시 앱 실행 사용 설정</translation> <translation id="2116619964159595185">사이트에서는 주로 저전력 비콘, 건강 또는 피트니스 추적기, 스마트 조명 전구를 설정 또는 동기화하는 기능을 지원하기 위해 블루투스 기기에 연결합니다.</translation> <translation id="2117655453726830283">다음 슬라이드</translation> <translation id="2119349053129246860"><ph name="APP" />에서 열기</translation> @@ -3274,7 +3273,6 @@ <translation id="380329542618494757">이름</translation> <translation id="3803345858388753269">동영상 품질</translation> <translation id="3803367742635802571">방문한 사이트가 정상적으로 작동하지 않을 수 있음</translation> -<translation id="3803583375545057606">부모님께 이 확장 프로그램을 사용 설정해 달라고 요청하시겠습니까?</translation> <translation id="380408572480438692">성능 데이터를 수집하도록 설정하면 시간이 지남에 따라 Google에서 시스템을 개선하는 데 도움이 됩니다. 데이터는 사용자가 피드백 보고서를 제출하고(Alt-Shift-I) 성능 데이터를 포함할 때까지 전송되지 않습니다. 언제든지 이 화면으로 돌아와 데이터 수집을 중지할 수 있습니다.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" />(확장 프로그램 ID: '<ph name="EXTENSION_ID" />')은(는) 로그인 화면에서 허용되지 않습니다.</translation> <translation id="3807747707162121253">취소(&C)</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">허용 안함</translation> <translation id="4170314459383239649">종료 시 삭제</translation> <translation id="417096670996204801">프로필 선택</translation> -<translation id="41725145403849567">부모님께 이 확장 프로그램을 추가해 달라고 요청하시겠습니까?</translation> <translation id="4175137578744761569">연한 보라색 및 흰색</translation> <translation id="4175737294868205930">영구 저장소</translation> <translation id="4176463684765177261">사용 중지됨</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN은 1자 이상이어야 합니다.}other{PIN은 #자 이상이어야 합니다.}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" />에서 지금 Wi-Fi에 연결하여 업데이트를 다운로드할 것을 요청합니다. 종량제 연결(요금이 부과될 수 있음)을 통해 업데이트를 다운로드할 것을 요청합니다.</translation> <translation id="5476016146231427848">Steam on Chromebook을 사용하려면 기기를 다시 시작하세요.</translation> -<translation id="5476897066181964657">부모 또는 보호자가 이 확장 프로그램을 추가해도 괜찮다고 말해야 합니다.</translation> <translation id="5481273127572794904">여러 파일 자동 다운로드가 허용되지 않음</translation> <translation id="5481941284378890518">주변 프린터 추가</translation> <translation id="5483785310822538350">파일 및 기기 액세스 취소</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">핫스팟 사용 중지</translation> <translation id="5556459405103347317">새로고침</translation> <translation id="5558129378926964177">확대(&I)</translation> -<translation id="5558247502209241936">창에서 앱 열기 사용 설정</translation> <translation id="5559311991468302423">주소 삭제</translation> <translation id="55601339223879446">디스플레이에서 바탕화면 경계를 조정합니다.</translation> <translation id="5561162485081632007">위험한 이벤트가 발생하면 이를 감지하여 알립니다.</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">전체 정책:</translation> <translation id="6305702903308659374">ChromeVox 음성이 나올 때도 보통 볼륨으로 재생합니다.</translation> <translation id="6305909198255586420">기본 프로필을 사용하여 설치하세요.</translation> -<translation id="630750887748244481">부모님이 Chrome의 ‘사이트, 앱, 확장 프로그램에 대한 권한’을 사용 중지하셨습니다. 이 확장 프로그램은 추가할 수 없습니다.</translation> <translation id="6307990684951724544">시스템 사용 중</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" />에서 제공한 로그인</translation> <translation id="6308937455967653460">다른 이름으로 링크 저장(&K)...</translation> @@ -6857,7 +6851,6 @@ <translation id="7025190659207909717">모바일 데이터 서비스 관리</translation> <translation id="7025895441903756761">보안 및 개인 정보 보호</translation> <translation id="7027258625819743915">{COUNT,plural, =0{시크릿 창에서 모두 열기(&I)}=1{시크릿 창에서 열기(&I)}other{시크릿 창에서 {COUNT}개 모두 열기(&I)}}</translation> -<translation id="7028057921476386252">부모 또는 보호자가 이 확장 프로그램을 사용 설정해도 괜찮다고 말해야 합니다.</translation> <translation id="7029307918966275733">Crostini가 설치되지 않았습니다. 크레딧을 확인하려면 Crostini를 설치하세요.</translation> <translation id="7029809446516969842">비밀번호</translation> <translation id="7030304022046916278">세이프 브라우징 서비스에 URL을 전송하여 확인하도록 합니다.</translation> @@ -7375,7 +7368,7 @@ <translation id="7515998400212163428">Android</translation> <translation id="7516981202574715431"><ph name="APP_NAME" /> 앱이 일시중지됨</translation> <translation id="7520766081042531487">시크릿 모드 포털: <ph name="SUBFRAME_SITE" /></translation> -<translation id="752098910262610337">단축키 표시</translation> +<translation id="752098910262610337">바로가기 표시</translation> <translation id="7522255036471229694">"Ok Google"이라고 말하세요.</translation> <translation id="7523117833414447032">대문자 읽는 방식</translation> <translation id="7523585675576642403">프로필 이름 바꾸기</translation> @@ -8236,7 +8229,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> 기기와 페어링 중</translation> <translation id="8251578425305135684">미리보기 이미지가 삭제되었습니다.</translation> <translation id="825238165904109940">항상 전체 URL 표시</translation> -<translation id="8252538334423261825">확장 프로그램을 추가할 수 없음</translation> <translation id="8252569384384439529">업로드 중...</translation> <translation id="8253198102038551905">'+'를 클릭하여 네트워크 속성 보기</translation> <translation id="8255212965098517578">최근 사진, 알림, 앱</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 3fdbf73..2a9b1a3 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">Бул жерден "Соңку сүрөттөрдүн мыктысын" жана башка эскерүүлөрдү көрөсүз</translation> <translation id="2114896190328250491"><ph name="NAME" /> тарткан сүрөт</translation> <translation id="2114995631896158695">SIM карта cалынган жок</translation> -<translation id="2116020356255810305">Күйгүзүлгөндө иштетүү</translation> <translation id="2116619964159595185">Кубатты үнөмдөөчү маякты, ден соолук же машыгуу трекерин, акылдуу жарык лампасын жөндөө же шайкештирүү сыяктуу функцияларды колдонуу үчүн сайттар адатта Bluetooth түзмөктөрүнө туташат</translation> <translation id="2117655453726830283">Кийинки слайд</translation> <translation id="2119349053129246860"><ph name="APP" /> колдонмосунда ачуу</translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">Ата-жөнү</translation> <translation id="3803345858388753269">Видеонун сапаты</translation> <translation id="3803367742635802571">Сиз баш баккан сайттар ойдогудай иштебей калышы мүмкүн</translation> -<translation id="3803583375545057606">Ата-энеңден бул кеңейтүүнү иштетүүсүн суранасыңбы?</translation> <translation id="380408572480438692">Иштин майнаптуулугу тууралуу дайындарды топтоо мүмкүнчүлүгү иштетилгенде, Google иш тутумун мезгил-мезгили жакшыртып турат. Пикир билдирүү кабары түзүлүп (Alt-Shift-I), ага иштин майнаптуулугу жөнүндө дайындар камтылмайынча бир дагы дайын жөнөтүлбөйт. Бул экранга кайтып келип, дайындарды топтоо аракетин каалаган учурда токтотуп койсоңор болот.</translation> <translation id="3807249107536149332">"<ph name="EXTENSION_NAME" />" кеңейтүүсүн (идентификатору: "<ph name="EXTENSION_ID" />") кирүү экранында колдонууга уруксат берилбейт.</translation> <translation id="3807747707162121253">&Жокко чыгаруу</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Жок</translation> <translation id="4170314459383239649">Чыгууда тазалансын</translation> <translation id="417096670996204801">Профиль тандоо</translation> -<translation id="41725145403849567">Ата-энеңден бул кеңейтүүнү кошуусун суранасыңбы?</translation> <translation id="4175137578744761569">Ачык кызгылт көгүш жана ак</translation> <translation id="4175737294868205930">Туруктуу сактагыч</translation> <translation id="4176463684765177261">Өчүк</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN код кеминде бир символдон турушу керек}other{PIN код кеминде # символдон турушу керек}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> Wi-Fi тармагына азыр туташып, жаңыртууну жүктөп алууну талап кылууда. Же болбосо, трафиги чектелген Интернет байланышы аркылуу жүктөп алыңыз (акы алынышы мүмкүн).</translation> <translation id="5476016146231427848">Chromebook'та Steam колдонмосун ачуу үчүн түзмөгүңүздү өчүрүп күйгүзүңүз</translation> -<translation id="5476897066181964657">Ата-энең же камкорчуң бул кеңейтүүнү кошууңа уруксат бериши керек</translation> <translation id="5481273127572794904">Бир нече файлды автоматтык түрдө жүктөп ала албайт</translation> <translation id="5481941284378890518">Жакын жердеги принтерлерди кошуу</translation> <translation id="5483785310822538350">Файлды жана түзмөктү колдонуу мүмкүнчүлүгүн жоюу</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">Байланыш түйүнүн өчүрүү</translation> <translation id="5556459405103347317">Кайра жүктөө</translation> <translation id="5558129378926964177">Чо&ңойтуу</translation> -<translation id="5558247502209241936">Колдонмону терезеде ачуу</translation> <translation id="5559311991468302423">Даректи жок кылуу</translation> <translation id="55601339223879446">Иш тактаңыздын чегин дисплейге тууралаңыз</translation> <translation id="5561162485081632007">Кооптуу нерселер орун алганда аларды аныктап, сизге кабарлап турат</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">Глобалдык саясат:</translation> <translation id="6305702903308659374">ChromeVox сүйлөп жатса дагы аудионун үнүнүн катуулугу өзгөрүлбөсүн</translation> <translation id="6305909198255586420">Негизги профилиңиз аркылуу орнотуңуз</translation> -<translation id="630750887748244481">Ата-энең Chrome үчүн "Сайттарга, колдонмолорго жана кеңейтүүлөргө уруксаттарды" өчүрүп койгон. Бул кеңейтүүнү кошууга тыюу салынган.</translation> <translation id="6307990684951724544">Тутум бош эмес</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> менен кирдиңиз</translation> <translation id="6308937455967653460">Шилт&емени төмөнкүдөй сактоо…</translation> @@ -6857,7 +6851,6 @@ <translation id="7025190659207909717">Мобилдик дайындар кызматын башкаруу</translation> <translation id="7025895441903756761">Коопсуздук жана купуялык</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Баарын &жашыруун терезеде ачуу}=1{&Жашыруун терезеде ачуу}other{Баарын ({COUNT}) &жашыруун терезеде ачуу}}</translation> -<translation id="7028057921476386252">Ата-энең же камкорчуң бул кеңейтүүнү иштетүүңө уруксат бериши керек</translation> <translation id="7029307918966275733">Crostini орнотулган эмес. Насыяларды көрүү үчүн Crostini'ни орнотуңуз.</translation> <translation id="7029809446516969842">Сырсөздөр</translation> <translation id="7030304022046916278">URL даректерин текшерүү үчүн Коопсуз серептөөгө жөнөтөт</translation> @@ -8235,7 +8228,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> менен жупташтырылууда</translation> <translation id="8251578425305135684">Бармакбасым өчүрүлдү.</translation> <translation id="825238165904109940">URL'дер ар дайым толугу менен көрүнсүн</translation> -<translation id="8252538334423261825">Кеңейтүүнү кошуу мүмкүн эмес</translation> <translation id="8252569384384439529">Жүктөлүп берилүүдө…</translation> <translation id="8253198102038551905">Тармак касиеттерин ачуу үчүн "+" дегенди чыкылдатыңыз</translation> <translation id="8255212965098517578">Соңку сүрөттөр, билдирмелер жана колдонмолор</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index b54d0962..f652adb 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -1338,7 +1338,6 @@ <translation id="2114820389966440614">ເບິ່ງ "ໄຮໄລ້ຫຼ້າສຸດ" ແລະ ຄວາມຊົງຈຳອື່ນໆຢູ່ບ່ອນນີ້</translation> <translation id="2114896190328250491">ຮູບຖ່າຍໂດຍ <ph name="NAME" /></translation> <translation id="2114995631896158695">ບໍ່ໄດ້ໃສ່ຊິມກາດ</translation> -<translation id="2116020356255810305">ເປີດການນຳໃຊ້ການເປີດໃຊ້ແອັບຕອນສະຕາດອັບ</translation> <translation id="2116619964159595185">ໂດຍປົກກະຕິເວັບໄຊຈະເຊື່ອມຕໍ່ຫາອຸປະກອນ Bluetooth ສຳລັບຄຸນສົມບັດຕ່າງໆ ເຊັ່ນ: ການຕັ້ງຄ່າ ຫຼື ການຊິ້ງຂໍ້ມູນບີຄອນທີ່ໃຊ້ພະລັງງານຕ່ຳ, ຕົວຕິດຕາມສຸຂະພາບ ຫຼື ການອອກກຳລັງກາຍ ຫຼື ດອກໄຟອັດສະລິຍະ</translation> <translation id="2117655453726830283">ສະໄລ້ຕໍ່ໄປ</translation> <translation id="2119349053129246860">ເປີດໃນ <ph name="APP" /></translation> @@ -3030,6 +3029,7 @@ <translation id="3609277884604412258">ຊອກຫາດ່ວນ</translation> <translation id="3610241585790874201">ບໍ່ໄດ້ອະນຸຍາດໃຫ້ບັນທຶກຂໍ້ມູນຢູ່ອຸປະກອນຂອງທ່ານ</translation> <translation id="3610369246614755442">ພັດລົມຂອງແທ່ນສາກຕ້ອງການສ້ອມແປງ</translation> +<translation id="3610961622607302617">ປ່ຽນລະຫັດຜ່ານສຳລັບ <ph name="WEBSITE" /></translation> <translation id="361106536627977100">ຂໍ້ມູນແຝຼດ</translation> <translation id="3611655097742243705">ເຂົ້າໄປ Play Store ເພື່ອຊອກຫາແອັບເພີ່ມເຕີມ</translation> <translation id="3611658447322220736">ເວັບໄຊທີ່ປິດຫຼ້າສຸດສາມາດສົ່ງ ແລະ ຮັບຂໍ້ມູນໃຫ້ແລ້ວໄດ້</translation> @@ -3271,7 +3271,6 @@ <translation id="380329542618494757">ຊື່</translation> <translation id="3803345858388753269">ຄຸນນະພາບວິດີໂອ</translation> <translation id="3803367742635802571">ເວັບໄຊທີ່ທ່ານເຂົ້າອາດຢຸດການເຮັດວຽກຕາມທີ່ອອກແບບໄວ້</translation> -<translation id="3803583375545057606">ຂໍໃຫ້ພໍ່ແມ່ຂອງທ່ານເປີດການນຳໃຊ້ສ່ວນຂະຫຍາຍນີ້ບໍ?</translation> <translation id="380408572480438692">ການເປີດໃຊ້ງງານການເກັບກໍາຂໍ້ມູນປະຕິບັດຈະຊ່ວຍໃຫ້ Google ປັບປຸງລະບົບໄດ້ຕະຫຼອດເວລາ. ຈະບໍ່ມີການສົ່ງຂໍ້ມູນໃດໃຫ້ຈົນກ່ວາທ່ານຍື່ນບົດລາຍງານຄວາມຄິດເຫັນ (Alt-Shift-I) ແລະລວມເອົາຂໍ້ມູນປະຕິບັດ. ທ່ານສາມາດກັບຄືນໄປຫາໜ້າຈໍນີ້ໄດ້ ເພື່ອປິດໃຊ້ງານການເກັບກໍາໄດ້ທຸກເວລາ.</translation> <translation id="3807249107536149332">ບໍ່ອະນຸຍາດ <ph name="EXTENSION_NAME" /> (ID ສ່ວນຂະຫຍາຍ "<ph name="EXTENSION_ID" />") ຢູ່ໃນໜ້າຈໍເຂົ້າສູ່ລະບົບ.</translation> <translation id="3807747707162121253">ຍົກເລີກ</translation> @@ -3693,7 +3692,6 @@ <translation id="4169535189173047238">ບໍ່ອະນຸຍາດ</translation> <translation id="4170314459383239649">ລຶບລ້າງເມື່ອອອກ</translation> <translation id="417096670996204801">ເລືອກໂປຣໄຟລ໌</translation> -<translation id="41725145403849567">ຂໍໃຫ້ພໍ່ແມ່ຂອງທ່ານເພີ່ມສ່ວນຂະຫຍາຍນີ້ບໍ?</translation> <translation id="4175137578744761569">ສີມ່ວງອ່ອນ ແລະ ສີຂາວ</translation> <translation id="4175737294868205930">ການຈັດເກັບຂໍ້ມູນຕໍ່ເນື່ອງ</translation> <translation id="4176463684765177261">ປິດໃຊ້ງານແລ້ວ</translation> @@ -5106,7 +5104,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN ຕ້ອງມີຢ່າງໜ້ອຍໜຶ່ງຕົວອັກສອນ}other{PIN ຕ້ອງມີຢ່າງໜ້ອຍ # ຕົວອັກສອນ}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> ກຳນົດໃຫ້ທ່ານຕ້ອງເຊື່ອມຕໍ່ກັບ Wi-Fi ຕອນນີ້ ແລະ ດາວໂຫຼດການອັບເດດ. ຫຼື ດາວໂຫຼດຈາກການເຊື່ອມຕໍ່ແບບວັດແທກປະລິມານອິນເຕີເນັດ (ອາດເກັບຄ່າບໍລິການ).</translation> <translation id="5476016146231427848">ກະລຸນາຣີສະຕາດອຸປະກອນຂອງທ່ານເພື່ອໃຊ້ Steam ຢູ່ Chromebook</translation> -<translation id="5476897066181964657">ພໍ່ແມ່ ຫຼື ຜູ້ປົກຄອງຕ້ອງເວົ້າວ່າທ່ານສາມາດເພີ່ມສ່ວນຂະຫຍາຍນີ້ໄດ້</translation> <translation id="5481273127572794904">ບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ດາວໂຫຼດຫຼາຍໄຟລ໌ໂດຍອັດຕະໂນມັດ</translation> <translation id="5481941284378890518">ເພີ່ມເຄື່ອງພິມທີ່ຢູ່ໃກ້ຄຽງ</translation> <translation id="5483785310822538350">ຖອນຄືນໄຟລ໌ ແລະການເຂົ້າຫາອຸປະກອນ</translation> @@ -5203,7 +5200,6 @@ <translation id="5555639311269196631">ປິດຮັອດສະປອດ</translation> <translation id="5556459405103347317">ໂຫຼດຄືນໃໝ່</translation> <translation id="5558129378926964177">ຊູມເຂົ້າ</translation> -<translation id="5558247502209241936">ເປີດການນຳໃຊ້ແອັບໃນໜ້າຈໍ</translation> <translation id="5559311991468302423">ລຶບທີ່ຢູ່</translation> <translation id="55601339223879446">ປັບຂອບເຂດເດັສທັອບຂອງທ່ານຢູ່ພາຍໃນຈໍສະແດງຜົນ</translation> <translation id="5561162485081632007">ກວດຫາ ແລະ ເຕືອນທ່ານກ່ຽວກັບເຫດການອັນຕະລາຍເມື່ອພວກມັນເກີດຂຶ້ນ</translation> @@ -6029,7 +6025,6 @@ <translation id="6305607932814307878">ນະໂຍບາຍທົ່ວໂລກ:</translation> <translation id="6305702903308659374">ຫຼິ້ນໃນລະດັບສຽງປົກກະຕິ ເຖິງແມ່ນວ່າ ChromeVox ກຳລັງເວົ້າຢູ່ກໍຕາມ</translation> <translation id="6305909198255586420">ກະລຸນາຕິດຕັ້ງໂດຍໃຊ້ໂປຣໄຟລ໌ຫຼັກຂອງທ່ານ</translation> -<translation id="630750887748244481">ພໍ່ແມ່ຂອງທ່ານໄດ້ປິດ "ການອະນຸຍາດສຳລັບເວັບໄຊ, ແອັບ ແລະ ສ່ວນຂະຫຍາຍ" ສຳລັບ Chrome ແລ້ວ. ບໍ່ອະນຸຍາດໃຫ້ເພີ່ມສ່ວນຂະຫຍາຍນີ້.</translation> <translation id="6307990684951724544">ລະບົບບໍ່ຫວ່າງ</translation> <translation id="6308493641021088955">ການເຂົ້າສູ່ລະບົບທີ່ໃຫ້ໂດຍ <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">ບັນທຶກລິ້ງເປັນ...</translation> @@ -6050,6 +6045,7 @@ <translation id="6318125393809743217">ຮວມເອົາໄຟລ໌ policies.json ພ້ອມກັບການຕັ້ງຄ່ານະໂຍບາຍ.</translation> <translation id="6318407754858604988">ເລີ່ມດາວໂຫລດແລ້ວ</translation> <translation id="6318944945640833942">ບໍ່ສາມາດກວດພົບເຄື່ອງພິມ. ກະລຸນາປ້ອນທີ່ຢູ່ເຄື່ອງພິມອີກຄັ້ງ.</translation> +<translation id="6320808462673705899">ບໍ່ມີບຸກມາກທີ່ກົງກັບການຊອກຫາຂອງທ່ານ.</translation> <translation id="6322370287306604163">ປົດລັອກໄວຂຶ້ນດ້ວຍລາຍນິ້ວມື</translation> <translation id="6322559670748154781">ໄຟລ໌ນີ້ບໍ່ໄດ້ດາວໂຫຼດໂດຍທົ່ວໄປ ແລະ ຖືກບລັອກໄວ້ໂດຍການປົກປ້ອງຂັ້ນສູງແລ້ວ</translation> <translation id="6324916366299863871">ແກ້ໄຂທາງລັດ</translation> @@ -6855,7 +6851,6 @@ <translation id="7025190659207909717">ການຈັດການເລື່ອງການບໍລິການຂໍ້ມູນມືຖື</translation> <translation id="7025895441903756761">ຄວາມປອດໄພ ແລະ ຄວາມເປັນສ່ວນຕົວ</translation> <translation id="7027258625819743915">{COUNT,plural, =0{ເປີດທັງໝົດໃນ&ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນ}=1{ເປີດໃນ&ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນ}other{ເປີດທັງໝົດ ({COUNT}) ໃນ&ໜ້າຈໍທີ່ບໍ່ເປີດເຜີຍຕົວຕົນ}}</translation> -<translation id="7028057921476386252">ພໍ່ແມ່ ຫຼື ຜູ້ປົກຄອງຕ້ອງເວົ້າວ່າທ່ານສາມາດເປີດການນຳໃຊ້ສ່ວນຂະຫຍາຍນີ້ໄດ້</translation> <translation id="7029307918966275733">ບໍ່ໄດ້ຕິດຕັ້ງ Crostini ກະລຸນາຕິດຕັ້ງ Crostini ເພື່ອເບິ່ງເຄຣດິດ.</translation> <translation id="7029809446516969842">ລະຫັດຜ່ານ</translation> <translation id="7030304022046916278">ສົ່ງ URL ໄປໃຫ້ Safe Browsing ກວດເບິ່ງພວກມັນ</translation> @@ -8231,7 +8226,6 @@ <translation id="8251509999076836464">ກຳລັງຈັບຄູ່ຫາ <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">ເອົາຮູບນ້ອຍອອກໄປແລ້ວ.</translation> <translation id="825238165904109940">ສະແດງ URL ເຕັມທຸກເທື່ອ</translation> -<translation id="8252538334423261825">ບໍ່ສາມາດເພີ່ມສ່ວນຂະຫຍາຍໄດ້</translation> <translation id="8252569384384439529">ກຳລັງອັບໂຫລດ...</translation> <translation id="8253198102038551905">ຄລິກ '+' ເພື່ອເອົາຄຸນສົມບັດເຄືອຂ່າຍ</translation> <translation id="8255212965098517578">ຮູບພາບ, ການແຈ້ງເຕືອນ ແລະ ແອັບຫຼ້າສຸດ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 90eca09..f64deee 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -1343,7 +1343,6 @@ <translation id="2114820389966440614">Čia galite peržiūrėti „Vėliausi svarbiausi“ ir kitus prisiminimus</translation> <translation id="2114896190328250491"><ph name="NAME" /> nuotrauka</translation> <translation id="2114995631896158695">Neįdėta jokių SIM kortelių</translation> -<translation id="2116020356255810305">Įgalinti programos paleidimą per paleistį</translation> <translation id="2116619964159595185">Paprastai svetainėse prisijungiama prie „Bluetooth“ įrenginių vykdant tam tikras funkcijas, pvz., nustatant ar sinchronizuojant žemo energijos lygio signalų siųstuvą, sveikatos ar mankštos stebėjimo priemonę arba išmaniojo šviestuvo lemputę</translation> <translation id="2117655453726830283">Kita skaidrė</translation> <translation id="2119349053129246860">Atidaryti naudojant „<ph name="APP" />“</translation> @@ -3275,7 +3274,6 @@ <translation id="380329542618494757">Vardas ir pavardė</translation> <translation id="3803345858388753269">Vaizdo įrašo kokybė</translation> <translation id="3803367742635802571">Svetainės, kuriose lankotės, gali neveikti taip, kaip numatyta</translation> -<translation id="3803583375545057606">Paprašyti vieno iš tėvų įgalinti šį plėtinį?</translation> <translation id="380408572480438692">Įgalinus našumo duomenų rinkimą „Google“ galės lengviau tobulinti sistemą laikui bėgant. Jokie duomenys nesiunčiami, kol pateikiate atsiliepimų ataskaitą („Alt“ – „Shift“ – I) ir įtraukiate našumo duomenis. Bet kada galite grįžti į šį ekraną ir neleisti rinkti duomenų.</translation> <translation id="3807249107536149332">„<ph name="EXTENSION_NAME" />“ (plėtinio ID <ph name="EXTENSION_ID" />) neleidžiamas prisijungimo ekrane.</translation> <translation id="3807747707162121253">&Atšaukti</translation> @@ -3697,7 +3695,6 @@ <translation id="4169535189173047238">Neleisti</translation> <translation id="4170314459383239649">Išvalyti išeinant</translation> <translation id="417096670996204801">Profilio pasirinkimas</translation> -<translation id="41725145403849567">Paprašyti vieno iš tėvų pridėti šį plėtinį?</translation> <translation id="4175137578744761569">Šviesiai violetinė ir balta</translation> <translation id="4175737294868205930">Nuolatinė saugykla</translation> <translation id="4176463684765177261">Išjungta</translation> @@ -5111,7 +5108,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN kodą turi sudaryti bent vienas simbolis}one{PIN kodą turi sudaryti bent # simbolis}few{PIN kodą turi sudaryti bent # simboliai}many{PIN kodą turi sudaryti bent # simbolio}other{PIN kodą turi sudaryti bent # simbolių}}</translation> <translation id="5474859849784484111">Domenui <ph name="MANAGER" /> reikia, kad dabar prisijungtumėte prie „Wi-Fi“ ir atsisiųstumėte naujinį. Arba atsisiųskite naudodami matuojamą ryšį (gali būti taikomi mokesčiai).</translation> <translation id="5476016146231427848">Paleiskite įrenginį iš naujo, kad galėtumėte naudoti „Steam“ „Chromebook“ įrenginyje</translation> -<translation id="5476897066181964657">Vienas iš tėvų arba globėjas turi patvirtinti, kad galite pridėti šį plėtinį</translation> <translation id="5481273127572794904">Neleidžiama automatiškai atsisiųsti kelių failų</translation> <translation id="5481941284378890518">Pridėti netoliese esančius spausdintuvus</translation> <translation id="5483785310822538350">Anuliuoti galimybę pasiekti failą ir įrenginį</translation> @@ -5208,7 +5204,6 @@ <translation id="5555639311269196631">Išjungti viešosios interneto prieigos tašką</translation> <translation id="5556459405103347317">Įkelti iš naujo</translation> <translation id="5558129378926964177">Artin&ti</translation> -<translation id="5558247502209241936">Įgalinti programos atidarymą lange</translation> <translation id="5559311991468302423">Ištrinti adresą</translation> <translation id="55601339223879446">Sureguliuokite stalinio kompiuterio ribas pagal vaizdą</translation> <translation id="5561162485081632007">Aptinka ir įspėja jus apie pavojingus įvykius, kai jų nutinka</translation> @@ -6035,7 +6030,6 @@ <translation id="6305607932814307878">Visuotinė politika:</translation> <translation id="6305702903308659374">Leisti įprastu garsumu net tada, kai kalba „ChromeVox“</translation> <translation id="6305909198255586420">Įdiekite naudodami pagrindinį profilį</translation> -<translation id="630750887748244481">Jūsų tėvai išjungė svetainių, programų ir plėtinių leidimus sistemoje „Chrome“. Neleidžiama pridėti šio plėtinio.</translation> <translation id="6307990684951724544">Sistema užimta</translation> <translation id="6308493641021088955">Prisijungimo duomenis pateikė „<ph name="EXTENSION_NAME" />“</translation> <translation id="6308937455967653460">Išsaugoti nuorod&ą kaip...</translation> @@ -6867,7 +6861,6 @@ <translation id="7025190659207909717">Duomenų mobiliesiems paslaugos valdymas</translation> <translation id="7025895441903756761">Sauga ir privatumas</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Atidaryti viską &inkognito lange}=1{Atidaryti &inkognito lange}one{Atidaryti viską ({COUNT}) &inkognito lange}few{Atidaryti viską ({COUNT}) &inkognito lange}many{Atidaryti viską ({COUNT}) &inkognito lange}other{Atidaryti viską ({COUNT}) &inkognito lange}}</translation> -<translation id="7028057921476386252">Vienas iš tėvų arba globėjų turi patvirtinti, kad galite įgalinti šį plėtinį</translation> <translation id="7029307918966275733">„Crostini“ neįdiegta. Jei norite peržiūrėti titrus, įdiekite „Crostini“.</translation> <translation id="7029809446516969842">Slaptažodžiai</translation> <translation id="7030304022046916278">Siunčia URL Saugaus naršymo funkcijai, kad juos patikrintų</translation> @@ -8246,7 +8239,6 @@ <translation id="8251509999076836464">Susiejama su „<ph name="DEVICE_NAME" />“</translation> <translation id="8251578425305135684">Miniatiūra pašalinta.</translation> <translation id="825238165904109940">Visada rodyti visus URL</translation> -<translation id="8252538334423261825">Nepavyko pridėti plėtinio</translation> <translation id="8252569384384439529">Įkeliama...</translation> <translation id="8253198102038551905">Spustelėkite „+“, kad peržiūrėtumėte tinklo savybes</translation> <translation id="8255212965098517578">Naujausios nuotraukos, pranešimai ir programos</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 6199a28..8523cf5e 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Nospiediet ESCAPE, lai izlaistu (tikai neoficiāli būvējumi).</translation> <translation id="1093457606523402488">Redzamie tīkli:</translation> <translation id="1095761715416917775">Parūpējieties, lai vienmēr varētu piekļūt sinhronizētajiem datiem</translation> +<translation id="1095879482467973146">Google paroļu pārvaldnieks tīmeklī</translation> <translation id="109647177154844434">Atinstalējot Parallels Desktop, tiks izdzēsts jūsu Windows sistēmas attēls. Tostarp tiks izdzēstas tajā iekļautās lietojumprogrammas, iestatījumi un dati. Vai tiešām vēlaties turpināt?</translation> <translation id="1097016918605049747">Šo lapu nevarēja pārtulkot</translation> <translation id="1097658378307015415">Pirms pierakstāties, uzsāciet viesa sesiju, lai aktivizētu tīklu <ph name="NETWORK_ID" />.</translation> @@ -1329,7 +1330,6 @@ <translation id="2114820389966440614">Skatiet jaunākos labākos fotoattēlus un citas atmiņas šeit</translation> <translation id="2114896190328250491">Fotogrāfs: <ph name="NAME" /></translation> <translation id="2114995631896158695">Nav ievietota SIM karte</translation> -<translation id="2116020356255810305">Iespējot lietotnes palaišanu startēšanas laikā</translation> <translation id="2116619964159595185">Parasti vietnēs tiek veidots savienojums ar Bluetooth ierīcēm, lai nodrošinātu noteiktas funkcijas, piemēram, iestatītu vai sinhronizētu samazināta enerģijas patēriņa signālierīci, veselības uzraudzības vai fizisko aktivitāšu uzskaites ierīci vai viedā apgaismojuma ierīces spuldzīti.</translation> <translation id="2117655453726830283">Nākamais slaids</translation> <translation id="2119349053129246860">Atvērt lietotnē <ph name="APP" /></translation> @@ -1489,6 +1489,7 @@ <translation id="2252017960592955005">Skatīšanas aizsardzība (beta versija)</translation> <translation id="225240747099314620">Atļaut aizsargāta satura identifikatorus (iespējams, būs jārestartē dators)</translation> <translation id="2253318212986772520">Nevar izgūt printera <ph name="PRINTER_NAME" /> PPD failu.</translation> +<translation id="2253927598983295051">Izvēlieties, kādu saturu kopīgot ar lietotni <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Šī ierīce ir bloķēta citā domēnā vai režīmā.</translation> <translation id="2255317897038918278">Microsoft laikspiedola uzlikšana</translation> <translation id="2256115617011615191">Restartēt tūlīt</translation> @@ -1834,6 +1835,7 @@ <translation id="2532589005999780174">Augsta kontrasta režīms</translation> <translation id="2533649878691950253">Šai vietnei tika bloķēta piekļuve informācijai par precīzu jūsu atrašanās vietu, jo jūs parasti to neatļaujat.</translation> <translation id="253434972992662860">&Pauzēt</translation> +<translation id="253498598929009420">Vietne varēs skatīt jūsu ekrāna saturu.</translation> <translation id="253557089021624350">Aktīvo darbību skaits</translation> <translation id="2535799430745250929">Nav mobilā tīkla</translation> <translation id="2537395079978992874">Vietne <ph name="ORIGIN" /> var atvērt un rediģēt tālāk norādītos failus un mapes.</translation> @@ -3256,7 +3258,6 @@ <translation id="380329542618494757">Vārds, uzvārds</translation> <translation id="3803345858388753269">Video kvalitāte</translation> <translation id="3803367742635802571">Apmeklētās vietnes var pārtraukt pienācīgi darboties</translation> -<translation id="3803583375545057606">Vai vēlaties lūgt vecākiem iespējot šo paplašinājumu?</translation> <translation id="380408572480438692">Iespējojot veiktspējas datu apkopošanu, palīdzēsiet uzņēmumam Google laika gaitā uzlabot sistēmu. Kamēr neesat iesniedzis atsauksmi (Alt-Shift-I) un ietvēris veiktspējas datus, dati netiek nosūtīti. Jebkurā brīdī varat atgriezties šajā ekrānā, lai atspējotu apkopošanu.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (paplašinājuma ID “<ph name="EXTENSION_ID" />”) nav atļauts pieteikšanās ekrānā.</translation> <translation id="3807747707162121253">Atcelt</translation> @@ -3678,7 +3679,6 @@ <translation id="4169535189173047238">Neatļaut</translation> <translation id="4170314459383239649">Aizverot notīrīt</translation> <translation id="417096670996204801">Profila izvēle</translation> -<translation id="41725145403849567">Vai vēlaties lūgt vecākiem pievienot šo paplašinājumu?</translation> <translation id="4175137578744761569">Gaiši violeta un balta</translation> <translation id="4175737294868205930">Pastāvīga krātuve</translation> <translation id="4176463684765177261">Atspējota</translation> @@ -5091,7 +5091,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN kodā ir jābūt vismaz vienai rakstzīmei.}zero{PIN kodā ir jābūt vismaz # rakstzīmēm.}one{PIN kodā ir jābūt vismaz # rakstzīmei.}other{PIN kodā ir jābūt vismaz # rakstzīmēm.}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> pieprasa, lai jūs tūlīt izveidotu savienojumu ar Wi-Fi tīklu un lejupielādētu atjauninājumu. Varat arī veikt lejupielādi, izmantojot maksas savienojumu (var tikt piemērota maksa par datu pārraidi).</translation> <translation id="5476016146231427848">Lai varētu izmantot Chromebook datoriem paredzēto lietotni Steam, restartējiet ierīci.</translation> -<translation id="5476897066181964657">Kādam no vecākiem vai aizbildnim ir jāapstiprina, ka jūs drīkstat pievienot šo paplašinājumu.</translation> <translation id="5481273127572794904">Nedrīkst automātiski lejupielādēt vairākus failus</translation> <translation id="5481941284378890518">Pievienot tuvumā esošus printerus</translation> <translation id="5483785310822538350">Atsaukt piekļuvi failiem un ierīcei</translation> @@ -5188,7 +5187,6 @@ <translation id="5555639311269196631">Izslēgt tīklāju</translation> <translation id="5556459405103347317">Pārlādēt</translation> <translation id="5558129378926964177">Tuvināt</translation> -<translation id="5558247502209241936">Iespējot lietotnes atvēršanu logā</translation> <translation id="5559311991468302423">Adreses dzēšana</translation> <translation id="55601339223879446">Pielāgojiet darbvirsmas robežas displejā.</translation> <translation id="5561162485081632007">Kad atgadās bīstami notikumi, tie tiek noteikti un jūs saņemat brīdinājumus.</translation> @@ -6011,7 +6009,6 @@ <translation id="6305607932814307878">Globālā politika:</translation> <translation id="6305702903308659374">Atskaņot parastā skaļumā ChromeVox komentāru izvades laikā</translation> <translation id="6305909198255586420">Lūdzu, instalējiet, izmantojot galveno profilu.</translation> -<translation id="630750887748244481">Viens no jūsu vecākiem ir izslēdzis “Atļaujas vietnēm, lietotnēm un paplašinājumiem” pārlūkam Chrome. Šī paplašinājuma pievienošana nav atļauta.</translation> <translation id="6307990684951724544">Sistēma ir aizņemta.</translation> <translation id="6308493641021088955">Pierakstīšanos nodrošina <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Saglabāt saiti kā...</translation> @@ -6841,7 +6838,6 @@ <translation id="7025190659207909717">Mobilo datu pakalpojumu pārvaldība</translation> <translation id="7025895441903756761">Drošība un konfidencialitāte</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Atvērt visas &inkognito režīma logā}=1{Atvērt &inkognito režīma logā}zero{Atvērt visas ({COUNT}) &inkognito režīma logā}one{Atvērt visas ({COUNT}) &inkognito režīma logā}other{Atvērt visas ({COUNT}) &inkognito režīma logā}}</translation> -<translation id="7028057921476386252">Kādam no vecākiem vai aizbildnim ir jāapstiprina, ka jūs drīkstat iespējot šo paplašinājumu.</translation> <translation id="7029307918966275733">Rīks Crostini nav instalēts. Lai skatītu izstrādātāju informāciju, instalējiet Crostini.</translation> <translation id="7029809446516969842">Paroles</translation> <translation id="7030304022046916278">Vietrāži URL tiek sūtīti uz funkciju Droša pārlūkošana, lai tos pārbaudītu.</translation> @@ -8219,7 +8215,6 @@ <translation id="8251509999076836464">Notiek savienošana pārī ar ierīci “<ph name="DEVICE_NAME" />”</translation> <translation id="8251578425305135684">Sīktēls ir noņemts.</translation> <translation id="825238165904109940">Vienmēr rādīt visus vietrāžus URL</translation> -<translation id="8252538334423261825">Nevar pievienot paplašinājumu</translation> <translation id="8252569384384439529">Notiek augšupielāde...</translation> <translation id="8253198102038551905">Noklikšķiniet uz “+”, lai iegūtu tīkla rekvizītus</translation> <translation id="8255212965098517578">Jaunākie fotoattēli, paziņojumi un lietotnes</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 53ccb15..3e62ba71 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Притиснете ESCAPE за да прескокнете (Само неофицијални верзии).</translation> <translation id="1093457606523402488">Видливи мрежи:</translation> <translation id="1095761715416917775">Погрижете се секогаш да имате пристап до синхронизираните податоци</translation> +<translation id="1095879482467973146">Google Password Manager на интернет</translation> <translation id="109647177154844434">Деинсталирањето на Parallels Desktop ќе ја избрише сликата на Windows. Тоа ги опфаќа апликациите, поставките и податоците. Дали сигурно сакате да продолжите?</translation> <translation id="1097016918605049747">Страницава не може да се преведе</translation> <translation id="1097658378307015415">Пред да се најавите, влезете како Гостин за да ја активирате мрежата <ph name="NETWORK_ID" /></translation> @@ -1340,7 +1341,6 @@ <translation id="2114820389966440614">Гледајте ги „Неодамнешните најдобри моменти“ и други спомени тука</translation> <translation id="2114896190328250491">Фотографија на <ph name="NAME" /></translation> <translation id="2114995631896158695">Не е вметната SIM-картичка</translation> -<translation id="2116020356255810305">Овозможете отворање на апликацијата при стартување</translation> <translation id="2116619964159595185">Сајтовите обично се поврзуваат со уреди со Bluetooth за функции како поставување или синхронизирање ознаки со ниска потрошувачка на енергија, следач на здравје/фитнес или паметна светилка</translation> <translation id="2117655453726830283">Следен слајд</translation> <translation id="2119349053129246860">Отвори во <ph name="APP" /></translation> @@ -1500,6 +1500,7 @@ <translation id="2252017960592955005">Заштита од прегледување (Бета)</translation> <translation id="225240747099314620">Овозможете идентификатори за заштитена содржина (може да биде потребно да се рестартира компјутерот)</translation> <translation id="2253318212986772520">Не може да се вчита PPD за <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Изберете што да се споделува со <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Уредов беше заклучен за друг домен или режим.</translation> <translation id="2255317897038918278">Временско означување на Microsoft</translation> <translation id="2256115617011615191">Рестартирај сега</translation> @@ -1848,6 +1849,7 @@ <translation id="2532589005999780174">Режим на висок контраст</translation> <translation id="2533649878691950253">Сајтов е блокиран за да не ја знае вашата прецизна локација бидејќи обично не го дозволувате ова</translation> <translation id="253434972992662860">&Паузирај</translation> +<translation id="253498598929009420">Сајтот ќе може да ги гледа содржините на вашиот екран</translation> <translation id="253557089021624350">Број на „одржливи настани“</translation> <translation id="2535799430745250929">Нема мобилна мрежа</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> може да ги прегледува и изменува следниве датотеки и папки</translation> @@ -3270,7 +3272,6 @@ <translation id="380329542618494757">Име</translation> <translation id="3803345858388753269">Квалитет на видеото</translation> <translation id="3803367742635802571">Сајтовите што ги посетувате може да прекинат со функционирање како што се дизајнирани</translation> -<translation id="3803583375545057606">Дали ќе побараш одобрување од родителот за да ја овозможиш екстензијава?</translation> <translation id="380408572480438692">Со овозможување собирање податоци за учинок, му се помага на Google со време да го подобри системот. Не се испраќаат податоци додека не поднесете извештај со повратни информации (Alt-Shift-I) и не ги опфатите податоците за учинок. Во секое време може да се вратите на екранов за да оневозможите собирање податоци.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ИД на екстензија „<ph name="EXTENSION_ID" />“) не е дозволена на екранот за најавување.</translation> <translation id="3807747707162121253">&Откажи</translation> @@ -3692,7 +3693,6 @@ <translation id="4169535189173047238">Не дозволувај</translation> <translation id="4170314459383239649">Исчисти на излез</translation> <translation id="417096670996204801">Изберете профил</translation> -<translation id="41725145403849567">Дали ќе побараш одобрување од родителот за да ја додадеш екстензијава?</translation> <translation id="4175137578744761569">Светловиолеотова и бела</translation> <translation id="4175737294868205930">Постојана меморија</translation> <translation id="4176463684765177261">Оневозможено</translation> @@ -5106,7 +5106,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-кодот мора да содржи најмалку еден знак}one{PIN-кодот мора да содржи најмалку # знак}other{PIN-кодот мора да содржи најмалку # знака}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> бара веднаш да се поврзете на Wi-Fi и да преземете ажурирање. Може да го преземете и преку врска со ограничен интернет (може да ви се наплати).</translation> <translation id="5476016146231427848">Рестартирајте го уредот за да ја користите Steam на Chromebook</translation> -<translation id="5476897066181964657">Родител или старател мора да одобри за да ја додадеш екстензијава</translation> <translation id="5481273127572794904">Не им е дозволено автоматски да преземаат повеќе датотеки</translation> <translation id="5481941284378890518">Додај печатачи во близина</translation> <translation id="5483785310822538350">Отповикај го пристапот до датотеката и уредот</translation> @@ -5203,7 +5202,6 @@ <translation id="5555639311269196631">Исклучување на точката на пристап</translation> <translation id="5556459405103347317">Повторно вчитај</translation> <translation id="5558129378926964177">Зумир&ај</translation> -<translation id="5558247502209241936">Овозможете отворање на апликацијата во прозорец</translation> <translation id="5559311991468302423">Избришете ја адресата</translation> <translation id="55601339223879446">Приспособете ги границите на работната површина во рамките на екранот</translation> <translation id="5561162485081632007">Открива опасни настани и ве предупредува кога ќе се случат</translation> @@ -6029,7 +6027,6 @@ <translation id="6305607932814307878">Глобална политика:</translation> <translation id="6305702903308659374">Пуштај со нормална јачина на звук дури и кога зборува ChromeVox</translation> <translation id="6305909198255586420">Инсталирајте преку вашиот примарен профил</translation> -<translation id="630750887748244481">Родителот исклучил „Дозволи за сајтови, апликации и екстензии“ за Chrome. Додавањето на екстензијава не е дозволено.</translation> <translation id="6307990684951724544">Системот е зафатен</translation> <translation id="6308493641021088955">Најавувањето го овозможува <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Сними ја врс&ката како…</translation> @@ -6857,7 +6854,6 @@ <translation id="7025190659207909717">Управување со услуги за мобилен интернет</translation> <translation id="7025895441903756761">Безбедност и приватност</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Отвори ги сите во &прозорец „Инкогнито“}=1{Отвори во &прозорец „Инкогнито“}one{Отвори ги сите ({COUNT}) во &прозорец „Инкогнито“}other{Отвори ги сите ({COUNT}) во &прозорец „Инкогнито“}}</translation> -<translation id="7028057921476386252">Родител или старател мора да одобри за да ја овозможиш екстензијава</translation> <translation id="7029307918966275733">Нема инсталирано Crostini. Инсталирајте Crostini за да ги прегледате благодарностите.</translation> <translation id="7029809446516969842">Лозинки</translation> <translation id="7030304022046916278">Испраќа URL-адреси во „Безбедно прелистување“ за да се проверат</translation> @@ -8235,7 +8231,6 @@ <translation id="8251509999076836464">Се спарува со <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Отстранета сликичка.</translation> <translation id="825238165904109940">Секогаш прикажувај ги целосните URL-адреси</translation> -<translation id="8252538334423261825">Не може да се додаде екстензија</translation> <translation id="8252569384384439529">Се прикачува…</translation> <translation id="8253198102038551905">Кликнете на „+" за да ги добиете својствата на мрежата</translation> <translation id="8255212965098517578">Неодамнешни фотографии, известувања и апликации</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index a20a838d..93365d4 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">ഒഴിവാക്കുന്നതിനായി ESCAPE അമർത്തുക (അനൗദ്യോഗിക നിർമ്മിതകൾക്ക് മാത്രം).</translation> <translation id="1093457606523402488">ദൃശ്യമാകുന്ന നെറ്റ്വർക്കുകൾ:</translation> <translation id="1095761715416917775">സമന്വയിപ്പിക്കുന്ന ഡാറ്റ നിങ്ങൾക്ക് എല്ലായ്പ്പോഴും ആക്സസ് ചെയ്യാനാകുമെന്ന് ഉറപ്പാക്കുക</translation> +<translation id="1095879482467973146">വെബിലെ Google Password Manager</translation> <translation id="109647177154844434">Parallels Desktop അൺഇൻസ്റ്റാൾ ചെയ്യുന്നത്, നിങ്ങളുടെ Windows ചിത്രം ഇല്ലാതാക്കും. ഇതിന്റെ ആപ്പുകളും ക്രമീകരണവും ഡാറ്റയും ഇതിൽ ഉൾപ്പെടുന്നു. തുടരണമെന്ന് തീർച്ചയാണോ?</translation> <translation id="1097016918605049747">ഈ പേജ് വിവർത്തനം ചെയ്യാനാകുന്നില്ല</translation> <translation id="1097658378307015415">സൈൻ ഇൻ ചെയ്യുന്നതിന് മുമ്പ്, <ph name="NETWORK_ID" /> സജീവമാക്കാൻ അതിഥിയായി പ്രവേശിക്കുക</translation> @@ -1326,7 +1327,6 @@ <translation id="2114820389966440614">"അടുത്തിടെയുള്ള ഹൈലൈറ്റുകളും" മറ്റ് ഫോട്ടോകളും ഇവിടെ കാണുക</translation> <translation id="2114896190328250491"><ph name="NAME" /> എന്നയാൾ എടുത്ത ഫോട്ടോ</translation> <translation id="2114995631896158695">സിം കാർഡ് ഇട്ടിട്ടില്ല</translation> -<translation id="2116020356255810305">ആരംഭത്തിൽ ലോഞ്ചിംഗ് ആപ്പ് പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="2116619964159595185">ലോ എനർജി ബീക്കൺ, ആരോഗ്യ ഫിറ്റ്നസ് ട്രാക്കർ അല്ലെങ്കിൽ സ്മാർട്ട് ലൈറ്റ് ബൾബ് സജ്ജീകരിക്കുന്നതോ സമന്വയിപ്പിക്കുന്നതോ പോലുള്ള ഫീച്ചറുകൾക്ക്, സൈറ്റുകൾ സാധാരണയായി Bluetooth ഉപകരണങ്ങളിലേക്ക് കണക്റ്റ് ചെയ്യാറുണ്ട്</translation> <translation id="2117655453726830283">അടുത്ത സ്ലൈഡ്</translation> <translation id="2119349053129246860"><ph name="APP" /> ആപ്പിൽ തുറക്കുക</translation> @@ -1486,6 +1486,7 @@ <translation id="2252017960592955005">കാണുന്നതുമായി ബന്ധപ്പെട്ട പരിരക്ഷ (ബീറ്റ)</translation> <translation id="225240747099314620">പരിരക്ഷിത ഉള്ളടക്കത്തിന് ഐഡന്റിഫയറുകൾ അനുവദിക്കുക (കമ്പ്യൂട്ടർ പുനരാരംഭിക്കുന്നത് ആവശ്യമായി വരാം)</translation> <translation id="2253318212986772520"><ph name="PRINTER_NAME" /> എന്നതിനുള്ള PPD വീണ്ടെടുക്കാനായില്ല.</translation> +<translation id="2253927598983295051"><ph name="APP_NAME" /> എന്നതുമായി എന്താണ് പങ്കിടേണ്ടത് എന്നു തിരഞ്ഞെടുക്കുക</translation> <translation id="2255077166240162850">മറ്റൊരു ഡൊമെയ്നോ മോഡോ ഉപയോഗിച്ച് ഈ ഉപകരണം ലോക്ക് ചെയ്തിരിക്കുന്നു.</translation> <translation id="2255317897038918278">Microsoft Time Stamping</translation> <translation id="2256115617011615191">ഇപ്പോൾ വീണ്ടും ആരംഭിക്കുക</translation> @@ -1831,6 +1832,7 @@ <translation id="2532589005999780174">ഉയർന്ന ദൃശ്യതീവ്രത മോഡ്</translation> <translation id="2533649878691950253">നിങ്ങൾ സാധാരണയായി അനുവാദം നൽകാത്തതിനാൽ നിങ്ങളുടെ കൃത്യമായ ലൊക്കേഷൻ അറിയുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ ബ്ലോക്ക് ചെയ്തു</translation> <translation id="253434972992662860">&താല്ക്കാലികമായി നിര്ത്തുക</translation> +<translation id="253498598929009420">സൈറ്റിന് നിങ്ങളുടെ സ്ക്രീനിലെ ഉള്ളടക്കങ്ങൾ കാണാൻ സാധിക്കും</translation> <translation id="253557089021624350">കണക്ഷൻ നിലനിർത്താനുള്ള ആക്റ്റിവിറ്റികളുടെ എണ്ണം</translation> <translation id="2535799430745250929">സെല്ലുലാർ നെറ്റ്വർക്കൊന്നും നിലവിലില്ല</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> എന്നതിന് ഇനിപ്പറയുന്ന ഫയലുകളും ഫോൾഡറുകളും കാണാനും എഡിറ്റ് ചെയ്യാനും കഴിയും</translation> @@ -3253,7 +3255,6 @@ <translation id="380329542618494757">പേര്</translation> <translation id="3803345858388753269">വീഡിയോ നിലവാരം</translation> <translation id="3803367742635802571">നിങ്ങൾ സന്ദർശിക്കുന്ന സൈറ്റുകൾ, രൂപകൽപ്പന ചെയ്ത രീതിയിൽ പ്രവർത്തിക്കുന്നത് നിർത്തിയേക്കാം</translation> -<translation id="3803583375545057606">ഈ വിപുലീകരണം പ്രവർത്തനക്ഷമമാക്കാൻ നിങ്ങളുടെ രക്ഷിതാവിനോട് ആവശ്യപ്പെടണോ?</translation> <translation id="380408572480438692">പ്രകടന ഡാറ്റയുടെ ശേഖരം പ്രവർത്തനക്ഷമമാക്കുന്നത് കാലാന്തരത്തിൽ സിസ്റ്റം മെച്ചപ്പെടുത്താൻ Google-നെ സഹായിക്കും. നിങ്ങൾ ഒരു ഫീഡ്ബാക്ക് റിപ്പോർട്ട് ഫയൽ ചെയ്യുന്നതുവരെയും (Alt-Shift-I) പ്രകടന ഡാറ്റ ഉൾപ്പെടുത്തുന്നതുവരെയും ഡാറ്റയൊന്നും അയയ്ക്കില്ല. ശേഖരം പ്രവർത്തനരഹിതമാക്കാനായി നിങ്ങൾക്ക് എപ്പോൾ വേണമെങ്കിലും ഈ സ്ക്രീനിലേക്ക് തിരിച്ചുവരാനാകും.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> ("<ph name="EXTENSION_ID" />" വിപുലീകരണ ഐഡി) ലോഗിൻ സ്ക്രീനിൽ അനുവദനീയമല്ല.</translation> <translation id="3807747707162121253">&റദ്ദാക്കൂ</translation> @@ -3674,7 +3675,6 @@ <translation id="4169535189173047238">അനുവദിക്കരുത്</translation> <translation id="4170314459383239649">പുറത്തുകടക്കുമ്പോൾ മായ്ക്കുക</translation> <translation id="417096670996204801">ഒരു പ്രൊഫൈൽ തിരഞ്ഞെടുക്കുക</translation> -<translation id="41725145403849567">ഈ വിപുലീകരണം ചേർക്കാൻ നിങ്ങളുടെ രക്ഷിതാവിനോട് ആവശ്യപ്പെടണോ?</translation> <translation id="4175137578744761569">ഇളം പർപ്പിളും വെള്ളയും</translation> <translation id="4175737294868205930">സ്ഥിരമായ സ്റ്റോറേജ്</translation> <translation id="4176463684765177261">അപ്രാപ്തമാക്കി</translation> @@ -5087,7 +5087,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{പിന്നിൽ ഒരു പ്രതീകമെങ്കിലും ഉണ്ടാകണം}other{പിന്നിൽ # പ്രതീകങ്ങളെങ്കിലും ഉണ്ടാകണം}}</translation> <translation id="5474859849784484111">നിങ്ങൾ ഇപ്പോൾ വൈഫൈയിൽ കണക്റ്റ് ചെയ്ത് അപ്ഡേറ്റ് ഡൗൺലോഡ് ചെയ്യാൻ <ph name="MANAGER" /> ആവശ്യപ്പെടുന്നു. അല്ലെങ്കിൽ, മീറ്റർ ചെയ്ത കണക്ഷനിൽ നിന്ന് ഡൗൺലോഡ് ചെയ്യുക (നിരക്കുകൾ ബാധകമായേക്കാം).</translation> <translation id="5476016146231427848">Chromebook-ൽ Steam ഉപയോഗിക്കാൻ നിങ്ങളുടെ ഉപകരണം റീസ്റ്റാർട്ട് ചെയ്യുക</translation> -<translation id="5476897066181964657">നിങ്ങൾക്ക് ഈ വിപുലീകരണം ചേർക്കാമെന്ന് രക്ഷിതാവോ നിയമപരമായ പ്രതിനിധിയോ പറയേണ്ടതുണ്ട്</translation> <translation id="5481273127572794904">ഒന്നിലധികം ഫയലുകൾ സ്വയമേവ ഡൗൺലോഡ് ചെയ്യാൻ അനുവാദമില്ല</translation> <translation id="5481941284378890518">സമീപത്തുള്ള പ്രിന്ററുകൾ ചേർക്കുക</translation> <translation id="5483785310822538350">ഫയലിലേക്കും ഉപകരണത്തിലേക്കുമുള്ള ആക്സസ് റദ്ദാക്കുക</translation> @@ -5184,7 +5183,6 @@ <translation id="5555639311269196631">ഹോട്ട്സ്പോട്ട് ഓഫാക്കുക</translation> <translation id="5556459405103347317">വീണ്ടും ലോഡ് ചെയ്യുക</translation> <translation id="5558129378926964177">സൂം ഇൻ ചെയ്യുക</translation> -<translation id="5558247502209241936">ആപ്പ് വിൻഡോയിൽ തുറക്കുന്നത് പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="5559311991468302423">വിലാസം ഇല്ലാതാക്കുക</translation> <translation id="55601339223879446">ഡിസ്പ്ലേയിൽ നിങ്ങളുടെ ഡെസ്ക്ടോപ്പിന്റെ ബൗണ്ടറികൾ ക്രമീകരിക്കുക</translation> <translation id="5561162485081632007">അപകടകരമായ ഇവന്റുകൾ നടക്കുമ്പോൾ അവ കണ്ടെത്തുകയും നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകുകയും ചെയ്യുന്നു</translation> @@ -6012,7 +6010,6 @@ <translation id="6305607932814307878">ആഗോള നയം:</translation> <translation id="6305702903308659374">ChromeVox സംസാരിക്കുകയാണെങ്കിലും സാധാരണ ശബ്ദത്തിൽ പ്ലേ ചെയ്യുക</translation> <translation id="6305909198255586420">നിങ്ങളുടെ പ്രാഥമിക പ്രൊഫൈൽ ഉപയോഗിച്ച് ഇൻസ്റ്റാൾ ചെയ്യുക</translation> -<translation id="630750887748244481">നിങ്ങളുടെ രക്ഷിതാവ് Chrome-നുള്ള "സൈറ്റുകൾക്കും ആപ്പുകൾക്കും വിപുലീകരണങ്ങൾക്കുമുള്ള അനുമതികൾ" ഓഫാക്കി. ഈ വിപുലീകരണം ചേർക്കുന്നത് അനുവദനീയമല്ല.</translation> <translation id="6307990684951724544">സിസ്റ്റം തിരക്കിലാണ്</translation> <translation id="6308493641021088955">സൈൻ ഇൻ ലഭ്യമാക്കിയത് <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">ലി&ങ്ക് ഇതായി സംരക്ഷിക്കുക...</translation> @@ -6838,7 +6835,6 @@ <translation id="7025190659207909717">മൊബൈല് ഡാറ്റ സേവന മാനേജ്മെന്റ്</translation> <translation id="7025895441903756761">സുരക്ഷയും സ്വകാര്യതയും</translation> <translation id="7027258625819743915">{COUNT,plural, =0{എല്ലാം &അദൃശ്യ വിൻഡോയിൽ തുറക്കുക}=1{&അദൃശ്യ വിൻഡോയിൽ തുറക്കുക}other{എല്ലാം ({COUNT}) &അദൃശ്യ വിൻഡോയിൽ തുറക്കുക}}</translation> -<translation id="7028057921476386252">നിങ്ങൾക്ക് ഈ വിപുലീകരണം പ്രവർത്തനക്ഷമമാക്കാമെന്ന് രക്ഷിതാവോ നിയമപരമായ പ്രതിനിധിയോ പറയേണ്ടതുണ്ട്</translation> <translation id="7029307918966275733">Crostini ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. ക്രെഡിറ്റുകൾ കാണാൻ Crostini ഇൻസ്റ്റാൾ ചെയ്യുക.</translation> <translation id="7029809446516969842">പാസ്വേഡുകള്</translation> <translation id="7030304022046916278">URL-കൾ പരിശോധിക്കുന്നതിന് അവ സുരക്ഷിത ബ്രൗസിംഗിലേക്ക് അയയ്ക്കുന്നു</translation> @@ -8216,7 +8212,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> എന്നതുമായി ജോടിയാക്കുന്നു</translation> <translation id="8251578425305135684">ലഘുചിത്രം നീക്കംചെയ്തു.</translation> <translation id="825238165904109940">എപ്പോഴും പൂർണ്ണ URL-കൾ കാണിക്കുക</translation> -<translation id="8252538334423261825">വിപുലീകരണം ചേർക്കാനാകുന്നില്ല</translation> <translation id="8252569384384439529">അപ്ലോഡ് ചെയ്യുന്നു...</translation> <translation id="8253198102038551905">നെറ്റ്വർക്ക് പ്രോപ്പർട്ടികൾ ലഭിക്കാൻ '+' ക്ലിക്ക് ചെയ്യുക</translation> <translation id="8255212965098517578">പുതിയ ഫോട്ടോകൾ, അറിയിപ്പുകൾ, ആപ്പുകൾ</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 5be285c1..cdb57cea 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -1336,7 +1336,6 @@ <translation id="2114820389966440614">"Сүүлийн үеийн онцлох зургууд" болон бусад дурсамжийг эндээс харна уу</translation> <translation id="2114896190328250491"><ph name="NAME" />-н зураг</translation> <translation id="2114995631896158695">Ямар ч SIM карт оруулаагүй байна</translation> -<translation id="2116020356255810305">Эхлэлд апп эхлүүлэхийг идэвхжүүлэх</translation> <translation id="2116619964159595185">Сайтууд ихэвчлэн бага эрчим хүчний дохионы цамхаг, эрүүл мэнд, фитнесийн хянагч эсвэл ухаалаг гэрлийн чийдэн тохируулах, синк хийх зэрэг онцлогуудад зориулж Bluetooth төхөөрөмжүүдэд холбогддог</translation> <translation id="2117655453726830283">Дараагийн слайд</translation> <translation id="2119349053129246860"><ph name="APP" />-д нээх</translation> @@ -3268,7 +3267,6 @@ <translation id="380329542618494757">Нэр</translation> <translation id="3803345858388753269">Видеоны чанар</translation> <translation id="3803367742635802571">Таны зочилсон сайтууд зориулалтынхаа дагуу ажиллахаа больж магадгүй</translation> -<translation id="3803583375545057606">Эцэг эхээсээ энэ өргөтгөлийг идэвхжүүлэхийг хүсэх үү?</translation> <translation id="380408572480438692">Гүйцэтгэлийн мэдээлэл цуглуулах ажиллагааг идэвхжүүлэх нь Google-д цаг тутам ситемээ сайжруулахад туслах болно. Та санал хүсэлтийн тайланг илгээж (Alt-Shift-I), гүйцэтгэлийн мэдээллийг оруулах хүртэл ямар нэг өгөгдөл илгээгдэхгүй. Та энэ дэлгэц дээр буцаж ямар ч үед мэдээлэл цуглуулах ажиллагааг идэвхгүй болгож болно.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" />-г (өргөтгөх ID "<ph name="EXTENSION_ID" />") нэвтрэх хэсэгт зөвшөөрөөгүй байна.</translation> <translation id="3807747707162121253">&Цуцлах</translation> @@ -3689,7 +3687,6 @@ <translation id="4169535189173047238">Зөвшөөрөхгүй</translation> <translation id="4170314459383239649">Гарахад устгах</translation> <translation id="417096670996204801">Профайл сонгох</translation> -<translation id="41725145403849567">Эцэг эхээсээ энэ өргөтгөлийг нэмэхийг хүсэх үү?</translation> <translation id="4175137578744761569">Цайвар ягаан ба цагаан</translation> <translation id="4175737294868205930">Байнгын сан</translation> <translation id="4176463684765177261">Хаасан</translation> @@ -5103,7 +5100,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{ПИН хамгийн багадаа 1 тэмдэгттэй байх ёстой}other{ПИН хамгийн багадаа # тэмдэгттэй байх ёстой}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> таныг одоо Wi-Fi-д холбогдож, шинэчлэлт татахыг шаардаж байна. Эсвэл хязгаартай холболтоос татаж авна уу (төлбөр гарч болзошгүй).</translation> <translation id="5476016146231427848">Chromebook дээр Steam-г ашиглахын тулд төхөөрөмжөө дахин эхлүүлнэ үү</translation> -<translation id="5476897066181964657">Эцэг эх эсвэл асран хамгаалагч таныг энэ өргөтгөлийг нэмж БОЛНО гэж хэлэх ёстой</translation> <translation id="5481273127572794904">Автоматаар олон файл татахыг зөвшөөрөөгүй</translation> <translation id="5481941284378890518">Ойролцоох хэвлэгчийг нэмэх</translation> <translation id="5483785310822538350">Файл болон төхөөрөмжид хандах хандалтыг цуцлах</translation> @@ -5200,7 +5196,6 @@ <translation id="5555639311269196631">Сүлжээний цэгийг унтраах</translation> <translation id="5556459405103347317">Дахин ачаал</translation> <translation id="5558129378926964177">Томруул</translation> -<translation id="5558247502209241936">Аппыг цонхонд нээхийг идэвхжүүлэх</translation> <translation id="5559311991468302423">Хаягийг устгах</translation> <translation id="55601339223879446">Компьютерийн хилийг дэлгэцэд тохируулах</translation> <translation id="5561162485081632007">Аюултай үйл явдал тохиолдох үед түүнийг илрүүлж, танд анхааруулдаг</translation> @@ -6026,7 +6021,6 @@ <translation id="6305607932814307878">Олон улсын удирдамж:</translation> <translation id="6305702903308659374">ChromeVox-г ярьж байх үед энгийн төвшинд тоглуулна уу</translation> <translation id="6305909198255586420">Үндсэн профайлаа ашиглан суулгана уу</translation> -<translation id="630750887748244481">Таны эцэг эх Chrome-д "Сайтууд, аппууд болон өргөтгөлүүдийн зөвшөөрөл"-ийг унтраасан байна. Энэ өргөтгөлийг нэмэхийг зөвшөөрөхгүй.</translation> <translation id="6307990684951724544">Систем завгүй байна</translation> <translation id="6308493641021088955">Нэвтрэх үйлчилгээ үзүүлэгч: <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Холбоосыг ... хэлбэрээр хадгалах</translation> @@ -6852,7 +6846,6 @@ <translation id="7025190659207909717">Гар утасны өгөгдлийн үйлчилгээний менежмент</translation> <translation id="7025895441903756761">Аюулгүй байдал болон нууцлал</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Бүгдийг &Нууцлалтай цонхонд нээх}=1{&Нууцлалтай цонхонд нээх}other{Бүгдийг ({COUNT}) &Нууцлалтай цонхонд нээх}}</translation> -<translation id="7028057921476386252">Эцэг эх эсвэл асран хамгаалагч таныг энэ өргөтгөлийг идэвхжүүлж БОЛНО гэж хэлэх ёстой</translation> <translation id="7029307918966275733">Crostini-г суулгаагүй байна. Кредитийг харахын тулд Crostini-г суулгана уу.</translation> <translation id="7029809446516969842">Нууц үг</translation> <translation id="7030304022046916278">URL-г шалгуулахаар Аюулгүй үзэх рүү илгээнэ</translation> @@ -8228,7 +8221,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" />-тай хослуулж байна</translation> <translation id="8251578425305135684">Жижиг зураг устгагдсан.</translation> <translation id="825238165904109940">Үргэлж бүтэн URL-г харуулах</translation> -<translation id="8252538334423261825">Өргөтгөл нэмэх боломжгүй</translation> <translation id="8252569384384439529">Байршуулж байна...</translation> <translation id="8253198102038551905">Сүлжээний хандалтын сонголтыг нэмэгдүүлэхийн тулд '+' дээр дарна уу</translation> <translation id="8255212965098517578">Саяхны зураг, мэдэгдлүүд болон аппууд</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 04440201..470115b 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1339,7 +1339,6 @@ <translation id="2114820389966440614">"अलीकडील हायलाइट" आणि इतर मेमरी येथे पहा</translation> <translation id="2114896190328250491"><ph name="NAME" /> चे फोटो</translation> <translation id="2114995631896158695">सिम कार्ड घातलेले नाही.</translation> -<translation id="2116020356255810305">सुरू केल्यावर ॲप लाँच करणे सुरू करा</translation> <translation id="2116619964159595185">कमी ऊर्जेचे बीकन, आरोग्य किंवा फिटनेस ट्रॅकर अथवा स्मार्ट लाइट बल्ब सेट करणे किंवा सिंक करणे यांसारख्या वैशिष्ट्यांसाठी साइट सामान्यपणे ब्लूटूथ डिव्हाइसशी कनेक्ट करतात</translation> <translation id="2117655453726830283">पुढील स्लाइड</translation> <translation id="2119349053129246860"><ph name="APP" /> मध्ये उघडा</translation> @@ -3271,7 +3270,6 @@ <translation id="380329542618494757">नाव</translation> <translation id="3803345858388753269">व्हिडिओची गुणवत्ता</translation> <translation id="3803367742635802571">तुम्ही भेट देता त्या साइट कदाचित डिझाइन केल्यानुसार काम करणे थांबवतील</translation> -<translation id="3803583375545057606">तुमच्या पालकांना हे एक्स्टेंशन सुरू करण्यास सांगायचे आहे का?</translation> <translation id="380408572480438692">परफॉर्मन्स डेटाचे कलेक्शन सुरू केल्याने सिस्टममध्ये वेळोवेळी सुधारणा करण्यात Google ला मदत होईल. तुम्ही एक फीडबॅक अहवाल दाखल करेपर्यंत (Alt-Shift-I) आणि परफॉर्मन्स डेटा समाविष्ट करेपर्यंत कोणताही डेटा पाठवला जात नाही. कलेक्शन अक्षम करण्यासाठी तुम्ही या स्क्रीनवर कधीही परत येऊ शकता.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> लॉगिन स्क्रीनवर (एक्स्टेंशन ID "<ph name="EXTENSION_ID" />") ची अनुमती नाही.</translation> <translation id="3807747707162121253">&रद्द करा</translation> @@ -3691,7 +3689,6 @@ <translation id="4169535189173047238">अनुमती देऊ नका</translation> <translation id="4170314459383239649">बाहेर पडताना साफ करा</translation> <translation id="417096670996204801">प्रोफाइल निवडा</translation> -<translation id="41725145403849567">तुमच्या पालकांना हे एक्स्टेंशन जोडायला सांगायचे आहे का?</translation> <translation id="4175137578744761569">फिकट जांभळा आणि पांढरा</translation> <translation id="4175737294868205930">सातत्यपूर्ण स्टोरेज</translation> <translation id="4176463684765177261">अक्षम केले</translation> @@ -5105,7 +5102,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{पिन हा किमान एका वर्णाचा असणे आवश्यक आहे}other{पिन हा किमान # वर्णांचा असणे आवश्यक आहे}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> नुसार तुम्ही आता वाय-फायशी कनेक्ट करून अपडेट डाउनलोड करणे आवश्यक आहे. किंवा मर्यादित कनेक्शनमधून डाउनलोड करा (शुल्क लागू शकते).</translation> <translation id="5476016146231427848">Chromebook वर Steam वापरण्यासाठी कृपया तुमचे डिव्हाइस रीस्टार्ट करा</translation> -<translation id="5476897066181964657">तुम्ही हे एक्स्टेंशन जोडू शकता अशी पालकांनी मंजुरी देणे आवश्यक आहे</translation> <translation id="5481273127572794904">एकाहून अधिक फाइल आपोआप डाउनलोड करण्याची अनुमती नाही</translation> <translation id="5481941284378890518">जवळपासचे प्रिंटर जोडा</translation> <translation id="5483785310822538350">फाइल आणि डिव्हाइस ॲक्सेस रद्द करा</translation> @@ -5202,7 +5198,6 @@ <translation id="5555639311269196631">हॉटस्पॉट बंद करा</translation> <translation id="5556459405103347317">रीलोड करा</translation> <translation id="5558129378926964177">झूम &वाढवा</translation> -<translation id="5558247502209241936">विंडोमध्ये ॲप उघडणे सुरू करा</translation> <translation id="5559311991468302423">पत्ता हटवा</translation> <translation id="55601339223879446">डिस्प्लेामध्ये तुमच्या डेस्कटॉपच्या सीमा समायोजित करा</translation> <translation id="5561162485081632007">धोकादायक घटना ओळखते आणि त्या घडल्यावर तुम्हाला चेतावणी देते</translation> @@ -6029,7 +6024,6 @@ <translation id="6305607932814307878">जागतिक धोरण:</translation> <translation id="6305702903308659374">ChromeVox बोलत असताना देखील सामान्य व्हॉल्यूममध्ये प्ले करा</translation> <translation id="6305909198255586420">कृपया तुमची प्राथमिक प्रोफाइल वापरून इंस्टॉल करा</translation> -<translation id="630750887748244481">तुमच्या पालकांनी Chrome साठी "साइट, अॅप्स आणि एक्स्टेंशनकरिता परवानग्या" बंद केल्या आहेत. हे एक्स्टेंशन जोडण्याची अनुमती नाही.</translation> <translation id="6307990684951724544">सिस्टीम व्यस्त</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ने पुरवलेले साइन इन</translation> <translation id="6308937455967653460">या फॉरमॅटमध्ये लिंक सेव्ह करा...</translation> @@ -6855,7 +6849,6 @@ <translation id="7025190659207909717">मोबाइल डेटा सेवा व्यवस्थापन</translation> <translation id="7025895441903756761">सुरक्षा आणि गोपनीयता</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Open All in Incognito Window}=1{गुप्त विंडोमध्ये उघडा}other{सर्व ({COUNT}) गुप्त विंडोमध्ये उघडा}}</translation> -<translation id="7028057921476386252">तुम्ही हे एक्स्टेंशन सुरू करू शकता अशी पालकांनी मंजुरी देणे आवश्यक आहे</translation> <translation id="7029307918966275733">Crostini इंस्टॉल केलेले नाही. क्रेडिट पाहण्यासाठी कृपया Crostini इंस्टॉल करा.</translation> <translation id="7029809446516969842">पासवर्ड</translation> <translation id="7030304022046916278">URLs तपासण्यासाठी त्या सुरक्षित ब्राउझिंग ला पाठवते</translation> @@ -8232,7 +8225,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> सोबत पेअर करत आहे</translation> <translation id="8251578425305135684">थंबनेल काढली.</translation> <translation id="825238165904109940">नेहमी पूर्ण URL दाखवा</translation> -<translation id="8252538334423261825">एक्स्टेंशन जोडू शकत नाही</translation> <translation id="8252569384384439529">अपलोड करत आहे…</translation> <translation id="8253198102038551905">नेटवर्क गुणधर्म मिळविण्यासाठी '+' क्लिक करा</translation> <translation id="8255212965098517578">अलीकडील फोटो, सूचना आणि अॅप्स</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 4851f4c..67a88c8 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">Lihat "Sorotan Terbaharu" dan kenangan lain di sini</translation> <translation id="2114896190328250491">Foto oleh <ph name="NAME" /></translation> <translation id="2114995631896158695">Tiada kad SIM dimasukkan</translation> -<translation id="2116020356255810305">Dayakan pelancaran apl semasa permulaan</translation> <translation id="2116619964159595185">Laman biasanya menyambung kepada peranti Bluetooth untuk ciri seperti menyediakan atau menyegerakkan bikon tenaga rendah, penjejak kesihatan atau kecergasan atau mentol lampu pintar</translation> <translation id="2117655453726830283">Slaid seterusnya</translation> <translation id="2119349053129246860">Buka dalam <ph name="APP" /></translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">Nama</translation> <translation id="3803345858388753269">Kualiti Video</translation> <translation id="3803367742635802571">Laman yang anda lawati mungkin berhenti berfungsi seperti yang direka</translation> -<translation id="3803583375545057606">Minta ibu/bapa anda mendayakan sambungan ini?</translation> <translation id="380408572480438692">Tindakan mendayakan pengumpulan data prestasi akan membantu Google menambah baik sistem dengan berlalunya masa. Tiada data dihantar sehingga anda memfailkan laporan maklum balas (Alt-Shift-I) dan menyertakan data prestasi. Anda boleh kembali ke skrin ini untuk melumpuhkan pengumpulan pada bila-bila masa.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ID sambungan "<ph name="EXTENSION_ID" />") tidak dibenarkan pada skrin log masuk.</translation> <translation id="3807747707162121253">&Batal</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Jangan benarkan</translation> <translation id="4170314459383239649">Kosongkan Apabila Keluar</translation> <translation id="417096670996204801">Pilih profil</translation> -<translation id="41725145403849567">Minta ibu/bapa anda menambahkan sambungan ini?</translation> <translation id="4175137578744761569">Ungu cerah dan putih</translation> <translation id="4175737294868205930">Storan berterusan</translation> <translation id="4176463684765177261">Dilumpuhkan</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN mestilah sekurang-kurangnya satu aksara}other{PIN mestilah sekurang-kurangnya # aksara}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> menghendaki anda menyambung kepada Wi-Fi sekarang dan memuat turun kemaskinian. Atau, muat turun daripada sambungan bermeter (caj mungkin dikenakan).</translation> <translation id="5476016146231427848">Sila mulakan semula peranti anda untuk menggunakan Stim pada Chromebook</translation> -<translation id="5476897066181964657">Ibu/bapa atau penjaga perlu menyatakan bahawa anda boleh menambahkan sambungan ini</translation> <translation id="5481273127572794904">Tidak dibenarkan untuk memuat turun berbilang fail secara automatik</translation> <translation id="5481941284378890518">Tambahkan Pencetak Berdekatan</translation> <translation id="5483785310822538350">Batalkan akses fail dan peranti</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">Matikan tempat liputan</translation> <translation id="5556459405103347317">Muat Semula</translation> <translation id="5558129378926964177">Zum &Masuk</translation> -<translation id="5558247502209241936">Dayakan pembukaan apl dalam tetingkap</translation> <translation id="5559311991468302423">Padamkan alamat</translation> <translation id="55601339223879446">Laraskan sempadan desktop anda dalam lingkungan paparan</translation> <translation id="5561162485081632007">Mengesan dan memberikan amaran kepada anda tentang acara berbahaya apabila berlaku</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">Dasar Global:</translation> <translation id="6305702903308659374">Mainkan pada kelantangan biasa walaupun semasa ChromeVox bertutur</translation> <translation id="6305909198255586420">Sila pasang menggunakan profil utama anda</translation> -<translation id="630750887748244481">Ibu/bapa anda telah mematikan "Kebenaran untuk laman web, apl dan sambungan" untuk Chrome. Penambahan sambungan ini tidak dibenarkan.</translation> <translation id="6307990684951724544">Sistem sibuk</translation> <translation id="6308493641021088955">Log masuk disediakan oleh <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Simpan pau&tan sebagai...</translation> @@ -6857,7 +6851,6 @@ <translation id="7025190659207909717">Pengurusan perkhidmatan data mudah alih</translation> <translation id="7025895441903756761">Keselamatan dan Privasi</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Buka Semua dalam Tetingkap &Inkognito}=1{Buka dalam Tetingkap &Inkognito}other{Buka Semua ({COUNT}) dalam Tetingkap &Inkognito}}</translation> -<translation id="7028057921476386252">Ibu/bapa atau penjaga perlu menyatakan bahawa anda boleh mendayakan sambungan ini</translation> <translation id="7029307918966275733">Crostini tidak dipasang. Sila pasang Crostini untuk melihat kredit.</translation> <translation id="7029809446516969842">Kata laluan</translation> <translation id="7030304022046916278">Menghantar URL kepada Penyemakan Imbas Selamat untuk semakan</translation> @@ -8236,7 +8229,6 @@ <translation id="8251509999076836464">Menggandingkan dengan <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Lakaran kenit dibuang.</translation> <translation id="825238165904109940">Sentiasa Paparkan URL Penuh</translation> -<translation id="8252538334423261825">Tidak dapat menambah sambungan</translation> <translation id="8252569384384439529">Memuat naik...</translation> <translation id="8253198102038551905">Klik '+' untuk mendapatkan sifat rangkaian</translation> <translation id="8255212965098517578">Foto, pemberitahuan dan apl terkini</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index 8d6d1c3..a09ccda 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -1338,7 +1338,6 @@ <translation id="2114820389966440614">“လတ်တလော အထူးအသားပေးများ” နှင့် အခြားအမှတ်တရများကို ဤနေရာတွင်ကြည့်ရန်</translation> <translation id="2114896190328250491">ရိုက်ကူးသူ- <ph name="NAME" /></translation> <translation id="2114995631896158695">ဆင်းမ်ကတ် ထည့်မထားပါ</translation> -<translation id="2116020356255810305">စတင်ချိန်တွင် အက်ပ်ဖွင့်ခွင့်ပြုရန်</translation> <translation id="2116619964159595185">စွမ်းအင်နိမ့်အချက်ပြမီး၊ ကျန်းမာရေး (သို့) ကြံ့ခိုင်ရေး ခြေရာခံစက် (သို့) အဆင့်မြင့်မီးလုံး စနစ်ထည့်သွင်းခြင်း (သို့) စင့်ခ်လုပ်ခြင်းကဲ့သို့ ဝန်ဆောင်မှုများအတွက် ဘလူးတုသ်သုံးစက်များနှင့် ဝဘ်ဆိုက်များက ချိတ်ဆက်လေ့ရှိသည်</translation> <translation id="2117655453726830283">လာမည့်ဆလိုက်</translation> <translation id="2119349053129246860"><ph name="APP" /> တွင် ဖွင့်ရန်</translation> @@ -3270,7 +3269,6 @@ <translation id="380329542618494757">အမည်</translation> <translation id="3803345858388753269">ဗီဒီယို အရည်အသွေး</translation> <translation id="3803367742635802571">သင်ဝင်ကြည့်သည့် ဝဘ်ဆိုက်များက ရေးဆွဲထားသည့်အတိုင်း ရပ်တန့်သွားနိုင်သည်</translation> -<translation id="3803583375545057606">ဤနောက်ဆက်တွဲဖွင့်ရန် သင့်မိဘထံ ခွင့်တောင်းမလား။</translation> <translation id="380408572480438692">စွမ်းဆောင်ရည် ဒေတာ စုစည်းမှုကိုဖွင့်ခြင်းသည် အချိန်အရ Google အား စနစ်တိုးတက်စေရန် ကူညီပါသည်။ တုံပြန်မှု အစီရင်ခံစာနှင့် (Alt-Shift-I) နှင့်စွမ်းဆောင်ရည် ဒေတာအား သင်ဖိုင်ပြုလုပ်သေးသ၍ မည်သည့်ဒေတာမျှ ပို့မည်မဟုတ်ပါ။ စုစည်းမှုကိုပိတ်ရန် ဤမျက်နှာပြင်သို့ သင်အချိန်မရွေး ပြန်လာနိုင်ပါသည်။</translation> <translation id="3807249107536149332">ဝင်ရောက်မှု မျက်နှာပြင်တွင် <ph name="EXTENSION_NAME" /> (နောက်ဆက်တွဲ အိုင်ဒီ "<ph name="EXTENSION_ID" />") ကို ခွင့်ပြုမထားပါ။</translation> <translation id="3807747707162121253">မလုပ်တော့</translation> @@ -3691,7 +3689,6 @@ <translation id="4169535189173047238">ခွင့်မပြုပါ</translation> <translation id="4170314459383239649">ထွက်လျှင် ဖယ်ရှားရန်</translation> <translation id="417096670996204801">ပရိုဖိုင်တစ်ခု ရွေးပါ</translation> -<translation id="41725145403849567">ဤနောက်ဆက်တွဲထည့်ရန် သင့်မိဘထံ ခွင့်တောင်းမလား။</translation> <translation id="4175137578744761569">ခရမ်းဖျော့နှင့် အဖြူ</translation> <translation id="4175737294868205930">တည်မြဲသည့် သိုလှောင်ခန်း</translation> <translation id="4176463684765177261">ပိတ်ထားသည်။</translation> @@ -5105,7 +5102,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{ပင်နံပါတ်တွင် အနည်းဆုံးအက္ခရာ 1 လုံး ပါရမည်}other{ပင်နံပါတ်တွင် အနည်းဆုံးအက္ခရာ # လုံး ပါရမည်}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> က Wi-Fi သို့ ယခုချိတ်ဆက်ပြီး အပ်ဒိတ်ကို ဒေါင်းလုဒ်လုပ်စေလိုသည်။ သို့မဟုတ် အခမဲ့ မဟုတ်သော ချိတ်ဆက်မှုမှ ဒေါင်းလုဒ်လုပ်ပါ (ဒေတာသုံးစွဲခ ကျသင့်နိုင်သည်)။</translation> <translation id="5476016146231427848">Chromebook တွင် Steam အသုံးပြုရန် သင့်စက်ကို ပြန်စပါ</translation> -<translation id="5476897066181964657">ဤနောက်ဆက်တွဲထည့်ရန် မိဘ (သို့) အုပ်ထိန်းသူက OK ဟု ပြောရန်လိုအပ်သည်</translation> <translation id="5481273127572794904">ဖိုင်အများအပြား အလိုအလျောက်ဒေါင်းလုဒ်လုပ်ရန် ခွင့်ပြုမထားပါ</translation> <translation id="5481941284378890518">အနီးတဝိုက်ရှိ ပုံနှိပ်စက်များကို ထည့်ပါ</translation> <translation id="5483785310822538350">ဖိုင်နှင့် စက်ပစ္စည်းအသုံးပြုမှုကို ရုပ်သိမ်းရန်</translation> @@ -5202,7 +5198,6 @@ <translation id="5555639311269196631">ဟော့စပေါ့ ပိတ်ရန်</translation> <translation id="5556459405103347317">ပြန်တင်ရန်</translation> <translation id="5558129378926964177">ဇူးမ်ဆွဲရန်</translation> -<translation id="5558247502209241936">ဝင်းဒိုးတွင် အက်ပ်ဖွင့်ခွင့်ပြုရန်</translation> <translation id="5559311991468302423">လိပ်စာကို ဖျက်ရန်</translation> <translation id="55601339223879446">မျက်နှာပြင် ဖော်ပြမှုအတွင်း သင့်ဒက်စ်တော့ ဘောင်များကို ချိန်ညှိပါ</translation> <translation id="5561162485081632007">အန္တရာယ်ရှိသည့် ဖြစ်ရပ်များ ဖြစ်ပွားလာသည့်အခါ သိရှိပြီး သင့်အား သတိပေးသည်</translation> @@ -6028,7 +6023,6 @@ <translation id="6305607932814307878">ကမ္ဘာသုံး မူဝါဒ−</translation> <translation id="6305702903308659374">ChromeVox စကားပြောနေသည့်အချိန်တွင်ပင် အသံပုံမှန်ဖြင့်ဖွင့်ရန်</translation> <translation id="6305909198255586420">သင်၏ ပင်မပရိုဖိုင် အသုံးပြု၍ ထည့်သွင်းပါ</translation> -<translation id="630750887748244481">Chrome အတွက် “ဝဘ်ဆိုက်၊ အက်ပ်နှင့် နောက်ဆက်တွဲ ခွင့်ပြုချက်များ” ကို သင့်မိဘက ပိတ်လိုက်သည်။ ဤနောက်ဆက်တွဲ ထည့်ခြင်းကို ခွင့်မပြုပါ။</translation> <translation id="6307990684951724544">စနစ် မအားပါ</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> က လက်မှတ်ထိုးဝင်ခြင်းကို ထောက်ပံ့ပေးထားသည်</translation> <translation id="6308937455967653460">လင့်&ကို အဖြစ် သိမ်းရန်...</translation> @@ -6852,7 +6846,6 @@ <translation id="7025190659207909717">မိုဘိုင်း အချက်လက် ဝန်ဆောင်မှု စီမံခန့်ခွဲခြင်း</translation> <translation id="7025895441903756761">လုံခြုံရေးနှင့် ကိုယ်ရေးအချက်အလက်လုံခြုံမှု</translation> <translation id="7027258625819743915">{COUNT,plural, =0{အားလုံးကို &ရုပ်ဖျက်ဝင်းဒိုးတွင် ဖွင့်ရန်}=1{&ရုပ်ဖျက်ဝင်းဒိုးတွင် ဖွင့်ရန်}other{({COUNT}) ခုလုံးကို &ရုပ်ဖျက်ဝင်းဒိုးတွင် ဖွင့်ရန်}}</translation> -<translation id="7028057921476386252">ဤနောက်ဆက်တွဲဖွင့်ရန် မိဘ (သို့) အုပ်ထိန်းသူက OK ဟု ပြောရန်လိုအပ်သည်</translation> <translation id="7029307918966275733">Crostini ထည့်သွင်းမထားပါ။ ခရက်ဒစ်များကြည့်ရန် Crostini ထည့်သွင်းပါ။</translation> <translation id="7029809446516969842">စကားဝှက်များ</translation> <translation id="7030304022046916278">URL များကို စစ်ဆေးရန် ‘လုံခြုံစွာကြည့်ရှုခြင်း’ သို့ ပို့ပေးသည်</translation> @@ -8230,7 +8223,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> ကိုတွဲချိတ်နေသည်</translation> <translation id="8251578425305135684">လက်သည်းပုံ ဖယ်ရှားလိုက်ပါပြီ။</translation> <translation id="825238165904109940">URL အပြည့်အစုံကို အမြဲပြရန်</translation> -<translation id="8252538334423261825">နောက်ဆက်တွဲ ထည့်၍မရပါ</translation> <translation id="8252569384384439529">အပ်လုဒ်လုပ်နေသည်...</translation> <translation id="8253198102038551905">'+' ကို နှိပ်ပြီး ကွန်ယက်ဂုဏ်သတ္တိများကိို ရယူပါ</translation> <translation id="8255212965098517578">မကြာသေးမီက ဓာတ်ပုံ၊ အကြောင်းကြားချက်နှင့် အက်ပ်များ</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index ec46322..56a8ef3 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1325,7 +1325,6 @@ <translation id="2114820389966440614">यहाँ गई "हालसालैका हाइलाइट" र अन्य स्मरणमाहरू हेर्नुहोस्</translation> <translation id="2114896190328250491"><ph name="NAME" /> द्वारा खिचिएको फोटो</translation> <translation id="2114995631896158695">SIM कार्ड हालिएको छैन</translation> -<translation id="2116020356255810305">Chrome सुरु हुँदा एप खोल्ने सुविधा अन गरियोस्</translation> <translation id="2116619964159595185">साइटहरूले लो-इनर्जी बिकन, हेल्थ वा फिटनेस ट्र्याकर वा स्मार्ट चिम सेटअप वा सिंक गर्ने जस्ता सुविधाहरू प्रदान गर्न सामान्यतया ब्लुटुथ चल्ने यन्त्रमा कनेक्ट गर्छन्</translation> <translation id="2117655453726830283">अर्को स्लाइड</translation> <translation id="2119349053129246860"><ph name="APP" /> मा खोल्नुहोस्</translation> @@ -3255,7 +3254,6 @@ <translation id="380329542618494757">नाम</translation> <translation id="3803345858388753269">भिडियोको गुणस्तर</translation> <translation id="3803367742635802571">तपाईंले खोल्ने साइटहरूले डिजाइन गरिएअनुसार काम गर्न छाड्न सक्छन्</translation> -<translation id="3803583375545057606">तपाईं आफ्ना अभिभावकसँग यो एक्स्टेन्सन अन गर्ने अनुमति माग्ने हो?</translation> <translation id="380408572480438692">प्रस्तुतीकरण लगतको सङ्कलन सक्षम गर्नाले Google लाई समय बित्दै जाँदा प्रणाली सुधार्न मद्दत गर्छ। तपाइँले एक पृष्ठपोषण प्रतिवेदन (Alt-Shift-I) फाइल र प्रस्तुीकरण लगत समावेश नगरेसम्म कुनै पनि लगत पठाइनेछैन। तपाइँले कुनै समयमा पनि सङ्कलन असक्षम गर्न यस स्क्रिनमा फिर्ता आउन सक्नुहुन्छ।</translation> <translation id="3807249107536149332">लगइनको स्क्रिनमा <ph name="EXTENSION_NAME" /> (विस्तारको ID "<ph name="EXTENSION_ID" />") लाई अनुमति छैन।</translation> <translation id="3807747707162121253">&रद्द</translation> @@ -3676,7 +3674,6 @@ <translation id="4169535189173047238">अनुमति नदिनुहोस्</translation> <translation id="4170314459383239649">बाहिर निस्कँदा मेट्नुहोस्</translation> <translation id="417096670996204801">कुनै प्रोफाइल छनौट गर्नुहोस्</translation> -<translation id="41725145403849567">तपाईंका अभिभावकसँग यो एक्स्टेन्सन इन्स्टल गर्ने अनुमति माग्ने हो?</translation> <translation id="4175137578744761569">हल्का बैजनी र सेतो</translation> <translation id="4175737294868205930">स्थायी भण्डारण</translation> <translation id="4176463684765177261">असक्षम गरिएको</translation> @@ -5089,7 +5086,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN कम्तीमा पनि एक वर्णको हुनु पर्छ}other{PIN कम्तीमा पनि # वर्णको हुनु पर्छ}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> का अनुसार तपाईंले अहिले नै Wi-Fi मार्फत अपडेट डाउनलोड गर्नु पर्ने हुन्छ। अथवा, डेटाको सीमा तोकिएको इन्टरनेटबाट डाउनलोड गर्नुहोस् (शुल्क लाग्न सक्छ)।</translation> <translation id="5476016146231427848">तपाईं Chromebook मा Steam प्रयोग गर्न चाहनुहुन्छ भने आफ्नो डिभाइस रिस्टार्ट गर्नुहोस्</translation> -<translation id="5476897066181964657">तपाईंका आमाबुवा वा अभिभावकले तपाईंलाई यो एक्स्टेन्सन इन्स्टल गर्ने अनुमति दिनु पर्ने हुन्छ</translation> <translation id="5481273127572794904">धेरै फाइलहरू स्वतः डाउनलोड गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="5481941284378890518">नजिकैका प्रिन्टरहरू थप्नुहोस्</translation> <translation id="5483785310822538350">फाइल र यन्त्र पहुँच बदर गर्नुहोस्</translation> @@ -5186,7 +5182,6 @@ <translation id="5555639311269196631">हटस्पट अफ गर्नुहोस्</translation> <translation id="5556459405103347317">पुन: लोड गर्नुहोस्</translation> <translation id="5558129378926964177">जुम &इन</translation> -<translation id="5558247502209241936">विन्डोमा एप खोल्ने सुविधा अन गरियोस्</translation> <translation id="5559311991468302423">ठेगाना मेटाउनुहोस्</translation> <translation id="55601339223879446">आफ्नो डेस्कटपको सीमालाई प्रदर्शन भित्रै समायोजन गर्नुहोस्</translation> <translation id="5561162485081632007">खतरनाक गतिविधि हुँदा पत्ता लगाउँछ र तपाईंलाई सोबारे चेतावनी दिन्छ</translation> @@ -6011,7 +6006,6 @@ <translation id="6305607932814307878">विश्वव्यापी नीति:</translation> <translation id="6305702903308659374">ChromeVox बोलिरहेको भए तापनि अडियो कम आवाजमा बजाउनुहोस्</translation> <translation id="6305909198255586420">कृपया आफ्नो प्राथमिक प्रोफाइल प्रयोग गरी इन्स्टल गर्नुहोस्</translation> -<translation id="630750887748244481">तपाईंका अभिभावकले Chrome मा "साइट, एप तथा एक्सटेन्सनसम्बन्धी अनुमति" दिनुभएको छैन। यो एक्स्टेन्सन इन्स्टल गर्ने अनुमति दिइएको छैन।</translation> <translation id="6307990684951724544">प्रणाली व्यस्त</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ले प्रदान गरेको साइन इन स्क्रिन</translation> <translation id="6308937455967653460">लि&ङ्कलाई यसको रूपमा बचत गर्नुहोस्...</translation> @@ -6837,7 +6831,6 @@ <translation id="7025190659207909717">मोबाइल डाटा सेवा व्यवस्थापन</translation> <translation id="7025895441903756761">सुरक्षा तथा गोपनीयता</translation> <translation id="7027258625819743915">{COUNT,plural, =0{सबै URL &इन्कोग्निटो विन्डोमा खोल्नुहोस्}=1{&इन्कोग्निटो विन्डोमा खोल्नुहोस्}other{सबै URL ({COUNT}) &इन्कोग्निटो विन्डोमा खोल्नुहोस्}}</translation> -<translation id="7028057921476386252">तपाईंका आमाबुवा वा अभिभावकले तपाईंलाई यो एक्स्टेन्सन अन गर्ने अनुमति दिनु पर्ने हुन्छ</translation> <translation id="7029307918966275733">Crostini इन्स्टल गरिएको छैन। कृपया क्रेडिटहरू हेर्न Crostini इन्स्टल गर्नुहोस्।</translation> <translation id="7029809446516969842">पासवर्डहरू</translation> <translation id="7030304022046916278">यो सुविधाले URL सुरक्षित छ कि छैन भनी जाँच गर्नका निम्ति URL हरू Safe Browsing मा पठाउँछ</translation> @@ -8215,7 +8208,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> सँग कनेक्ट गरिँदै छ</translation> <translation id="8251578425305135684">थम्बनेल हटाइयो।</translation> <translation id="825238165904109940">सँधै पूरा URL हरू देखाइयोस्</translation> -<translation id="8252538334423261825">यो एक्स्टेन्सन इन्स्टल गर्न सकिँदैन</translation> <translation id="8252569384384439529">अपलोड गर्दै...</translation> <translation id="8253198102038551905">नेटवर्क गुणहरू प्राप्त गर्न '+' क्लिक गर्नुहोस्</translation> <translation id="8255212965098517578">हालसालैका फोटो, सूचना तथा एपहरू</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index ff9f3a89..ec65ab37 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1328,7 +1328,6 @@ <translation id="2114820389966440614">Nieuwe highlights en andere herinneringen hier bekijken</translation> <translation id="2114896190328250491">Foto van <ph name="NAME" /></translation> <translation id="2114995631896158695">Geen simkaart geplaatst</translation> -<translation id="2116020356255810305">App openen bij opstarten aanzetten</translation> <translation id="2116619964159595185">Sites maken meestal verbinding met bluetooth-apparaten voor functies zoals het instellen of synchroniseren van een Bluetooth Low Energy-beacon, een gezondheids- of fitnesstracker, of een smartlamp</translation> <translation id="2117655453726830283">Volgende dia</translation> <translation id="2119349053129246860">Openen in <ph name="APP" /></translation> @@ -3257,7 +3256,6 @@ <translation id="380329542618494757">Naam</translation> <translation id="3803345858388753269">Videokwaliteit</translation> <translation id="3803367742635802571">Sites die je bezoekt, werken misschien niet meer zoals bedoeld</translation> -<translation id="3803583375545057606">Je ouder vragen om deze extensie aan te zetten?</translation> <translation id="380408572480438692">Als je prestatiegegevens verzamelt, help je Google het systeem nog beter te maken. Er worden geen gegevens verstuurd totdat je een feedbackrapport (Alt-Shift-I) indient en prestatiegegevens toevoegt. Je kunt op elk moment teruggaan naar dit scherm om de verzameling uit te zetten.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (extensie-ID <ph name="EXTENSION_ID" />) is niet toegestaan op een inlogscherm.</translation> <translation id="3807747707162121253">A&nnuleren</translation> @@ -3678,7 +3676,6 @@ <translation id="4169535189173047238">Niet toestaan</translation> <translation id="4170314459383239649">Wissen bij het verlaten</translation> <translation id="417096670996204801">Profiel kiezen</translation> -<translation id="41725145403849567">Je ouder vragen om deze extensie toe te voegen?</translation> <translation id="4175137578744761569">Lichtpaars/wit</translation> <translation id="4175737294868205930">Permanente opslag</translation> <translation id="4176463684765177261">Uitgezet</translation> @@ -5090,7 +5087,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{De pincode moet ten minste 1 teken bevatten}other{De pincode moet ten minste # tekens bevatten}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> vereist dat je nu verbinding maakt met wifi en een update downloadt. Je kunt de update ook downloaden via een verbinding met datalimiet (er kunnen kosten van toepassing zijn).</translation> <translation id="5476016146231427848">Start je apparaat opnieuw op om Steam te gebruiken op je Chromebook</translation> -<translation id="5476897066181964657">Een ouder of voogd moet aangeven dat je deze extensie mag toevoegen</translation> <translation id="5481273127572794904">Geen toestemming om automatisch meerdere bestanden te downloaden</translation> <translation id="5481941284378890518">Printers in de buurt toevoegen</translation> <translation id="5483785310822538350">Toegang tot bestand en apparaat intrekken</translation> @@ -5187,7 +5183,6 @@ <translation id="5555639311269196631">Hotspot uitzetten</translation> <translation id="5556459405103347317">Opnieuw laden</translation> <translation id="5558129378926964177">&Inzoomen</translation> -<translation id="5558247502209241936">App openen in venster aanzetten</translation> <translation id="5559311991468302423">Adres verwijderen</translation> <translation id="55601339223879446">De grenzen van je bureaublad aanpassen binnen de weergave</translation> <translation id="5561162485081632007">Detecteert en waarschuwt je over gevaarlijke gebeurtenissen als deze plaatsvinden</translation> @@ -6009,7 +6004,6 @@ <translation id="6305607932814307878">Algemeen beleid:</translation> <translation id="6305702903308659374">Afspelen met normaal volume, ook als ChromeVox spreekt</translation> <translation id="6305909198255586420">Installeer dit met je primaire profiel</translation> -<translation id="630750887748244481">Je ouder heeft 'Rechten voor sites, apps en extensies' uitgezet voor Chrome. Deze extensie mag niet worden toegevoegd.</translation> <translation id="6307990684951724544">Systeem is bezet</translation> <translation id="6308493641021088955">Inloggen mogelijk gemaakt door <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Lin&k opslaan als...</translation> @@ -6784,7 +6778,7 @@ <translation id="6988094684494323731">De Linux-container wordt gestart</translation> <translation id="6988403677482707277">Tabblad verplaatst naar begin van tabbladstrook</translation> <translation id="6989123022222588975">Je hebt geen interesses verwijderd</translation> -<translation id="6990209147952697693">Klassiek Chrome-uiterlijk</translation> +<translation id="6990209147952697693">Klassieke versie van Chrome</translation> <translation id="6991665348624301627">Een bestemming selecteren</translation> <translation id="6992554835374084304">Zet verbeterde spellingcontrole aan</translation> <translation id="6993000214273684335">Tabblad verwijderd uit naamloze groep - <ph name="GROUP_CONTENTS" /></translation> @@ -6834,7 +6828,6 @@ <translation id="7025190659207909717">Beheer van mobiele netwerken</translation> <translation id="7025895441903756761">Beveiliging en privacy</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Alles openen in &incognitovenster}=1{Openen in &incognitovenster}other{Alles ({COUNT}) openen in &incognitovenster}}</translation> -<translation id="7028057921476386252">Een ouder of voogd moet aangeven dat je deze extensie mag aanzetten</translation> <translation id="7029307918966275733">Crostini is niet geïnstalleerd. Installeer Crostini om credits te bekijken.</translation> <translation id="7029809446516969842">Wachtwoorden</translation> <translation id="7030304022046916278">Stuurt URL's naar Safe Browsing om deze te checken</translation> @@ -8210,7 +8203,6 @@ <translation id="8251509999076836464">Koppelen met <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatuur verwijderd.</translation> <translation id="825238165904109940">Altijd volledige URL's tonen</translation> -<translation id="8252538334423261825">Kan extensie niet toevoegen</translation> <translation id="8252569384384439529">Uploaden...</translation> <translation id="8253198102038551905">Kik op '+' om netwerkeigenschappen op te halen</translation> <translation id="8255212965098517578">Recente foto's, meldingen en apps</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 4a6b26c..b01f4a4c 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -1334,7 +1334,6 @@ <translation id="2114820389966440614">Se «Nyeste minner» og andre minner her</translation> <translation id="2114896190328250491">Bildet er tatt av <ph name="NAME" /></translation> <translation id="2114995631896158695">Det er ikke satt inn noe SIM-kort.</translation> -<translation id="2116020356255810305">Slå på aktivering av app ved oppstart</translation> <translation id="2116619964159595185">Nettsteder kobler vanligvis til Bluetooth-enheter for å kunne tilby funksjoner som å konfigurere eller synkronisere lavenergi-beacons, helse- eller treningsarmbånd eller smartlyspærer</translation> <translation id="2117655453726830283">Neste lysbilde</translation> <translation id="2119349053129246860">Åpne i <ph name="APP" /></translation> @@ -3267,7 +3266,6 @@ <translation id="380329542618494757">Navn</translation> <translation id="3803345858388753269">Videokvalitet</translation> <translation id="3803367742635802571">Nettsteder du besøker, kan slutte å fungere som de skal</translation> -<translation id="3803583375545057606">Vil du be forelderen din om å slå på denne utvidelsen?</translation> <translation id="380408572480438692">Aktivering av innsamling av ytelsesdata hjelper Google med å bekrefte systemet over tid, Data sendes ikke inn før du fyller ut en tilbakemeldingsrapport (Alt-Shift-I) og legger ved ytelsesdata. Du kan deaktivere innsamlingen når som helst via denne skjermen.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (utvidelses-ID «<ph name="EXTENSION_ID" />») tillates ikke på påloggingsskjermer.</translation> <translation id="3807747707162121253">&Avbryt</translation> @@ -3687,7 +3685,6 @@ <translation id="4169535189173047238">Ikke tillat</translation> <translation id="4170314459383239649">Slett ved avslutning</translation> <translation id="417096670996204801">Velg en profil</translation> -<translation id="41725145403849567">Vil du be forelderen din om å legge til denne utvidelsen?</translation> <translation id="4175137578744761569">Lys lilla og hvit</translation> <translation id="4175737294868205930">Permanent lagring</translation> <translation id="4176463684765177261">Deaktivert</translation> @@ -5099,7 +5096,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-koden må bestå av minst ett tegn}other{PIN-koden må bestå av minst # tegn}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> krever at du kobler til wifi nå og laster ned en oppdatering. Eller last ned via en tilkobling med datamåling (kostnader kan påløpe).</translation> <translation id="5476016146231427848">Start enheten på nytt for å bruke Steam på Chromebook</translation> -<translation id="5476897066181964657">Du må få lov av en forelder eller foresatt til å legge til denne utvidelsen</translation> <translation id="5481273127572794904">Nettsteder som ikke har lov til å laste ned flere filer automatisk</translation> <translation id="5481941284378890518">Legg til skrivere i nærheten</translation> <translation id="5483785310822538350">Opphev fil- og enhetstilgangen</translation> @@ -5196,7 +5192,6 @@ <translation id="5555639311269196631">Slå av wifi-sone</translation> <translation id="5556459405103347317">Last inn på nytt</translation> <translation id="5558129378926964177">Zoom &inn</translation> -<translation id="5558247502209241936">Slå på åpning av app i vindu</translation> <translation id="5559311991468302423">Slett adressen</translation> <translation id="55601339223879446">Juster grensene for skrivebordet på skjermen</translation> <translation id="5561162485081632007">Oppdager og advarer deg om farlige hendelser idet de inntreffer</translation> @@ -6022,7 +6017,6 @@ <translation id="6305607932814307878">Globale retningslinjer:</translation> <translation id="6305702903308659374">Spill av med normalt volum selv når ChromeVox snakker</translation> <translation id="6305909198255586420">Installer via primærprofilen din</translation> -<translation id="630750887748244481">Din forelder har slått av «Tillatelser for nettsteder, apper og utvidelser» for Chrome. Det er ikke tillatt å legge til denne utvidelsen.</translation> <translation id="6307990684951724544">Systemet er opptatt</translation> <translation id="6308493641021088955">Påloggingen leveres av <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Lagre lin&ken som…</translation> @@ -6848,7 +6842,6 @@ <translation id="7025190659207909717">Administrering av tjenester for mobildata</translation> <translation id="7025895441903756761">Sikkerhet og personvern</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Åpne alle i &inkognitovindu}=1{Åpne i &inkognitovindu}other{Åpne alle ({COUNT}) i &inkognitovindu}}</translation> -<translation id="7028057921476386252">Du må få lov av forelder eller foresatt til å slå på denne utvidelsen</translation> <translation id="7029307918966275733">Crostini er ikke installert. Installer Crostini for å se anerkjennelser.</translation> <translation id="7029809446516969842">Passord</translation> <translation id="7030304022046916278">Sender nettadresser til Safe Browsing for å sjekke dem</translation> @@ -8227,7 +8220,6 @@ <translation id="8251509999076836464">Kobler til <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatyrbilde fjernet.</translation> <translation id="825238165904109940">Vis alltid fullstendige nettadresser</translation> -<translation id="8252538334423261825">Kan ikke legge til utvidelsen</translation> <translation id="8252569384384439529">Laster opp …</translation> <translation id="8253198102038551905">Klikk på «+» for å gå til nettverksegenskaper</translation> <translation id="8255212965098517578">Nylige bilder, varsler og apper</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index 61bfadb..52db8a5 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">ବାଦ୍ ଦେବା ପାଇଁ ଏସ୍କେପ୍ ଦବାନ୍ତୁ (କେବଳ ଅଣଔପଚାରିକ ଭାବେ ତିଆରି କରେ)।</translation> <translation id="1093457606523402488">ଦେଖାଯାଉଥିବା ନେଟ୍ୱର୍କ:</translation> <translation id="1095761715416917775">ଆପଣ ସର୍ବଦା ଆପଣଙ୍କର ସିଙ୍କ୍ କରାଯାଇଥିବା ଡାଟା ଆକ୍ସେସ୍ କରିପାରିବେ ବୋଲି ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation> +<translation id="1095879482467973146">ୱେବରେ Google Password Manager</translation> <translation id="109647177154844434">Parallels Desktop ଅନଇନଷ୍ଟଲ୍ କରିବା ଦ୍ଵାରା ଆପଣଙ୍କ Windowsର ଛବି ଡିଲିଟ୍ ହୋଇଯିବ। ଏହାର ଆପ୍ଲିକେସନ, ସେଟିଂସ୍ ଏବଂ ଡାଟା ଏଥିରେ ଅଛି। ଆପଣ ଜାରି ରଖିବାକୁ ଚାହୁଁଥିବା ନିଶ୍ଚିତ କି?</translation> <translation id="1097016918605049747">ଏହି ପୃଷ୍ଠାଟିକୁ ଅନୁବାଦ କରାଯାଇପାରିଲା ନାହିଁ</translation> <translation id="1097658378307015415">ସାଇନ୍ ଇନ୍ କରିବା ପୂର୍ବରୁ, ନେଟ୍ୱର୍କ <ph name="NETWORK_ID" /> ସକ୍ରିୟ କରିବାକୁ ଦୟାକରି ଅତିଥି ହିସାବରେ ପ୍ରବେଶ କରନ୍ତୁ</translation> @@ -1324,7 +1325,6 @@ <translation id="2114820389966440614">ଏଠାରେ "ନିକଟରେ କରାଯାଇଥିବା ହାଇଲାଇଟ" ଏବଂ ଅନ୍ୟ ମେମୋରୀଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ</translation> <translation id="2114896190328250491"><ph name="NAME" />ଙ୍କ ଦ୍ୱାରା ଫଟୋ</translation> <translation id="2114995631896158695">କୌଣସି SIM କାର୍ଡ ଇନସାର୍ଟ କରାଯାଇନାହିଁ</translation> -<translation id="2116020356255810305">ଷ୍ଟାର୍ଟଅପରେ ଆପ ଲଞ୍ଚ କରିବାକୁ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="2116619964159595185">ଏକ ଲୋ-ଏନର୍ଜି ବିକନ୍, ଏକ ସ୍ୱାସ୍ଥ୍ୟ କିମ୍ବା ଫିଟନେସ୍ ଟ୍ରାକର୍ କିମ୍ବା ଏକ ସ୍ମାର୍ଟ ଲାଇଟ୍ ବଲବ୍ ସେଟ୍ ଅପ୍ ବା ସିଙ୍କ୍ କରିବା ପରି ଫିଚରଗୁଡ଼ିକ ପାଇଁ ସାଇଟଗୁଡ଼ିକ ସାଧାରଣତଃ ବ୍ଲୁଟୁଥ୍ ଡିଭାଇସଗୁଡ଼ିକ ସହ ସଂଯୋଗ କରିଥାଏ</translation> <translation id="2117655453726830283">ପରବର୍ତ୍ତୀ ସ୍ଲାଇଡ</translation> <translation id="2119349053129246860"><ph name="APP" />ରେ ଖୋଲନ୍ତୁ</translation> @@ -1484,6 +1484,7 @@ <translation id="2252017960592955005">ଦେଖିବା ସୁରକ୍ଷା (ବିଟା)</translation> <translation id="225240747099314620">ସଂରକ୍ଷିତ ବିଷୟବସ୍ତୁ ପାଇଁ ଚିହ୍ନଟକାରୀମାନଙ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ (କମ୍ପ୍ୟୁଟର୍କୁ ରିଷ୍ଟାର୍ଟ କରିବା ଆବଶ୍ୟକ ପଡ଼ିପାରେ)</translation> <translation id="2253318212986772520"><ph name="PRINTER_NAME" /> ପାଇଁ PPD ରିଟ୍ରିଭ କରିବାରେ ଅସମର୍ଥ।</translation> +<translation id="2253927598983295051"><ph name="APP_NAME" /> ସହ କଣ ସେୟାର କରିବେ ତାହା ବାଛନ୍ତୁ</translation> <translation id="2255077166240162850">ଏହି ଡିଭାଇସ୍ ବିଭିନ୍ନ ଡୋମେନ୍ କିମ୍ବା ମୋଡ୍ରେ ଲକ୍ କରାଯାଇଥିଲା।</translation> <translation id="2255317897038918278">Microsoft Time Stamping</translation> <translation id="2256115617011615191">ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ</translation> @@ -1830,6 +1831,7 @@ <translation id="2532589005999780174">ଉଚ୍ଚ କଣ୍ଟ୍ରାଷ୍ଟ ମୋଡ୍</translation> <translation id="2533649878691950253">ଆପଣ ସାଧାରଣତଃ ଏହି ସାଇଟକୁ ଅନୁମତି ଦେଉନଥିବା ଯୋଗୁଁ ଏହାକୁ ଆପଣଙ୍କ ସଠିକ୍ ଲୋକେସନ୍ ଜାଣିବାରୁ ବ୍ଲକ୍ କରାଯାଇଛି</translation> <translation id="253434972992662860">&ବିରତି</translation> +<translation id="253498598929009420">ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ବିଷୟବସ୍ତୁକୁ ଦେଖିବାରେ ସାଇଟ ସକ୍ଷମ ହେବ</translation> <translation id="253557089021624350">କିପ୍ଆଲାଇଭ୍ କାଉଣ୍ଟ</translation> <translation id="2535799430745250929">କୌଣସି ସେଲ୍ୟୁଲାର୍ ନେଟ୍ୱାର୍କ ନାହିଁ</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> ନିମ୍ନୋକ୍ତ ଫାଇଲ୍ ଏବଂ ଏଡିଟ୍ କରିପାରିବ</translation> @@ -3252,7 +3254,6 @@ <translation id="380329542618494757">ନାମ</translation> <translation id="3803345858388753269">ଭିଡିଓ ଗୁଣବତ୍ତା</translation> <translation id="3803367742635802571">ଆପଣ ଭିଜିଟ କରୁଥିବା ସାଇଟଗୁଡ଼ିକ ଡିଜାଇନ କରାଯାଇଥିବା ପରି କାମ କରିବା ବନ୍ଦ କରିପାରେ</translation> -<translation id="3803583375545057606">ଏହି ଏକ୍ସଟେନସନ ସକ୍ଷମ କରିବାକୁ ତୁମ ବାପାମାଙ୍କୁ ପଚାରିବ?</translation> <translation id="380408572480438692">କାର୍ଯ୍ୟଦକ୍ଷତା ଡାଟା ସଂଗ୍ରହ ସକ୍ଷମ କରିବା ଦ୍ୱାରା ସମୟାନୁଯାୟୀ Googleକୁ ସିଷ୍ଟମ୍ ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରିବ। ଯେପର୍ଯ୍ୟନ୍ତ ଆପଣ କୌଣସି ମତାମତ ରିପୋର୍ଟ (Alt-Shift-I) ଦାଖଲ କରିନାହିଁନ୍ତି ଏବଂ କାର୍ଯ୍ୟଦକ୍ଷତା ଡାଟା ଅନ୍ତର୍ଭୁକ୍ତ କରିନାହିଁନ୍ତି, ସେପର୍ଯ୍ୟନ୍ତ କୌଣସି ଡାଟା ପଠାଯାଏ ନାହିଁ। ଯେକୌଣସି ସମୟରେ ସଂଗ୍ରହଗୁଡ଼ିକୁ ଅକ୍ଷମ କରିବାକୁ ଆପଣ ଏହି ସ୍କ୍ରିନ୍କୁ ଫେରିପାରିବେ।</translation> <translation id="3807249107536149332">ଏକ ଲଗ୍ଇନ୍ ସ୍କ୍ରିନ୍ରେ <ph name="EXTENSION_NAME" /> (ଏକ୍ସଟେନ୍ସନ୍ ID "<ph name="EXTENSION_ID" />") ପାଇଁ ଅନୁମତି ନାହିଁ।</translation> <translation id="3807747707162121253">&ବାତିଲ୍</translation> @@ -3673,7 +3674,6 @@ <translation id="4169535189173047238">ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation> <translation id="4170314459383239649">ପ୍ରସ୍ଥାନରେ ଖାଲି କରନ୍ତୁ</translation> <translation id="417096670996204801">ଏକ ପ୍ରୋଫାଇଲ ବାଛନ୍ତୁ</translation> -<translation id="41725145403849567">ଏହି ଏକ୍ସଟେନସନ ଯୋଗ କରିବାକୁ ତୁମ ବାପାମାଙ୍କୁ ପଚାରିବ?</translation> <translation id="4175137578744761569">ହାଲୁକା ବାଇଗଣୀ ଓ ଧଳା</translation> <translation id="4175737294868205930">ନିରନ୍ତର ଷ୍ଟୋରେଜ୍</translation> <translation id="4176463684765177261">ଅକ୍ଷମ କରାଯାଇଛି</translation> @@ -5087,7 +5087,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PINରେ ଅତିକମରେ ଗୋଟିଏ ଅକ୍ଷର ରହିବା ଆବଶ୍ୟକ}other{PINରେ ଅତିକମରେ #ଟି ଅକ୍ଷର ରହିବା ଆବଶ୍ୟକ}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> ପାଇଁ ଆପଣଙ୍କୁ ବର୍ତ୍ତମାନ ୱାଇ-ଫାଇ ସହ ସଂଯୋଗ କରି ଏକ ଅପଡେଟ ଡାଉନଲୋଡ କରିବାର ଆବଶ୍ୟକତା ଅଛି। କିମ୍ବା, ଏକ ମିଟର ହୋଇଥିବା ସଂଯୋଗରୁ ଡାଉନଲୋଡ କରନ୍ତୁ (ଚାର୍ଜ ଲାଗୁ ହୋଇପାରେ)।</translation> <translation id="5476016146231427848">Chromebookରେ Steam ବ୍ୟବହାର କରିବା ପାଇଁ ଦୟାକରି ଆପଣଙ୍କ ଡିଭାଇସକୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ</translation> -<translation id="5476897066181964657">ଏହି ଏକ୍ସଟେନସନ ଯୋଗ କରିବା ତୁମ ପାଇଁ ଠିକ ବୋଲି ଜଣେ ବାପା କିମ୍ବା ମା ବା ଅଭିଭାବକ କହିବା ଆବଶ୍ୟକ</translation> <translation id="5481273127572794904">ଏକାଧିକ ଫାଇଲକୁ ସ୍ୱଚାଳିତ ଭାବେ ଡାଉନଲୋଡ୍ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ</translation> <translation id="5481941284378890518">ନିକଟସ୍ଥ ପ୍ରିଣ୍ଟର୍ ଯୋଗ କରନ୍ତୁ</translation> <translation id="5483785310822538350">ଫାଇଲ୍ ଏବଂ ଡିଭାଇସ୍ ଆକ୍ସେସ୍କୁ ପ୍ରତ୍ୟାହାର କରନ୍ତୁ</translation> @@ -5184,7 +5183,6 @@ <translation id="5555639311269196631">ହଟସ୍ପଟକୁ ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="5556459405103347317">ପୁନଃ ଲୋଡ୍ କରନ୍ତୁ</translation> <translation id="5558129378926964177">ଜୁମ୍ &ବଢ଼ାନ୍ତୁ</translation> -<translation id="5558247502209241936">ୱିଣ୍ଡୋରେ ଆପ ଖୋଲିବାକୁ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="5559311991468302423">ଠିକଣା ଡିଲିଟ କରନ୍ତୁ</translation> <translation id="55601339223879446">ଡିସ୍ପ୍ଲେ ମଧ୍ୟରେ ଆପଣଙ୍କର ଡେକ୍ସଟପ୍ର ସୀମାରେଖା ଆଡ୍ଜଷ୍ଟ କରନ୍ତୁ</translation> <translation id="5561162485081632007">ବିପଦଜନକ ଘଟଣାଗୁଡ଼ିକ ଘଟିଲେ ଏଗୁଡ଼ିକୁ ଚିହ୍ନଟ କରି ଆପଣଙ୍କୁ ଚେତାବନୀ ଦିଏ</translation> @@ -6007,7 +6005,6 @@ <translation id="6305607932814307878">ବୈଶ୍ୱିକ ନୀତି:</translation> <translation id="6305702903308659374">ChromeVox କହୁଥିଲେ ମଧ୍ୟ ସାମାନ୍ୟ ଭଲ୍ୟୁମ୍ରେ ଚଲାନ୍ତୁ</translation> <translation id="6305909198255586420">ଦୟାକରି ଆପଣଙ୍କ ପ୍ରାଥମିକ ପ୍ରୋଫାଇଲ ବ୍ୟବହାର କରି ଇନଷ୍ଟଲ କରନ୍ତୁ</translation> -<translation id="630750887748244481">ଆପଣଙ୍କ ବାପାମା Chrome ପାଇଁ "ସାଇଟ, ଆପ୍ସ ଏବଂ ଏକ୍ସଟେନସନଗୁଡ଼ିକ ନିମନ୍ତେ ଅନୁମତିଗୁଡ଼ିକ" ବନ୍ଦ କରିଦେଇଛନ୍ତି। ଏହି ଏକ୍ସଟେନସନ ଯୋଗ କରିବା ପାଇଁ ଅନୁମତି ଦିଆଯାଇନାହିଁ।</translation> <translation id="6307990684951724544">ସିଷ୍ଟମ୍ ବ୍ୟସ୍ତ ଅଛି</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ଦ୍ୱାରା ସାଇନ୍-ଇନ୍ ପ୍ରଦାନ କରାଯାଇଛି</translation> <translation id="6308937455967653460">ଲି&ଙ୍କ ଏହିଭାବେ ସଞ୍ଚୟ କରନ୍ତୁ...</translation> @@ -6835,7 +6832,6 @@ <translation id="7025190659207909717">ମୋବାଇଲ୍ ଡାଟା ସେବା ପରିଚାଳନା</translation> <translation id="7025895441903756761">ସୁରକ୍ଷା ଏବଂ ଗୋପନୀୟତା</translation> <translation id="7027258625819743915">{COUNT,plural, =0{ସମସ୍ତ URLକୁ &ଇନକଗ୍ନିଟୋ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ}=1{&ଇନକଗ୍ନିଟୋ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ}other{ସମସ୍ତ ({COUNT})ଟି &ଇନକଗ୍ନିଟୋ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ}}</translation> -<translation id="7028057921476386252">ଏହି ଏକ୍ସଟେନସନ ସକ୍ଷମ କରିବା ତୁମ ପାଇଁ ଠିକ ବୋଲି ଜଣେ ବାପା କିମ୍ବା ମା ବା ଅଭିଭାବକ କହିବା ଆବଶ୍ୟକ</translation> <translation id="7029307918966275733">Crostini ଇନଷ୍ଟଲ୍ କରାଯାଇନାହିଁ। କ୍ରେଡିଟ୍ ଦେଖିବାକୁ, ଦୟାକରି Crostini ଇନଷ୍ଟଲ୍ କରନ୍ତୁ।</translation> <translation id="7029809446516969842">ପାସୱାର୍ଡଗୁଡିକ</translation> <translation id="7030304022046916278">URLଗୁଡ଼ିକ ଯାଞ୍ଚ କରିବା ପାଇଁ ସେଗୁଡ଼ିକୁ ସୁରକ୍ଷିତ ବ୍ରାଉଜିଂକୁ ପଠାଏ</translation> @@ -8212,7 +8208,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> ସହ ପେୟାର କରାଯାଉଛି</translation> <translation id="8251578425305135684">ଥମ୍ବନେଲ୍ କାଢ଼ି ଦିଆଯାଇଛି।</translation> <translation id="825238165904109940">ସର୍ବଦା ପୂର୍ଣ୍ଣ URLଗୁଡ଼ିକ ଦେଖାନ୍ତୁ</translation> -<translation id="8252538334423261825">ଏକ୍ସଟେନସନ ଯୋଗ କରାଯାଇପାରିବ ନାହିଁ</translation> <translation id="8252569384384439529">ଅପ୍ଲୋଡ୍ ହେଉଛି...</translation> <translation id="8253198102038551905">ନେଟୱର୍କ ପ୍ରପର୍ଟିସ୍ ପାଇବା ପାଇଁ '+' କ୍ଲିକ୍ କରନ୍ତୁ</translation> <translation id="8255212965098517578">ବର୍ତ୍ତମାନର ଫଟୋ, ବିଜ୍ଞପ୍ତି ଏବଂ ଆପ୍ସ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 47a8a859..5f33312 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -1341,7 +1341,6 @@ <translation id="2114820389966440614">ਇੱਥੇ "ਹਾਲੀਆ ਝਲਕੀਆਂ" ਅਤੇ ਹੋਰ ਯਾਦਾਂ ਦੇਖੋ</translation> <translation id="2114896190328250491"><ph name="NAME" /> ਵੱਲੋਂ ਫ਼ੋਟੋ</translation> <translation id="2114995631896158695">ਕੋਈ ਸਿਮ ਕਾਰਡ ਨਹੀਂ ਪਾਇਆ ਗਿਆ</translation> -<translation id="2116020356255810305">ਸ਼ੁਰੂਆਤ ਵਿੱਚ ਐਪ ਨੂੰ ਲਾਂਚ ਕਰਨਾ ਚਾਲੂ ਕਰੋ</translation> <translation id="2116619964159595185">ਸਾਈਟਾਂ ਆਮ ਤੌਰ 'ਤੇ ਘੱਟ ਊਰਜਾ ਵਾਲੇ ਬੀਕਨ, ਸਿਹਤ ਜਾਂ ਫਿੱਟਨੈੱਸ ਟਰੈਕਰ ਜਾਂ ਸਮਾਰਟ ਲਾਈਟ ਬਲਬ ਦਾ ਸੈੱਟਅੱਪ ਜਾਂ ਸਿੰਕ ਕਰਨ ਵਰਗੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਲਈ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰਦੀਆਂ ਹਨ</translation> <translation id="2117655453726830283">ਅਗਲੀ ਸਲਾਈਡ</translation> <translation id="2119349053129246860"><ph name="APP" /> ਵਿੱਚ ਖੋਲ੍ਹੋ</translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">ਨਾਮ</translation> <translation id="3803345858388753269">ਵੀਡੀਓ ਕੁਆਲਿਟੀ</translation> <translation id="3803367742635802571">ਜਿਹੜੀਆਂ ਸਾਈਟਾਂ ਤੁਸੀਂ ਦੇਖਦੇ ਹੋ, ਉਹ ਡਿਜ਼ਾਈਨ ਮੁਤਾਬਕ ਕੰਮ ਕਰਨਾ ਬੰਦ ਕਰ ਸਕਦੀਆਂ ਹਨ</translation> -<translation id="3803583375545057606">ਇਸ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ ਆਪਣੇ ਮਾਂ-ਪਿਓ ਨੂੰ ਪੁੱਛੋ?</translation> <translation id="380408572480438692">ਕਾਰਗੁਜ਼ਾਰੀ ਡਾਟਾ ਦੇ ਇਕੱਤਰੀਕਰਨ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਸਮੇਂ ਦੇ ਨਾਲ Google ਸਿਸਟਮ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਉਦੋਂ ਤੱਕ ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾਂਦਾ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਵਿਚਾਰਾਂ ਸੰਬੰਧੀ ਰਿਪੋਰਟ ਸਪੁਰਦ ਨਹੀਂ ਕਰਦੇ (Alt-Shift-I) ਅਤੇ ਕਾਰਗੁਜ਼ਾਰੀ ਡਾਟਾ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰਦੇ। ਤੁਸੀਂ ਕਿਸੇ ਵੀ ਸਮੇਂ ਇਕੱਤਰੀਕਰਨ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਇਸ ਸਕ੍ਰੀਨ 'ਤੇ ਵਾਪਸ ਆ ਸਕਦੇ ਹੋ।</translation> <translation id="3807249107536149332">ਲੌਗ-ਇਨ ਸਕ੍ਰੀਨ ਵਿੱਚ <ph name="EXTENSION_NAME" /> (ਐਕਸਟੈਂਸ਼ਨ ਆਈ.ਡੀ. "<ph name="EXTENSION_ID" />") ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।</translation> <translation id="3807747707162121253">&ਰੱਦ ਕਰੋ</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">ਨਾ ਕਰਨ ਦਿਓ</translation> <translation id="4170314459383239649">ਬਾਹਰ ਨਿਕਲਣ 'ਤੇ ਕਲੀਅਰ ਕਰੋ</translation> <translation id="417096670996204801">ਕੋਈ ਪ੍ਰੋਫਾਈਲ ਚੁਣੋ</translation> -<translation id="41725145403849567">ਇਸ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਆਪਣੇ ਮਾਂ-ਪਿਓ ਨੂੰ ਪੁੱਛੋ?</translation> <translation id="4175137578744761569">ਹਲਕਾ ਜਾਮਨੀ ਅਤੇ ਸਫ਼ੈਦ</translation> <translation id="4175737294868205930">ਸਥਿਰ ਸਟੋਰੇਜ:</translation> <translation id="4176463684765177261">ਅਸਮਰਥਿਤ</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{ਪਿੰਨ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਅੱਖਰ-ਚਿੰਨ੍ਹ ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ}one{ਪਿੰਨ ਘੱਟੋ-ਘੱਟ # ਅੱਖਰ-ਚਿੰਨ੍ਹ ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ}other{ਪਿੰਨ ਘੱਟੋ-ਘੱਟ # ਅੱਖਰ-ਚਿੰਨ੍ਹਾਂ ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> ਲਈ ਤੁਹਾਨੂੰ ਹੁਣ ਵਾਈ-ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਹੋ ਕੇ ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਲੋੜ ਹੈ। ਜਾਂ, ਮੀਟਰਬੱਧ ਕਨੈਕਸ਼ਨ ਰਾਹੀਂ ਡਾਊਨਲੋਡ ਕਰੋ (ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ)।</translation> <translation id="5476016146231427848">ਕਿਰਪਾ ਕਰਕੇ Chromebook 'ਤੇ Steam ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ</translation> -<translation id="5476897066181964657">ਮਾਂ-ਪਿਓ ਜਾਂ ਸਰਪ੍ਰਸਤ ਨੂੰ ਇਹ ਕਹਿਣਾ ਹੋਵੇਗਾ ਕਿ ਤੁਸੀਂ ਇਸ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ</translation> <translation id="5481273127572794904">ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਕਈ ਫ਼ਾਈਲਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ</translation> <translation id="5481941284378890518">ਨੇੜਲੇ ਪ੍ਰਿੰਟਰ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="5483785310822538350">ਫ਼ਾਈਲ ਅਤੇ ਡੀਵਾਈਸ-ਪਹੁੰਚ ਰੱਦ ਕਰੋ</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">ਹੌਟਸਪੌਟ ਬੰਦ ਕਰੋ</translation> <translation id="5556459405103347317">ਰੀਲੋਡ ਕਰੋ</translation> <translation id="5558129378926964177">ਜ਼ੂਮ &ਵਧਾਓ</translation> -<translation id="5558247502209241936">ਵਿੰਡੋ ਵਿੱਚ ਐਪ ਨੂੰ ਖੋਲ੍ਹਣਾ ਚਾਲੂ ਕਰੋ</translation> <translation id="5559311991468302423">ਪਤਾ ਹਟਾਓ</translation> <translation id="55601339223879446">ਆਪਣੇ ਡੈਸਕਟਾਪ ਦੀਆਂ ਸੀਮਾਵਾਂ ਨੂੰ ਡਿਸਪਲੇ ਦੇ ਅੰਦਰ ਵਾਧ-ਘਾਟ ਕਰੋ</translation> <translation id="5561162485081632007">ਖਤਰਨਾਕ ਘਟਨਾਵਾਂ ਦਾ ਪਤਾ ਲਗਾ ਕੇ ਉਹਨਾਂ ਦੇ ਵਾਪਰਨ ਵੇਲੇ ਤੁਹਾਨੂੰ ਚਿਤਾਵਨੀ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">ਗਲੋਬਲ ਨੀਤੀ:</translation> <translation id="6305702903308659374">ChromeVox ਬੋਲ ਰਿਹਾ ਹੋਵੇ ਤਾਂ ਵੀ ਸਧਾਰਨ ਵੌਲਿਊਮ 'ਤੇ ਚਲਾਓ</translation> <translation id="6305909198255586420">ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਮੁੱਖ ਪ੍ਰੋਫਾਈਲ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਸਥਾਪਤ ਕਰੋ</translation> -<translation id="630750887748244481">ਤੁਹਾਡੇ ਮਾਂ-ਪਿਓ ਨੇ Chrome ਲਈ "ਸਾਈਟਾਂ, ਐਪਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਲਈ ਇਜਾਜ਼ਤਾਂ" ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ। ਇਸ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ।</translation> <translation id="6307990684951724544">ਸਿਸਟਮ ਰੁੱਝਾ ਹੋਇਆ ਹੈ</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ਵੱਲੋਂ ਸਾਈਨ-ਇਨ ਮੁਹੱਈਆ ਕਰਵਾਇਆ ਗਿਆ</translation> <translation id="6308937455967653460">ਲਿੰ&ਕ ਨੂੰ ਇਸ ਵਜੋਂ ਰੱਖਿਅਤ ਕਰੋ...</translation> @@ -6860,7 +6854,6 @@ <translation id="7025190659207909717">ਮੋਬਾਈਲ ਡਾਟਾ ਸੇਵਾ ਪ੍ਰਬੰਧਨ</translation> <translation id="7025895441903756761">ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ</translation> <translation id="7027258625819743915">{COUNT,plural, =0{ਸਾਰੇ &ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਵਿੱਚ ਖੋਲ੍ਹੋ}=1{&ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਵਿੱਚ ਖੋਲ੍ਹੋ}other{ਸਾਰੇ ({COUNT}) &ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਵਿੱਚ ਖੋਲ੍ਹੋ}}</translation> -<translation id="7028057921476386252">ਮਾਂ-ਪਿਓ ਜਾਂ ਸਰਪ੍ਰਸਤ ਨੂੰ ਇਹ ਕਹਿਣਾ ਹੋਵੇਗਾ ਕਿ ਤੁਸੀਂ ਇਸ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਚਾਲੂ ਕਰ ਸਕਦੇ ਹੋ</translation> <translation id="7029307918966275733">Crostini ਸਥਾਪਤ ਨਹੀਂ ਹੈ। ਕ੍ਰੈਡਿਟਾਂ ਨੂੰ ਦੇਖਣ ਲਈ ਕਿਰਪਾ ਕਰਕੇ Crostini ਨੂੰ ਸਥਾਪਤ ਕਰੋ।</translation> <translation id="7029809446516969842">ਪਾਸਵਰਡ</translation> <translation id="7030304022046916278">URL ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਇਹ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਨੂੰ ਭੇਜੇ ਜਾਂਦੇ ਹਨ</translation> @@ -8237,7 +8230,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> ਨਾਲ ਜੋੜਾਬੱਧ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="8251578425305135684">ਲਘੂ-ਚਿੱਤਰ ਹਟਾਇਆ ਗਿਆ।</translation> <translation id="825238165904109940">ਹਮੇਸ਼ਾਂ ਪੂਰੇ URL ਦਿਖਾਓ</translation> -<translation id="8252538334423261825">ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation> <translation id="8252569384384439529">ਅੱਪਲੋਡ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ...</translation> <translation id="8253198102038551905">ਨੈੱਟਵਰਕ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ '+' 'ਤੇ ਕਲਿੱਕ ਕਰੋ</translation> <translation id="8255212965098517578">ਹਾਲੀਆ ਫ਼ੋਟੋਆਂ, ਸੂਚਨਾਵਾਂ ਅਤੇ ਐਪਾਂ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 3b9d14cd..9efed91 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1326,7 +1326,6 @@ <translation id="2114820389966440614">Wyświetlaj w tym miejscu album „Ostatnie najciekawsze” i inne wspomnienia</translation> <translation id="2114896190328250491">Zdjęcie: <ph name="NAME" /></translation> <translation id="2114995631896158695">Brak karty SIM</translation> -<translation id="2116020356255810305">Włączaj aplikację podczas uruchamiania</translation> <translation id="2116619964159595185">Witryny łączą się z urządzeniami Bluetooth na przykład po to, żeby skonfigurować lub zsynchronizować niskoenergetyczne moduły beacon, inteligentne żarówki albo monitory stanu zdrowia lub aktywności fizycznej</translation> <translation id="2117655453726830283">Następny slajd</translation> <translation id="2119349053129246860">Otwórz w aplikacji <ph name="APP" /></translation> @@ -3244,7 +3243,6 @@ <translation id="380329542618494757">Imię i nazwisko</translation> <translation id="3803345858388753269">Jakość obrazu</translation> <translation id="3803367742635802571">Strony, które odwiedzasz, mogą przestać działać zgodnie z założeniami ich twórców</translation> -<translation id="3803583375545057606">Poprosić rodzica o włączenie tego rozszerzenia?</translation> <translation id="380408572480438692">Włączenie zbierania danych o wydajności pomaga Google udoskonalać system. Dane nie są wysyłane, póki nie sporządzisz raportu z opinią (Alt-Shift-I) i nie załączysz danych o wydajności. Możesz w dowolnym momencie wrócić do tego ekranu, by wyłączyć zbieranie danych.</translation> <translation id="3807249107536149332">Rozszerzenie <ph name="EXTENSION_NAME" /> (identyfikator rozszerzenia „<ph name="EXTENSION_ID" />”) jest niedozwolone na ekranie logowania.</translation> <translation id="3807747707162121253">&Anuluj</translation> @@ -3666,7 +3664,6 @@ <translation id="4169535189173047238">Nie zezwalaj</translation> <translation id="4170314459383239649">Wyczyść przy zamykaniu</translation> <translation id="417096670996204801">Wybieranie profilu</translation> -<translation id="41725145403849567">Poprosić rodzica o dodanie tego rozszerzenia?</translation> <translation id="4175137578744761569">Jasnofioletowo-biały</translation> <translation id="4175737294868205930">Pamięć trwała</translation> <translation id="4176463684765177261">Wyłączone</translation> @@ -5078,7 +5075,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Kod PIN musi mieć co najmniej 1 znak}few{Kod PIN musi mieć co najmniej # znaki}many{Kod PIN musi mieć co najmniej # znaków}other{Kod PIN musi mieć co najmniej # znaku}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> wymaga połączenia się z Wi-Fi i pobrania aktualizacji. Możesz też rozpocząć pobieranie za pomocą połączenia z pomiarem użycia danych (mogą zostać naliczone opłaty).</translation> <translation id="5476016146231427848">Aby użyć aplikacji Steam na Chromebooka, uruchom urządzenie ponownie</translation> -<translation id="5476897066181964657">Twój rodzic lub opiekun musi wyrazić zgodę na dodanie tego rozszerzenia</translation> <translation id="5481273127572794904">Nie zezwolono na automatyczne pobieranie wielu plików</translation> <translation id="5481941284378890518">Dodaj drukarki znalezione w pobliżu</translation> <translation id="5483785310822538350">Anuluj dostęp do plików i urządzeń</translation> @@ -5175,7 +5171,6 @@ <translation id="5555639311269196631">Wyłączanie hotspota</translation> <translation id="5556459405103347317">Odśwież</translation> <translation id="5558129378926964177">Po&większ</translation> -<translation id="5558247502209241936">Włącz otwieranie aplikacji w oknie</translation> <translation id="5559311991468302423">Usuń adres</translation> <translation id="55601339223879446">Przesuń krawędzie pulpitu na ekranie</translation> <translation id="5561162485081632007">Wykrywa niebezpieczne zdarzenia i natychmiast Cię o nich ostrzega</translation> @@ -6001,7 +5996,6 @@ <translation id="6305607932814307878">Zasady globalne:</translation> <translation id="6305702903308659374">Nie zmieniaj głośności odtwarzania, gdy ChromeVox mówi</translation> <translation id="6305909198255586420">Zainstaluj aplikację z poziomu profilu głównego</translation> -<translation id="630750887748244481">Rodzic wyłączył „Uprawnienia stron, aplikacji i rozszerzeń” dla Chrome. Dodanie tego rozszerzenia jest niedozwolone.</translation> <translation id="6307990684951724544">System zajęty</translation> <translation id="6308493641021088955">Dostawca usługi logowania: <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Zapisz link ja&ko...</translation> @@ -6829,7 +6823,6 @@ <translation id="7025190659207909717">Zarządzanie komórkową usługą transmisji danych</translation> <translation id="7025895441903756761">Prywatność i bezpieczeństwo</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Otwórz wszystkie w oknie &incognito}=1{Otwórz w oknie &incognito}few{Otwórz wszystkie ({COUNT}) w oknie &incognito}many{Otwórz wszystkie ({COUNT}) w oknie &incognito}other{Otwórz wszystkie ({COUNT}) w oknie &incognito}}</translation> -<translation id="7028057921476386252">Twój rodzic lub opiekun musi wyrazić zgodę na włączenie tego rozszerzenia</translation> <translation id="7029307918966275733">Nie zainstalowano Crostini. Zainstaluj Crostini, by zobaczyć autorów.</translation> <translation id="7029809446516969842">Hasła</translation> <translation id="7030304022046916278">Wysyła adresy URL do sprawdzenia przez usługę Bezpieczne przeglądanie.</translation> @@ -8207,7 +8200,6 @@ <translation id="8251509999076836464">Paruję z urządzeniem <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Usunięto miniaturę.</translation> <translation id="825238165904109940">Zawsze pokazuj całe adresy URL</translation> -<translation id="8252538334423261825">Nie można dodać rozszerzenia</translation> <translation id="8252569384384439529">Przesyłam…</translation> <translation id="8253198102038551905">Kliknij „+”, by zobaczyć właściwości sieci</translation> <translation id="8255212965098517578">Ostatnie zdjęcia, powiadomienia i aplikacje</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 273c859..dfc52df 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Pressione ESC para pular (versões não-oficiais apenas).</translation> <translation id="1093457606523402488">Redes visíveis</translation> <translation id="1095761715416917775">Tenha sempre acesso aos seus dados sincronizados</translation> +<translation id="1095879482467973146">Gerenciador de senhas do Google na Web</translation> <translation id="109647177154844434">A desinstalação do Parallels Desktop excluirá sua imagem do Windows. Isso inclui os aplicativos, as configurações e os dados dele. Tem certeza de que quer continuar?</translation> <translation id="1097016918605049747">Não foi possível traduzir esta página</translation> <translation id="1097658378307015415">Antes de fazer login, entre como Visitante para ativar a rede <ph name="NETWORK_ID" /></translation> @@ -1340,7 +1341,6 @@ <translation id="2114820389966440614">Ver "Destaques recentes" e outras recordações aqui</translation> <translation id="2114896190328250491">Foto de <ph name="NAME" /></translation> <translation id="2114995631896158695">Nenhum chip inserido</translation> -<translation id="2116020356255810305">Ativar abertura do app na inicialização</translation> <translation id="2116619964159595185">Os sites geralmente se conectam a dispositivos Bluetooth para recursos como a configuração ou sincronização de um sensor de baixa energia, um monitor de saúde ou atividade física ou uma lâmpada de iluminação inteligente</translation> <translation id="2117655453726830283">Próximo slide</translation> <translation id="2119349053129246860">Abrir no app <ph name="APP" /></translation> @@ -1500,6 +1500,7 @@ <translation id="2252017960592955005">Proteção de visualização (Beta)</translation> <translation id="225240747099314620">Permitir identificadores de conteúdo protegido (pode ser necessário reiniciar o computador)</translation> <translation id="2253318212986772520">Não foi possível recuperar o arquivo PPD da <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Escolha o que compartilhar com o app <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Este dispositivo foi bloqueado para um domínio ou modo diferente.</translation> <translation id="2255317897038918278">Carimbo de data/hora da Microsoft</translation> <translation id="2256115617011615191">Reiniciar agora</translation> @@ -1848,6 +1849,7 @@ <translation id="2532589005999780174">Modo de alto contraste</translation> <translation id="2533649878691950253">Este site foi impedido de saber seu local exato porque você normalmente não permite esse acesso</translation> <translation id="253434972992662860">&Pausar</translation> +<translation id="253498598929009420">O site terá acesso ao conteúdo da sua tela</translation> <translation id="253557089021624350">Contagem de manutenção de atividade</translation> <translation id="2535799430745250929">Não há nenhuma rede celular</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> tem permissão para ver e editar os arquivos e as pastas a seguir</translation> @@ -3271,7 +3273,6 @@ <translation id="380329542618494757">Nome</translation> <translation id="3803345858388753269">Qualidade do vídeo</translation> <translation id="3803367742635802571">Os sites que você visita podem parar de funcionar como planejado</translation> -<translation id="3803583375545057606">Pedir ao seu familiar responsável para ativar essa extensão?</translation> <translation id="380408572480438692">A ativação da coleta de dados de desempenho ajuda o Google a melhorar o sistema com o passar do tempo. Os dados só são enviados depois que você preencher um relatório de feedback (Alt-Shift-I) e incluir dados de desempenho. Você pode retornar a esta tela para desativar a coleta a qualquer momento.</translation> <translation id="3807249107536149332">A extensão <ph name="EXTENSION_NAME" /> (código "<ph name="EXTENSION_ID" />") não é permitida em uma tela de login.</translation> <translation id="3807747707162121253">&Cancelar</translation> @@ -3693,7 +3694,6 @@ <translation id="4169535189173047238">Não permitir</translation> <translation id="4170314459383239649">Limpar ao sair</translation> <translation id="417096670996204801">Escolha um perfil</translation> -<translation id="41725145403849567">Pedir ao seu familiar responsável para adicionar essa extensão?</translation> <translation id="4175137578744761569">Roxo-claro e branco</translation> <translation id="4175737294868205930">Armazenamento persistente</translation> <translation id="4176463684765177261">Desativado</translation> @@ -5107,7 +5107,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{O PIN precisa ter pelo menos 1 caractere}one{O PIN precisa ter pelo menos # caractere}other{O PIN precisa ter pelo menos # caracteres}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> precisa que você se conecte ao Wi-Fi para fazer o download de uma atualização. Você também pode fazer o download em uma conexão limitada (sujeito a cobranças).</translation> <translation id="5476016146231427848">Reinicie o dispositivo para usar o Steam no Chromebook</translation> -<translation id="5476897066181964657">Um familiar ou responsável precisa autorizar a adição dessa extensão</translation> <translation id="5481273127572794904">Bloquear o download automático de vários arquivos</translation> <translation id="5481941284378890518">Adicionar impressoras próximas</translation> <translation id="5483785310822538350">Revogar acesso ao arquivo e ao dispositivo</translation> @@ -5204,7 +5203,6 @@ <translation id="5555639311269196631">Desativar o ponto de acesso</translation> <translation id="5556459405103347317">Recarregar</translation> <translation id="5558129378926964177">Aumentar z&oom</translation> -<translation id="5558247502209241936">Ativar abertura do app na janela</translation> <translation id="5559311991468302423">Excluir endereço</translation> <translation id="55601339223879446">Ajustar as fronteiras da sua área de trabalho dentro da tela</translation> <translation id="5561162485081632007">Detecta e avisa você sobre eventos perigosos quando eles acontecem</translation> @@ -6031,7 +6029,6 @@ <translation id="6305607932814307878">Política global:</translation> <translation id="6305702903308659374">Reproduzir no volume normal mesmo se o ChromeVox estiver falando</translation> <translation id="6305909198255586420">Instale usando seu perfil principal</translation> -<translation id="630750887748244481">Seu familiar responsável desativou a opção "Permissões para sites, apps e extensões" no Chrome. Não é permitido adicionar essa extensão.</translation> <translation id="6307990684951724544">Sistema ocupado</translation> <translation id="6308493641021088955">Login fornecido por <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Salvar &link como...</translation> @@ -6859,7 +6856,6 @@ <translation id="7025190659207909717">Gerenciamento dos serviços de dados móveis</translation> <translation id="7025895441903756761">Segurança e privacidade</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Abrir tudo em &uma janela anônima}=1{Abrir em &uma janela anônima}one{Abrir tudo ({COUNT}) em &uma janela anônima}other{Abrir tudo ({COUNT}) em &uma janela anônima}}</translation> -<translation id="7028057921476386252">Um familiar ou responsável precisa autorizar a ativação dessa extensão</translation> <translation id="7029307918966275733">O Crostini não está instalado. Instale o Crostini para ver os créditos.</translation> <translation id="7029809446516969842">Senhas</translation> <translation id="7030304022046916278">Envia URLs para a verificação do Navegação segura</translation> @@ -8238,7 +8234,6 @@ <translation id="8251509999076836464">Pareando com <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatura removida.</translation> <translation id="825238165904109940">Sempre mostrar URLs completos</translation> -<translation id="8252538334423261825">Não é possível adicionar uma extensão</translation> <translation id="8252569384384439529">Fazendo upload…</translation> <translation id="8253198102038551905">Clique em "+" para ver as propriedades da rede</translation> <translation id="8255212965098517578">Fotos, notificações e apps recentes</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 0412080..0b58a41 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -1328,7 +1328,6 @@ <translation id="2114820389966440614">Veja "Destaques recentes" e outras memórias aqui</translation> <translation id="2114896190328250491">Foto de <ph name="NAME" /></translation> <translation id="2114995631896158695">Nenhum cartão SIM inserido</translation> -<translation id="2116020356255810305">Ativar o início da app no arranque</translation> <translation id="2116619964159595185">Normalmente, os sites estabelecem ligação a dispositivos Bluetooth para funcionalidades como configurar ou sincronizar um beacon Bluetooth Low Energy, uma lâmpada inteligente ou um monitorizador de saúde ou fitness</translation> <translation id="2117655453726830283">Diapositivo seguinte</translation> <translation id="2119349053129246860">Abrir na aplicação <ph name="APP" /></translation> @@ -3258,7 +3257,6 @@ <translation id="380329542618494757">Nome</translation> <translation id="3803345858388753269">Qualidade de vídeo</translation> <translation id="3803367742635802571">Os sites que visita podem deixar de funcionar como previsto</translation> -<translation id="3803583375545057606">Pedir aos teus pais para ativarem esta extensão?</translation> <translation id="380408572480438692">A ativação da recolha de dados de desempenho ajudará a Google a melhorar o sistema ao longo do tempo. Não serão enviados quaisquer dados enquanto não apresentar um relatório de comentários (Alt-Shift-I) e incluir os dados de desempenho. É possível regressar a este ecrã para desativar a recolha em qualquer altura.</translation> <translation id="3807249107536149332">O <ph name="EXTENSION_NAME" /> (ID de extensão "<ph name="EXTENSION_ID" />") não é permitido num ecrã de início de sessão.</translation> <translation id="3807747707162121253">&Cancelar</translation> @@ -3680,7 +3678,6 @@ <translation id="4169535189173047238">Não permitir</translation> <translation id="4170314459383239649">Limpar ao sair</translation> <translation id="417096670996204801">Escolha um perfil</translation> -<translation id="41725145403849567">Pedir aos teus pais para adicionarem esta extensão?</translation> <translation id="4175137578744761569">Roxo claro e branco</translation> <translation id="4175737294868205930">Armazenamento persistente</translation> <translation id="4176463684765177261">Desativado</translation> @@ -5093,7 +5090,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{O PIN tem de ter, pelo menos, um caráter.}other{O PIN tem de ter, pelo menos, # carateres.}}</translation> <translation id="5474859849784484111">O domínio <ph name="MANAGER" /> requer que estabeleça ligação a uma rede Wi-Fi agora e transfira uma atualização. Em alternativa, transfira a partir de uma ligação com acesso limitado (podem aplicar-se custos).</translation> <translation id="5476016146231427848">Reinicie o dispositivo para usar o Steam no Chromebook</translation> -<translation id="5476897066181964657">Os pais ou o tutor têm de indicar que podes adicionar esta extensão</translation> <translation id="5481273127572794904">Sem autorização para transferir vários ficheiros automaticamente</translation> <translation id="5481941284378890518">Adicionar impressoras próximas</translation> <translation id="5483785310822538350">Revogar o acesso a ficheiros e a dispositivos</translation> @@ -5190,7 +5186,6 @@ <translation id="5555639311269196631">Desativar zona Wi-Fi</translation> <translation id="5556459405103347317">Recarregar</translation> <translation id="5558129378926964177">Amp&liar</translation> -<translation id="5558247502209241936">Ativar a abertura da app na janela</translation> <translation id="5559311991468302423">Apagar morada</translation> <translation id="55601339223879446">Ajustar os limites do seu ambiente de trabalho no ecrã</translation> <translation id="5561162485081632007">Deteta e envia-lhe avisos sobre a ocorrência de eventos perigosos.</translation> @@ -6017,7 +6012,6 @@ <translation id="6305607932814307878">Política Global:</translation> <translation id="6305702903308659374">Reproduzir num volume normal mesmo se o ChromeVox estiver a falar</translation> <translation id="6305909198255586420">Instale através do seu perfil principal</translation> -<translation id="630750887748244481">Um dos teus pais desativou as "Autorizações para sites, apps e extensões" do Chrome. Não é permitido adicionar esta extensão.</translation> <translation id="6307990684951724544">Sistema ocupado</translation> <translation id="6308493641021088955">Início de sessão fornecido por <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Guardar lin&k como...</translation> @@ -6843,7 +6837,6 @@ <translation id="7025190659207909717">Gestão de serviços de dados móveis</translation> <translation id="7025895441903756761">Segurança e privacidade</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Abrir todos numa janela de &navegação anónima}=1{Abrir numa janela de &navegação anónima}other{Abrir todos ({COUNT}) numa janela de &navegação anónima}}</translation> -<translation id="7028057921476386252">Os pais ou o tutor têm de indicar que podes ativar esta extensão</translation> <translation id="7029307918966275733">O Crostini não está instalado. Instale o Crostini para ver os créditos.</translation> <translation id="7029809446516969842">Palavras-passe</translation> <translation id="7030304022046916278">Envia URLs para a Navegação segura para os verificar</translation> @@ -8222,7 +8215,6 @@ <translation id="8251509999076836464">A sincronizar com <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatura removida.</translation> <translation id="825238165904109940">Mostrar sempre URLs completos</translation> -<translation id="8252538334423261825">Não é possível adicionar a extensão</translation> <translation id="8252569384384439529">A carregar…</translation> <translation id="8253198102038551905">Clique em "+" para aceder às propriedades de rede</translation> <translation id="8255212965098517578">Fotos, notificações e apps recentes</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 1509cfe6..c1c2f6c 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -1329,7 +1329,6 @@ <translation id="2114820389966440614">Vezi Selecții recente și alte amintiri aici</translation> <translation id="2114896190328250491">Fotografie de la <ph name="NAME" /></translation> <translation id="2114995631896158695">Nu s-a introdus un card SIM</translation> -<translation id="2116020356255810305">Activează lansarea aplicației la pornire</translation> <translation id="2116619964159595185">Site-urile se conectează de obicei la dispozitive Bluetooth pentru funcții cum ar fi configurarea sau sincronizarea unui semnalizator cu consum redus de energie, a unui instrument de urmărire pentru sănătate sau fitness ori a unui bec inteligent</translation> <translation id="2117655453726830283">Următorul slide</translation> <translation id="2119349053129246860">Deschide în <ph name="APP" /></translation> @@ -3258,7 +3257,6 @@ <translation id="380329542618494757">Nume</translation> <translation id="3803345858388753269">Calitatea video</translation> <translation id="3803367742635802571">Este posibil ca site-urile pe care le accesezi să nu mai funcționeze așa cum au fost proiectate</translation> -<translation id="3803583375545057606">Îi ceri părintelui să activeze această extensie?</translation> <translation id="380408572480438692">Activarea culegerii datelor privind performanța va permite Google să îmbunătățească sistemul în timp. Nu sunt trimise date decât după ce completați un raport de feedback (Alt-Shift-I) și includeți date privind performanța. Puteți să reveniți oricând la acest ecran pentru a dezactiva culegerea datelor.</translation> <translation id="3807249107536149332">Extensia <ph name="EXTENSION_NAME" /> (cu ID-ul „<ph name="EXTENSION_ID" />”) nu este permisă într-un ecran de conectare.</translation> <translation id="3807747707162121253">&Anulează</translation> @@ -3680,7 +3678,6 @@ <translation id="4169535189173047238">Nu permite</translation> <translation id="4170314459383239649">Șterge la ieșire</translation> <translation id="417096670996204801">Alege un profil</translation> -<translation id="41725145403849567">Îi ceri părintelui să adauge această extensie?</translation> <translation id="4175137578744761569">Mov deschis și alb</translation> <translation id="4175737294868205930">Stocare persistentă</translation> <translation id="4176463684765177261">Dezactivat</translation> @@ -5093,7 +5090,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Codul PIN trebuie să conțină minimum un caracter}few{Codul PIN trebuie să conțină minimum # caractere}other{Codul PIN trebuie să conțină minimum # de caractere}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> îți solicită să te conectezi acum la rețeaua Wi-Fi și să descarci o actualizare. Sau poți să descarci folosind o conexiune contorizată (se pot aplica taxe).</translation> <translation id="5476016146231427848">Repornește dispozitivul pentru a folosi Steam pe Chromebook</translation> -<translation id="5476897066181964657">Părintele sau tutorele trebuie să spună că poți adăuga această extensie</translation> <translation id="5481273127572794904">Nu au permisiunea de a descărca automat mai multe fișiere</translation> <translation id="5481941284378890518">Adaugă imprimantele din apropiere</translation> <translation id="5483785310822538350">Revocă accesul la fișiere și la dispozitive</translation> @@ -5190,7 +5186,6 @@ <translation id="5555639311269196631">Dezactivează hotspotul</translation> <translation id="5556459405103347317">Reîncarcă</translation> <translation id="5558129378926964177">Măr&ește</translation> -<translation id="5558247502209241936">Activează deschiderea aplicației în fereastră</translation> <translation id="5559311991468302423">Șterge adresa</translation> <translation id="55601339223879446">Ajustează delimitările desktopului din afișare</translation> <translation id="5561162485081632007">Detectează și te avertizează cu privire la evenimentele periculoase atunci când au loc</translation> @@ -6016,7 +6011,6 @@ <translation id="6305607932814307878">Politică globală:</translation> <translation id="6305702903308659374">Redă la un volum normal chiar dacă ChromeVox vorbește</translation> <translation id="6305909198255586420">Instalează folosind profilul principal</translation> -<translation id="630750887748244481">Părintele tău a dezactivat opțiunea Permisiuni pentru site-uri, aplicații și extensii în Chrome. Nu este permisă adăugarea acestei extensii.</translation> <translation id="6307990684951724544">Sistem ocupat</translation> <translation id="6308493641021088955">Conectare asigurată de <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Salvează lin&kul ca...</translation> @@ -6844,7 +6838,6 @@ <translation id="7025190659207909717">Gestionarea serviciului de date mobile</translation> <translation id="7025895441903756761">Securitate și confidențialitate</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Deschide-le pe toate într-o fereastră &incognito}=1{Deschide într-o fereastră &incognito}few{Deschide-le pe toate ({COUNT}) într-o fereastră &incognito}other{Deschide-le pe toate ({COUNT}) într-o fereastră &incognito}}</translation> -<translation id="7028057921476386252">Părintele sau tutorele trebuie să spună că poți activa această extensie</translation> <translation id="7029307918966275733">Crostini nu este instalat. Instalează Crostini pentru a afișa datele de conectare.</translation> <translation id="7029809446516969842">Parole</translation> <translation id="7030304022046916278">Trimite adresele URL la funcția Navigare sigură, pentru a le verifica</translation> @@ -8223,7 +8216,6 @@ <translation id="8251509999076836464">Se asociază cu <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatura a fost eliminată.</translation> <translation id="825238165904109940">Afișează întotdeauna adresele URL complete</translation> -<translation id="8252538334423261825">Nu se poate adăuga extensia</translation> <translation id="8252569384384439529">Se încarcă...</translation> <translation id="8253198102038551905">Pentru a vedea proprietățile rețelei, dă clic pe „+”</translation> <translation id="8255212965098517578">Fotografiile, notificările și aplicațiile recente</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 2126b68..ec648b5 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1330,7 +1330,6 @@ <translation id="2114820389966440614">Показывать здесь "Лучшие из недавних фото" и другие воспоминания</translation> <translation id="2114896190328250491">Фото: <ph name="NAME" /></translation> <translation id="2114995631896158695">Нет SIM-карты.</translation> -<translation id="2116020356255810305">Открывать приложение при запуске браузера</translation> <translation id="2116619964159595185">Обычно сайты подключаются к устройствам Bluetooth, чтобы использовать некоторые функции, например настраивать или синхронизировать маячок, фитнес-трекер или умную лампочку.</translation> <translation id="2117655453726830283">Следующий слайд</translation> <translation id="2119349053129246860">Открыть в приложении "<ph name="APP" />"</translation> @@ -1582,7 +1581,7 @@ <translation id="2312219318583366810">URL страницы</translation> <translation id="2314165183524574721">Ваше устройство скрыто от других пользователей</translation> <translation id="2314774579020744484">Язык, который используется при переводе страниц</translation> -<translation id="2316129865977710310">Пропустить</translation> +<translation id="2316129865977710310">Нет, спасибо</translation> <translation id="2317842250900878657">Выполнено: <ph name="PROGRESS_PERCENT" />%</translation> <translation id="2318143611928805047">Размер бумаги</translation> <translation id="2318817390901984578">Чтобы пользоваться приложениями Android, зарядите и обновите устройство <ph name="DEVICE_TYPE" />.</translation> @@ -1611,7 +1610,7 @@ <translation id="2336228925368920074">Добавить все вкладки в закладки…</translation> <translation id="2336376423977300504">Сайты, чьи файлы cookie всегда удаляются при закрытии окон</translation> <translation id="2336381494582898602">Powerwash</translation> -<translation id="2337236196941929873">Выполняется предзагрузка страниц, которые, возможно, вы будете посещать. Для этого Chrome может использовать файлы cookie (при наличии вашего разрешения), а также шифровать и отправлять страницы через Google, чтобы скрыть ваши идентификационные данные от сайтов.</translation> +<translation id="2337236196941929873">Страницы, которые вы можете посетить, будут загружаться заранее. Для этого Chrome может использовать файлы cookie (если вы их разрешили), а также шифровать и отправлять страницы через Google, чтобы скрывать ваши идентификационные данные от сайтов.</translation> <translation id="2340239562261172947">Невозможно безопасно скачать файл "<ph name="FILE_NAME" />".</translation> <translation id="2342180549977909852">Ребенок может использовать PIN-код вместо пароля для разблокировки устройства. Установите его сейчас или позже в "Настройках".</translation> <translation id="2342740338116612727">Закладки добавлены</translation> @@ -1870,7 +1869,7 @@ <translation id="2561211427862644160">Здесь находятся все ваши закладки</translation> <translation id="2564520396658920462">Выполнение JavaScript через AppleScript отключено. Чтобы включить эту функцию, в строке меню выберите "Вид > Разработчикам > Разрешить JavaScript из событий Apple". Подробную информацию можно найти на этой странице: https://support.google.com/chrome/?p=applescript.</translation> <translation id="2564653188463346023">Расширенная проверка правописания</translation> -<translation id="2568694057933302218">В режиме инкогнито сайты не могут применять файлы cookie, чтобы отслеживать ваши действия в браузере. Информация о таких действиях не используется, например, для показа персонализированной рекламы. Из-за этого функции некоторых сайтов могут стать недоступными.</translation> +<translation id="2568694057933302218">В режиме инкогнито сайты не могут использовать файлы cookie, чтобы отслеживать ваши действия на других сайтах. Информация о действиях в браузере не используется для таких целей, как показ персонализированной рекламы. Функции некоторых сайтов могут быть недоступны.</translation> <translation id="2568774940984945469">Контейнер панели информации</translation> <translation id="2569972178052279830">Название магазина</translation> <translation id="257088987046510401">Темы</translation> @@ -2544,7 +2543,7 @@ <translation id="3160928651883997588">Настройки сети VPN</translation> <translation id="3161522574479303604">Все языки</translation> <translation id="3162853326462195145">Учебный аккаунт</translation> -<translation id="3162899666601560689">Сайты могут использовать файлы cookie, чтобы сделать работу в браузере более удобной, например запоминая товары в корзине или информацию о том, что вы уже вошли в аккаунт</translation> +<translation id="3162899666601560689">Сайты могут использовать файлы cookie для вашего удобства, например, чтобы сохранять информацию о товарах в корзине или о том, что вы вошли в аккаунт.</translation> <translation id="3163201441334626963">Неизвестный продукт <ph name="PRODUCT_ID" /> от поставщика <ph name="VENDOR_ID" /></translation> <translation id="3163511056918491211">Вы можете легко восстановить свои данные или в любой момент перенести их на новое устройство. Резервные копии загружаются в Google и шифруются с помощью пароля вашего аккаунта Google.</translation> <translation id="3164329792803560526">Отправка вкладки в приложение "<ph name="APP_NAME" />"…</translation> @@ -3259,7 +3258,6 @@ <translation id="380329542618494757">Имя</translation> <translation id="3803345858388753269">Качество видео</translation> <translation id="3803367742635802571">Посещаемые сайты могут перестать работать должным образом</translation> -<translation id="3803583375545057606">Попросить родителя дать разрешение на включение расширения?</translation> <translation id="380408572480438692">Сбор данных о производительности помогает Google улучшать работу системы. Данные отправляются только тогда, когда пользователь отправляет отзыв (Alt-Shift-I) и решает приложить к нему данные о производительности. В любое время можно вернуться на эту страницу и отключить сбор данных.</translation> <translation id="3807249107536149332">Расширение "<ph name="EXTENSION_NAME" />" (ID <ph name="EXTENSION_ID" />) запрещено использовать на экране входа</translation> <translation id="3807747707162121253">&Отмена</translation> @@ -3681,7 +3679,6 @@ <translation id="4169535189173047238">Запретить</translation> <translation id="4170314459383239649">Удалять при выходе</translation> <translation id="417096670996204801">Выберите профиль</translation> -<translation id="41725145403849567">Попросить родителя дать разрешение на добавление расширения?</translation> <translation id="4175137578744761569">Сиреневый с белым</translation> <translation id="4175737294868205930">Постоянное хранилище</translation> <translation id="4176463684765177261">Отключено</translation> @@ -4150,7 +4147,7 @@ <translation id="4595560905247879544">Изменять приложения и расширения может только менеджер (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4596295440756783523">У вас есть сертификаты, идентифицирующие эти серверы</translation> <translation id="4598345735110653698">Настроить ключи доступа</translation> -<translation id="4598549027014564149">В режиме инкогнито сайты не могут отслеживать ваши действия с помощью файлов cookie, даже на связанных сайтах. Информация о действиях в браузере не используется, например, для показа персонализированной рекламы. Из-за этого функции некоторых сайтов могут стать недоступными.</translation> +<translation id="4598549027014564149">В режиме инкогнито сайты не могут использовать файлы cookie, чтобы отслеживать ваши действия на других сайтах, даже связанных. Информация о действиях в браузере не используется для таких целей, как показ персонализированной рекламы. Функции некоторых сайтов могут быть недоступны.</translation> <translation id="4598556348158889687">Управление хранилищем</translation> <translation id="4598776695426288251">Доступно подключение к Wi-Fi через несколько устройств</translation> <translation id="4600071396330666617">Количество подсказок</translation> @@ -4320,7 +4317,7 @@ <translation id="4750185073185658673">Другие разрешения можно посмотреть на телефоне. Убедитесь, что на нем включены Bluetooth и Wi-Fi.</translation> <translation id="4750394297954878236">Предложения</translation> <translation id="475088594373173692">Первый пользователь</translation> -<translation id="4756302371612574303">Чтобы вам было удобно пользоваться сайтами, они могут сохранять данные о ваших действиях, например информацию о добавленных в корзину товарах или о том, что вы вошли в аккаунт. Чаще всего эти сведения временно хранятся на вашем устройстве.</translation> +<translation id="4756302371612574303">Чтобы вам было удобно пользоваться сайтами, они могут сохранять данные о ваших действиях, например информацию о добавленных в корзину товарах или о том, что вы вошли в аккаунт. Часто эти сведения временно хранятся на вашем устройстве.</translation> <translation id="4756378406049221019">Остановить/Перезапустить</translation> <translation id="4756388243121344051">&История</translation> <translation id="4756671452988984333">Расшифровка для аудио</translation> @@ -4670,7 +4667,7 @@ <translation id="508059534790499809">Обновить билет Kerberos</translation> <translation id="5081960376148623587">Настройка предзагрузки страниц</translation> <translation id="5084328598860513926">Подготовка к использованию была прервана. Повторите попытку или обратитесь к владельцу или администратору устройства. Код ошибки: <ph name="ERROR_CODE" />.</translation> -<translation id="5084622689760736648">Сайты будут работать привычным образом с большей вероятностью</translation> +<translation id="5084622689760736648">Сайты будут с большей вероятностью работать так, как вы ожидаете</translation> <translation id="5085162214018721575">Проверка наличия обновлений</translation> <translation id="5086082738160935172">Устройства ввода (HID)</translation> <translation id="508645147179720015">Примечание не должно быть длиннее 1000 символов</translation> @@ -4687,7 +4684,7 @@ <translation id="5094721898978802975">Установка соединения со смежными нативными приложениями</translation> <translation id="5097002363526479830">Не удалось подключиться к сети <ph name="NAME" />: <ph name="DETAILS" /></translation> <translation id="5097306410549350357">Подробнее об использовании данных о местоположении…</translation> -<translation id="5097349930204431044">Сайты, которые вы посещаете, могут определять ваши предпочтения и впоследствии показывать более подходящую рекламу</translation> +<translation id="5097349930204431044">Сайты, которые вы посещаете, могут определять, что вам нравится, и в дальнейшем предлагать другим сайтам рекламу для вас</translation> <translation id="5097649414558628673">Инструмент: <ph name="PRINT_NAME" /></translation> <translation id="5097874180538493929">Автоматически регистрировать нажатие кнопки мыши, когда курсор останавливается</translation> <translation id="5101839224773798795">Автоматически регистрировать нажатие кнопки мыши, когда указатель останавливается</translation> @@ -5094,7 +5091,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-код должен содержать не менее 1 символа.}one{PIN-код должен содержать не менее # символа.}few{PIN-код должен содержать не менее # символов.}many{PIN-код должен содержать не менее # символов.}other{PIN-код должен содержать не менее # символа.}}</translation> <translation id="5474859849784484111">Согласно действующим правилам (источник – <ph name="MANAGER" />) необходимо скачать обновление по Wi-Fi. Вам также доступно подключение с тарификацией, но в этом случае за передачу данных может взиматься плата.</translation> <translation id="5476016146231427848">Чтобы использовать Steam для Chromebook, перезапустите устройство.</translation> -<translation id="5476897066181964657">Чтобы добавить это расширение, тебе нужно разрешение родителя или законного представителя.</translation> <translation id="5481273127572794904">Запретить сайтам автоматически скачивать несколько файлов</translation> <translation id="5481941284378890518">Добавить ближайшие принтеры</translation> <translation id="5483785310822538350">Запретить доступ к файлам и устройствам</translation> @@ -5151,7 +5147,7 @@ <translation id="5519195206574732858">LTE</translation> <translation id="5521078259930077036">Другая главная страница?</translation> <translation id="5522156646677899028">В этом расширении обнаружена серьезная уязвимость, угрожающая безопасности.</translation> -<translation id="5522403133543437426">Поисковая система, используемая в адресной строке</translation> +<translation id="5522403133543437426">Поисковая система, используемая в адресной строке.</translation> <translation id="5523149538118225875">{NUM_EXTENSIONS,plural, =1{Администратор установил расширение}one{Администратор установил # расширение}few{Администратор установил # расширения}many{Администратор установил # расширений}other{Администратор установил # расширения}}</translation> <translation id="5523558474028191231">В названии можно использовать буквы, цифры и специальные символы. Его максимальная длина – <ph name="MAX_CHARACTER_COUNT" /> зн.</translation> <translation id="5526701598901867718">Все (небезопасно)</translation> @@ -5191,7 +5187,6 @@ <translation id="5555639311269196631">Отключить точку доступа</translation> <translation id="5556459405103347317">Перезагрузить</translation> <translation id="5558129378926964177">&Увеличить</translation> -<translation id="5558247502209241936">Открывать приложение в окне</translation> <translation id="5559311991468302423">Удалить адрес</translation> <translation id="55601339223879446">Подогнать границы рабочего стола под размер экрана</translation> <translation id="5561162485081632007">Обнаруживает опасные события и предупреждает о них</translation> @@ -6017,7 +6012,6 @@ <translation id="6305607932814307878">Общая политика:</translation> <translation id="6305702903308659374">Не менять его громкость даже во время чтения ChromeVox</translation> <translation id="6305909198255586420">Для установки используйте основной профиль</translation> -<translation id="630750887748244481">Родители отключили в Chrome параметр "Разрешения для сайтов, приложений и расширений". Это расширение запрещено добавлять.</translation> <translation id="6307990684951724544">Система перегружена</translation> <translation id="6308493641021088955">Вход через расширение "<ph name="EXTENSION_NAME" />"</translation> <translation id="6308937455967653460">Сохранить ссыл&ку как...</translation> @@ -6849,7 +6843,6 @@ <translation id="7025190659207909717">Управление передачей данных в мобильных сетях</translation> <translation id="7025895441903756761">Безопасность и конфиденциальность</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Открыть все URL в окне в режиме &инкогнито}=1{Открыть URL в окне в режиме &инкогнито}one{Открыть все URL ({COUNT}) в окне в режиме &инкогнито}few{Открыть все URL ({COUNT}) в окне в режиме &инкогнито}many{Открыть все URL ({COUNT}) в окне в режиме &инкогнито}other{Открыть все URL ({COUNT}) в окне в режиме &инкогнито}}</translation> -<translation id="7028057921476386252">Чтобы включить это расширение, тебе нужно разрешение родителя или законного представителя.</translation> <translation id="7029307918966275733">Установка Crostini не была выполнена. Чтобы посмотреть список участников, установите Crostini.</translation> <translation id="7029809446516969842">Пароли</translation> <translation id="7030304022046916278">Обеспечивает отправку URL на проверку по критериям Безопасного просмотра.</translation> @@ -6964,7 +6957,7 @@ <translation id="7141105143012495934">Ошибка входа: не удалось получить данные аккаунта. Обратитесь к администратору или повторите попытку.</translation> <translation id="7141844554192012199">Проверка паролей</translation> <translation id="7144878232160441200">Повторить</translation> -<translation id="7148426638542880639">Сайты могут работать некорректно. Выберите этот вариант, если не хотите, чтобы на вашем устройстве сохранялась информация о посещенных сайтах.</translation> +<translation id="7148426638542880639">Сайты могут работать не так, как вы ожидаете. Выберите этот вариант, если не хотите, чтобы на вашем устройстве сохранялась информация о посещенных сайтах.</translation> <translation id="7149839598364933473">Установить <ph name="DEVICE_OS" /> на устройстве</translation> <translation id="7149893636342594995">Последние 24 часа</translation> <translation id="7152478047064750137">Расширению не требуются особые разрешения</translation> @@ -7315,7 +7308,7 @@ <translation id="7470424110735398630">Разрешить сайтам просматривать буфер обмена</translation> <translation id="747114903913869239">Ошибка: не удается расшифровать расширение</translation> <translation id="7471520329163184433">Медленная</translation> -<translation id="7473891865547856676">Пропустить</translation> +<translation id="7473891865547856676">Нет, спасибо</translation> <translation id="747459581954555080">Восстановить все</translation> <translation id="747507174130726364">{NUM_DAYS,plural, =1{Необходимо немедленно вернуть устройство}one{Верните <ph name="DEVICE_TYPE" /> в течение {NUM_DAYS} дня}few{Верните <ph name="DEVICE_TYPE" /> в течение {NUM_DAYS} дней}many{Верните <ph name="DEVICE_TYPE" /> в течение {NUM_DAYS} дней}other{Верните <ph name="DEVICE_TYPE" /> в течение {NUM_DAYS} дня}}</translation> <translation id="7475671414023905704">URL потерянных паролей Netscape</translation> @@ -7384,7 +7377,7 @@ <translation id="7531779363494549572">Откройте настройки устройства и выберите "Приложения и уведомления > Уведомления".</translation> <translation id="7532009420053991888">Приложение "<ph name="LINUX_APP_NAME" />" не отвечает. Чтобы выйти из него, нажмите "Закрыть принудительно".</translation> <translation id="7535730537657706072">Чтобы удалить с устройства историю браузера в режиме инкогнито, закройте все вкладки инкогнито.</translation> -<translation id="7537451260744431038">Сайты не могут использовать файлы cookie, чтобы сделать работу в браузере более удобной, например запоминая товары в корзине или информацию о том, что вы вошли в аккаунт</translation> +<translation id="7537451260744431038">Сайты не могут использовать файлы cookie для вашего удобства, например, чтобы сохранять информацию о товарах в корзине или о том, что вы вошли в аккаунт.</translation> <translation id="7538088324298143359">Искать на изображении с помощью <ph name="SEARCH_ENGINE" /></translation> <translation id="7540972813190816353">При проверке обновлений произошла ошибка: <ph name="ERROR" /></translation> <translation id="7541076351905098232">По требованию <ph name="MANAGER" /> на устройстве была восстановлена предыдущая версия ОС. Сохраните важные файлы и перезапустите устройство. Все данные при этом будут удалены.</translation> @@ -7706,7 +7699,7 @@ <translation id="7798844538707273832">Автоматически отключено разрешение "<ph name="PERMISSION" />"</translation> <translation id="7800518121066352902">Повернуть п&ротив часовой стрелки</translation> <translation id="7801679634091975683">Параметры ниже относятся только к браузеру Lacros Chrome. Чтобы изменить параметры обычного браузера Chrome, откройте его и перейдите в настройки.</translation> -<translation id="780301667611848630">Пропустить</translation> +<translation id="780301667611848630">Нет, спасибо</translation> <translation id="7804072833593604762">Вкладка закрыта</translation> <translation id="7805768142964895445">Состояние</translation> <translation id="7805906048382884326">Закрыть подсказку</translation> @@ -8112,7 +8105,7 @@ <translation id="815114315010033526">Отсканировать QR-код</translation> <translation id="8151638057146502721">Настроить</translation> <translation id="8154790740888707867">Файлы отсутствуют</translation> -<translation id="8154912474061769055">Функции многих сайтов могут стать недоступными</translation> +<translation id="8154912474061769055">Функции многих сайтов могут быть недоступны.</translation> <translation id="815491593104042026">Не удалось выполнить авторизацию, так как обнаружен небезопасный URL (<ph name="BLOCKED_URL" />). Обратитесь к администратору.</translation> <translation id="8155676038687609779">{COUNT,plural, =0{Нет раскрытых паролей}=1{{COUNT} раскрытый пароль}one{{COUNT} раскрытый пароль}few{{COUNT} раскрытых пароля}many{{COUNT} раскрытых паролей}other{{COUNT} раскрытого пароля}}</translation> <translation id="8157248655669507702">Чтобы установить профиль eSIM, включите мобильный интернет.</translation> @@ -8227,7 +8220,6 @@ <translation id="8251509999076836464">Подключение к устройству "<ph name="DEVICE_NAME" />"</translation> <translation id="8251578425305135684">Быстрая ссылка удалена.</translation> <translation id="825238165904109940">Всегда показывать URL полностью</translation> -<translation id="8252538334423261825">Не удалось добавить расширение</translation> <translation id="8252569384384439529">Загрузка...</translation> <translation id="8253198102038551905">Чтобы просмотреть свойства сети, нажмите "+"</translation> <translation id="8255212965098517578">Недавние фотографии, уведомления и приложения</translation> @@ -8836,7 +8828,7 @@ <translation id="8797459392481275117">Никогда не переводить этот сайт</translation> <translation id="8798099450830957504">По умолчанию</translation> <translation id="8800034312320686233">Сайт не работает?</translation> -<translation id="8803526663383843427">Функция включена</translation> +<translation id="8803526663383843427">Если функция включена</translation> <translation id="8803953437405899238">Открывайте новые вкладки одним нажатием</translation> <translation id="8804419452060773146">В каком браузере открывается</translation> <translation id="8804999695258552249">{NUM_TABS,plural, =1{Открыть вкладку в другом окне}one{Открыть вкладки в другом окне}few{Открыть вкладки в другом окне}many{Открыть вкладки в другом окне}other{Открыть вкладки в другом окне}}</translation> @@ -9093,7 +9085,7 @@ <translation id="9021662811137657072">Обнаружен вирус</translation> <translation id="902236149563113779">Обычно сайты отслеживают положение камеры, чтобы использовать связанные с дополненной реальностью функции, например в играх или при показе маршрутов с подсказками.</translation> <translation id="9022847679183471841">Этот аккаунт уже используется на данном компьютере пользователем <ph name="AVATAR_NAME" />.</translation> -<translation id="9022871169049522985">Сайты и рекламодатели могут проводить оценку эффективности своих рекламных объявлений</translation> +<translation id="9022871169049522985">Сайты и рекламодатели могут оценивать эффективность своей рекламы</translation> <translation id="9023015617655685412">Добавить страницу в закладки...</translation> <translation id="9023909777842748145">Запретить отправку данных можно в любой момент. Это не повлияет на обновление и безопасность системы.</translation> <translation id="9024127637873500333">&Открыть в новой вкладке</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index f1b55e76..92712d2e 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">මඟහැරීමට ESCAPE ඔබන්න (නිල නොවන ගොඩනැඟීම් පමණි).</translation> <translation id="1093457606523402488">දෘශ්ය ජාල:</translation> <translation id="1095761715416917775">ඔබට සැම විට ඔබගේ සමමුහුර්ත දත්ත වෙත ප්රවේශ විය හැකි බව සහතික කර ගන්න</translation> +<translation id="1095879482467973146">වෙබයෙහි Google මුරපද කළමනාකරු</translation> <translation id="109647177154844434">Parallels Desktop අස්ථාපනය කිරීම ඔබගේ Windows රූපය මකනු ඇත. මෙයට එහි යෙදුම්, සැකසීම්, සහ දත්ත ඇතුළත් වේ. ඔබ ඉදිරියට යාමට අදහස් කරන බව ඔබට විශ්වාසද?</translation> <translation id="1097016918605049747">මෙම පිටුව පරිවර්තනය කළ නොහැකි විය</translation> <translation id="1097658378307015415">ප්රවිෂ්ට වීමට පෙර, <ph name="NETWORK_ID" /> ජාලය සක්රීය කිරීම සඳහා ආගන්තුක ලෙස ඇතුළ් වන්න</translation> @@ -1328,7 +1329,6 @@ <translation id="2114820389966440614">මෙහි "මෑත විශේෂ අවස්ථා" සහ අනෙකුත් මතක බලන්න</translation> <translation id="2114896190328250491"><ph name="NAME" />ගේ ඡායාරූපය</translation> <translation id="2114995631896158695">SIM පතක් ඇතුළත් කර නැත</translation> -<translation id="2116020356255810305">ආරම්භයේ දී යෙදුම දියත් කිරීම සබල කරන්න</translation> <translation id="2116619964159595185">අඩවි සාමාන්යයෙන් අඩු ශක්ති බීකනයක්, සෞඛ්ය හෝ යෝග්යතා හඹා යන්නෙක් හෝ ස්මාර්ට් ආලෝක බුබුලක් පිහිටුවීම හෝ සමමුහුර්ත කිරීම වැනි විශේෂාංග සඳහා බ්ලූටූත් උපාංග සමඟ සම්බන්ධ වේ.</translation> <translation id="2117655453726830283">මීළඟ ස්ලයිඩය</translation> <translation id="2119349053129246860"><ph name="APP" /> යෙදුමෙහි විවෘත කරන්න</translation> @@ -1488,6 +1488,7 @@ <translation id="2252017960592955005">බැලීමේ ආරක්ෂණය (බීටා)</translation> <translation id="225240747099314620">ආරක්ෂිත අන්තර්ගතය සඳහා හැඳුනුම්කාරකවලට ඉඩ දෙන්න (පරිගණකය නැවත පණ ගැන්වීමට සිදු විය හැක)</translation> <translation id="2253318212986772520"><ph name="PRINTER_NAME" /> සඳහා PPD ලබා ගැනීමට නොහැකි වේ.</translation> +<translation id="2253927598983295051"><ph name="APP_NAME" /> සමග බෙදා ගත යුතු දේ තෝරා ගන්න</translation> <translation id="2255077166240162850">මෙම උපාංගය වෙනත් වසමට හෝ ප්රකාරයට අඟුලු දමා ඇත.</translation> <translation id="2255317897038918278">Microsoft වේලාව මුද්රා තැබීම</translation> <translation id="2256115617011615191">දැන් යළි අාරම්භ කරන්න</translation> @@ -1836,6 +1837,7 @@ <translation id="2532589005999780174">අධි අසමානතා ප්රකාරය</translation> <translation id="2533649878691950253">ඔබ සාමාන්යයෙන් මෙයට ඉඩ නොදෙන නිසා ඔබගේ ඉතා නිවැරදි ස්ථානය දැන ගැනීමෙන් මෙම අඩවිය අවහිර කර ඇත</translation> <translation id="253434972992662860">විරාමය (&P)</translation> +<translation id="253498598929009420">අඩවියට ඔබේ තිරයෙහි අන්තර්ගතය බැලීමට හැකි වනු ඇත</translation> <translation id="253557089021624350">Keepalive ගණන</translation> <translation id="2535799430745250929">සෙලියුලර් ජාල කිසිවක් නොපවතියි</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> හට පහත ගොනු සහ ෆෝල්ඩර බැලීමටත් සංස්කරණ කිරීමටත් හැකි ය</translation> @@ -3258,7 +3260,6 @@ <translation id="380329542618494757">නම</translation> <translation id="3803345858388753269">වීඩියෝවේ ගුණත්වය</translation> <translation id="3803367742635802571">ඔබ පිවිසෙන අඩවි සැලසුම් කළ පරිදි ක්රියා කිරීම නැවැත්විය හැක</translation> -<translation id="3803583375545057606">මෙම දිගුව සබල කිරීමට ඔබේ මාපියන්ගෙන් අසන්න ද?</translation> <translation id="380408572480438692">ක්රියාකාරීත්ව දත්ත එක්රැස් කිරීම සබල කිරීම කාලයත් සමඟ Google හට පද්ධතිය වැඩි දියුණු කිරීමට සහය විය හැක. ඔබ ක්රියාකාරීත්ව දත්ත ඇතුළත් කර අදහස් හා යෝජනා වාර්තාවක් (Alt-Shift-I) යවන තෙක් කිසිඳු දත්තයක් නොයැවෙයි. එක්රැස් කිරීම නැවැත්වීමට ඔබට ඕනෑම වේලාවක මෙම තිරයට ආ හැක.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (දිගු ID "<ph name="EXTENSION_ID" />") ඇතුළු වීම් තිරයක ඉඩ නොදේ</translation> <translation id="3807747707162121253">&අවලංගු කරන්න</translation> @@ -3681,7 +3682,6 @@ <translation id="4169535189173047238">අවසර නොදෙන්න</translation> <translation id="4170314459383239649">පිටවීමේදී හිස් කරන්න</translation> <translation id="417096670996204801">පැතිකඩක් තෝරා ගන්න</translation> -<translation id="41725145403849567">මෙම දිගුව එක් කිරීමට ඔබේ මාපියන්ගෙන් අසන්න ද?</translation> <translation id="4175137578744761569">ලා දම් සහ සුදු</translation> <translation id="4175737294868205930">අනවරත ගබඩාව</translation> <translation id="4176463684765177261">අබල කරන ලද</translation> @@ -5094,7 +5094,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN අඩු තරමින් අනුලකුණු එකක් විය යුතුය}one{PIN අඩු තරමින් අනුලකුණු #ක් විය යුතුය}other{PIN අඩු තරමින් අනුලකුණු #ක් විය යුතුය}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> හට ඔබ දැන් Wi-Fi වෙත සම්බන්ධ වී යාවත්කාලීනයක් බාගැනීම අවශ්යයි. නැති නම්, මනුගත සම්බන්ධතාවකින් බාගන්න (ගාස්තු අදාළ විය හැකිය).</translation> <translation id="5476016146231427848">Chromebook හි Steam භාවිතා කිරීමට ඔබේ උපාංගය යළි අරඹන්න</translation> -<translation id="5476897066181964657">ඔබ මෙම දිගුව එක් කිරීමට කමක් නැතැයි මාපියෙකු හෝ භාරකරුවෙකු පැවසිය යුතු වේ</translation> <translation id="5481273127572794904">ගොනු කිහිපයක් ස්වයංක්රියව බාගැනීමට ඉඩ නොදේ</translation> <translation id="5481941284378890518">අවට මුද්රක එක් කරන්න</translation> <translation id="5483785310822538350">ගොනු හා උපාංග ප්රවේශය අවලංගු කරන්න</translation> @@ -5191,7 +5190,6 @@ <translation id="5555639311269196631">හොට්ස්පොට් ක්රියාවිරහිත කරන්න</translation> <translation id="5556459405103347317">නැවත</translation> <translation id="5558129378926964177">විශාල කරන්න</translation> -<translation id="5558247502209241936">කවුළුව තුළ යෙදුම විවෘත කිරීම සබල කරන්න</translation> <translation id="5559311991468302423">ලිපිනය මකන්න</translation> <translation id="55601339223879446">සංදර්ශකය තුළ ඔබේ වැඩතලයෙහි මායිම් සීරුමාරු කරන්න</translation> <translation id="5561162485081632007">අනතුරුදායක සිදුවීම් සිදු වන විට ඒවා අනාවරණ කර ඔබට අවවාද කරයි</translation> @@ -6018,7 +6016,6 @@ <translation id="6305607932814307878">ගෝලීය ප්රතිපත්තිය:</translation> <translation id="6305702903308659374">ChromeVox කතා කරන විට පවා සාමාන්ය හඬ පරිමාවකින් වාදනය කරන්න</translation> <translation id="6305909198255586420">ඔබේ මූලික පැතිකඩ භාවිතයෙන් ස්ථාපනය කරන්න</translation> -<translation id="630750887748244481">ඔබේ මාපියන් Chrome සඳහා "අඩවි, යෙදුම්, සහ දිගු සඳහා වන අවසර" ක්රියා විරහිත කර ඇත. මෙම දිගුව එක් කිරීමට ඉඩ නොදෙයි.</translation> <translation id="6307990684951724544">පද්ධතිය කාර්යබහුලයි</translation> <translation id="6308493641021088955">පුරනය වීම සපයන්නේ <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">ලින්ක් ලෙස සුරකින්න...</translation> @@ -6844,7 +6841,6 @@ <translation id="7025190659207909717">ජංගම දත්ත සේවා කළමණාකරණය</translation> <translation id="7025895441903756761">සුරක්ෂිතතාව සහ පෞද්ගලිකත්වය</translation> <translation id="7027258625819743915">{COUNT,plural, =0{සියල්ල &අප්රසිද්ධ කවුළුවක විවෘත කරන්න}=1{&අප්රසිද්ධ කවුළුවක විවෘත කරන්න}one{සියල්ල ({COUNT}) &අප්රසිද්ධ කවුළුවක විවෘත කරන්න}other{සියල්ල ({COUNT}) &අප්රසිද්ධ කවුළුවක විවෘත කරන්න}}</translation> -<translation id="7028057921476386252">ඔබ මෙම දිගුව සබල කිරීමට කමක් නැතැයි මාපියෙකු හෝ භාරකරුවෙකු පැවසිය යුතු වේ</translation> <translation id="7029307918966275733">Crostini ස්ථාපනය කර නැත. ක්රෙඩිට් බැලීමට කරුණාකර Crostini ස්ථාපනය කරන්න.</translation> <translation id="7029809446516969842">මුරපද</translation> <translation id="7030304022046916278">URL පරීක්ෂා කිරීමට ඒවා ආරක්ෂිත බ්රවුස් කිරීම වෙත යවයි</translation> @@ -8221,7 +8217,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" />ට යුගල කරමින්</translation> <translation id="8251578425305135684">තම්බ්නේල් ඉවත් කරන ලදි.</translation> <translation id="825238165904109940">සැම විටම සම්පූර්ණ URL පෙන්වන්න</translation> -<translation id="8252538334423261825">දිගුව එක් කළ නොහැක</translation> <translation id="8252569384384439529">උඩුගත කරමින්...</translation> <translation id="8253198102038551905">ජාල වත්කම් ලැබීමට '+' ක්ලික් කරන්න</translation> <translation id="8255212965098517578">මෑත ඡායාරූප, දැනුම්දීම් සහ යෙදුම්</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 2987fb9..6ba178cf 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1330,7 +1330,6 @@ <translation id="2114820389966440614">Tu si prezrite výber nedávnych fotiek a ďalšie spomienky</translation> <translation id="2114896190328250491">Autor fotografie: <ph name="NAME" /></translation> <translation id="2114995631896158695">Nie je vložená SIM karta</translation> -<translation id="2116020356255810305">Povoliť aktiváciu aplikácie pri spustení</translation> <translation id="2116619964159595185">Weby sa zvyčajne pripájajú k zariadeniam s rozhraním Bluetooth, aby mohli poskytovať funkcie, ktoré napríklad umožňujú nastavovať alebo synchronizovať majáčiky s nízkou spotrebou energie, nástroje na sledovanie zdravia či kondície alebo žiarovky inteligentného svetla</translation> <translation id="2117655453726830283">Nasledujúca snímka</translation> <translation id="2119349053129246860">Otvoriť v aplikácii <ph name="APP" /></translation> @@ -3259,7 +3258,6 @@ <translation id="380329542618494757">Meno</translation> <translation id="3803345858388753269">Kvalita videa</translation> <translation id="3803367742635802571">Weby, ktoré navštívite, môžu prestať fungovať podľa plánu</translation> -<translation id="3803583375545057606">Chceš požiadať rodiča o zapnutie tohto rozšírenia?</translation> <translation id="380408572480438692">Povolením zhromažďovania údajov o výkonnosti pomôžete spoločnosti Google postupom času zlepšovať systém. Kým neodošlete správu so spätnou väzbou (Alt-Shift-I) a nezahrniete údaje o výkonnosti, neodošlú sa žiadne údaje. Zhromažďovanie údajov môžete po prejdení späť na túto stránku kedykoľvek zakázať.</translation> <translation id="3807249107536149332">Rozšírenie <ph name="EXTENSION_NAME" /> (ID rozšírenia – <ph name="EXTENSION_ID" />) nie je povolené na prihlasovacej obrazovke.</translation> <translation id="3807747707162121253">&Zrušiť</translation> @@ -3681,7 +3679,6 @@ <translation id="4169535189173047238">Nepovoliť</translation> <translation id="4170314459383239649">Vymazať po ukončení</translation> <translation id="417096670996204801">Výber profilu</translation> -<translation id="41725145403849567">Chceš požiadať rodiča o pridanie tohto rozšírenia?</translation> <translation id="4175137578744761569">Svetlofialová a biela</translation> <translation id="4175737294868205930">Trvalé úložisko</translation> <translation id="4176463684765177261">Deaktivované</translation> @@ -5094,7 +5091,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN musí mať aspoň jeden znak}few{PIN musí mať aspoň # znaky}many{PIN must be at least # characters}other{PIN musí mať aspoň # znakov}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> vyžaduje, aby ste sa ihneď pripojili k sieti Wi-Fi a stiahli aktualizáciu. Prípadne ju stiahnite prostredníctvom meraného pripojenia (môžu sa účtovať poplatky).</translation> <translation id="5476016146231427848">Ak chcete v Chromebooku používať Steam, reštartujte zariadenie</translation> -<translation id="5476897066181964657">Rodič alebo zákonný zástupca musí súhlasiť s tým, že môžeš pridať toto rozšírenie</translation> <translation id="5481273127572794904">Nemôže automaticky sťahovať viacero súborov</translation> <translation id="5481941284378890518">Pridať tlačiarne v okolí</translation> <translation id="5483785310822538350">Odvolať prístup k súborom a zariadeniam</translation> @@ -5191,7 +5187,6 @@ <translation id="5555639311269196631">Vypnúť hotspot</translation> <translation id="5556459405103347317">Znova načítať</translation> <translation id="5558129378926964177">Priblíž&iť</translation> -<translation id="5558247502209241936">Povoliť otvárať aplikáciu v okne</translation> <translation id="5559311991468302423">Odstrániť adresu</translation> <translation id="55601339223879446">Úprava ohraničenia pracovnej plochy obrazovky</translation> <translation id="5561162485081632007">Zisťuje nebezpečné udalosti a upozorní vás, keď k nim dôjde</translation> @@ -6017,7 +6012,6 @@ <translation id="6305607932814307878">Globálne pravidlá:</translation> <translation id="6305702903308659374">Pri hlasovej odozve ChromeVox zachovať normálnu hlasitosť prehrávania</translation> <translation id="6305909198255586420">Nainštalujte pomocou hlavného profilu</translation> -<translation id="630750887748244481">Váš nadradený účet vypol Povolenia pre weby, aplikácie a rozšírenia v Chrome. Pridanie tohto rozšírenia nie je povolené.</translation> <translation id="6307990684951724544">Systém je zaneprázdnený</translation> <translation id="6308493641021088955">Prihlásenie poskytuje <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Uložiť &odkaz ako...</translation> @@ -6847,7 +6841,6 @@ <translation id="7025190659207909717">Správa mobilnej dátovej služby</translation> <translation id="7025895441903756761">Zabezpečenie a ochrana súkromia</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Otvoriť všetky v okne inkognito}=1{Otvoriť v okne inkognito}few{Otvoriť všetky ({COUNT}) v okne inkognito}many{Otvoriť všetky ({COUNT}) v okne inkognito}other{Otvoriť všetky ({COUNT}) v okne inkognito}}</translation> -<translation id="7028057921476386252">Rodič alebo zákonný zástupca musí súhlasiť s tým, že môžeš zapnúť toto rozšírenie</translation> <translation id="7029307918966275733">Systém Crostini nie je nainštalovaný. Ak si chcete zobraziť poďakovania, nainštalujte si Crostini.</translation> <translation id="7029809446516969842">Heslá</translation> <translation id="7030304022046916278">Odosiela Bezpečnému prehliadaniu webové adresy na kontrolu</translation> @@ -8225,7 +8218,6 @@ <translation id="8251509999076836464">Páruje sa so zariadením <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatúra odstránená.</translation> <translation id="825238165904109940">Vždy zobrazovať celé webové adresy</translation> -<translation id="8252538334423261825">Rozšírenie sa nedá pridať</translation> <translation id="8252569384384439529">Nahráva sa...</translation> <translation id="8253198102038551905">Vlastnosti siete otvoríte kliknutím na tlačidlo plus (+)</translation> <translation id="8255212965098517578">Nedávne fotky, upozornenia a aplikácie</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 39b63d5..322a65b 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -1343,7 +1343,6 @@ <translation id="2114820389966440614">Tukaj si oglejte »Nedavno najboljšo vsebino« in druge spomine</translation> <translation id="2114896190328250491">Avtor fotografije: <ph name="NAME" /></translation> <translation id="2114995631896158695">Kartica SIM ni vstavljena.</translation> -<translation id="2116020356255810305">Omogočanje zagona aplikacije ob zagonu</translation> <translation id="2116619964159595185">Spletna mesta običajno vzpostavijo povezavo z napravami Bluetooth zaradi funkcij, kot sta nastavitev ali sinhroniziranje nizkoenergijskega svetilnika, naprave za spremljanje zdravja oziroma telesne pripravljenosti ali pametne sijalke.</translation> <translation id="2117655453726830283">Naslednji diapozitiv</translation> <translation id="2119349053129246860">Odpri v aplikaciji <ph name="APP" /></translation> @@ -3275,7 +3274,6 @@ <translation id="380329542618494757">Ime</translation> <translation id="3803345858388753269">Kakovost videoposnetka</translation> <translation id="3803367742635802571">Obiskana spletna mesta bodo morda nehala delovati, kot je predvideno</translation> -<translation id="3803583375545057606">Želiš prositi starša, da omogoči to razširitev?</translation> <translation id="380408572480438692">Če omogočite zbiranje podatkov o učinkovitosti delovanja, boste Googlu pomagali sčasoma izboljšati sistem. Nobeni podatki se ne pošljejo, dokler ne pošljete poročila (Alt–Shift–I), v katerega vključite podatke o učinkovitosti delovanja. Na to stran se lahko kadar koli vrnete in onemogočite zbiranje podatkov.</translation> <translation id="3807249107536149332">Razširitev <ph name="EXTENSION_NAME" /> (ID razširitve »<ph name="EXTENSION_ID" />«) ni dovoljena na zaslonu za prijavo.</translation> <translation id="3807747707162121253">&Prekliči</translation> @@ -3697,7 +3695,6 @@ <translation id="4169535189173047238">Ne dovoli</translation> <translation id="4170314459383239649">Izbriši ob izhodu</translation> <translation id="417096670996204801">Izbira profila</translation> -<translation id="41725145403849567">Želiš prositi starša, da doda to razširitev?</translation> <translation id="4175137578744761569">Svetlo vijolična in bela</translation> <translation id="4175737294868205930">Trajno shranjevanje</translation> <translation id="4176463684765177261">Onemogočeno</translation> @@ -5111,7 +5108,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Koda PIN mora vsebovati najmanj en znak}one{Koda PIN mora vsebovati najmanj # znak}two{Koda PIN mora vsebovati najmanj # znaka}few{Koda PIN mora vsebovati najmanj # znake}other{Koda PIN mora vsebovati najmanj # znakov}}</translation> <translation id="5474859849784484111">Domena <ph name="MANAGER" /> zahteva, da se povežete z omrežjem Wi-Fi in prenesete posodobitev. Prenesete jo lahko tudi prek povezave z omejenim prenosom podatkov (prenos podatkov se morda zaračuna).</translation> <translation id="5476016146231427848">Znova zaženite napravo, če želite v Chromebooku uporabljati aplikacijo Steam.</translation> -<translation id="5476897066181964657">Starš ali skrbnik mora potrditi, da lahko dodaš to razširitev.</translation> <translation id="5481273127572794904">Ni dovoljeno samodejno prenesti več datotek</translation> <translation id="5481941284378890518">Dodajanje tiskalnikov v bližini</translation> <translation id="5483785310822538350">Umakni dostop do datotek in naprav</translation> @@ -5208,7 +5204,6 @@ <translation id="5555639311269196631">Izklopi dostopno točko</translation> <translation id="5556459405103347317">Znova naloži</translation> <translation id="5558129378926964177">Po&večaj</translation> -<translation id="5558247502209241936">Omogočanje odpiranja aplikacije v oknu</translation> <translation id="5559311991468302423">Izbris naslova</translation> <translation id="55601339223879446">Prilagodite meje namizja na zaslonu</translation> <translation id="5561162485081632007">Zaznava nevarne dogodke, ko se zgodijo, in vas opozarja nanje.</translation> @@ -6036,7 +6031,6 @@ <translation id="6305607932814307878">Globalni pravilnik:</translation> <translation id="6305702903308659374">Predvajaj pri običajni glasnosti, tudi če ChromeVox govori</translation> <translation id="6305909198255586420">Namestite z glavnim profilom.</translation> -<translation id="630750887748244481">Tvoj starš je izklopil »Dovoljenja za spletna mesta, aplikacije in razširitve« za Chrome. Dodajanje te razširitve ni dovoljeno.</translation> <translation id="6307990684951724544">Sistem je zaseden</translation> <translation id="6308493641021088955">Prijavo omogoča <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Shrani povezav&o kot ...</translation> @@ -6868,7 +6862,6 @@ <translation id="7025190659207909717">Upravljanje mobilne podatkovne storitve</translation> <translation id="7025895441903756761">Varnost in zasebnost</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Odpiranje vseh v anonimnem &oknu}=1{Odpiranje v anonimnem &oknu}one{Odpiranje vseh ({COUNT}) v anonimnem &oknu}two{Odpiranje vseh ({COUNT}) v anonimnem &oknu}few{Odpiranje vseh ({COUNT}) v anonimnem &oknu}other{Odpiranje vseh ({COUNT}) v anonimnem &oknu}}</translation> -<translation id="7028057921476386252">Starš ali skrbnik mora potrditi, da lahko omogočiš to razširitev.</translation> <translation id="7029307918966275733">Crostini ni nameščen. Namestite ga, če si želite ogledati datoteko z ustvarjalci.</translation> <translation id="7029809446516969842">Gesla</translation> <translation id="7030304022046916278">Pošlje URL-je Varnemu brskanju, da jih ta preveri.</translation> @@ -8247,7 +8240,6 @@ <translation id="8251509999076836464">Seznanjanje z napravo <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Sličica je odstranjena.</translation> <translation id="825238165904109940">Vedno pokaži celotne URL-je</translation> -<translation id="8252538334423261825">Razširitve ni mogoče dodati</translation> <translation id="8252569384384439529">Nalaganje …</translation> <translation id="8253198102038551905">Kliknite »+«, če želite prikazati omrežne nastavitve</translation> <translation id="8255212965098517578">Nedavne fotografije, obvestila in aplikacije</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index fd7436b..96d10ee40 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Shtyp ESCAPE për të kapërcyer (vetëm ndërtime jo zyrtare).</translation> <translation id="1093457606523402488">Rrjetet e dukshme:</translation> <translation id="1095761715416917775">Sigurohu që gjithmonë të mund të qasesh në të dhënat e tua të sinkronizimit</translation> +<translation id="1095879482467973146">"Menaxheri i fjalëkalimeve i Google" në ueb</translation> <translation id="109647177154844434">Çinstalimi i Parallels Desktop do të fshijë imazhin e sistemit Windows. Kjo përfshin aplikacionet, cilësimet dhe të dhënat e saj. Je i sigurt që dëshiron të vazhdosh?</translation> <translation id="1097016918605049747">Kjo faqe nuk mund të përkthehej</translation> <translation id="1097658378307015415">Para se të identifikohesh, hyr si vizitor për të aktivizuar rrjetin <ph name="NETWORK_ID" /></translation> @@ -1324,7 +1325,6 @@ <translation id="2114820389966440614">Shiko "Të theksuarat e fundit" dhe kujtime të tjera këtu</translation> <translation id="2114896190328250491">Fotografia nga <ph name="NAME" /></translation> <translation id="2114995631896158695">Nuk është futur një kartë SIM</translation> -<translation id="2116020356255810305">Aktivizo hapjen e aplikacionit në nisje</translation> <translation id="2116619964159595185">Sajtet lidhen zakonisht me pajisjet me Bluetooth për veçoritë si konfigurimi ose sinkronizimi i një sinjalizuesi me nivel të ulët energjie, një monitoruesi shëndeti ose fitnesi ose një llambe inteligjente</translation> <translation id="2117655453726830283">Diapozitivi tjetër</translation> <translation id="2119349053129246860">Hape në <ph name="APP" /></translation> @@ -1484,6 +1484,7 @@ <translation id="2252017960592955005">Mbrojtja e shikimit (beta)</translation> <translation id="225240747099314620">Lejo identifikuesit në përmbajtjen e mbrojtur (mund të kërkohet rindezje e kompjuterit)</translation> <translation id="2253318212986772520">Skedari PPD për <ph name="PRINTER_NAME" /> nuk mund të merret.</translation> +<translation id="2253927598983295051">Zgjidh se çfarë do të ndash me <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Kjo pajisje është kyçur në një domen ose modalitet tjetër.</translation> <translation id="2255317897038918278">Stampimi i orës nga Microsoft</translation> <translation id="2256115617011615191">Rinise tani</translation> @@ -1830,6 +1831,7 @@ <translation id="2532589005999780174">Modaliteti i kontrastit të lartë</translation> <translation id="2533649878691950253">Ky sajt u bllokua nga zbulimi i vendndodhjes sate të saktë pasi ti zakonisht nuk e lejon këtë</translation> <translation id="253434972992662860">&Ndërprit</translation> +<translation id="253498598929009420">Sajti do të mund të shikojë përmbajtjet në ekranin tënd</translation> <translation id="253557089021624350">Numërimi i proceseve të mbajtjes aktive</translation> <translation id="2535799430745250929">Nuk ekziston ndonjë rrjet celular</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> mund të shikojë dhe të modifikojë skedarët dhe dosjet e mëposhtme</translation> @@ -3252,7 +3254,6 @@ <translation id="380329542618494757">Emri</translation> <translation id="3803345858388753269">Cilësia e videos</translation> <translation id="3803367742635802571">Sajtet që viziton mund të mos funksionojnë siç pritet</translation> -<translation id="3803583375545057606">Do të pyesësh prindin tënd që ta aktivizosh këtë shtesë?</translation> <translation id="380408572480438692">Aktivizimi i të dhënave të cilësisë së funksionimit do ta ndihmojë Google që të përmirësojë sistemin me kalimin e kohës. Nuk dërgohen të dhëna deri sa të paraqesësh një raport me komente (Alt-Shift-I) dhe të përfshish të dhënat e cilësisë së funksionimit. Mund të kthehesh te ky ekran në çdo kohë për ta çaktivizuar mbledhjen.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ID-ja e shtesës "<ph name="EXTENSION_ID" />") nuk lejohet në një ekran identifikimi.</translation> <translation id="3807747707162121253">&Anulo</translation> @@ -3674,7 +3675,6 @@ <translation id="4169535189173047238">Mos lejo</translation> <translation id="4170314459383239649">Pastro në dalje</translation> <translation id="417096670996204801">Zgjidh një profil</translation> -<translation id="41725145403849567">Do të pyesësh prindin tënd që ta shtosh këtë shtesë?</translation> <translation id="4175137578744761569">E purpurt e çelur dhe e bardhë</translation> <translation id="4175737294868205930">Hapësira ruajtëse e përhershme</translation> <translation id="4176463684765177261">I çaktivizuar</translation> @@ -5087,7 +5087,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Kodi PIN duhet të ketë të paktën një karakter}other{Kodi PIN duhet të ketë të paktën # karaktere}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> kërkon që të lidhesh me Wi-Fi tani dhe të shkarkosh një përditësim. Ndryshe, shkarko nga një lidhje me matje (mund të zbatohen tarifa).</translation> <translation id="5476016146231427848">Rinise pajisjen tënde për të përdorur Steam në Chromebook</translation> -<translation id="5476897066181964657">Një prind ose kujdestar duhet të pranojë që ta shtosh këtë shtesë</translation> <translation id="5481273127572794904">Nuk lejohen të shkarkojnë automatikisht shumë skedarë</translation> <translation id="5481941284378890518">Shto printerët në afërsi</translation> <translation id="5483785310822538350">Revoko qasjen te skedari dhe pajisja</translation> @@ -5184,7 +5183,6 @@ <translation id="5555639311269196631">Çaktivizo zonën e qasjes për internet</translation> <translation id="5556459405103347317">Ringarko</translation> <translation id="5558129378926964177">Afroje&</translation> -<translation id="5558247502209241936">Aktivizo hapjen e aplikacionit në dritare</translation> <translation id="5559311991468302423">Fshi adresën</translation> <translation id="55601339223879446">Rregullo kufijtë e desktopit tënd brenda ekranit</translation> <translation id="5561162485081632007">Zbulon dhe të paralajmëron rreth ngjarjeve të rrezikshme kur ato ndodhin</translation> @@ -6010,7 +6008,6 @@ <translation id="6305607932814307878">Politika globale:</translation> <translation id="6305702903308659374">Luaje me volum normal edhe nëse flet ChromeVox</translation> <translation id="6305909198255586420">Instaloje duke përdorur profilin tënd kryesor</translation> -<translation id="630750887748244481">Prindi yt ka çaktivizuar "Lejet për sajtet, aplikacionet dhe shtesat" për Chrome. Shtimi i kësaj shtese nuk lejohet.</translation> <translation id="6307990684951724544">Sistemi është i zënë</translation> <translation id="6308493641021088955">Identifikimi ofrohet nga <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Ruaje lidh&jen si...</translation> @@ -6836,7 +6833,6 @@ <translation id="7025190659207909717">Menaxhimi i shërbimit të të dhënave celulare</translation> <translation id="7025895441903756761">Siguria dhe privatësia</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Hapi të gjitha në &dritare "të fshehtë"}=1{Hape në &dritare "të fshehtë"}other{Hapi të gjitha ({COUNT}) në &dritare "të fshehtë"}}</translation> -<translation id="7028057921476386252">Një prind ose kujdestar duhet të pranojë që ta aktivizosh këtë shtesë</translation> <translation id="7029307918966275733">Crostini nuk është instaluar. Instalo Crostini për të parë kreditet.</translation> <translation id="7029809446516969842">Fjalëkalimet</translation> <translation id="7030304022046916278">I dërgon URL-të te "Shfletimi i sigurt" për t'i kontrolluar</translation> @@ -8213,7 +8209,6 @@ <translation id="8251509999076836464">Po çiftohet me <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatura u hoq.</translation> <translation id="825238165904109940">Gjithmonë shfaq URL të plota</translation> -<translation id="8252538334423261825">Shtesa nuk mund të merret</translation> <translation id="8252569384384439529">Po ngarkohet...</translation> <translation id="8253198102038551905">Kliko "+" për të gjetur karakteristikat e rrjetit</translation> <translation id="8255212965098517578">Fotografitë, njoftimet dhe aplikacionet e fundit</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 954e53ea..675520dd 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -1327,7 +1327,6 @@ <translation id="2114820389966440614">Ovde pogledajte „Nedavne istaknute slike“ i ostale uspomene</translation> <translation id="2114896190328250491">Autor slike: <ph name="NAME" /></translation> <translation id="2114995631896158695">Nije umetnuta SIM kartica</translation> -<translation id="2116020356255810305">Omogući pokretanje aplikacije pri pokretanju uređaja</translation> <translation id="2116619964159595185">Sajtovi se obično povezuju sa Bluetooth uređajima za potrebe funkcija poput podešavanja ili sinhronizacije lokatora sa niskom potrošnjom, uređaja za praćenje zdravlja ili fitnesa ili pametne sijalice</translation> <translation id="2117655453726830283">Sledeći slajd</translation> <translation id="2119349053129246860">Otvori u <ph name="APP" /></translation> @@ -3256,7 +3255,6 @@ <translation id="380329542618494757">Ime</translation> <translation id="3803345858388753269">Kvalitet video snimka</translation> <translation id="3803367742635802571">Sajtovi koje posećujete mogu da prestanu sa radom kako je zamišljeno</translation> -<translation id="3803583375545057606">Želiš da zatražiš od roditelja da omogući ovaj dodatak?</translation> <translation id="380408572480438692">Ako omogućite prikupljanje podataka o učinku, pomoći ćete Google-u da vremenom poboljšava sistem. Nikakvi podaci se ne šalju dok ne pošaljete izveštaj sa povratnim informacijama (Alt-Shift-I) i uvrstite podatke o učinku. U bilo kom trenutku možete da se vratite na ovaj ekran i onemogućite prikupljanje.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ID dodatka „<ph name="EXTENSION_ID" />“) nije dozvoljen na ekranu za prijavljivanje.</translation> <translation id="3807747707162121253">&Otkaži</translation> @@ -3678,7 +3676,6 @@ <translation id="4169535189173047238">Ne dozvoli</translation> <translation id="4170314459383239649">Obriši pri zatvaranju</translation> <translation id="417096670996204801">Odaberite profil</translation> -<translation id="41725145403849567">Želiš da zatražiš od roditelja da doda ovaj dodatak?</translation> <translation id="4175137578744761569">Svetloljubičasta i bela</translation> <translation id="4175737294868205930">Stalni memorijski prostor</translation> <translation id="4176463684765177261">Onemogućeno</translation> @@ -5090,7 +5087,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN mora da sadrži bar jedan znak}one{PIN mora da sadrži bar # znak}few{PIN mora da sadrži bar # znaka}other{PIN mora da sadrži bar # znakova}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> zahteva da se odmah povežete na WiFi i da preuzmete ažuriranje. Ili preuzmite pomoću veze sa ograničenjem (možda se naplaćuju troškovi).</translation> <translation id="5476016146231427848">Restartujte uređaj da biste koristili Steam na Chromebook-u</translation> -<translation id="5476897066181964657">Roditelj ili staratelj mora da kaže da je u redu da dodaš ovaj dodatak</translation> <translation id="5481273127572794904">Nije im dozvoljeno da automatski preuzimaju više fajlova</translation> <translation id="5481941284378890518">Dodaj obližnje štampače</translation> <translation id="5483785310822538350">Opozovi pristup datotekama i uređaju</translation> @@ -5187,7 +5183,6 @@ <translation id="5555639311269196631">Isključi hotspot</translation> <translation id="5556459405103347317">Učitaj ponovo</translation> <translation id="5558129378926964177">Zoom &In (Uvećaj)</translation> -<translation id="5558247502209241936">Omogući otvaranje aplikacije u prozoru</translation> <translation id="5559311991468302423">Izbrišite adresu</translation> <translation id="55601339223879446">Prilagodite granice radne površine unutar prikaza</translation> <translation id="5561162485081632007">Otkriva opasne događaje kada se dogode i upozorava vas na njih</translation> @@ -6014,7 +6009,6 @@ <translation id="6305607932814307878">Globalne smernice:</translation> <translation id="6305702903308659374">Reprodukuj pri normalnoj jačini zvuka čak i ako ChromeVox govori</translation> <translation id="6305909198255586420">Instalirajte pomoću primarnog profila</translation> -<translation id="630750887748244481">Roditelj je isključio „Dozvole za sajtove, aplikacije i dodatke“ za Chrome. Dodavanje ovog dodatka nije dozvoljeno.</translation> <translation id="6307990684951724544">Sistem je zauzet</translation> <translation id="6308493641021088955">Prijavljivanje omogućava <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Sačuvaj li&nk kao...</translation> @@ -6844,7 +6838,6 @@ <translation id="7025190659207909717">Upravljanje uslugom mobilnih podataka</translation> <translation id="7025895441903756761">Bezbednost i privatnost</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Otvori sve u &prozoru bez arhiviranja}=1{Otvori u &prozoru bez arhiviranja}one{Otvori sve ({COUNT}) u &prozoru bez arhiviranja}few{Otvori sve ({COUNT}) u &prozoru bez arhiviranja}other{Otvori sve ({COUNT}) u &prozoru bez arhiviranja}}</translation> -<translation id="7028057921476386252">Roditelj ili staratelj mora da kaže da je u redu da omogućiš ovaj dodatak</translation> <translation id="7029307918966275733">Crostini nije instaliran. Instalirajte Crostini da biste videli impresum.</translation> <translation id="7029809446516969842">Lozinke</translation> <translation id="7030304022046916278">Šalje URL-ove u Bezbedno pregledanje na proveru</translation> @@ -8223,7 +8216,6 @@ <translation id="8251509999076836464">Uparivanje sa uređajem <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Sličica je uklonjena.</translation> <translation id="825238165904109940">Uvek prikazuj URL-ove u celosti</translation> -<translation id="8252538334423261825">Dodavanje dodatka nije uspelo</translation> <translation id="8252569384384439529">Otprema se...</translation> <translation id="8253198102038551905">Kliknite na „+“ da biste videli svojstva mreže</translation> <translation id="8255212965098517578">Nedavne slike, obaveštenja i aplikacije</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 12bcf723..c0394eb 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1327,7 +1327,6 @@ <translation id="2114820389966440614">Овде погледајте „Недавне истакнуте слике“ и остале успомене</translation> <translation id="2114896190328250491">Аутор слике: <ph name="NAME" /></translation> <translation id="2114995631896158695">Није уметнута SIM картица</translation> -<translation id="2116020356255810305">Омогући покретање апликације при покретању уређаја</translation> <translation id="2116619964159595185">Сајтови се обично повезују са Bluetooth уређајима за потребе функција попут подешавања или синхронизације локатора са ниском потрошњом, уређаја за праћење здравља или фитнеса или паметне сијалице</translation> <translation id="2117655453726830283">Следећи слајд</translation> <translation id="2119349053129246860">Отвори у <ph name="APP" /></translation> @@ -3256,7 +3255,6 @@ <translation id="380329542618494757">Име</translation> <translation id="3803345858388753269">Квалитет видео снимка</translation> <translation id="3803367742635802571">Сајтови које посећујете могу да престану са радом како је замишљено</translation> -<translation id="3803583375545057606">Желиш да затражиш од родитеља да омогући овај додатак?</translation> <translation id="380408572480438692">Ако омогућите прикупљање података о учинку, помоћи ћете Google-у да временом побољшава систем. Никакви подаци се не шаљу док не пошаљете извештај са повратним информацијама (Alt-Shift-I) и уврстите податке о учинку. У било ком тренутку можете да се вратите на овај екран и онемогућите прикупљање.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ИД додатка „<ph name="EXTENSION_ID" />“) није дозвољен на екрану за пријављивање.</translation> <translation id="3807747707162121253">&Откажи</translation> @@ -3678,7 +3676,6 @@ <translation id="4169535189173047238">Не дозволи</translation> <translation id="4170314459383239649">Обриши при затварању</translation> <translation id="417096670996204801">Одаберите профил</translation> -<translation id="41725145403849567">Желиш да затражиш од родитеља да дода овај додатак?</translation> <translation id="4175137578744761569">Светлољубичаста и бела</translation> <translation id="4175737294868205930">Стални меморијски простор</translation> <translation id="4176463684765177261">Онемогућено</translation> @@ -5090,7 +5087,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN мора да садржи бар један знак}one{PIN мора да садржи бар # знак}few{PIN мора да садржи бар # знака}other{PIN мора да садржи бар # знакова}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> захтева да се одмах повежете на WiFi и да преузмете ажурирање. Или преузмите помоћу везе са ограничењем (можда се наплаћују трошкови).</translation> <translation id="5476016146231427848">Рестартујте уређај да бисте користили Steam на Chromebook-у</translation> -<translation id="5476897066181964657">Родитељ или старатељ мора да каже да је у реду да додаш овај додатак</translation> <translation id="5481273127572794904">Није им дозвољено да аутоматски преузимају више фајлова</translation> <translation id="5481941284378890518">Додај оближње штампаче</translation> <translation id="5483785310822538350">Опозови приступ датотекама и уређају</translation> @@ -5187,7 +5183,6 @@ <translation id="5555639311269196631">Искључи хотспот</translation> <translation id="5556459405103347317">Учитај поново</translation> <translation id="5558129378926964177">Zoom &In (Увећај)</translation> -<translation id="5558247502209241936">Омогући отварање апликације у прозору</translation> <translation id="5559311991468302423">Избришите адресу</translation> <translation id="55601339223879446">Прилагодите границе радне површине унутар приказа</translation> <translation id="5561162485081632007">Открива опасне догађаје када се догоде и упозорава вас на њих</translation> @@ -6014,7 +6009,6 @@ <translation id="6305607932814307878">Глобалне смернице:</translation> <translation id="6305702903308659374">Репродукуј при нормалној јачини звука чак и ако ChromeVox говори</translation> <translation id="6305909198255586420">Инсталирајте помоћу примарног профила</translation> -<translation id="630750887748244481">Родитељ је искључио „Дозволе за сајтове, апликације и додатке“ за Chrome. Додавање овог додатка није дозвољено.</translation> <translation id="6307990684951724544">Систем је заузет</translation> <translation id="6308493641021088955">Пријављивање омогућава <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Сачувај ли&нк као...</translation> @@ -6844,7 +6838,6 @@ <translation id="7025190659207909717">Управљање услугом мобилних података</translation> <translation id="7025895441903756761">Безбедност и приватност</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Отвори све у &прозору без архивирања}=1{Отвори у &прозору без архивирања}one{Отвори све ({COUNT}) у &прозору без архивирања}few{Отвори све ({COUNT}) у &прозору без архивирања}other{Отвори све ({COUNT}) у &прозору без архивирања}}</translation> -<translation id="7028057921476386252">Родитељ или старатељ мора да каже да је у реду да омогућиш овај додатак</translation> <translation id="7029307918966275733">Crostini није инсталиран. Инсталирајте Crostini да бисте видели импресум.</translation> <translation id="7029809446516969842">Лозинке</translation> <translation id="7030304022046916278">Шаље URL-ове у Безбедно прегледање на проверу</translation> @@ -8223,7 +8216,6 @@ <translation id="8251509999076836464">Упаривање са уређајем <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Сличица је уклоњена.</translation> <translation id="825238165904109940">Увек приказуј URL-ове у целости</translation> -<translation id="8252538334423261825">Додавање додатка није успело</translation> <translation id="8252569384384439529">Отпрема се...</translation> <translation id="8253198102038551905">Кликните на „+“ да бисте видели својства мреже</translation> <translation id="8255212965098517578">Недавне слике, обавештења и апликације</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 2a6db82..229f765 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">Se Senaste höjdpunkterna och andra minnen här</translation> <translation id="2114896190328250491">Foto taget av <ph name="NAME" /></translation> <translation id="2114995631896158695">Inget SIM-kort har satts i</translation> -<translation id="2116020356255810305">Aktivera att appen startas vid start</translation> <translation id="2116619964159595185">Åtkomst till enheter via Bluetooth brukar kunna behövas för funktioner som att konfigurera eller synkronisera en energisnål beacon-sändare, hälsomätare eller smart glödlampa</translation> <translation id="2117655453726830283">Nästa bild</translation> <translation id="2119349053129246860">Öppna i <ph name="APP" /></translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">Namn</translation> <translation id="3803345858388753269">Bildkvalitet</translation> <translation id="3803367742635802571">Webbplatser du besöker kan sluta fungera som avsett</translation> -<translation id="3803583375545057606">Vill du be din förälder att aktivera tillägget?</translation> <translation id="380408572480438692">Aktivering av insamling av resultatdata hjälper Google att förbättra systemet med tiden. Inga data skickas förrän du skickar en feedbackrapport (Alt-Skift-I) och inkluderar resultatdata. Du kan när som helst återgå till den här skärmen för att inaktivera insamlingen.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (tilläggs-id <ph name="EXTENSION_ID" />) får inte användas på en inloggningsskärm.</translation> <translation id="3807747707162121253">&Avbryt</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Tillåt inte</translation> <translation id="4170314459383239649">Rensa vid avslut</translation> <translation id="417096670996204801">Välj en profil</translation> -<translation id="41725145403849567">Vill du be din förälder att lägga till tillägget?</translation> <translation id="4175137578744761569">Ljuslila och vit</translation> <translation id="4175737294868205930">Beständig lagring</translation> <translation id="4176463684765177261">Inaktiverad</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Pinkoden måste innehålla minst ett tecken}other{Pinkoden måste innehålla minst # tecken}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> kräver att du ansluter till wifi och laddar ned en uppdatering nu. Du kan även ladda ned via en anslutning med datapriser (avgifter kan tillkomma).</translation> <translation id="5476016146231427848">Starta om enheten om du vill använda Steam på Chromebook</translation> -<translation id="5476897066181964657">En förälder eller vårdnadshavare måste godkänna att du lägger till det här tillägget</translation> <translation id="5481273127572794904">Får inte ladda ned flera filer automatiskt</translation> <translation id="5481941284378890518">Lägg till skrivare i närheten</translation> <translation id="5483785310822538350">Återkalla åtkomst till enheten och filer</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">Inaktivera surfzon</translation> <translation id="5556459405103347317">Hämta igen</translation> <translation id="5558129378926964177">Zooma &in</translation> -<translation id="5558247502209241936">Aktivera att appen öppnas i fönster</translation> <translation id="5559311991468302423">Radera adressen</translation> <translation id="55601339223879446">Justera skrivbordets avgränsning på skärmen</translation> <translation id="5561162485081632007">Identifierar och varnar dig om farliga händelser som inträffar</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">Global policy:</translation> <translation id="6305702903308659374">Spela upp på normal volym även när ChromeVox används</translation> <translation id="6305909198255586420">Installera med din primära profil</translation> -<translation id="630750887748244481">Din förälder har inaktiverat Behörigheter för webbplatser, appar och tillägg för Chrome. Det är inte tillåtet att lägga till det här tillägget.</translation> <translation id="6307990684951724544">Systemet är upptaget</translation> <translation id="6308493641021088955">Inloggning tillhandahålls av <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Spara l&änk som...</translation> @@ -6857,7 +6851,6 @@ <translation id="7025190659207909717">Hantering av mobil datatjänst</translation> <translation id="7025895441903756761">Säkerhet och integritet</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Öppna alla i ett &inkognitofönster}=1{Öppna i &inkognitofönster}other{Öppna alla ({COUNT}) i ett &inkognitofönster}}</translation> -<translation id="7028057921476386252">En förälder eller vårdnadshavare måste godkänna att du aktiverar det här tillägget</translation> <translation id="7029307918966275733">Crostini har inte installerats. Installera Crostini för att visa upphovspersoner.</translation> <translation id="7029809446516969842">Lösenord</translation> <translation id="7030304022046916278">Webbadresser skickas till Säker webbsökning för kontroll</translation> @@ -8236,7 +8229,6 @@ <translation id="8251509999076836464">Parkopplar till <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Miniatyren har tagits bort.</translation> <translation id="825238165904109940">Visa alltid hela webbadresser</translation> -<translation id="8252538334423261825">Det gick inte att lägga till tillägget</translation> <translation id="8252569384384439529">Laddar upp …</translation> <translation id="8253198102038551905">Klicka på + för att hämta nätverksegenskaperna</translation> <translation id="8255212965098517578">Senaste foton, aviseringar och appar</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 1090c6a0..d9912c1 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Bonyeza ESCAPE ili kuruka (Vijenzi visivyo rasmi pekee).</translation> <translation id="1093457606523402488">Mitandao Inayoonekana:</translation> <translation id="1095761715416917775">Hakikisha kwamba unaweza kufikia data yako inayosawazishwa, kila wakati</translation> +<translation id="1095879482467973146">Kidhibiti cha Manenosiri cha Google kwenye wavuti</translation> <translation id="109647177154844434">Hatua ya kuondoa Parallels Desktop itafuta picha yako ya Windows. Hii ni pamoja na programu, mipangilio na data yake. Una uhakika ungependa kuendelea?</translation> <translation id="1097016918605049747">Ukurasa huu hauwezi kutafsiriwa</translation> <translation id="1097658378307015415">Kabla ya kuingia, tafadhali ingia kama Mgeni ili kuamilisha mtandao <ph name="NETWORK_ID" /></translation> @@ -1335,7 +1336,6 @@ <translation id="2114820389966440614">Tazama "Vivutio vya hivi majuzi" na kumbukumbu nyingine hapa</translation> <translation id="2114896190328250491">Picha ya <ph name="NAME" /></translation> <translation id="2114995631896158695">Hujaweka SIM kadi yoyote</translation> -<translation id="2116020356255810305">Ruhusu ufunguaji programu kifaa kinapowashwa</translation> <translation id="2116619964159595185">Tovuti huunganisha kwenye vifaa vyenye Bluetooth kwa ajili ya vipengele kama vile kusawazisha au kuweka mipangilio ya kiashiria cha kiwango cha chini cha nishati, kifuatiliaji cha afya au siha au balbu ya taa mahiri</translation> <translation id="2117655453726830283">Slaidi inayofuata</translation> <translation id="2119349053129246860">Fungua katika <ph name="APP" /></translation> @@ -1495,6 +1495,7 @@ <translation id="2252017960592955005">Kutazama kwa usalama (Beta)</translation> <translation id="225240747099314620">Ruhusu vitambulishi kwa maudhui yaliyolindwa (huenda ukahitajika kuzima na kuwasha kompyuta)</translation> <translation id="2253318212986772520">Imeshindwa kuleta PPD ya <ph name="PRINTER_NAME" />.</translation> +<translation id="2253927598983295051">Chagua unachohitaji kushiriki na <ph name="APP_NAME" /></translation> <translation id="2255077166240162850">Kifaa hiki kilifungwa kwenye kikoa au hali tofauti.</translation> <translation id="2255317897038918278">Uwekaji Saa wa Microsoft</translation> <translation id="2256115617011615191">Zima na uwashe sasa</translation> @@ -1844,6 +1845,7 @@ <translation id="2532589005999780174">Hali ya juu ya utofautishaji</translation> <translation id="2533649878691950253">Tovuti hii imezuiwa isijue eneo mahususi ulipo kwa sababu kwa kawaida huruhusu hali hii</translation> <translation id="253434972992662860">&Pumzisha</translation> +<translation id="253498598929009420">Tovuti hii itaweza kuangalia maudhui yaliyo kwenye skrini yako</translation> <translation id="253557089021624350">Shughuli zinazotumia kiendelezi</translation> <translation id="2535799430745250929">Hakuna mitandao ya simu iliyopo</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> inaweza kuangalia na kubadilisha faili na folda zifuatazo</translation> @@ -3266,7 +3268,6 @@ <translation id="380329542618494757">Jina</translation> <translation id="3803345858388753269">Ubora wa Video</translation> <translation id="3803367742635802571">Tovuti unazotembelea zinaweza kuacha kufanya kazi kama zilivyokusudiwa</translation> -<translation id="3803583375545057606">Ungependa kumwomba mzazi ili uwashe kiendelezi hiki?</translation> <translation id="380408572480438692">Kuwasha ukusanyaji wa data ya utendaji kutasaidia Google kuboresha mfumo kadri muda unavyoenda. Hakuna data inayotumwa hadi utume ripoti ya maoni ("Alt"-"Shift"-"I") na ujumuishe data ya utendaji. Unaweza kurudi katika skrini hii ili kuzima ukusanyaji wakati wowote.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (Kitambulisho cha kiendelezi "<ph name="EXTENSION_ID" />") hakiruhusiwi kwenye skrini ya kuingia katika akaunti.</translation> <translation id="3807747707162121253">&Ghairi</translation> @@ -3686,7 +3687,6 @@ <translation id="4169535189173047238">Usiruhusu</translation> <translation id="4170314459383239649">Futa Unapofunga</translation> <translation id="417096670996204801">Chagua wasifu</translation> -<translation id="41725145403849567">Ungependa kumwomba mzazi ili usakinishe kiendelezi hiki?</translation> <translation id="4175137578744761569">Zambarau hafifu na nyeupe</translation> <translation id="4175737294868205930">Hifadhi inayoendelea</translation> <translation id="4176463684765177261">Imezimwa</translation> @@ -5100,7 +5100,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Ni lazima PIN iwe na angalau herufi moja}other{Ni lazima PIN iwe na angalau herufi #}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> inahitaji uunganishe kwenye Wi-Fi sasa na upakue sasisho. Au, pakua kwa kutumia muunganisho wa mtandao unaopima data (huenda ukatozwa ada).</translation> <translation id="5476016146231427848">Tafadhali zima kisha uwashe kifaa chako ili utumie programu ya Steam kwenye Chromebook</translation> -<translation id="5476897066181964657">Ili uruhusiwe kusakinisha kiendelezi hiki, ni lazima mzazi au mlezi aidhinishe</translation> <translation id="5481273127572794904">Zisizoruhusiwa kupakua faili nyingi kiotomatiki</translation> <translation id="5481941284378890518">Ongeza Printa za Uhamishaji wa Karibu</translation> <translation id="5483785310822538350">Batilisha idhini ya kufikia faili na kifaa</translation> @@ -5197,7 +5196,6 @@ <translation id="5555639311269196631">Zima mtandao pepe</translation> <translation id="5556459405103347317">Pakia upya</translation> <translation id="5558129378926964177">Kuza &Zaidi</translation> -<translation id="5558247502209241936">Ruhusu ufunguaji programu kwenye dirisha</translation> <translation id="5559311991468302423">Futa anwani</translation> <translation id="55601339223879446">Rekebisha mipaka ya eneo-kazi lako ndani ya onyesho</translation> <translation id="5561162485081632007">Hutambua na kukuonya kuhusu matukio hatari yanapotendeka</translation> @@ -6023,7 +6021,6 @@ <translation id="6305607932814307878">Sera ya Kimataifa:</translation> <translation id="6305702903308659374">Cheza kwa sauti ya kawaida hata kama ChromeVox inazungumza</translation> <translation id="6305909198255586420">Tafadhali sakinisha ukitumia wasifu wako wa msingi</translation> -<translation id="630750887748244481">Mzazi wako amezima "Ruhusa za tovuti, programu na viendelezi" kwenye Chrome. Kuweka kiendelezi hiki hakuruhusiwi</translation> <translation id="6307990684951724544">Mfumo unashughulika</translation> <translation id="6308493641021088955">Shughuli ya kuingia katika akaunti inafanywa na <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Hifadhi &kiungo kama...</translation> @@ -6849,7 +6846,6 @@ <translation id="7025190659207909717">Udhibiti wa huduma ya data ya simu ya mkononi</translation> <translation id="7025895441903756761">Usalama na Faragha</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Fungua Zote katika &Dirisha Fiche}=1{Fungua katika &Dirisha Fiche}other{Fungua Zote ({COUNT}) katika &Dirisha Fiche}}</translation> -<translation id="7028057921476386252">Ili uruhusiwe kuwasha kiendelezi hiki, ni lazima mzazi au mlezi aidhinishe</translation> <translation id="7029307918966275733">Crostini haijasakinishwa. Tafadhali sakinisha Crostini ili uone waliohusika.</translation> <translation id="7029809446516969842">Manenosiri</translation> <translation id="7030304022046916278">Hutuma URL kwenye kipengele cha Kuvinjari Salama ili zikaguliwe</translation> @@ -8229,7 +8225,6 @@ <translation id="8251509999076836464">Inaoanisha kwenye <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Kijipicha kimeondolewa.</translation> <translation id="825238165904109940">Onyesha URL Kamili Kila Wakati</translation> -<translation id="8252538334423261825">Imeshindwa kuweka kiendelezi</translation> <translation id="8252569384384439529">Inapakia...</translation> <translation id="8253198102038551905">Bonyeza '+' ili kupata sifa za mtandao</translation> <translation id="8255212965098517578">Picha, arifa na programu za hivi karibuni</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 88ab191..0101c6f 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">"சமீபத்தில் சிறந்தவை" மற்றும் பிற நினைவுகளை இங்கே பார்த்தல்</translation> <translation id="2114896190328250491">படம் எடுத்தவர்: <ph name="NAME" /></translation> <translation id="2114995631896158695">சிம் கார்டு செருகப்படவில்லை</translation> -<translation id="2116020356255810305">தொடங்கும்போது ஆப்ஸைத் திறக்கும்</translation> <translation id="2116619964159595185">குறைவான ஆற்றலைப் பயன்படுத்தும் பீக்கான், ஹெல்த்/ஃபிட்னஸ் டிராக்கர், ஸ்மார்ட் லைட் பல்பு போன்றவற்றை அமைத்தல், ஒத்திசைத்தல் போன்ற அம்சங்களுக்காக புளூடூத் சாதனங்களுடன் தளங்கள் வழக்கமாக இணையும்</translation> <translation id="2117655453726830283">அடுத்த ஸ்லைடிற்குச் செல்லும்</translation> <translation id="2119349053129246860"><ph name="APP" /> இல் திற</translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">பெயர்</translation> <translation id="3803345858388753269">வீடியோவின் தரம்</translation> <translation id="3803367742635802571">நீங்கள் பார்வையிடும் தளங்கள் சரியாகச் செயல்படாமல் போகக்கூடும்</translation> -<translation id="3803583375545057606">இந்த நீட்டிப்பை இயக்க உங்கள் பெற்றோரிடம் கேட்க வேண்டுமா?</translation> <translation id="380408572480438692">செயல்திறன் தரவின் சேகரிப்பை இயக்குவது, குறிப்பிட்ட காலத்தில் அமைப்பை மேம்படுத்த Googleளுக்கு உதவும். நீங்கள் செயல்திறன் தரவுடன் கருத்து அறிக்கையை (Alt-Shift-I) பதிவுசெய்யும் வரை தரவு எதுவும் அனுப்பப்படாது. சேகரிப்பை முடக்க நீங்கள் எப்போது வேண்டுமானாலும் இந்தத் திரைக்கு திரும்ப வரலாம்.</translation> <translation id="3807249107536149332">உள்நுழைவுத் திரையில் <ph name="EXTENSION_NAME" /> (நீட்டிப்பு ஐடி "<ph name="EXTENSION_ID" />") அனுமதிக்கப்படாது.</translation> <translation id="3807747707162121253">&ரத்துசெய்</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">அனுமதிக்காதே</translation> <translation id="4170314459383239649">வெளியேறும் போது அழி</translation> <translation id="417096670996204801">சுயவிவரத்தைத் தேர்வுசெய்தல்</translation> -<translation id="41725145403849567">இந்த நீட்டிப்பைச் சேர்க்க உங்கள் பெற்றோரிடம் கேட்க வேண்டுமா?</translation> <translation id="4175137578744761569">வெளிர் ஊதா & வெள்ளை</translation> <translation id="4175737294868205930">தொடர்நிலை சேமிப்பகம்</translation> <translation id="4176463684765177261">முடக்கப்பட்டது</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{பின்(PIN) குறைந்தது 1 எழுத்தைக் கொண்டிருக்க வேண்டும்}other{பின்(PIN) குறைந்தது # எழுத்துகளைக் கொண்டிருக்க வேண்டும்}}</translation> <translation id="5474859849784484111">இப்போதே வைஃபையுடன் இணைத்து புதுப்பிப்பைப் பதிவிறக்குமாறு <ph name="MANAGER" /> கோருகிறது. அல்லது கட்டண நெட்வொர்க் இணைப்பின் மூலம் இதைப் பதிவிறக்கலாம் (கட்டணங்கள் விதிக்கப்படலாம்).</translation> <translation id="5476016146231427848">Chromebookகில் Steam ஆப்ஸைப் பயன்படுத்த உங்கள் சாதனத்தை மீண்டும் தொடங்கவும்</translation> -<translation id="5476897066181964657">இந்த நீட்டிப்பை உங்களுக்குச் சேர்க்கலாம் என்று பெற்றோரோ காப்பாளரோ சொல்ல வேண்டும்</translation> <translation id="5481273127572794904">பல ஃபைல்களைத் தானாகவே பதிவிறக்க அனுமதி இல்லாத தளங்கள்</translation> <translation id="5481941284378890518">அருகிலுள்ள பிரிண்டர்களைச் சேர்</translation> <translation id="5483785310822538350">ஃபைல் மற்றும் சாதன அணுகலை ரத்துசெய்</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">ஹாட்ஸ்பாட்டை முடக்குதல்</translation> <translation id="5556459405103347317">மீண்டும் ஏற்று</translation> <translation id="5558129378926964177">Zoom &In</translation> -<translation id="5558247502209241936">சாளரத்தில் ஆப்ஸைத் திறக்கும்</translation> <translation id="5559311991468302423">முகவரியை நீக்குதல்</translation> <translation id="55601339223879446">திரைக்குள் உங்கள் டெஸ்க்டாப் எல்லைகளைச் சரிசெய்யவும்</translation> <translation id="5561162485081632007">ஆபத்தான நிகழ்வுகள் ஏற்படும்போது அவற்றைக் கண்டறிந்து உங்களை எச்சரிக்கும்</translation> @@ -6032,7 +6027,6 @@ <translation id="6305607932814307878">ஒட்டுமொத்தக் கொள்கை:</translation> <translation id="6305702903308659374">ChromeVox பேசும் போது, இயல்பான ஒலியளவில் இயக்கு</translation> <translation id="6305909198255586420">உங்கள் முதன்மைச் சுயவிவரத்தைப் பயன்படுத்தி நிறுவவும்</translation> -<translation id="630750887748244481">Chromeமில் "தளங்கள், ஆப்ஸ், நீட்டிப்புகள் ஆகியவற்றுக்கான அனுமதிகளை" உங்கள் பெற்றோர் முடக்கிவிட்டார். இந்த நீட்டிப்பைச் சேர்க்க முடியாது.</translation> <translation id="6307990684951724544">கணினி பணிமிகுதியில் உள்ளது</translation> <translation id="6308493641021088955">உள்நுழைவை வழங்குவது: <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">இணை&ப்பை இவ்வாறு சேமி…</translation> @@ -6858,7 +6852,6 @@ <translation id="7025190659207909717">மொபைல் டேட்டா சேவை மேலாண்மை</translation> <translation id="7025895441903756761">பாதுகாப்பும் தனியுரிமையும்</translation> <translation id="7027258625819743915">{COUNT,plural, =0{எல்லாவற்றையும் &மறைநிலைச் சாளரத்தில் திற}=1{&மறைநிலைச் சாளரத்தில் திற}other{எல்லாவற்றையும் ({COUNT}) &மறைநிலைச் சாளரத்தில் திற}}</translation> -<translation id="7028057921476386252">இந்த நீட்டிப்பை உங்களுக்கு இயக்கலாம் என்று பெற்றோரோ காப்பாளரோ சொல்ல வேண்டும்</translation> <translation id="7029307918966275733">Crostini நிறுவப்படவில்லை. கிரெடிட்டுகளைப் பார்க்க Crostiniயை நிறுவுங்கள்.</translation> <translation id="7029809446516969842">கடவுச்சொற்கள்</translation> <translation id="7030304022046916278">சரிபார்ப்புக்காக URLகளைப் பாதுகாப்பு உலாவலுக்கு அனுப்பும்</translation> @@ -8237,7 +8230,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> உடன் இணைக்கிறது</translation> <translation id="8251578425305135684">சிறுபடம் நீக்கப்பட்டது.</translation> <translation id="825238165904109940">முழு URLகளை எப்போதும் காட்டு</translation> -<translation id="8252538334423261825">நீட்டிப்பைச் சேர்க்க முடியவில்லை</translation> <translation id="8252569384384439529">பதிவேற்றுகிறது...</translation> <translation id="8253198102038551905">நெட்வொர்க் பண்புகளைப் பெற '+'ஐக் கிளிக் செய்யவும்</translation> <translation id="8255212965098517578">சமீபத்திய படங்கள், அறிவிப்புகள் & ஆப்ஸ்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 39df504..e8b3a9b 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1338,7 +1338,6 @@ <translation id="2114820389966440614">"ఇటీవలి హైలైట్లు" అలాగే ఇతర మెమరీలను ఇక్కడ చూడండి</translation> <translation id="2114896190328250491">ఫోటో తీసినది <ph name="NAME" /></translation> <translation id="2114995631896158695">ఎలాంటి SIM కార్డ్ ఇన్సర్ట్ చేయబడలేదు</translation> -<translation id="2116020356255810305">ప్రారంభంలో యాప్ లాంచ్ అయ్యేలా ఎనేబుల్ చేయండి</translation> <translation id="2116619964159595185">తక్కువ శక్తి గల బీకాన్, ఆరోగ్యం లేదా ఫిట్నెస్ ట్రాకర్, లేదా స్మార్ట్ లైట్ బల్బ్లను సెటప్ చేయడం లేదా సింక్ చేయడం వంటి ఫీచర్ల కోసం సైట్లు సాధారణంగా బ్లూటూత్ పరికరాలకు కనెక్ట్ అవుతాయి</translation> <translation id="2117655453726830283">తర్వాతి స్లయిడ్</translation> <translation id="2119349053129246860"><ph name="APP" />లో తెరువు</translation> @@ -3270,7 +3269,6 @@ <translation id="380329542618494757">పేరు</translation> <translation id="3803345858388753269">వీడియో క్వాలిటీ</translation> <translation id="3803367742635802571">మీరు సందర్శించిన సైట్లు, రూపొందించిన విధంగా పని చేయడం ఆగిపోవచ్చు</translation> -<translation id="3803583375545057606">ఈ ఎక్స్టెన్షన్ను ఎనేబుల్ చేయమని మీ పేరెంట్ను అడగాలా?</translation> <translation id="380408572480438692">పనితీరు డేటా సేకరణను ప్రారంభించడం అనేది, సమయానుగుణంగా సిస్టమ్ను మెరుగుపరచడంలో Googleకు సహాయపడుతుంది. మీరు అభిప్రాయ రిపోర్ట్ (Alt-Shift-I)ను ఫైల్ చేసి, పనితీరు డేటాను చేర్చే వరకు డేటా పంపబడదు. మీరు ఎప్పుడైనా సేకరణను నిలిపివేయడానికి ఈ స్క్రీన్కు తిరిగి రావచ్చు.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ఎక్స్టెన్షన్ ID "<ph name="EXTENSION_ID" />") లాగిన్ స్క్రీన్లో అనుమతించబడదు.</translation> <translation id="3807747707162121253">&రద్దు</translation> @@ -3692,7 +3690,6 @@ <translation id="4169535189173047238">అనుమతించవద్దు</translation> <translation id="4170314459383239649">నిష్క్రమించేటప్పుడు క్లియర్ చేయండి</translation> <translation id="417096670996204801">ఒక ప్రొఫైల్ను ఎంచుకోండి</translation> -<translation id="41725145403849567">ఈ ఎక్స్టెన్షన్ను జోడించమని మీ పేరెంట్ను అడగాలా?</translation> <translation id="4175137578744761569">లేత వంగ రంగు మరియు తెలుపు</translation> <translation id="4175737294868205930">నిరంతర స్టోరేజ్</translation> <translation id="4176463684765177261">ఆపివేయబడింది</translation> @@ -5106,7 +5103,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{పిన్ తప్పనిసరిగా కనీసం ఒక అక్షరాన్ని కలిగి ఉండాలి}other{పిన్ తప్పనిసరిగా కనీసం # అక్షరాలను ఉండాలి}}</translation> <translation id="5474859849784484111">ఇప్పుడే మీరు Wi-Fiకి కనెక్ట్ అయ్యి, అప్డేట్ను డౌన్లోడ్ చేయాలని <ph name="MANAGER" /> తెలియజేస్తోంది. లేదా డేటా నియంత్రణ ఉన్న కనెక్షన్ నుండి డౌన్లోడ్ చేయండి (ఛార్జీలు వర్తించవచ్చు).</translation> <translation id="5476016146231427848">Chromebookలో Steamను ఉపయోగించడానికి దయచేసి మీ పరికరాన్ని రీస్టార్ట్ చేయండి</translation> -<translation id="5476897066181964657">మీరు ఈ ఎక్స్టెన్షన్ను జోడించడానికి పేరెంట్ లేదా గార్డియన్ తప్పనిసరిగా మిమ్మల్ని అనుమతించాలి</translation> <translation id="5481273127572794904">ఆటోమేటిక్గా అనేక ఫైళ్లను డౌన్లోడ్ చేయడానికి అనుమతించబడలేదు</translation> <translation id="5481941284378890518">సమీప ప్రింటర్లను జోడించండి</translation> <translation id="5483785310822538350">ఫైల్ మరియు పరికర యాక్సెస్ను ఉపసంహరించు</translation> @@ -5203,7 +5199,6 @@ <translation id="5555639311269196631">హాట్స్పాట్ను ఆఫ్ చేయండి</translation> <translation id="5556459405103347317">మళ్లీ లోడ్ చేయి</translation> <translation id="5558129378926964177">దగ్గరికి జూమ్ చేయి</translation> -<translation id="5558247502209241936">విండోలో తెరుచుకునేలా యాప్ను ఎనేబుల్ చేయండి</translation> <translation id="5559311991468302423">అడ్రస్ను తొలగించండి</translation> <translation id="55601339223879446">డిస్ప్లేలో మీ డెస్క్టాప్ సరిహద్దులను సర్దుబాటు చేయండి</translation> <translation id="5561162485081632007">ప్రమాదకరమైన సంఘటనలు జరిగినప్పుడు గుర్తించి, మిమ్మల్ని హెచ్చరిస్తుంది</translation> @@ -6029,7 +6024,6 @@ <translation id="6305607932814307878">గ్లోబల్ విధానం:</translation> <translation id="6305702903308659374">ChromeVox మాట్లాడుతున్నప్పటికీ, సాధారణ వాల్యూమ్తో ప్లే చేయి</translation> <translation id="6305909198255586420">దయచేసి మీ ప్రాథమిక ప్రొఫైల్ను ఉపయోగించి ఇన్స్టాల్ చేయండి</translation> -<translation id="630750887748244481">Chromeలో "సైట్లు, యాప్లు, ఎక్స్టెన్షన్లకు సంబంధించిన అనుమతుల"ను మీ తల్లి/తండ్రి ఆఫ్ చేశారు. ఈ ఎక్స్టెన్షన్ను జోడించడానికి అనుమతి లేదు.</translation> <translation id="6307990684951724544">సిస్టమ్ బిజీగా ఉంది</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> ద్వారా సైన్-ఇన్ అందించబడింది</translation> <translation id="6308937455967653460">లిం&క్ను ఇలా సేవ్ చేయండి...</translation> @@ -6855,7 +6849,6 @@ <translation id="7025190659207909717">మొబైల్ డేటా సేవ నిర్వహణ</translation> <translation id="7025895441903756761">సెక్యూరిటీ, గోప్యత</translation> <translation id="7027258625819743915">{COUNT,plural, =0{అన్నింటినీ &అజ్ఞాత విండోలో తెరువు}=1{&అజ్ఞాత విండోలో తెరువు}other{అన్నింటినీ ({COUNT}) &అజ్ఞాత విండోలో తెరువు}}</translation> -<translation id="7028057921476386252">మీరు ఈ ఎక్స్టెన్షన్ను ఎనేబుల్ చేయడానికి పేరెంట్ లేదా గార్డియన్ తప్పనిసరిగా మిమ్మల్ని అనుమతించాలి</translation> <translation id="7029307918966275733">Crostini ఇన్స్టాల్ చేయబడలేదు. క్రెడిట్లను చూడడానికి దయచేసి Crostiniని ఇన్స్టాల్ చేయండి.</translation> <translation id="7029809446516969842">పాస్వర్డ్లు</translation> <translation id="7030304022046916278">URLలను చెక్ చేయడానికి వాటిని సురక్షిత బ్రౌజింగ్కు పంపుతుంది</translation> @@ -8230,7 +8223,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" />కు పెయిర్ అవుతోంది</translation> <translation id="8251578425305135684">థంబ్నెయిల్ తొలగించబడింది.</translation> <translation id="825238165904109940">ఎల్లప్పుడూ పూర్తి URLలను చూపించు</translation> -<translation id="8252538334423261825">ఎక్స్టెన్షన్ను జోడించడం సాధ్యం కాలేదు</translation> <translation id="8252569384384439529">అప్లోడ్ చేస్తోంది...</translation> <translation id="8253198102038551905">నెట్వర్క్ లక్షణాలను పొందడానికి '+' క్లిక్ చేయండి</translation> <translation id="8255212965098517578">తాజా ఫోటోలు, నోటిఫికేషన్లు, ఇంకా యాప్లు</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 7df15c75c..977a4f2 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -165,7 +165,7 @@ <translation id="1138686548582345331">{MUTED_NOTIFICATIONS_COUNT,plural, =1{การแจ้งเตือนใหม่}other{การแจ้งเตือนใหม่ # รายการ}}</translation> <translation id="1139923033416533844">การใช้งานหน่วยความจำ</translation> <translation id="1140351953533677694">เข้าถึงอุปกรณ์บลูทูธและอุปกรณ์ซีเรียล</translation> -<translation id="114036956334641753">เสียงและคำบรรยายวิดีโอ</translation> +<translation id="114036956334641753">เสียงและคำบรรยายแทนเสียง</translation> <translation id="1141949282671776404">ขณะที่แท็บนี้ไม่มีการใช้งาน การประหยัดหน่วยความจำจะช่วยประหยัดหน่วยความจำ <ph name="MEMORY_VALUE" /> สำหรับงานอื่นๆ</translation> <translation id="1142002900084379065">รูปภาพล่าสุด</translation> <translation id="1143142264369994168">ผู้เซ็นชื่อในใบรับรอง</translation> @@ -1328,7 +1328,6 @@ <translation id="2114820389966440614">ดู "ไฮไลต์ล่าสุด" และภาพความทรงจำอื่นๆ ที่นี่</translation> <translation id="2114896190328250491">รูปภาพจาก <ph name="NAME" /></translation> <translation id="2114995631896158695">ไม่ได้ใส่ซิมการ์ด</translation> -<translation id="2116020356255810305">เปิดใช้การเปิดแอปเมื่อเริ่มต้นระบบ</translation> <translation id="2116619964159595185">โดยปกติเว็บไซต์จะเชื่อมต่ออุปกรณ์บลูทูธเพื่อดำเนินการตามฟีเจอร์อย่างการตั้งค่าหรือซิงค์บีคอนที่ใช้พลังงานต่ำ ตัวติดตามสุขภาพและการออกกำลังกาย หรือหลอดไฟอัจฉริยะ</translation> <translation id="2117655453726830283">สไลด์ถัดไป</translation> <translation id="2119349053129246860">เปิดใน<ph name="APP" /></translation> @@ -3257,7 +3256,6 @@ <translation id="380329542618494757">ชื่อ</translation> <translation id="3803345858388753269">คุณภาพวิดีโอ</translation> <translation id="3803367742635802571">เว็บไซต์ที่คุณเข้าชมอาจหยุดทำงานตามการตั้งค่า</translation> -<translation id="3803583375545057606">ขอให้ผู้ปกครองเปิดใช้งานส่วนขยายนี้ไหม</translation> <translation id="380408572480438692">การเปิดใช้งานการเก็บรวบรวมข้อมูลผลการปฏิบัติงานจะช่วยให้ Google สามารถปรับปรุงระบบตามกาลเวลา จะไม่มีข้อมูลถูกส่งไปจนกว่าคุณจะยื่นรายงานข้อเสนอแนะ (Alt + Shift-I) และใส่ข้อมูลผลการปฏิบัติงาน คุณสามารถกลับสู่หน้าจอนี้เพื่อปิดใช้งานการเก็บรวบรวมในเวลาใดก็ได้</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (รหัสส่วนขยาย "<ph name="EXTENSION_ID" />") ไม่ได้รับอนุญาตในหน้าจอการเข้าสู่ระบบ</translation> <translation id="3807747707162121253">&ยกเลิก</translation> @@ -3679,7 +3677,6 @@ <translation id="4169535189173047238">ไม่อนุญาต</translation> <translation id="4170314459383239649">ล้างเมื่อออก</translation> <translation id="417096670996204801">เลือกโปรไฟล์</translation> -<translation id="41725145403849567">ขอให้ผู้ปกครองเพิ่มส่วนขยายนี้ไหม</translation> <translation id="4175137578744761569">สีม่วงอ่อนและสีขาว</translation> <translation id="4175737294868205930">พื้นที่เก็บข้อมูลถาวร</translation> <translation id="4176463684765177261">ปิดการทำงาน</translation> @@ -5092,7 +5089,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN ต้องมีอักขระอย่างน้อย 1 ตัว}other{PIN ต้องมีอักขระอย่างน้อย # ตัว}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> ต้องการให้คุณเชื่อมต่อ Wi-Fi ตอนนี้และดาวน์โหลดอัปเดต หรือดาวน์โหลดจากการเชื่อมต่อที่มีการวัดปริมาณอินเทอร์เน็ต (อาจมีค่าบริการ)</translation> <translation id="5476016146231427848">โปรดรีสตาร์ทอุปกรณ์เพื่อใช้ Steam ใน Chromebook</translation> -<translation id="5476897066181964657">พ่อแม่หรือผู้ปกครองต้องระบุว่าคุณเพิ่มส่วนขยายนี้ได้</translation> <translation id="5481273127572794904">ไม่ได้รับอนุญาตให้ดาวน์โหลดไฟล์หลายไฟล์โดยอัตโนมัติ</translation> <translation id="5481941284378890518">เพิ่มเครื่องพิมพ์ที่อยู่ใกล้เคียง</translation> <translation id="5483785310822538350">เพิกถอนสิทธิ์การเข้าถึงไฟล์และอุปกรณ์</translation> @@ -5189,7 +5185,6 @@ <translation id="5555639311269196631">ปิดฮอตสปอต</translation> <translation id="5556459405103347317">โหลดใหม่</translation> <translation id="5558129378926964177">ขยาย&</translation> -<translation id="5558247502209241936">เปิดใช้การเปิดแอปในหน้าต่าง</translation> <translation id="5559311991468302423">ลบที่อยู่</translation> <translation id="55601339223879446">ปรับขอบของเดสก์ท็อปให้อยู่ในหน้าจอแสดงผล</translation> <translation id="5561162485081632007">ตรวจหาและเตือนคุณเมื่อเกิดเหตุการณ์อันตราย</translation> @@ -6012,7 +6007,6 @@ <translation id="6305607932814307878">นโยบายทั่วโลก:</translation> <translation id="6305702903308659374">เล่นที่ระดับเสียงปกติแม้ว่า ChromeVox กำลังพูด</translation> <translation id="6305909198255586420">โปรดติดตั้งโดยใช้โปรไฟล์หลัก</translation> -<translation id="630750887748244481">ผู้ปกครองได้ปิด "สิทธิ์สำหรับเว็บไซต์ แอป และส่วนขยาย" ใน Chrome จึงเพิ่มส่วนขยายนี้ไม่ได้</translation> <translation id="6307990684951724544">ระบบกำลังทำงานอื่นอยู่</translation> <translation id="6308493641021088955">การลงชื่อเข้าใช้ให้บริการโดย <ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">บันทึก&ลิงก์เป็น...</translation> @@ -6838,7 +6832,6 @@ <translation id="7025190659207909717">การจัดการบริการดาต้าบนมือถือ</translation> <translation id="7025895441903756761">ความปลอดภัยและความเป็นส่วนตัว</translation> <translation id="7027258625819743915">{COUNT,plural, =0{เปิดทั้งหมดใน&หน้าต่างที่ไม่ระบุตัวตน}=1{เปิดใน&หน้าต่างที่ไม่ระบุตัวตน}other{เปิดทั้งหมด ({COUNT}) ใน&หน้าต่างที่ไม่ระบุตัวตน}}</translation> -<translation id="7028057921476386252">พ่อแม่หรือผู้ปกครองต้องระบุว่าคุณเปิดใช้งานส่วนขยายนี้ได้</translation> <translation id="7029307918966275733">ไม่ได้ติดตั้ง Crostini โปรดติดตั้ง Crostini เพื่อดูเครดิต</translation> <translation id="7029809446516969842">รหัสผ่าน</translation> <translation id="7030304022046916278">ส่ง URL ให้ Google Safe Browsing ตรวจสอบ</translation> @@ -8216,7 +8209,6 @@ <translation id="8251509999076836464">กำลังจับคู่กับ <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">รูปภาพขนาดย่อถูกลบแล้ว</translation> <translation id="825238165904109940">แสดง URL แบบเต็มเสมอ</translation> -<translation id="8252538334423261825">เพิ่มส่วนขยายไม่ได้</translation> <translation id="8252569384384439529">กำลังอัปโหลด...</translation> <translation id="8253198102038551905">คลิก "+" เพื่อดูคุณสมบัติของเครือข่าย</translation> <translation id="8255212965098517578">รูปภาพ การแจ้งเตือน และแอปล่าสุด</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 9a90b4a..e06ebd3 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -118,6 +118,7 @@ <translation id="1091767800771861448">Atlamak için ESCAPE tuşuna basın (Yalnızca resmi olmayan sürümler).</translation> <translation id="1093457606523402488">Görünür Ağlar:</translation> <translation id="1095761715416917775">Senkronizasyon verilerinize her zaman erişebildiğinizden emin olun</translation> +<translation id="1095879482467973146">Web'de Google Şifre Yöneticisi</translation> <translation id="109647177154844434">Parallels Desktop'ı kaldırmak Windows görüntünüzü silecek. Bu işlem, Parallels Desktop'ın uygulamalarını, ayarlarını ve verilerini içerir. Devam etmek istediğinizden emin misiniz?</translation> <translation id="1097016918605049747">Bu sayfa çevrilemedi</translation> <translation id="1097658378307015415">Oturum açmadan önce <ph name="NETWORK_ID" /> ağını etkinleştirmek için lütfen Misafir olarak giriş yapın</translation> @@ -1326,7 +1327,6 @@ <translation id="2114820389966440614">"Yenilerde Öne Çıkanlar" ve diğer anılara burada göz atın</translation> <translation id="2114896190328250491">Fotoğrafı çeken: <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM kart takılı değil</translation> -<translation id="2116020356255810305">Başlangıçta uygulamayı başlatmayı etkinleştirin</translation> <translation id="2116619964159595185">Düşük enerjili işaretçileri, sağlık veya fitness takip cihazlarını veya akıllı ampulleri kurmak veya senkronize etmek gibi özelliklerin kullanılması için siteler genellikle Bluetooth cihazlara bağlanır</translation> <translation id="2117655453726830283">Sonraki slayt</translation> <translation id="2119349053129246860"><ph name="APP" /> Uygulamasında Aç</translation> @@ -1486,6 +1486,7 @@ <translation id="2252017960592955005">Görüntüleme koruması (Beta)</translation> <translation id="225240747099314620">Korumalı içerik için tanımlayıcılara izin ver (bilgisayarı yeniden başlatmak gerekebilir)</translation> <translation id="2253318212986772520"><ph name="PRINTER_NAME" /> için PPD alınamıyor.</translation> +<translation id="2253927598983295051"><ph name="APP_NAME" /> ile neyin paylaşılacağını seçin</translation> <translation id="2255077166240162850">Bu cihaz farklı bir alan adı veya mod için kilitlendi.</translation> <translation id="2255317897038918278">Microsoft Zaman Damgası</translation> <translation id="2256115617011615191">Şimdi yeniden başlat</translation> @@ -1830,6 +1831,7 @@ <translation id="2532589005999780174">Yüksek kontrast modu</translation> <translation id="2533649878691950253">Genellikle bu izni vermediğiniz için bu sitenin tam konumunuzu öğrenmesi engellendi</translation> <translation id="253434972992662860">&Duraklat</translation> +<translation id="253498598929009420">Site, ekranınızın içeriğini görebilecek</translation> <translation id="253557089021624350">Canlı tutma sayısı</translation> <translation id="2535799430745250929">Hücresel ağ yok</translation> <translation id="2537395079978992874"><ph name="ORIGIN" /> sitesi şu dosya ve klasörleri görüntüleyip düzenleyebilir:</translation> @@ -3252,7 +3254,6 @@ <translation id="380329542618494757">Ad</translation> <translation id="3803345858388753269">Video Kalitesi</translation> <translation id="3803367742635802571">Ziyaret ettiğiniz siteler tasarlandığı şekilde çalışmayabilir</translation> -<translation id="3803583375545057606">Anne veya babanızdan bu uzantıyı etkinleştirmesini ister misiniz?</translation> <translation id="380408572480438692">Performans verilerinin toplanmasını etkinleştirmek, Google'ın zaman içinde sistemi iyileştirmesine yardımcı olur. Siz bir geri bildirim raporu oluşturup (Alt-ÜstKrktr-I) performans verilerini ekleyene kadar hiçbir veri gönderilmez. Veri toplamayı devre dışı bırakmak için istediğiniz zaman bu ekrana dönebilirsiniz.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> adlı uzantıya (uzantı kimliği: "<ph name="EXTENSION_ID" />") giriş ekranında izin verilmiyor.</translation> <translation id="3807747707162121253">&İptal</translation> @@ -3674,7 +3675,6 @@ <translation id="4169535189173047238">İzin verme</translation> <translation id="4170314459383239649">Çıkışta Temizle</translation> <translation id="417096670996204801">Profil seçin</translation> -<translation id="41725145403849567">Anne veya babanızdan bu uzantıyı eklemesini ister misiniz?</translation> <translation id="4175137578744761569">Açık mor ve beyaz</translation> <translation id="4175737294868205930">Kalıcı depolama</translation> <translation id="4176463684765177261">Devre dışı</translation> @@ -5087,7 +5087,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN en az bir karakter olmalıdır}other{PIN en az # karakter olmalıdır}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" />, şimdi kablosuz ağa bağlanarak bir güncelleme indirmenizi gerektiriyor. İsterseniz sayaçlı bir bağlantı üzerinden indirebilirsiniz (bunun için ödeme alınabilir).</translation> <translation id="5476016146231427848">Chromebook'ta Steam'i kullanmak için lütfen cihazınızı yeniden başlatın</translation> -<translation id="5476897066181964657">Bir anne veya babanın ya da velinin bu uzantıyı eklemenize izin vermesi gerekir</translation> <translation id="5481273127572794904">Birden fazla dosyayı otomatik olarak indirmesine izin verilmeyen siteler</translation> <translation id="5481941284378890518">Yakınlardaki Yazıcıları Ekle</translation> <translation id="5483785310822538350">Dosya ve cihaz erişimini iptal et</translation> @@ -5144,7 +5143,7 @@ <translation id="5519195206574732858">LTE</translation> <translation id="5521078259930077036">Bu beklediğiniz ana sayfa mı?</translation> <translation id="5522156646677899028">Bu uzantı önemli bir güvenlik açığı içeriyor.</translation> -<translation id="5522403133543437426">Adres çubuğunda kullanılan arama motoru</translation> +<translation id="5522403133543437426">Adres çubuğunda kullanılan arama motoru.</translation> <translation id="5523149538118225875">{NUM_EXTENSIONS,plural, =1{Yöneticiniz tarafından bir uzantı yüklendi}other{Yöneticiniz tarafından # uzantı yüklendi}}</translation> <translation id="5523558474028191231">Ad harf, sayı ve özel karakter içerebilir ve en fazla <ph name="MAX_CHARACTER_COUNT" /> karakter olabilir</translation> <translation id="5526701598901867718">Hepsi (güvenli değil)</translation> @@ -5184,7 +5183,6 @@ <translation id="5555639311269196631">Hotspot'u kapat</translation> <translation id="5556459405103347317">Yeniden Yükle</translation> <translation id="5558129378926964177">Yakınlaş&tır</translation> -<translation id="5558247502209241936">Uygulamayı pencerede açmayı etkinleştirin</translation> <translation id="5559311991468302423">Adresi sil</translation> <translation id="55601339223879446">Ekranda masaüstünüzün sınırlarını ayarlayın</translation> <translation id="5561162485081632007">Tehlikeli etkinlik meydana geldiğinde tespit ederek sizi uyarır.</translation> @@ -5193,7 +5191,7 @@ <ph name="BEGIN_PARAGRAPH4" />Çocuğunuzun Google Hesabında Web ve Uygulama Etkinliği ayarı açıksa çocuğunuzun verileri Google Hesabına kaydedilebilir. Bu ayarlar hakkında daha fazla bilgiyi ve nasıl düzenleneceklerini families.google.com sayfasında bulabilirsiniz.<ph name="END_PARAGRAPH4" /></translation> <translation id="5562781907504170924">Bu sekme bir Bluetooth Cihazına bağlı.</translation> <translation id="556321030400250233">yerel veya paylaşılan dosya</translation> -<translation id="5563234215388768762">Google'da arama yapın veya bir URL yazın</translation> +<translation id="5563234215388768762">Google'da arayın veya URL'yi yazın</translation> <translation id="5565735124758917034">Etkin</translation> <translation id="5568069709869097550">Oturum açılamıyor</translation> <translation id="5571066253365925590">Bluetooth etkin</translation> @@ -6011,7 +6009,6 @@ <translation id="6305607932814307878">Genel Politika:</translation> <translation id="6305702903308659374">ChromeVox konuşurken bile normal ses seviyesinde çal</translation> <translation id="6305909198255586420">Lütfen birincil profilinizi kullanarak yükleyin</translation> -<translation id="630750887748244481">Anne veya babanız, Chrome'a yönelik "Siteler, uygulamalar ve uzantılar için izinler"i kapattı. Bu uzantının eklenmesine izin verilmiyor.</translation> <translation id="6307990684951724544">Sistem meşgul</translation> <translation id="6308493641021088955">Oturum açma işlemi <ph name="EXTENSION_NAME" /> tarafından sağlanmıştır</translation> <translation id="6308937455967653460">Bağlantıyı far&klı kaydet...</translation> @@ -6837,7 +6834,6 @@ <translation id="7025190659207909717">Mobil veri hizmeti yönetimi</translation> <translation id="7025895441903756761">Güvenlik ve Gizlilik</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Tümünü &Gizli Pencerede Aç}=1{&Gizli Pencerede Aç}other{Tümünü ({COUNT}) &Gizli Pencerede Aç}}</translation> -<translation id="7028057921476386252">Bir anne veya babanın ya da velinin bu uzantıyı etkinleştirmenize izin vermesi gerekir</translation> <translation id="7029307918966275733">Crostini yüklü değil. Kredileri görüntülemek için lütfen Crostini yükleyin.</translation> <translation id="7029809446516969842">Şifreler</translation> <translation id="7030304022046916278">URL'leri kontrol etmek için Güvenli Tarama'ya gönderir</translation> @@ -8215,7 +8211,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> ile eşleniyor</translation> <translation id="8251578425305135684">Küçük resim kaldırıldı.</translation> <translation id="825238165904109940">Her Zaman URL'leri Tam Olarak Göster</translation> -<translation id="8252538334423261825">Uzantı eklenemiyor</translation> <translation id="8252569384384439529">Yükleniyor...</translation> <translation id="8253198102038551905">Ağ özelliklerini almak için "+" işaretini tıklayın</translation> <translation id="8255212965098517578">Son fotoğraflar, bildirimler ve uygulamalar</translation> @@ -8719,7 +8714,7 @@ <translation id="870805141700401153">Microsoft Bireysel Kod İmzalama</translation> <translation id="8708671767545720562">&Daha Fazla Bilgi</translation> <translation id="8711402221661888347">Hamburger</translation> -<translation id="8712637175834984815">Anlaşıldı</translation> +<translation id="8712637175834984815">Anladım</translation> <translation id="8713110120305151436">Hızlı Ayarlar'da erişilebilirlik seçeneklerini göster</translation> <translation id="8713570323158206935"><ph name="BEGIN_LINK1" />Sistem bilgilerini<ph name="END_LINK1" /> gönder</translation> <translation id="8714838604780058252">Arka plan grafikleri</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 5d563b7..2fcbcdc 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -1343,7 +1343,6 @@ <translation id="2114820389966440614">Показувати "Краще з останнього" та інші спогади тут</translation> <translation id="2114896190328250491">Автор фотографії: <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM-карту не вставлено</translation> -<translation id="2116020356255810305">Дозволити відкривати додаток під час запуску</translation> <translation id="2116619964159595185">Сайти зазвичай підключаються до пристроїв із Bluetooth для роботи таких функцій, як налаштування або синхронізація маяків із низьким енергоспоживанням, пристроїв для відстеження здоров'я або фізичної активності, розумних лампочок</translation> <translation id="2117655453726830283">Наступний слайд</translation> <translation id="2119349053129246860">Відкрити в додатку <ph name="APP" /></translation> @@ -3275,7 +3274,6 @@ <translation id="380329542618494757">Повне ім’я</translation> <translation id="3803345858388753269">Якість відео</translation> <translation id="3803367742635802571">Сайти, які ви відвідуєте, можуть перестати працювати належним чином</translation> -<translation id="3803583375545057606">Попросити батьків увімкнути це розширення?</translation> <translation id="380408572480438692">Увімкнення збору даних про ефективність допоможе Google із часом покращити систему. Дані не надсилаються, доки ви не напишете відгук (Alt-Shift-I) і не включите дані про ефективність. Можна будь-коли повернутися на цей екран і вимкнути збір даних.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ідентифікатор "<ph name="EXTENSION_ID" />") не можна використовувати на екрані входу.</translation> <translation id="3807747707162121253">&Скасувати</translation> @@ -3697,7 +3695,6 @@ <translation id="4169535189173047238">Не дозволяти</translation> <translation id="4170314459383239649">Очищати під час виходу</translation> <translation id="417096670996204801">Виберіть профіль</translation> -<translation id="41725145403849567">Попросити батьків додати це розширення?</translation> <translation id="4175137578744761569">Світло-фіолетовий і білий</translation> <translation id="4175737294868205930">Постійна пам’ять</translation> <translation id="4176463684765177261">Вимкнено</translation> @@ -5111,7 +5108,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-код має містити принаймні один символ}one{PIN-код має містити принаймні # символ}few{PIN-код має містити принаймні # символи}many{PIN-код має містити принаймні # символів}other{PIN-код має містити принаймні # символу}}</translation> <translation id="5474859849784484111">Домен <ph name="MANAGER" /> вимагає, щоб ви підключилися до мережі Wi-Fi та завантажили оновлення. Ви також можете використовувати підключення з тарифікацією трафіку (може стягуватися плата).</translation> <translation id="5476016146231427848">Щоб скористатися додатком Steam на Chromebook, перезапустіть пристрій</translation> -<translation id="5476897066181964657">Батько, мати чи опікун мають дозволити тобі додати це розширення</translation> <translation id="5481273127572794904">Заборонено автоматично завантажувати кілька файлів</translation> <translation id="5481941284378890518">Додати принтери поруч</translation> <translation id="5483785310822538350">Скасувати доступ до файлу та пристрою</translation> @@ -5208,7 +5204,6 @@ <translation id="5555639311269196631">Вимкнути точку доступу</translation> <translation id="5556459405103347317">Перезавантажити</translation> <translation id="5558129378926964177">Збільшити &масштаб</translation> -<translation id="5558247502209241936">Дозволити відкривати додаток у вікні</translation> <translation id="5559311991468302423">Видалити адресу</translation> <translation id="55601339223879446">Налаштуйте межі робочого столу на дисплеї</translation> <translation id="5561162485081632007">Виявляє небезпечні події та повідомляє про них</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">Глобальна політика:</translation> <translation id="6305702903308659374">Не змінювати гучність, навіть коли ChromeVox зчитує з екрана</translation> <translation id="6305909198255586420">Установіть додаток за допомогою основного профілю</translation> -<translation id="630750887748244481">Хтось із твоїх батьків вимкнув опцію "Дозволи для сайтів, додатків і розширень" у Chrome. Ти не можеш додати це розширення.</translation> <translation id="6307990684951724544">Система зайнята</translation> <translation id="6308493641021088955">Вхід через розширення "<ph name="EXTENSION_NAME" />"</translation> <translation id="6308937455967653460">Зберегти посиланн&я як...</translation> @@ -6863,7 +6857,6 @@ <translation id="7025190659207909717">Керування службою пересилання мобільних даних</translation> <translation id="7025895441903756761">Безпека та конфіденційність</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Відкрити всі у &вікні в режимі анонімного перегляду}=1{Відкрити у &вікні в режимі анонімного перегляду}one{Відкрити всі ({COUNT}) у &вікні в режимі анонімного перегляду}few{Відкрити всі ({COUNT}) у &вікні в режимі анонімного перегляду}many{Відкрити всі ({COUNT}) у &вікні в режимі анонімного перегляду}other{Відкрити всі ({COUNT}) у &вікні в режимі анонімного перегляду}}</translation> -<translation id="7028057921476386252">Батько, мати чи опікун мають дозволити тобі ввімкнути це розширення</translation> <translation id="7029307918966275733">Crostini не встановлено. Установіть це рішення, щоб переглянути дані про розробників.</translation> <translation id="7029809446516969842">Паролі</translation> <translation id="7030304022046916278">Надсилає URL-адреси в Безпечний перегляд на перевірку</translation> @@ -8241,7 +8234,6 @@ <translation id="8251509999076836464">Підключення до пристрою "<ph name="DEVICE_NAME" />"</translation> <translation id="8251578425305135684">Ескіз видалено.</translation> <translation id="825238165904109940">Завжди показувати повні URL-адреси</translation> -<translation id="8252538334423261825">Неможливо додати розширення</translation> <translation id="8252569384384439529">Завантаження…</translation> <translation id="8253198102038551905">Натисніть "+", щоб відобразити властивості мережі</translation> <translation id="8255212965098517578">Нещодавні фотографії, сповіщення й додатки</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 02e61f69..25413b98 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1329,7 +1329,6 @@ <translation id="2114820389966440614">"حالیہ ہائی لائٹس" اور دیگر یادیں یہاں دیکھیں</translation> <translation id="2114896190328250491"><ph name="NAME" /> کی تصویر</translation> <translation id="2114995631896158695">کوئی SIM کارڈ داخل نہیں کیا گیا</translation> -<translation id="2116020356255810305">شروعات میں لانچنگ ایپ فعال کریں</translation> <translation id="2116619964159595185">سائٹس عام طور پر کم توانائی والے بیکن کو سیٹ اپ کرنے یا مطابقت پذیر کرنے، صحت یا تندرستی کے ٹریکر یا اسمارٹ لائٹ بلب جیسی خصوصیات کے لئے بلوٹوتھ آلات سے منسلک ہوتی ہیں</translation> <translation id="2117655453726830283">اگلی سلائیڈ</translation> <translation id="2119349053129246860"><ph name="APP" /> میں کھولیں</translation> @@ -3259,7 +3258,6 @@ <translation id="380329542618494757">نام</translation> <translation id="3803345858388753269">ویڈیو کا معیار</translation> <translation id="3803367742635802571">جو سائٹس آپ دیکھتے ہیں وہ ڈیزائن کے مطابق کام کرنا بند کر سکتی ہیں</translation> -<translation id="3803583375545057606">آپ کے والدین سے اس ایکسٹینشن کو فعال کرنے کو کہیں؟</translation> <translation id="380408572480438692">کارکردگی ڈیٹا کی جمع آوری کو فعال کرنے سے Google کو وقت وقت پر سسٹم کو بہتر بنانے میں مدد ملے گی۔ اس وقت تک کوئی ڈیٹا نہیں بھیجا جاتا ہے جب تک آپ ایک تاثرات رپورٹ نہ فائل کریں (Alt-Shift-I) اور کارکردگی کا ڈیٹا شامل نہ کریں۔ آپ کسی بھی وقت جمع آوری کو غیر فعال کرنے کیلئے اس اسکرین پر واپس آ سکتے ہیں۔</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ایکسٹینشن ID "<ph name="EXTENSION_ID" />") کی لاگ ان اسکرین پر اجازت نہیں ہے۔</translation> <translation id="3807747707162121253">&منسوخ کریں</translation> @@ -3681,7 +3679,6 @@ <translation id="4169535189173047238">اجازت نہ دیں</translation> <translation id="4170314459383239649">باہر نکلنے پر صاف کریں</translation> <translation id="417096670996204801">ایک پروفائل منتخب کریں</translation> -<translation id="41725145403849567">آپ کے والدین سے اس ایکسٹینشن کو شامل کرنے کو کہیں؟</translation> <translation id="4175137578744761569">ہلکا جامنی اور سفید</translation> <translation id="4175737294868205930">مستقل اسٹوریج</translation> <translation id="4176463684765177261">غیر فعال</translation> @@ -5093,7 +5090,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN میں کم از کم ایک حرف ہونا چاہیے}other{PIN میں کم از کم # حروف ہونا چاہیے}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> کو درکار ہے کہ آپ ابھی Wi-Fi سے منسلک ہوں اور اپ ڈیٹ ڈاؤن لوڈ کریں۔ یا میٹرڈ کنکشن سے ڈاؤن لوڈ کریں (چارجز لاگو ہو سکتے ہیں)۔</translation> <translation id="5476016146231427848">Chromebook پر Steam استعمال کرنے کے لیے براہ کرم اپنا آلہ ری اسٹارٹ کریں</translation> -<translation id="5476897066181964657">یہ ایکسٹینشن شامل کرنے کے لئے آپ کے والدین یا سرپرست کو کہنا ہوگا کہ یہ آپ کے لئے ٹھیک ہے</translation> <translation id="5481273127572794904">خودکار طور پر متعدد فائلز ڈاؤن لوڈ کرنے کی اجازت نہیں ہے</translation> <translation id="5481941284378890518">قریبی پرنٹرز کو شامل کریں</translation> <translation id="5483785310822538350">فائل اور آلہ کی رسائی کو کالعدم کریں</translation> @@ -5190,7 +5186,6 @@ <translation id="5555639311269196631">ہاٹ اسپاٹ آف کریں</translation> <translation id="5556459405103347317">دوبارہ لوڈ کریں</translation> <translation id="5558129378926964177">زوم &ان کریں</translation> -<translation id="5558247502209241936">ونڈو میں ایپ کو کھولنا فعال کریں</translation> <translation id="5559311991468302423">پتہ حذف کریں</translation> <translation id="55601339223879446">ڈسپلے کے اندر اپنے ڈیسک ٹاپ کی حدود کو ایڈجسٹ کریں</translation> <translation id="5561162485081632007">جب خطرناک ایونٹس ہوتے ہیں تو ان کا پتہ لگا کر آپ کو ان کے بارے میں متنبہ کرتا ہے۔</translation> @@ -6016,7 +6011,6 @@ <translation id="6305607932814307878">عالمی پالیسی:</translation> <translation id="6305702903308659374">ChromeVox بول رہا ہو تب بھی حسب معمول آواز میں چلائیں</translation> <translation id="6305909198255586420">براہ کرم اپنی بنیادی پروفائل استعمال کر کے انسٹال کریں</translation> -<translation id="630750887748244481">آپ کے والدین نے Chrome کے لیے "سائٹس، ایپس اور ایکسٹینشنز کی اجازتیں" کو آف کر دیا ہے۔ اس ایکسٹینشن کو شامل کرنے کی اجازت نہیں ہے۔</translation> <translation id="6307990684951724544">سسٹم مصروف ہے</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> کی طرف سے فراہم کردہ سائن ان</translation> <translation id="6308937455967653460">&لنک محفوظ کریں بطور…</translation> @@ -6842,7 +6836,6 @@ <translation id="7025190659207909717">موبائل ڈیٹا سروس کا نظم</translation> <translation id="7025895441903756761">سیکیورٹی اور رازداری</translation> <translation id="7027258625819743915">{COUNT,plural, =0{سبھی کو &پوشیدگی ونڈو میں کھولیں}=1{&پوشیدگی ونڈو میں کھولیں}other{سبھی ({COUNT}) کو &پوشیدگی ونڈو میں کھولیں}}</translation> -<translation id="7028057921476386252">یہ ایکسٹینشن فعال کرنے کے لئے آپ کے والدین یا سرپرست کو کہنا ہوگا کہ یہ آپ کے لئے ٹھیک ہے</translation> <translation id="7029307918966275733">Crostini انسٹال نہیں ہے۔ کریڈٹس دیکھنے کیلئے براہ کرم Crostini انسٹال کریں۔</translation> <translation id="7029809446516969842">پاس ورڈز</translation> <translation id="7030304022046916278">چیک کرنے کے لیے URLs کو محفوظ براؤزنگ کو بھیجتا ہے</translation> @@ -8220,7 +8213,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> سے جوڑا بنایا جا رہا ہے</translation> <translation id="8251578425305135684">تھمب نیل کو ہٹا دیا گیا۔</translation> <translation id="825238165904109940">ہمیشہ مکمل URLs دکھائیں</translation> -<translation id="8252538334423261825">ایکسٹینشن شامل نہیں کر سکتے</translation> <translation id="8252569384384439529">اپ لوڈ ہو رہی ہے...</translation> <translation id="8253198102038551905">نیٹ ورک کی خصوصیات حاصل کرنے کیلئے '+' پر کلک کریں</translation> <translation id="8255212965098517578">حالیہ تصاویر، اطلاعات اور ایپس</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 245001b6..81b18473 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -1327,7 +1327,6 @@ <translation id="2114820389966440614">“Eng oxirgi muhim suratlar” va boshqa xotiralar shu yerda chiqadi</translation> <translation id="2114896190328250491">Rasm muallifi: <ph name="NAME" /></translation> <translation id="2114995631896158695">SIM karta joylanmagan</translation> -<translation id="2116020356255810305">Brauzer ishga tushganda ilovani ochish</translation> <translation id="2116619964159595185">Saytlar odatda kam quvvatli mayoqlar, salomatlik yoki fitnes trekerlari, smart chiroq lampalarini sozlash yoki ularni sinxronlash uchun Bluetooth qurilmalarga ulanadi.</translation> <translation id="2117655453726830283">Keyingi slayd</translation> <translation id="2119349053129246860"><ph name="APP" /> orqali ochish</translation> @@ -3259,7 +3258,6 @@ <translation id="380329542618494757">Ism</translation> <translation id="3803345858388753269">Video sifati</translation> <translation id="3803367742635802571">Siz tashrif buyurgan saytlar toʻgʻri ishlamay qolishi mumkin</translation> -<translation id="3803583375545057606">Bu kengaytmani yoqish uchun ota-onangizdan ruxsat olinsinmi?</translation> <translation id="380408572480438692">Unumdorlik ma’lumotlarini yig‘ish yordamida Google tizim faoliyatiga yaxshilanishlar kiritadi. Ma’lumotlar faqatgina foydalanuvchi fikr-mulohaza jo‘natish (Alt-Shift-I) vaqtida unumdorlik ma’lumotlarini biriktirsa jo‘natiladi. Xohlagan vaqtda bu sahifaga qaytib ma’lumotlarni yig‘ish funksiyasini o‘chirib qo‘yish mumkin.</translation> <translation id="3807249107536149332">Kirish ekranida “<ph name="EXTENSION_NAME" />” kengaytmasidan (identifikatori: <ph name="EXTENSION_ID" />) foydalanish taqiqlanadi.</translation> <translation id="3807747707162121253">&Bekor qilish</translation> @@ -3681,7 +3679,6 @@ <translation id="4169535189173047238">Rad etish</translation> <translation id="4170314459383239649">Chiqish vaqtida tozalansin</translation> <translation id="417096670996204801">Profilni tanlang</translation> -<translation id="41725145403849567">Bu kengaytmani kiritish uchun ota-onangizdan ruxsat olinsinmi?</translation> <translation id="4175137578744761569">Och pushti va oq</translation> <translation id="4175737294868205930">Doimiy xotira ombori</translation> <translation id="4176463684765177261">O‘chirib qo‘yilgan</translation> @@ -5095,7 +5092,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN kod kamida bitta belgidan iborat boʻlsin}other{PIN kod kamida # ta belgidan iborat boʻlsin}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> domeni hoziroq Wi-Fi tarmoqqa ulanib, yangilanishni yuklab olishni talab qilmoqda. Yoki trafik hisoblanadigan ulanishdan foydalanib yuklab olish mumkin.</translation> <translation id="5476016146231427848">Chromebookda Steam ishlatish uchun qurilmangizni qayta ishga tushiring</translation> -<translation id="5476897066181964657">Bu kengaytmani kiritish uchun ota-onangiz yoki vasiyingiz ruxsat berishi kerak</translation> <translation id="5481273127572794904">Bir nechta faylni avtomatik yuklab olish taqiqlangan</translation> <translation id="5481941284378890518">Yaqin-atrofdagi printerlarni qo‘shish</translation> <translation id="5483785310822538350">Fayl va qurilmadan ruxsatni olib qo‘yish</translation> @@ -5192,7 +5188,6 @@ <translation id="5555639311269196631">Hotspotni faolsizlantirish</translation> <translation id="5556459405103347317">Qayta yuklash</translation> <translation id="5558129378926964177">&Kattalashtirish</translation> -<translation id="5558247502209241936">Ilovani oynada ochiladigan qilish</translation> <translation id="5559311991468302423">Manzilni oʻchirish</translation> <translation id="55601339223879446">Ish stoli chegaralarini ekran cheti bilan moslang.</translation> <translation id="5561162485081632007">Xavfli tahdidlarni aniqlaydi va sizni ulardan himoya qiladi</translation> @@ -6018,7 +6013,6 @@ <translation id="6305607932814307878">Global siyosat:</translation> <translation id="6305702903308659374">ChromeVox ekrandan o‘qiyotgan bo‘lsa ham ovoz balandligi o‘zgartirilmasin</translation> <translation id="6305909198255586420">Asosiy profilingiz orqali oʻrnating</translation> -<translation id="630750887748244481">Chromedagi “Sayt, ilova va kengaytmalarga ruxsat” ota-onangiz tomonidan faolsizlantirilgan. Bu kengaytmani kiritishga ruxsat berilmagan.</translation> <translation id="6307990684951724544">Tizim band</translation> <translation id="6308493641021088955"><ph name="EXTENSION_NAME" /> kengaytmasi bilan kirildi</translation> <translation id="6308937455967653460">&Havolani saqlash...</translation> @@ -6844,7 +6838,6 @@ <translation id="7025190659207909717">Mobil internet xizmatini boshqarish</translation> <translation id="7025895441903756761">Xavfsizlik va maxfiylik</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Barchasini &inkognito oynasida ochish}=1{&Inkognito oynasida ochish}other{Barchasini ({COUNT}) &inkognito oynasida ochish}}</translation> -<translation id="7028057921476386252">Bu kengaytmani yoqish uchun ota-onangiz yoki vasiyingiz ruxsat berishi kerak</translation> <translation id="7029307918966275733">Crostini oʻrnatilmadi. Mualliflarni koʻrish uchun Crostini tizimini oʻrnating.</translation> <translation id="7029809446516969842">Parollar</translation> <translation id="7030304022046916278">URL manzillarni Saytlarni xavfsiz kezish tizimi tekshiruviga yuboradi</translation> @@ -8221,7 +8214,6 @@ <translation id="8251509999076836464"><ph name="DEVICE_NAME" /> qurilmasiga ulanmoqda</translation> <translation id="8251578425305135684">Tezkor havola o‘chirildi.</translation> <translation id="825238165904109940">Doim butun URL manzillar chiqarilsin</translation> -<translation id="8252538334423261825">Kengaytma kiritilmadi</translation> <translation id="8252569384384439529">Yuklanmoqda…</translation> <translation id="8253198102038551905">Tarmoq xususiyatlarini ko‘rish uchun “+” ustiga bosing</translation> <translation id="8255212965098517578">Oxirgi suratlar, bildirishnomalar va ilovalar</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index d14d676..2533927 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">Xem "Ảnh nổi bật gần đây" và những kỷ niệm khác tại đây</translation> <translation id="2114896190328250491">Ảnh của <ph name="NAME" /></translation> <translation id="2114995631896158695">Chưa lắp thẻ SIM</translation> -<translation id="2116020356255810305">Cho phép chạy ứng dụng lúc khởi động</translation> <translation id="2116619964159595185">Các trang web thường kết nối với thiết bị Bluetooth cho những tính năng như thiết lập hoặc đồng bộ hóa beacon năng lượng thấp, trình theo dõi sức khỏe/hoạt động tập thể dục hoặc bóng đèn thông minh</translation> <translation id="2117655453726830283">Trang trình bày tiếp theo</translation> <translation id="2119349053129246860">Mở trong <ph name="APP" /></translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">Tên</translation> <translation id="3803345858388753269">Chất lượng video</translation> <translation id="3803367742635802571">Các trang web bạn truy cập có thể không còn hoạt động như dự kiến</translation> -<translation id="3803583375545057606">Yêu cầu cha mẹ bật tiện ích này?</translation> <translation id="380408572480438692">Việc bật tính năng thu thập dữ liệu hoạt động sẽ giúp Google liên tục cải thiện hệ thống. Không dữ liệu nào được gửi cho tới khi bạn gửi báo cáo phản hồi (Alt-Shift-I) và cung cấp dữ liệu hoạt động. Bạn có thể quay lại màn hình này để tắt tính năng thu thập bất kỳ lúc nào.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (ID tiện ích "<ph name="EXTENSION_ID" />") không được cho phép trên màn hình đăng nhập.</translation> <translation id="3807747707162121253">&Huỷ</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Không cho phép</translation> <translation id="4170314459383239649">Xóa khi thoát</translation> <translation id="417096670996204801">Chọn một hồ sơ</translation> -<translation id="41725145403849567">Yêu cầu cha mẹ thêm tiện ích này?</translation> <translation id="4175137578744761569">Tím nhạt và trắng</translation> <translation id="4175737294868205930">Bộ nhớ liên tục</translation> <translation id="4176463684765177261">Đã tắt</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Mã PIN phải có ít nhất 1 ký tự}other{Mã PIN phải có ít nhất # ký tự}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> yêu cầu bạn kết nối Wi-Fi ngay bây giờ và tải bản cập nhật xuống, hoặc tải xuống từ đường kết nối có đo lượng dữ liệu (bạn có thể mất phí).</translation> <translation id="5476016146231427848">Vui lòng khởi động lại thiết bị để sử dụng Steam trên Chromebook</translation> -<translation id="5476897066181964657">Bạn phải được cha mẹ hoặc người giám hộ cho phép thêm tiện ích này</translation> <translation id="5481273127572794904">Không được phép tự động tải nhiều tệp xuống</translation> <translation id="5481941284378890518">Thêm máy in lân cận</translation> <translation id="5483785310822538350">Thu hồi quyền truy cập vào tệp và thiết bị</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">Tắt điểm phát sóng</translation> <translation id="5556459405103347317">Tải lại</translation> <translation id="5558129378926964177">Phóng &to</translation> -<translation id="5558247502209241936">Cho phép mở ứng dụng trong cửa sổ</translation> <translation id="5559311991468302423">Xoá địa chỉ</translation> <translation id="55601339223879446">Điều chỉnh các ranh giới của màn hình trong vòng hiển thị</translation> <translation id="5561162485081632007">Phát hiện và cảnh báo cho bạn về các sự kiện nguy hiểm khi các sự kiện đó diễn ra</translation> @@ -6031,7 +6026,6 @@ <translation id="6305607932814307878">Chính sách toàn cầu:</translation> <translation id="6305702903308659374">Phát ở âm lượng bình thường ngay cả khi ChromeVox đang nói</translation> <translation id="6305909198255586420">Vui lòng cài đặt bằng hồ sơ chính của bạn</translation> -<translation id="630750887748244481">Cha/mẹ bạn đã tắt tuỳ chọn "Quyền của các trang web, ứng dụng và tiện ích" đối với Chrome. Bạn không được phép thêm tiện ích này.</translation> <translation id="6307990684951724544">Hệ thống đang bận</translation> <translation id="6308493641021088955">Màn hình đăng nhập do <ph name="EXTENSION_NAME" /> cung cấp</translation> <translation id="6308937455967653460">Lưu liên &kết thành...</translation> @@ -6857,7 +6851,6 @@ <translation id="7025190659207909717">Quản lý dịch vụ dữ liệu di động</translation> <translation id="7025895441903756761">Bảo mật và quyền riêng tư</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Mở tất cả trong cửa sổ ẩ&n danh}=1{Mở trong cửa sổ ẩ&n danh}other{Mở tất cả ({COUNT}) trong cửa sổ ẩ&n danh}}</translation> -<translation id="7028057921476386252">Bạn phải được cha mẹ hoặc người giám hộ cho phép bật tiện ích này</translation> <translation id="7029307918966275733">Chưa cài đặt Crostini. Vui lòng cài đặt Crostini để xem thông tin về người đóng góp.</translation> <translation id="7029809446516969842">Mật khẩu</translation> <translation id="7030304022046916278">Gửi URL để tính năng Duyệt web an toàn kiểm tra</translation> @@ -8236,7 +8229,6 @@ <translation id="8251509999076836464">Đang ghép nối với <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Đã xóa hình thu nhỏ.</translation> <translation id="825238165904109940">Luôn hiển thị URL đầy đủ</translation> -<translation id="8252538334423261825">Không thể thêm tiện ích</translation> <translation id="8252569384384439529">Đang tải lên...</translation> <translation id="8253198102038551905">Hãy nhấp vào '+' để nhận thuộc tính mạng</translation> <translation id="8255212965098517578">Ảnh, thông báo và ứng dụng gần đây</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index a447980..39a69bd 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -250,7 +250,7 @@ <translation id="1202892408424955784">跟踪的商品</translation> <translation id="120368089816228251">乐谱</translation> <translation id="1203942045716040624">Shared Worker:<ph name="SCRIPT_URL" /></translation> -<translation id="1211769675100312947">快捷方式由您自己挑选</translation> +<translation id="1211769675100312947">您自己选取快捷方式</translation> <translation id="1213254615020057352">发送使用情况数据和诊断数据。自动向 Google 发送诊断数据、设备数据和应用使用情况数据,帮助改善您孩子的 Android 使用体验。我们会使用这些数据提高系统和应用的稳定性,并改进其他方面,但不会利用数据辨识您孩子的身份。部分汇总数据还会对 Google 应用和合作伙伴(例如 Android 开发者)有所帮助。这项设置是由此设备的所有者强制指定的。此设备的所有者可以选择向 Google 发送此设备的诊断数据和使用情况数据。如果您已为孩子开启“其他网络与应用活动记录”设置,这些数据可能会被保存到其 Google 帐号中。</translation> <translation id="1213726621272705156">此页面不会再显示卡片</translation> <translation id="121384500095351701">无法安全地下载此文件</translation> @@ -1321,7 +1321,6 @@ <translation id="2114820389966440614">在此处查看“近期的精彩瞬间”和其他回忆</translation> <translation id="2114896190328250491">照片提供者:<ph name="NAME" /></translation> <translation id="2114995631896158695">未插入任何 SIM 卡</translation> -<translation id="2116020356255810305">允许在开机时启动此应用</translation> <translation id="2116619964159595185">网站通常会连接到蓝牙设备以实现某些功能(例如设置或同步低功耗信标、健康或健身跟踪器,或智能灯泡)</translation> <translation id="2117655453726830283">下一张幻灯片</translation> <translation id="2119349053129246860">在“<ph name="APP" />”中打开</translation> @@ -3249,7 +3248,6 @@ <translation id="380329542618494757">名称</translation> <translation id="3803345858388753269">视频画质</translation> <translation id="3803367742635802571">您访问的网站可能会停止按预期运行</translation> -<translation id="3803583375545057606">让你的家长启用此扩展程序?</translation> <translation id="380408572480438692">启用性能数据收集功能有助于 Google 逐步改进系统。除非您提交反馈报告 (Alt-Shift-I) 并在其中包含性能数据,否则,系统不会发送任何数据。您随时可以返回此页停用性能数据收集功能。</translation> <translation id="3807249107536149332">登录屏幕中不允许使用“<ph name="EXTENSION_NAME" />”(扩展程序 ID 为“<ph name="EXTENSION_ID" />”)。</translation> <translation id="3807747707162121253">取消(&C)</translation> @@ -3670,7 +3668,6 @@ <translation id="4169535189173047238">不允许</translation> <translation id="4170314459383239649">退出时清除</translation> <translation id="417096670996204801">选择一份个人资料</translation> -<translation id="41725145403849567">让你的家长添加此扩展程序?</translation> <translation id="4175137578744761569">浅紫色和白色</translation> <translation id="4175737294868205930">永久存储</translation> <translation id="4176463684765177261">已停用</translation> @@ -5081,7 +5078,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN 码必须包含至少 1 个字符}other{PIN 码必须包含至少 # 个字符}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> 要求您立即连接到 Wi-Fi 并下载更新。您也可使用按流量计费的网络连接进行下载(可能需要支付相应费用)。</translation> <translation id="5476016146231427848">若要使用 Chromebook 版 Steam,请重启您的设备</translation> -<translation id="5476897066181964657">你必须先征得家长或监护人的同意,然后才能添加此扩展程序</translation> <translation id="5481273127572794904">不允许自动下载多个文件</translation> <translation id="5481941284378890518">添加附近的打印机</translation> <translation id="5483785310822538350">撤消对文件和设备的访问权限</translation> @@ -5178,7 +5174,6 @@ <translation id="5555639311269196631">关闭热点</translation> <translation id="5556459405103347317">重新加载</translation> <translation id="5558129378926964177">放大(&I)</translation> -<translation id="5558247502209241936">允许在窗口中打开此应用</translation> <translation id="5559311991468302423">删除此地址</translation> <translation id="55601339223879446">调整您的桌面在显示屏内的边界</translation> <translation id="5561162485081632007">检测危险事件并在此类事件发生时向您发出警告</translation> @@ -5187,7 +5182,7 @@ <ph name="BEGIN_PARAGRAPH4" />如果您已为孩子的 Google 帐号开启“网络与应用活动记录”设置,孩子的数据可能会被保存到其 Google 帐号中。访问 families.google.com 可详细了解这些设置及调整方法。<ph name="END_PARAGRAPH4" /></translation> <translation id="5562781907504170924">此标签页已连接到蓝牙设备。</translation> <translation id="556321030400250233">本地文件或分享的文件</translation> -<translation id="5563234215388768762">在 Google 上搜索,或者输入一个网址</translation> +<translation id="5563234215388768762">在 Google 中搜索,或输入网址</translation> <translation id="5565735124758917034">主动</translation> <translation id="5568069709869097550">无法登录</translation> <translation id="5571066253365925590">蓝牙已启用</translation> @@ -6001,7 +5996,6 @@ <translation id="6305607932814307878">全局政策:</translation> <translation id="6305702903308659374">即使在 ChromeVox 朗读时也以正常音量播放音频</translation> <translation id="6305909198255586420">请使用您的主要个人资料进行安装</translation> -<translation id="630750887748244481">您的家长已为 Chrome 停用“网站、应用和扩展程序的权限”,因此您无法添加这款扩展程序。</translation> <translation id="6307990684951724544">系统繁忙</translation> <translation id="6308493641021088955">登录服务提供方:<ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">链接另存为(&K)...</translation> @@ -6827,7 +6821,6 @@ <translation id="7025190659207909717">移动数据服务管理</translation> <translation id="7025895441903756761">安全和隐私设置</translation> <translation id="7027258625819743915">{COUNT,plural, =0{在无痕式窗口中打开全部书签(&I)}=1{在无痕式窗口中打开(&I)}other{在无痕式窗口中打开全部({COUNT} 个)书签(&I)}}</translation> -<translation id="7028057921476386252">你必须先征得家长或监护人的同意,然后才能启用此扩展程序</translation> <translation id="7029307918966275733">未安装 Crostini。请安装 Crostini 以查看开发人员名单。</translation> <translation id="7029809446516969842">密码</translation> <translation id="7030304022046916278">会将网址发送给“安全浏览”功能进行检查</translation> @@ -8206,7 +8199,6 @@ <translation id="8251509999076836464">正在与“<ph name="DEVICE_NAME" />”配对</translation> <translation id="8251578425305135684">已删除缩略图。</translation> <translation id="825238165904109940">总是显示完整网址</translation> -<translation id="8252538334423261825">无法添加扩展程序</translation> <translation id="8252569384384439529">正在上传…</translation> <translation id="8253198102038551905">点击“+”可查看网络属性</translation> <translation id="8255212965098517578">近期的照片、通知和应用</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 85b45d39..ccdc4ae 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">在此查看「近期精選相片」和其他回憶</translation> <translation id="2114896190328250491">相片提供:<ph name="NAME" /></translation> <translation id="2114995631896158695">沒有插入 SIM 卡</translation> -<translation id="2116020356255810305">可以喺開機嘅時候啟動應用程式</translation> <translation id="2116619964159595185">網站通常會連接藍牙裝置,以提供設定或同步低功耗信標、健康與健身追蹤器或智能燈泡等功能</translation> <translation id="2117655453726830283">下一張投影片</translation> <translation id="2119349053129246860">在 <ph name="APP" /> 中開啟</translation> @@ -3272,7 +3271,6 @@ <translation id="380329542618494757">名稱</translation> <translation id="3803345858388753269">影片品質</translation> <translation id="3803367742635802571">您瀏覽的網站可能無法正常運作</translation> -<translation id="3803583375545057606">要徵求家長同意啟用此擴充程式嗎?</translation> <translation id="380408572480438692">啟用效能數據收集功能可協助 Google 持續改善系統。除非您提交意見反映報告 (Alt-Shift-I) 並在其中包含效能數據,否則 Google 不會收到任何相關數據。您可以隨時返回這個螢幕停用收集功能。</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (擴充程式 ID:「<ph name="EXTENSION_ID" />」) 無法在登入畫面使用。</translation> <translation id="3807747707162121253">取消(&C)</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">不允許</translation> <translation id="4170314459383239649">退出時清除</translation> <translation id="417096670996204801">選擇設定檔</translation> -<translation id="41725145403849567">要徵求家長同意加入此擴充程式嗎?</translation> <translation id="4175137578744761569">淺紫色和白色</translation> <translation id="4175737294868205930">永久儲存空間</translation> <translation id="4176463684765177261">已停用</translation> @@ -5108,7 +5105,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN 必須包含至少 1 個字元}other{PIN 必須包含至少 # 個字元}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> 要求您立即連接 Wi-Fi 並下載更新,或使用按用量收費連線的下載更新 (可能需支付費用)。</translation> <translation id="5476016146231427848">請重新啟動裝置,以便在 Chromebook 上使用 Steam</translation> -<translation id="5476897066181964657">您必須獲得家長或監護人許可,才能加入此擴充程式</translation> <translation id="5481273127572794904">不允許自動下載多個檔案</translation> <translation id="5481941284378890518">新增附近的打印機</translation> <translation id="5483785310822538350">撤銷檔案和裝置存取權</translation> @@ -5205,7 +5201,6 @@ <translation id="5555639311269196631">關閉熱點</translation> <translation id="5556459405103347317">重新載入</translation> <translation id="5558129378926964177">放大(&I)</translation> -<translation id="5558247502209241936">可以喺視窗入面啟動應用程式</translation> <translation id="5559311991468302423">刪除地址</translation> <translation id="55601339223879446">調整顯示屏內的桌面邊界</translation> <translation id="5561162485081632007">偵測並在危險事件發生時發出警告</translation> @@ -6029,7 +6024,6 @@ <translation id="6305607932814307878">通用政策:</translation> <translation id="6305702903308659374">即使在 ChromeVox 朗讀時仍以正常音量播放音訊</translation> <translation id="6305909198255586420">請使用主要設定檔安裝</translation> -<translation id="630750887748244481">您的家長已停用 Chrome 的「網站、應用程式和擴充程式權限」設定,系統不允許加入此擴充程式。</translation> <translation id="6307990684951724544">系統忙碌中</translation> <translation id="6308493641021088955">登入資料由<ph name="EXTENSION_NAME" />提供</translation> <translation id="6308937455967653460">另存連結為(&K)…</translation> @@ -6855,7 +6849,6 @@ <translation id="7025190659207909717">流動數據服務管理</translation> <translation id="7025895441903756761">安全和私隱</translation> <translation id="7027258625819743915">{COUNT,plural, =0{在無痕式視窗中開啟所有書籤(&I)}=1{在無痕式視窗中開啟書籤(&I)}other{在無痕式視窗中開啟全部 {COUNT} 個書籤(&I)}}</translation> -<translation id="7028057921476386252">您必須獲得家長或監護人許可,才能啟用此擴充程式</translation> <translation id="7029307918966275733">尚未安裝 Crostini。請安裝 Crostini 來查看製作人員名單。</translation> <translation id="7029809446516969842">密碼</translation> <translation id="7030304022046916278">將網址傳送至「安全瀏覽」功能檢查</translation> @@ -8233,7 +8226,6 @@ <translation id="8251509999076836464">配對緊 <ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">已移除縮圖。</translation> <translation id="825238165904109940">一律顯示完整網址</translation> -<translation id="8252538334423261825">無法新增擴充程式</translation> <translation id="8252569384384439529">正在上載…</translation> <translation id="8253198102038551905">按一下 [+] 以取得網絡屬性</translation> <translation id="8255212965098517578">最近的相片、通知和應用程式</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 9460abe..52b6898e 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1328,7 +1328,6 @@ <translation id="2114820389966440614">在此查看「近照精選」和其他回憶集錦</translation> <translation id="2114896190328250491">相片提供:<ph name="NAME" /></translation> <translation id="2114995631896158695">未插入 SIM 卡</translation> -<translation id="2116020356255810305">可在開機時啟動應用程式</translation> <translation id="2116619964159595185">網站通常會連線至藍牙裝置,是因為要提供以下功能:設定或同步處理低功耗信標、健康與健身狀況追蹤器或智慧燈泡</translation> <translation id="2117655453726830283">下一張投影片</translation> <translation id="2119349053129246860">在「<ph name="APP" />」中開啟</translation> @@ -3257,7 +3256,6 @@ <translation id="380329542618494757">姓名</translation> <translation id="3803345858388753269">視訊品質</translation> <translation id="3803367742635802571">你造訪的網站可能無法正常運作</translation> -<translation id="3803583375545057606">要詢問家長是否允許啟用這個擴充功能嗎?</translation> <translation id="380408572480438692">啟用成效資料收集功能可協助 Google 持續改善系統。除非你提交意見回饋報告 (Alt-Shift-I) 並在其中包含成效資料,否則 Google 不會收到任何相關資料。你可以隨時回到這個畫面停用收集功能。</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (擴充功能 ID:「<ph name="EXTENSION_ID" />」) 無法在登入畫面使用。</translation> <translation id="3807747707162121253">取消(&C)</translation> @@ -3678,7 +3676,6 @@ <translation id="4169535189173047238">不允許</translation> <translation id="4170314459383239649">退出時清除</translation> <translation id="417096670996204801">選擇設定檔</translation> -<translation id="41725145403849567">要詢問家長是否允許新增這個擴充功能嗎?</translation> <translation id="4175137578744761569">淺紫色與白色</translation> <translation id="4175737294868205930">永久儲存空間</translation> <translation id="4176463684765177261">已停用</translation> @@ -5091,7 +5088,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN 碼必須包含至少一個字元}other{PIN 碼必須包含至少 # 個字元}}</translation> <translation id="5474859849784484111"><ph name="MANAGER" /> 要求你立即連線到 Wi-Fi 下載更新,或使用計量付費連線下載更新 (可能要支付流量費用)。</translation> <translation id="5476016146231427848">如要使用 Steam Chrome 版,請重新啟動裝置</translation> -<translation id="5476897066181964657">你必須取得家長或監護人許可,才能新增這個擴充功能</translation> <translation id="5481273127572794904">不得自動下載多個檔案</translation> <translation id="5481941284378890518">新增附近的印表機</translation> <translation id="5483785310822538350">撤銷檔案和裝置存取權</translation> @@ -5188,7 +5184,6 @@ <translation id="5555639311269196631">關閉無線基地台</translation> <translation id="5556459405103347317">重新載入</translation> <translation id="5558129378926964177">放大(&I)</translation> -<translation id="5558247502209241936">可在視窗中開啟應用程式</translation> <translation id="5559311991468302423">刪除地址</translation> <translation id="55601339223879446">調整顯示畫面中的桌面邊界</translation> <translation id="5561162485081632007">可偵測不安全事件,並在這類事件發生時顯示警告訊息</translation> @@ -6011,7 +6006,6 @@ <translation id="6305607932814307878">全域政策:</translation> <translation id="6305702903308659374">ChromeVox 朗讀時仍維持音訊的標準音量</translation> <translation id="6305909198255586420">請使用主要設定檔安裝</translation> -<translation id="630750887748244481">你的家長已停用 Chrome 的「網站、應用程式和擴充功能的權限」設定,你無法新增這個擴充功能。</translation> <translation id="6307990684951724544">系統忙碌中</translation> <translation id="6308493641021088955">登入資訊提供者:<ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">另存連結為(&K)...</translation> @@ -6837,7 +6831,6 @@ <translation id="7025190659207909717">行動數據服務管理</translation> <translation id="7025895441903756761">安全性與隱私權</translation> <translation id="7027258625819743915">{COUNT,plural, =0{在無痕式視窗中開啟所有網址(&I)}=1{在無痕式視窗中開啟(&I)}other{在無痕式視窗中開啟所有 ({COUNT} 個) 網址(&I)}}</translation> -<translation id="7028057921476386252">你必須取得家長或監護人許可,才能啟用這個擴充功能</translation> <translation id="7029307918966275733">未安裝 Crostini。請安裝 Crostini 以查看開發人員名單。</translation> <translation id="7029809446516969842">密碼</translation> <translation id="7030304022046916278">系統會將網址傳送給安全瀏覽功能進行檢查</translation> @@ -8216,7 +8209,6 @@ <translation id="8251509999076836464">正在配對「<ph name="DEVICE_NAME" />」</translation> <translation id="8251578425305135684">已移除縮圖。</translation> <translation id="825238165904109940">一律顯示完整網址</translation> -<translation id="8252538334423261825">無法新增擴充功能</translation> <translation id="8252569384384439529">上傳中...</translation> <translation id="8253198102038551905">按一下 [+] 即可查看網路屬性</translation> <translation id="8255212965098517578">最近的相片、通知和應用程式</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index 24b9a122..a6b6c11 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1340,7 +1340,6 @@ <translation id="2114820389966440614">Bona "Okuvelele okwakamuva" nezinye izinkumbulo lapha</translation> <translation id="2114896190328250491">Isithombe ngu-<ph name="NAME" /></translation> <translation id="2114995631896158695">Ayikho i-SIM card efakiwe</translation> -<translation id="2116020356255810305">Nika amandla ukuqalisa i-app ekuqaliseni</translation> <translation id="2116619964159595185">Amasayithi avame ukuxhuma kumadivayisi we-Bluetooth ngezici ezinjengokusetha noma ukuvumelanisa ibhekhoni lamandla amancane, isilandeleli sempilo noma ukufaneleka, noma isibani sokukhanya okusmathi</translation> <translation id="2117655453726830283">Islayidi esilandelayo</translation> <translation id="2119349053129246860">Vula ku-<ph name="APP" /></translation> @@ -3273,7 +3272,6 @@ <translation id="380329542618494757">Igama</translation> <translation id="3803345858388753269">Ikhwalithi yevidiyo</translation> <translation id="3803367742635802571">Amasayithi owavakashelayo angase ayeke ukusebenza ngendlela eklanywe ngayo</translation> -<translation id="3803583375545057606">Cela umzali wakho ukuthi anike lesi sandiso amandla?</translation> <translation id="380408572480438692">Ukunika amandla ukuqoqwa kwedatha yokusebenza kuzosiza i-Google ukuthi ithuthukise isistimu ngokuhamba kwesikhathi. Ayikho idatha ethunyelwayo uze uthumele umbiko wempendulo (i-Alt-Shift-I) uphinde ufake idatha yokusebenza. Ungabuyela kulesi sikrini ukuze ukhubaze ukuqoqwa noma kunini.</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (i-ID yesandiso "<ph name="EXTENSION_ID" />") ayivunyelwe esikrinini sokungena ngemvume.</translation> <translation id="3807747707162121253">Khansela</translation> @@ -3694,7 +3692,6 @@ <translation id="4169535189173047238">Ungavumeli</translation> <translation id="4170314459383239649">Sula ekuphumeni</translation> <translation id="417096670996204801">Khetha iphrofayela</translation> -<translation id="41725145403849567">Cela umzali wakho ukuthi angeze lesi sandiso?</translation> <translation id="4175137578744761569">Okuphephuli ngokukhanyayo nokumhlophe</translation> <translation id="4175737294868205930">Isitoreji esiqhubekayo</translation> <translation id="4176463684765177261">Kukhutshaziwe</translation> @@ -5110,7 +5107,6 @@ <translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{Iphinikhodi kufanele okungenani ibe nohlamvu olulodwa}one{Iphinikhodi kumele okungenani ibe izinhlamvu ezingu-#}other{Iphinikhodi kumele okungenani ibe izinhlamvu ezingu-#}}</translation> <translation id="5474859849784484111">I-<ph name="MANAGER" /> idinga ukuba uxhume ku-Wi-Fi manje futhi ulande isibuyekezi. Noma, ulande ngokuxhuma okwenziwe imitha (kungaba nezinkokhelo).</translation> <translation id="5476016146231427848">Sicela uqale kabusha idivayisi yakho ukusebenzisa i-Steam ku-Chromebook</translation> -<translation id="5476897066181964657">Umzali noma umnakekeli kufanele athi kulungile ukuthi ungeze lesi sandiso</translation> <translation id="5481273127572794904">Ayivumelekile ukulanda amafayela amaningi ngokuzenzekelayo</translation> <translation id="5481941284378890518">Engza amaphrinta seduze</translation> <translation id="5483785310822538350">Buyisa ifayela nokufinyelela kwedivayisi</translation> @@ -5207,7 +5203,6 @@ <translation id="5555639311269196631">Vala i-hotspot</translation> <translation id="5556459405103347317">Phinda ulayishe</translation> <translation id="5558129378926964177">Sondeza isithombe</translation> -<translation id="5558247502209241936">Nika amandla ukuvula i-app ewindini</translation> <translation id="5559311991468302423">Sula ikheli</translation> <translation id="55601339223879446">Lungisa imikhawulo yedeskithophu yakho ngaphakathi kwesiboniso</translation> <translation id="5561162485081632007">Ithola futhi ikuxwayisa ngemicimbi eyingozi uma yenzeka</translation> @@ -6034,7 +6029,6 @@ <translation id="6305607932814307878">Inqubomgomo yamazwe ngamazwe:</translation> <translation id="6305702903308659374">Dala ngevolomu evamile uma i-ChromeVox ikhuluma</translation> <translation id="6305909198255586420">Sicela ufake usebenzisa iphrofayela yakho eyinhloko</translation> -<translation id="630750887748244481">Umzali wakho uvale "Izimvume zamasayithi, ama-app, nezandiso" ze-Chrome. Ukwengeza lesi sandiso akuvunyelwe.</translation> <translation id="6307990684951724544">Isistimu imatasa</translation> <translation id="6308493641021088955">Ukungena ngemvume kunikezelwe i-<ph name="EXTENSION_NAME" /></translation> <translation id="6308937455967653460">Londoloza isixhumanisi njenge...</translation> @@ -6862,7 +6856,6 @@ <translation id="7025190659207909717">Ukuphathwa kwesevisi yedatha yeselula</translation> <translation id="7025895441903756761">Ukuphepha Nobumfihlo</translation> <translation id="7027258625819743915">{COUNT,plural, =0{Vula Konke Ewindini le-&Incognito}=1{Vula Ewindini le-&Incognito}one{Vula Konke ({COUNT}) Kuwindi le-&Incognito}other{Vula Konke ({COUNT}) Kuwindi le-&Incognito}}</translation> -<translation id="7028057921476386252">Umzali noma umnakekeli kufanele athi kulungile ukuthi unike lesi sandiso amandla</translation> <translation id="7029307918966275733">I-Crostini ayifakiwe. Sicela ufake i-Crostini ukuze ubuke amakhredithi.</translation> <translation id="7029809446516969842">Amaphasiwedi</translation> <translation id="7030304022046916278">Ithumela ama-URL Ekuphequluleni Okuphephile ukuze iwahlole</translation> @@ -8239,7 +8232,6 @@ <translation id="8251509999076836464">Ibhangqa ku-<ph name="DEVICE_NAME" /></translation> <translation id="8251578425305135684">Isithombe esincane sisusiwe.</translation> <translation id="825238165904109940">Njalo nje Bonisa ama-URL Agcwele</translation> -<translation id="8252538334423261825">Ayikwazi ukwengeza isandiso</translation> <translation id="8252569384384439529">Iyalayisha...</translation> <translation id="8253198102038551905">Chofoza u-'+' ukuze uthole imininingwane yenethiwekhi</translation> <translation id="8255212965098517578">Izithombe zakamuva, izaziso, nama-app</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index 089812a..273ff5b2 100644 --- a/chrome/app/resources/google_chrome_strings_ar.xtb +++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -20,7 +20,7 @@ <translation id="1363996462118479832">تعذّر على نظام التشغيل Chrome مزامنة البيانات بسبب حدوث خطأ في تسجيل الدخول.</translation> <translation id="137466361146087520">الإصدار التجريبي من Google Chrome</translation> <translation id="1399397803214730675">يحتوي جهاز الكمبيوتر هذا على نسخة أحدث من Google Chrome. إذا كان برنامج Google Chrome لا يعمل، يُرجى إزالة Google Chrome وإعادة المحاولة.</translation> -<translation id="139993653570221430">يمكنك تغيير رأيك متى شئت من خلال إعدادات Chrome. تتم هذه التجارب جنبًا إلى جنب مع الطريقة الحالية لعرض الإعلانات، لذا لن تظهر التغيرات على الفور.</translation> +<translation id="139993653570221430">يمكنك تغيير رأيك متى شئت من خلال إعدادات Chrome. نجري هذه التجارب بدون إيقاف الإعدادات الحالية لعرض الإعلانات، لذا لن تظهر التغييرات على الفور.</translation> <translation id="1434626383986940139">تطبيقات Chrome Canary</translation> <translation id="1496905273983707119">{NUM_DEVICES,plural, =0{Google Chrome غير متصل بأي جهاز HID.}=1{Google Chrome متصل بجهاز HID واحد.}two{Google Chrome متصل بجهازَي HID.}few{Google Chrome متصل بأجهزة HID.}many{Google Chrome متصل بأجهزة HID.}other{Google Chrome متصل بأجهزة HID.}}</translation> <translation id="1507198376417198979">يمكنك الآن تخصيص ملفك الشخصي الجديد على Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb index ef471cf..14a2083 100644 --- a/chrome/app/resources/google_chrome_strings_es-419.xtb +++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -346,7 +346,7 @@ <translation id="7896673875602241923">Alguien accedió anteriormente a Google Chrome en esta computadora como <ph name="ACCOUNT_EMAIL_LAST" />. Crea un usuario de Chrome nuevo para mantener tu información por separado.</translation> <translation id="7917876797003313048">Puedes administrar las Cuentas de Google a las que accediste. Tus Cuentas de Google se usan en el navegador Chrome, Play Store, Gmail y otros servicios. Si quieres agregar una cuenta de otra persona, como la de un miembro de la familia, agrega a una persona nueva a tu <ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> <translation id="7951272445806340501">Chrome OS Flex debe reiniciarse para que se aplique la actualización.</translation> -<translation id="7962368738413920945">Es probable que los sitios funcionen como esperas, pero no te recordarán cuando cierres todas las ventanas de Chrome</translation> +<translation id="7962368738413920945">Es probable que los sitios funcionen como esperas, pero no te recordarán cuando cierres todas las ventanas de Chrome.</translation> <translation id="7962410387636238736">Esta computadora dejará de recibir actualizaciones de Google Chrome porque Windows XP y Windows Vista ya no son compatibles</translation> <translation id="8005666035647241369">En el Administrador de contraseñas de Google en este dispositivo</translation> <translation id="8008534537613507642">Reinstalar Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb index efcffc6..9d8c724 100644 --- a/chrome/app/resources/google_chrome_strings_ja.xtb +++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -20,7 +20,7 @@ <translation id="1363996462118479832">ログイン時にエラーが発生したため、Chrome OS はデータを同期できませんでした。</translation> <translation id="137466361146087520">Google Chrome ベータ版</translation> <translation id="1399397803214730675">新しいバージョンの Google Chrome が既にインストールされています。ソフトウェアが動作しない場合は、Google Chrome をアンインストールしてからもう一度お試しください。</translation> -<translation id="139993653570221430">この設定は Chrome の設定でいつでも変更できます。テストは、現在の方法での広告配信と並行して実施されるため、すぐに変更が行われるわけではありません。</translation> +<translation id="139993653570221430">この設定は Chrome の設定でいつでも変更できます。テストは、現在の方法での広告配信と並行して実施されるため、すぐに変化が現れるわけではありません。</translation> <translation id="1434626383986940139">Chrome Canary アプリ</translation> <translation id="1496905273983707119">{NUM_DEVICES,plural, =0{Google Chrome は HID デバイスに接続されていました}=1{Google Chrome は HID デバイスに接続されています}other{Google Chrome は HID デバイスに接続されています}}</translation> <translation id="1507198376417198979">新しい Chrome プロフィールをカスタマイズ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb index bade1e8..45afb190 100644 --- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -164,7 +164,7 @@ <translation id="4035053306113201399">É necessário reiniciar o ChromeOS para aplicar a atualização.</translation> <translation id="4050175100176540509">Melhorias de segurança importantes e novos recursos estão disponíveis na versão mais recente.</translation> <translation id="4053720452172726777">Personalizar e controlar o Google Chrome</translation> -<translation id="4106587138345390261">O Chrome está explorando novos recursos que permitem que os sites ofereçam a mesma experiência de navegação atual usando menos informações pessoais</translation> +<translation id="4106587138345390261">O Chrome está explorando novos recursos para permitir que os sites ofereçam a mesma experiência de navegação atual usando menos informações pessoais</translation> <translation id="4110895483821904099">Configure seu novo perfil do Chrome</translation> <translation id="4147555960264124640">Você está fazendo login com uma conta gerenciada e concedendo ao administrador da conta o controle sobre seu perfil do Google Chrome. Seus dados do Google Chrome, como aplicativos, favoritos, histórico, senhas e outras configurações serão permanentemente vinculados a <ph name="USER_NAME" />. Você pode excluir esses dados pelo painel das Contas do Google, mas não pode associá-los a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="4148957013307229264">Instalando...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb index 23206a7a..44280ea 100644 --- a/chrome/app/resources/google_chrome_strings_ru.xtb +++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -215,7 +215,7 @@ <translation id="4970947549776831107">Chrome заблокировал файл с опасным расширением.</translation> <translation id="4990567037958725628">Google Chrome Canary</translation> <translation id="5064155331105009416">{COUNT,plural, =1{Администратор задал настройки, согласно которым Chrome автоматически закрывается, если в нем не выполняются действия в течение 1 минуты. Данные о работе в браузере, включая историю, сведения для автозаполнения и скачанные файлы, будут удалены.}one{Администратор задал настройки, согласно которым Chrome автоматически закрывается, если в нем не выполняются действия в течение # минуты. Данные о работе в браузере, включая историю, сведения для автозаполнения и скачанные файлы, будут удалены.}few{Администратор задал настройки, согласно которым Chrome автоматически закрывается, если в нем не выполняются действия в течение # минут. Данные о работе в браузере, включая историю, сведения для автозаполнения и скачанные файлы, будут удалены.}many{Администратор задал настройки, согласно которым Chrome автоматически закрывается, если в нем не выполняются действия в течение # минут. Данные о работе в браузере, включая историю, сведения для автозаполнения и скачанные файлы, будут удалены.}other{Администратор задал настройки, согласно которым Chrome автоматически закрывается, если в нем не выполняются действия в течение # минуты. Данные о работе в браузере, включая историю, сведения для автозаполнения и скачанные файлы, будут удалены.}}</translation> -<translation id="5098668839038261629">Также выполняется выход из Chrome</translation> +<translation id="5098668839038261629">Также выходить из Chrome</translation> <translation id="5132929315877954718">Широкий выбор приложений, игр, расширений и тем для Google Chrome.</translation> <translation id="5139423532931106058">Настройте профиль Chrome</translation> <translation id="5163087008893166964">Добро пожаловать в Chrome! Открыто новое окно браузера.</translation> @@ -345,7 +345,7 @@ <translation id="7896673875602241923">Ранее вход в Chrome на этом компьютере выполнялся из аккаунта <ph name="ACCOUNT_EMAIL_LAST" />. Чтобы ваши данные хранились отдельно, создайте новый профиль Chrome.</translation> <translation id="7917876797003313048">В этом разделе можно управлять аккаунтами Google, в которые вы вошли. Они используются в Google Play, Gmail, браузере Chrome и других сервисах. Чтобы указать аккаунт участника семейной группы или кого-нибудь ещё, добавьте на устройство <ph name="DEVICE_TYPE" /> нового пользователя. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> <translation id="7951272445806340501">Чтобы установить обновление, перезапустите Chrome OS Flex.</translation> -<translation id="7962368738413920945">Скорее всего, сайты продолжат работать привычным образом, но данные о ваших действиях будут удаляться после закрытия всех окон браузера Chrome</translation> +<translation id="7962368738413920945">Скорее всего, сайты сайты будут работать так, как вы ожидаете, но после закрытия всех окон Chrome данные о ваших действиях будут удаляться</translation> <translation id="7962410387636238736">Google Chrome больше не будет обновляться на этом компьютере, так как поддержка Windows XP и Windows Vista прекращена.</translation> <translation id="8005666035647241369">В Google Менеджере паролей на этом устройстве</translation> <translation id="8008534537613507642">Переустановить Chrome</translation>
diff --git a/chrome/app/vector_icons/BUILD.gn b/chrome/app/vector_icons/BUILD.gn index 6bf2a9d..a016e5e 100644 --- a/chrome/app/vector_icons/BUILD.gn +++ b/chrome/app/vector_icons/BUILD.gn
@@ -42,8 +42,10 @@ "close_group.icon", "computer_with_circle_background.icon", "copy.icon", + "copy_menu.icon", "crashed_tab.icon", "credit_card.icon", + "cut_menu.icon", "default_touch_favicon.icon", "default_touch_favicon_mask.icon", "download_in_progress.icon", @@ -60,6 +62,7 @@ "fingerprint.icon", "forward_arrow_touch.icon", "fullscreen.icon", + "fullscreen_refresh.icon", "generic_stop.icon", "globe.icon", "guest_menu_art.icon", @@ -114,6 +117,7 @@ "overflow_chevron.icon", "paintbrush.icon", "palette.icon", + "paste_menu.icon", "person_filled_padded_large.icon", "person_filled_padded_small.icon", "photo_camera.icon", @@ -208,10 +212,13 @@ "webauthn/passkey_usb_dark.icon", "webauthn/webauthn_error.icon", "webauthn/webauthn_error_dark.icon", + "zoom_in.icon", "zoom_minus.icon", "zoom_minus_chrome_refresh.icon", + "zoom_minus_menu_refresh.icon", "zoom_plus.icon", "zoom_plus_chrome_refresh.icon", + "zoom_plus_menu_refresh.icon", ] if (is_mac) {
diff --git a/chrome/app/vector_icons/copy_menu.icon b/chrome/app/vector_icons/copy_menu.icon new file mode 100644 index 0000000..a7cb611 --- /dev/null +++ b/chrome/app/vector_icons/copy_menu.icon
@@ -0,0 +1,30 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 3.5f, 13.5f, +H_LINE_TO, 11, +V_LINE_TO, 15, +H_LINE_TO, 3, +R_CUBIC_TO, -0.55f, 0, -1, -0.45f, -1, -1, +V_LINE_TO, 4, +R_H_LINE_TO, 1.5f, +R_V_LINE_TO, 9.5f, +CLOSE, +MOVE_TO, 14, 2, +R_V_LINE_TO, 9, +R_CUBIC_TO, 0, 0.55f, -0.45f, 1, -1, 1, +H_LINE_TO, 6, +R_CUBIC_TO, -0.55f, 0, -1, -0.45f, -1, -1, +V_LINE_TO, 2, +R_CUBIC_TO, 0, -0.55f, 0.45f, -1, 1, -1, +R_H_LINE_TO, 7, +R_CUBIC_TO, 0.55f, 0, 1, 0.45f, 1, 1, +CLOSE, +R_MOVE_TO, -1.5f, 0.5f, +R_H_LINE_TO, -6, +R_V_LINE_TO, 8, +R_H_LINE_TO, 6, +R_V_LINE_TO, -8, +CLOSE
diff --git a/chrome/app/vector_icons/cut_menu.icon b/chrome/app/vector_icons/cut_menu.icon new file mode 100644 index 0000000..36d3d86 --- /dev/null +++ b/chrome/app/vector_icons/cut_menu.icon
@@ -0,0 +1,48 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 12.94f, 2, +LINE_TO, 8.68f, 6.24f, +R_LINE_TO, 1.06f, 1.05f, +LINE_TO, 15, 2.06f, +V_LINE_TO, 2, +R_H_LINE_TO, -2.06f, +CLOSE, +NEW_PATH, +MOVE_TO, 4, 2.5f, +R_CUBIC_TO, 0.83f, 0, 1.5f, 0.67f, 1.5f, 1.5f, +R_CUBIC_TO, 0, 0.26f, -0.07f, 0.52f, -0.22f, 0.77f, +R_LINE_TO, -0.2f, 0.33f, +R_LINE_TO, -0.34f, 0.2f, +R_CUBIC_TO, -0.24f, 0.14f, -0.49f, 0.21f, -0.74f, 0.21f, +R_CUBIC_TO, -0.83f, 0, -1.5f, -0.67f, -1.5f, -1.5f, +CUBIC_TO_SHORTHAND, 3.17f, 2.51f, 4, 2.5f, +R_MOVE_TO, 0, 8.01f, +R_CUBIC_TO, 0.25f, 0, 0.5f, 0.07f, 0.74f, 0.21f, +R_LINE_TO, 0.34f, 0.2f, +R_LINE_TO, 0.2f, 0.33f, +R_CUBIC_TO, 0.15f, 0.25f, 0.22f, 0.5f, 0.22f, 0.77f, +R_CUBIC_TO, 0, 0.83f, -0.67f, 1.5f, -1.5f, 1.5f, +R_CUBIC_TO, -0.83f, 0, -1.5f, -0.67f, -1.5f, -1.5f, +R_CUBIC_TO, 0, -0.83f, 0.67f, -1.5f, 1.5f, -1.5f, +MOVE_TO, 4, 1, +CUBIC_TO, 2.34f, 1, 1, 2.34f, 1, 4, +R_CUBIC_TO, 0, 1.66f, 1.34f, 3, 3, 3, +R_CUBIC_TO, 0.55f, 0, 1.05f, -0.16f, 1.49f, -0.41f, +LINE_TO, 6.91f, 8, +LINE_TO, 5.49f, 9.41f, +CUBIC_TO, 5.05f, 9.16f, 4.54f, 9, 4, 9, +R_CUBIC_TO, -1.66f, 0, -3, 1.34f, -3, 3, +R_CUBIC_TO, 0, 1.66f, 1.34f, 3, 3, 3, +R_CUBIC_TO, 1.66f, 0, 3, -1.34f, 3, -3, +R_CUBIC_TO, 0, -0.57f, -0.17f, -1.09f, -0.44f, -1.54f, +R_LINE_TO, 1.41f, -1.4f, +LINE_TO, 12.94f, 14, +H_LINE_TO, 15, +R_V_LINE_TO, -0.06f, +R_LINE_TO, -8.44f, -8.4f, +CUBIC_TO, 6.83f, 5.09f, 7, 4.57f, 7, 4, +R_CUBIC_TO, 0, -1.66f, -1.34f, -3, -3, -3, +CLOSE
diff --git a/chrome/app/vector_icons/fullscreen_refresh.icon b/chrome/app/vector_icons/fullscreen_refresh.icon new file mode 100644 index 0000000..b3d53df --- /dev/null +++ b/chrome/app/vector_icons/fullscreen_refresh.icon
@@ -0,0 +1,37 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 3, 3, +R_V_LINE_TO, 3.5f, +R_H_LINE_TO, 1.5f, +R_V_LINE_TO, -2, +R_H_LINE_TO, 2, +V_LINE_TO, 3, +H_LINE_TO, 3, +CLOSE, +R_MOVE_TO, 1.5f, 6.5f, +H_LINE_TO, 3, +V_LINE_TO, 13, +R_H_LINE_TO, 3.5f, +R_V_LINE_TO, -1.5f, +R_H_LINE_TO, -2, +R_V_LINE_TO, -2, +CLOSE, +R_MOVE_TO, 5, -6.5f, +R_V_LINE_TO, 1.5f, +R_H_LINE_TO, 2, +R_V_LINE_TO, 2, +H_LINE_TO, 13, +V_LINE_TO, 3, +H_LINE_TO, 9.5f, +CLOSE, +R_MOVE_TO, 2, 8.5f, +R_H_LINE_TO, -2, +V_LINE_TO, 13, +H_LINE_TO, 13, +V_LINE_TO, 9.5f, +R_H_LINE_TO, -1.5f, +R_V_LINE_TO, 2, +CLOSE
diff --git a/chrome/app/vector_icons/paste_menu.icon b/chrome/app/vector_icons/paste_menu.icon new file mode 100644 index 0000000..c706390 --- /dev/null +++ b/chrome/app/vector_icons/paste_menu.icon
@@ -0,0 +1,34 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 13, 2, +H_LINE_TO, 9.93f, +CUBIC_TO, 9.71f, 1.14f, 8.93f, 0.5f, 8, 0.5f, +CUBIC_TO_SHORTHAND, 6.29f, 1.14f, 6.07f, 2, +H_LINE_TO, 3, +R_CUBIC_TO, -0.55f, 0, -1, 0.45f, -1, 1, +R_V_LINE_TO, 10, +R_CUBIC_TO, 0, 0.55f, 0.45f, 1, 1, 1, +R_H_LINE_TO, 10, +R_CUBIC_TO, 0.55f, 0, 1, -0.45f, 1, -1, +V_LINE_TO, 3, +R_CUBIC_TO, 0, -0.55f, -0.45f, -1, -1, -1, +CLOSE, +R_MOVE_TO, -4.25f, 0.75f, +R_CUBIC_TO, 0, 0.41f, -0.34f, 0.75f, -0.75f, 0.75f, +R_CUBIC_TO, -0.41f, 0, -0.75f, -0.34f, -0.75f, -0.75f, +CUBIC_TO_SHORTHAND, 7.59f, 2, 8, 2, +R_CUBIC_TO, 0.41f, 0, 0.75f, 0.34f, 0.75f, 0.75f, +CLOSE, +R_MOVE_TO, 3.75f, 9.75f, +R_H_LINE_TO, -9, +R_V_LINE_TO, -9, +H_LINE_TO, 5, +V_LINE_TO, 6, +R_H_LINE_TO, 6, +V_LINE_TO, 3.5f, +R_H_LINE_TO, 1.5f, +R_V_LINE_TO, 9, +CLOSE
diff --git a/chrome/app/vector_icons/zoom_in.icon b/chrome/app/vector_icons/zoom_in.icon new file mode 100644 index 0000000..515a55d --- /dev/null +++ b/chrome/app/vector_icons/zoom_in.icon
@@ -0,0 +1,35 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 10.16f, 9.1f, +R_CUBIC_TO, 1.25f, -1.76f, 1.1f, -4.2f, -0.48f, -5.78f, +R_ARC_TO, 4.49f, 4.49f, 0, 0, 0, -6.36f, 0, +R_ARC_TO, 4.49f, 4.49f, 0, 0, 0, 0, 6.36f, +R_ARC_TO, 4.49f, 4.49f, 0, 0, 0, 5.78f, 0.48f, +LINE_TO, 12.94f, 14, +LINE_TO, 14, 12.94f, +LINE_TO, 10.16f, 9.1f, +CLOSE, +R_MOVE_TO, -1.54f, -0.48f, +R_ARC_TO, 3, 3, 0, 0, 1, -4.24f, 0, +R_ARC_TO, 3, 3, 0, 0, 1, 0, -4.24f, +R_ARC_TO, 3, 3, 0, 0, 1, 4.24f, 0, +R_ARC_TO, 3, 3, 0, 0, 1, 0, 4.24f, +CLOSE, +NEW_PATH, +MOVE_TO, 7, 4.5f, +H_LINE_TO, 6, +V_LINE_TO, 6, +H_LINE_TO, 4.5f, +R_V_LINE_TO, 1, +H_LINE_TO, 6, +R_V_LINE_TO, 1.5f, +R_H_LINE_TO, 1, +V_LINE_TO, 7, +R_H_LINE_TO, 1.5f, +V_LINE_TO, 6, +H_LINE_TO, 7, +V_LINE_TO, 4.5f, +CLOSE
diff --git a/chrome/app/vector_icons/zoom_minus_menu_refresh.icon b/chrome/app/vector_icons/zoom_minus_menu_refresh.icon new file mode 100644 index 0000000..8f898c4 --- /dev/null +++ b/chrome/app/vector_icons/zoom_minus_menu_refresh.icon
@@ -0,0 +1,10 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 3.91f, 8.69f, +V_LINE_TO, 7.31f, +R_H_LINE_TO, 8.18f, +R_V_LINE_TO, 1.38f, +CLOSE
diff --git a/chrome/app/vector_icons/zoom_plus_menu_refresh.icon b/chrome/app/vector_icons/zoom_plus_menu_refresh.icon new file mode 100644 index 0000000..9b0d46f --- /dev/null +++ b/chrome/app/vector_icons/zoom_plus_menu_refresh.icon
@@ -0,0 +1,18 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +CANVAS_DIMENSIONS, 16, +MOVE_TO, 7.31f, 12.09f, +R_V_LINE_TO, -3.4f, +H_LINE_TO, 3.91f, +V_LINE_TO, 7.31f, +R_H_LINE_TO, 3.4f, +R_V_LINE_TO, -3.4f, +R_H_LINE_TO, 1.38f, +R_V_LINE_TO, 3.4f, +R_H_LINE_TO, 3.4f, +R_V_LINE_TO, 1.38f, +H_LINE_TO, 8.69f, +R_V_LINE_TO, 3.4f, +CLOSE
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 08721aa..a1cfe598 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -7231,6 +7231,14 @@ "LocalWebApprovals")}, #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_SUPERVISED_USERS) + {"enable-proto-api-for-classify-url", + flag_descriptions::kEnableProtoApiForClassifyUrlName, + flag_descriptions::kEnableProtoApiForClassifyUrlDescription, + kOsAndroid | (kOsDesktop & ~kOsFuchsia), + FEATURE_VALUE_TYPE(supervised_user::kEnableProtoApiForClassifyUrl)}, +#endif // BUILDFLAG(ENABLE_SUPERVISED_USERS) + #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) {"use-out-of-process-video-decoding", flag_descriptions::kUseOutOfProcessVideoDecodingName, @@ -7597,12 +7605,6 @@ kOsDesktop | kOsAndroid, FEATURE_VALUE_TYPE(page_info::kPageInfoAboutThisSiteNonEn)}, - {"page-info-about-this-site-non-msbb", - flag_descriptions::kPageInfoAboutThisSiteNonMsbbName, - flag_descriptions::kPageInfoAboutThisSiteNonMsbbDescription, - kOsDesktop | kOsAndroid, - FEATURE_VALUE_TYPE(page_info::kPageInfoAboutThisSiteNonMsbb)}, - #if !BUILDFLAG(IS_ANDROID) {"page-info-about-this-page-persistent-side-panel-entry", flag_descriptions::kPageInfoboutThisPagePersistentEntryName,
diff --git a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc index a0cd986..745644ed 100644 --- a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc
@@ -691,13 +691,12 @@ ASSERT_TRUE(GetGuestRenderFrameHost()); // Compute where to click in the window to focus the guest input box. - int clickX, clickY; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - embedder_web_contents(), - "domAutomationController.send(Math.floor(window.clickX));", &clickX)); - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - embedder_web_contents(), - "domAutomationController.send(Math.floor(window.clickY));", &clickY)); + int clickX = + content::EvalJs(embedder_web_contents(), "Math.floor(window.clickX);") + .ExtractInt(); + int clickY = + content::EvalJs(embedder_web_contents(), "Math.floor(window.clickY);") + .ExtractInt(); ExtensionTestMessageListener next_step_listener("TEST_STEP_PASSED"); next_step_listener.set_failure_message("TEST_STEP_FAILED");
diff --git a/chrome/browser/ash/accessibility/html_test_utils.cc b/chrome/browser/ash/accessibility/html_test_utils.cc index 4248f25..bc3948f7 100644 --- a/chrome/browser/ash/accessibility/html_test_utils.cc +++ b/chrome/browser/ash/accessibility/html_test_utils.cc
@@ -14,11 +14,7 @@ void ExecuteScriptAndExtractInt(content::WebContents* web_contents, const std::string& script, int* result) { - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - web_contents, - base::StringPrintf("window.domAutomationController.send(%s);", - script.c_str()), - result)); + *result = content::EvalJs(web_contents, script).ExtractInt(); } void ExecuteScript(content::WebContents* web_contents,
diff --git a/chrome/browser/ash/arc/auth/arc_auth_service_browsertest.cc b/chrome/browser/ash/arc/auth/arc_auth_service_browsertest.cc index 7550e686..a2dd2e4 100644 --- a/chrome/browser/ash/arc/auth/arc_auth_service_browsertest.cc +++ b/chrome/browser/ash/arc/auth/arc_auth_service_browsertest.cc
@@ -68,7 +68,7 @@ #include "components/user_manager/scoped_user_manager.h" #include "components/user_manager/user_manager.h" #include "components/user_manager/user_names.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
diff --git a/chrome/browser/ash/arc/nearby_share/share_info_file_handler.cc b/chrome/browser/ash/arc/nearby_share/share_info_file_handler.cc index 42674a7..b9ee652e 100644 --- a/chrome/browser/ash/arc/nearby_share/share_info_file_handler.cc +++ b/chrome/browser/ash/arc/nearby_share/share_info_file_handler.cc
@@ -24,7 +24,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "storage/browser/file_system/file_system_context.h" #include "storage/browser/file_system/isolated_context.h"
diff --git a/chrome/browser/ash/attestation/tpm_challenge_key_subtle_unittest.cc b/chrome/browser/ash/attestation/tpm_challenge_key_subtle_unittest.cc index baa2ebe4..7d17f25 100644 --- a/chrome/browser/ash/attestation/tpm_challenge_key_subtle_unittest.cc +++ b/chrome/browser/ash/attestation/tpm_challenge_key_subtle_unittest.cc
@@ -439,6 +439,11 @@ LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, LoginState::LOGGED_IN_USER_KIOSK); } + + void TearDown() override { + LoginState::Shutdown(); + TpmChallengeKeySubtleTestBase::TearDown(); + } }; TEST_P(DeviceKeysAccessTpmChallengeKeySubtleTest,
diff --git a/chrome/browser/ash/camera_mic/vm_camera_mic_manager.cc b/chrome/browser/ash/camera_mic/vm_camera_mic_manager.cc index 62de0d5..5274e44 100644 --- a/chrome/browser/ash/camera_mic/vm_camera_mic_manager.cc +++ b/chrome/browser/ash/camera_mic/vm_camera_mic_manager.cc
@@ -219,7 +219,7 @@ UpdatePrivacyIndicators( /*app_id=*/GetNotificationId(vm_type_, notifications_.active), app_name, /*is_camera_used=*/false, /*is_microphone_used=*/false, - delegate); + delegate, PrivacyIndicatorsSource::kLinuxVm); } else { CloseNotification(notifications_.active); } @@ -232,7 +232,8 @@ /*is_camera_used=*/ new_notification[static_cast<size_t>(DeviceType::kCamera)], /*is_microphone_used=*/ - new_notification[static_cast<size_t>(DeviceType::kMic)], delegate); + new_notification[static_cast<size_t>(DeviceType::kMic)], delegate, + PrivacyIndicatorsSource::kLinuxVm); } else { OpenNotification(new_notification); }
diff --git a/chrome/browser/ash/crosapi/browser_data_back_migrator.cc b/chrome/browser/ash/crosapi/browser_data_back_migrator.cc index 38c20fa..7c23532 100644 --- a/chrome/browser/ash/crosapi/browser_data_back_migrator.cc +++ b/chrome/browser/ash/crosapi/browser_data_back_migrator.cc
@@ -681,6 +681,55 @@ InvokeCallback({TaskStatus::kSucceeded}); } +void BrowserDataBackMigrator::CancelMigration( + BackMigrationCanceledCallback canceled_callback) { + LOG(WARNING) << "BrowserDataBackMigrator::CancelMigration() is called."; + + canceled_callback_ = std::move(canceled_callback); + + base::ThreadPool::PostTaskAndReplyWithResult( + FROM_HERE, + {base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::BLOCK_SHUTDOWN}, + base::BindOnce(&BrowserDataBackMigrator::FailedMigrationCleanUp, + ash_profile_dir_), + base::BindOnce(&BrowserDataBackMigrator::OnFailedMigrationCleanUp, + weak_factory_.GetWeakPtr())); +} + +// static +BrowserDataBackMigrator::TaskResult +BrowserDataBackMigrator::FailedMigrationCleanUp( + const base::FilePath& ash_profile_dir) { + LOG(WARNING) << "Running FailedMigrationCleanUp()"; + + auto delete_lacros_dir_result = + BrowserDataBackMigrator::DeleteLacrosDir(ash_profile_dir); + auto delete_tmp_dir_result = + BrowserDataBackMigrator::DeleteTmpDir(ash_profile_dir); + + if (delete_lacros_dir_result.status != TaskStatus::kSucceeded) { + return delete_lacros_dir_result; + } + + if (delete_tmp_dir_result.status != TaskStatus::kSucceeded) { + return delete_tmp_dir_result; + } + + return {TaskStatus::kSucceeded}; +} + +void BrowserDataBackMigrator::OnFailedMigrationCleanUp( + BrowserDataBackMigrator::TaskResult result) { + if (result.status != TaskStatus::kSucceeded) { + LOG(ERROR) << "FailedMigrationCleanUp() failed."; + } else { + LOG(WARNING) << "Backward migration cancellation completed successfully"; + } + // TODO(b/272017148): Add UMA metrics. + std::move(canceled_callback_).Run(); +} + // static bool BrowserDataBackMigrator::MergeCommonExtensionsDataFiles( const base::FilePath& ash_profile_dir,
diff --git a/chrome/browser/ash/crosapi/browser_data_back_migrator.h b/chrome/browser/ash/crosapi/browser_data_back_migrator.h index 8680046..41635a8 100644 --- a/chrome/browser/ash/crosapi/browser_data_back_migrator.h +++ b/chrome/browser/ash/crosapi/browser_data_back_migrator.h
@@ -83,6 +83,7 @@ using BackMigrationFinishedCallback = base::OnceCallback<void(BrowserDataBackMigrator::Result)>; using BackMigrationProgressCallback = base::RepeatingCallback<void(int)>; + using BackMigrationCanceledCallback = base::OnceClosure; explicit BrowserDataBackMigrator(const base::FilePath& ash_profile_dir, const std::string& user_id_hash, @@ -123,6 +124,10 @@ const std::string& user_id_hash, crosapi::browser_util::PolicyInitState policy_init_state); + // CancelMigration is called when the user chooses to cancel the migration + // from OOBE and it cleans up the in-progress migration. + void CancelMigration(BackMigrationCanceledCallback canceled_callback); + private: FRIEND_TEST_ALL_PREFIXES(BrowserDataBackMigratorTest, PreMigrationCleanUp); FRIEND_TEST_ALL_PREFIXES(BrowserDataBackMigratorTest, @@ -163,6 +168,7 @@ bool running_ = false; BackMigrationProgressCallback progress_callback_; BackMigrationFinishedCallback finished_callback_; + BackMigrationCanceledCallback canceled_callback_; void SetProgress(MigrationStep step); @@ -222,6 +228,14 @@ // Called as a reply to `MarkMigrationComplete()`. void OnMarkMigrationComplete(); + // Calls `DeleteLacrosDir()` and `DeleteTmpDir()` to clean up residual Lacros + // data upon failed migration that was canceled by the user. + static TaskResult FailedMigrationCleanUp( + const base::FilePath& ash_profile_dir); + + // Called as a reply to `FailedMigrationCleanUp()`. + void OnFailedMigrationCleanUp(TaskResult result); + // For `target_dir` copy subdirectories belonging to extensions that are in // both Chromes from `lacros_default_profile_dir` to `tmp_user_dir`. static bool MergeCommonExtensionsDataFiles(
diff --git a/chrome/browser/ash/crosapi/browser_data_back_migrator_unittest.cc b/chrome/browser/ash/crosapi/browser_data_back_migrator_unittest.cc index eadbd3e..6d224b6 100644 --- a/chrome/browser/ash/crosapi/browser_data_back_migrator_unittest.cc +++ b/chrome/browser/ash/crosapi/browser_data_back_migrator_unittest.cc
@@ -15,11 +15,14 @@ #include "base/json/json_writer.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" +#include "base/test/task_environment.h" +#include "base/test/test_future.h" #include "chrome/browser/ash/crosapi/browser_data_back_migrator_metrics.h" #include "chrome/browser/ash/crosapi/browser_data_migrator_util.h" #include "chrome/browser/ash/crosapi/browser_util.h" #include "components/policy/core/common/policy_map.h" #include "components/policy/policy_constants.h" +#include "components/prefs/testing_pref_service.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/leveldatabase/env_chromium.h" #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" @@ -72,11 +75,15 @@ kMaxValue = kBothChromes, }; +void CreateDirectoryForTesting(const base::FilePath& directory_path) { + ASSERT_TRUE(base::CreateDirectory(directory_path)); +} + void CreateDirectoryAndFile(const base::FilePath& directory_path, const char* file_path, const char* file_content, int file_size) { - ASSERT_TRUE(base::CreateDirectory(directory_path)); + CreateDirectoryForTesting(directory_path); ASSERT_TRUE(base::WriteFile(directory_path.Append(file_path), base::StringPiece(file_content, file_size))); } @@ -339,7 +346,13 @@ // During backward migration, `tmp_profile_dir_` is created in // `MergeSplitItems`, but we don't want to call that in tests so we generate // it ourselves. - ASSERT_TRUE(base::CreateDirectory(tmp_profile_dir_)); + CreateDirectoryForTesting(tmp_profile_dir_); + } + + void CreateLacrosDirectory() { + // This directory is created during forward migration and parts of backward + // migration code rely on its existence, i.e. do nothing if it is not found. + CreateDirectoryForTesting(lacros_default_profile_dir_); } void SetupLocalStorageLevelDBFiles( @@ -448,6 +461,8 @@ std::string kAshOnlyStateStoreKey; std::string kLacrosOnlyStateStoreKey; std::string kBothChromesStateStoreKey; + + TestingPrefServiceSimple pref_service_; }; class BrowserDataBackMigratorFilesSetupTest @@ -464,7 +479,7 @@ TEST_F(BrowserDataBackMigratorTest, PreMigrationCleanUp) { // Create the temporary directory to make sure it is deleted during cleanup. - ASSERT_TRUE(base::CreateDirectory(tmp_profile_dir_)); + CreateTemporaryDirectory(); base::HistogramTester histogram_tester; @@ -946,6 +961,30 @@ ASSERT_EQ(other_lacros_preference->GetInt(), kLacrosPrefValue); } +// Checks that upon canceling migration, the temporary directory Lacros user +// directory and the are deleted. +TEST_F(BrowserDataBackMigratorTest, CancelMigration) { + base::test::TaskEnvironment task_environment; + const std::string user_id_hash = "abcd"; + + CreateTemporaryDirectory(); + CreateLacrosDirectory(); + + EXPECT_TRUE(base::PathExists(tmp_profile_dir_)); + EXPECT_TRUE(base::PathExists(lacros_default_profile_dir_)); + + std::unique_ptr<BrowserDataBackMigrator> migrator = + std::make_unique<BrowserDataBackMigrator>(ash_profile_dir_, user_id_hash, + &pref_service_); + + base::test::TestFuture<void> cancellation_completed; + migrator->CancelMigration(cancellation_completed.GetCallback()); + ASSERT_TRUE(cancellation_completed.Wait()); + + EXPECT_FALSE(base::PathExists(tmp_profile_dir_)); + EXPECT_FALSE(base::PathExists(lacros_default_profile_dir_)); +} + TEST_P(BrowserDataBackMigratorFilesSetupTest, DeletesLacrosItemsFromAshDirCorrectly) { auto files_setup = GetParam();
diff --git a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc index 216f66c..08636177 100644 --- a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc +++ b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc
@@ -31,7 +31,7 @@ constexpr base::FeatureParam<std::string> EnhancedNetworkTtsImpl::kApiKey; const net::NetworkTrafficAnnotationTag traffic_annotation = - net::DefineNetworkTrafficAnnotation("enhanced_network_tts", R"( + net::DefineNetworkTrafficAnnotation("enhanced_network_tts", R"( semantics { sender: "Enhanced Network TTS" description: @@ -44,24 +44,30 @@ trigger: "Turn on Select-to-speak from settings. " "Use search +s or hold search and click some text to get it to start. " "Accept the dialog about natural voices, and/or go to Select-to-speak to enable them." + user_data { + type: WEB_CONTENT + } data: "1. Google API Key." "2. Text piece to be converted to speech." "3. Voice to be used for the speech." "4. Language of the speech." "5. Rate of the speech." destination: GOOGLE_OWNED_SERVICE + internal { + contacts { + email: "chrome-a11y-core@google.com" + } + } + last_reviewed: "2023-04-05" } policy { cookies_allowed: NO - setting: "This feature cannot be disabled in settings." - chrome_policy { - AudioCaptureAllowed { - policy_options {mode: MANDATORY} - AudioCaptureAllowed: false - } - } - })" - ); + setting: + "Users can disable the text-to-speech with enhanced voices feature on " + "the Select-to-Speak subpage of the Accessibility settings. This " + "setting is disabled by default." + policy_exception_justification: "Not implemented." + })"); EnhancedNetworkTtsImpl::ServerRequest::ServerRequest( std::unique_ptr<network::SimpleURLLoader> url_loader,
diff --git a/chrome/browser/ash/extensions/file_manager/private_api_util.cc b/chrome/browser/ash/extensions/file_manager/private_api_util.cc index 52d4338..cde0f08 100644 --- a/chrome/browser/ash/extensions/file_manager/private_api_util.cc +++ b/chrome/browser/ash/extensions/file_manager/private_api_util.cc
@@ -36,7 +36,7 @@ #include "chromeos/ash/components/drivefs/sync_status_tracker.h" #include "components/drive/drive_api_util.h" #include "components/drive/file_errors.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_security_policy.h" #include "mojo/public/cpp/bindings/callback_helpers.h" #include "storage/browser/file_system/external_mount_points.h"
diff --git a/chrome/browser/ash/login/existing_user_controller.cc b/chrome/browser/ash/login/existing_user_controller.cc index 33baf89..4e02ebe 100644 --- a/chrome/browser/ash/login/existing_user_controller.cc +++ b/chrome/browser/ash/login/existing_user_controller.cc
@@ -639,6 +639,7 @@ void ExistingUserController::ContinuePerformLogin( LoginPerformer::AuthorizationMode auth_mode, std::unique_ptr<UserContext> user_context) { + CHECK(login_performer_); login_performer_->LoginAuthenticated(std::move(user_context)); } @@ -709,6 +710,7 @@ void ExistingUserController::ShowEncryptionMigrationScreen( std::unique_ptr<UserContext> user_context, EncryptionMigrationMode migration_mode) { + CHECK(login_performer_); GetLoginDisplayHost()->GetSigninUI()->StartEncryptionMigration( std::move(user_context), migration_mode, base::BindOnce(&ExistingUserController::ContinuePerformLogin, @@ -723,6 +725,7 @@ void ExistingUserController::ShowPasswordChangedDialogLegacy( const UserContext& user_context) { + CHECK(login_performer_); VLOG(1) << "Show password changed dialog" << ", count=" << login_performer_->password_changed_callback_count(); @@ -817,6 +820,7 @@ // Login performer will be gone so cache this value to use // once profile is loaded. + CHECK(login_performer_); password_changed_ = login_performer_->password_changed(); auth_mode_ = login_performer_->auth_mode(); @@ -856,6 +860,7 @@ // Regular SAML // /ServiceLogin T T // /ChromeOsEmbeddedSetup F T + CHECK(login_performer_); const bool has_auth_cookies = login_performer_->auth_mode() == LoginPerformer::AuthorizationMode::kExternal && @@ -1079,6 +1084,7 @@ bool has_incomplete_migration) { absl::optional<EncryptionMigrationMode> encryption_migration_mode = GetEncryptionMigrationMode(*user_context, has_incomplete_migration); + CHECK(login_performer_); if (!encryption_migration_mode.has_value()) { ContinuePerformLoginWithoutMigration(login_performer_->auth_mode(), std::move(user_context)); @@ -1196,6 +1202,7 @@ void ExistingUserController::LoginAuthenticated( std::unique_ptr<UserContext> user_context) { + CHECK(login_performer_); login_performer_->LoginAuthenticated(std::move(user_context)); }
diff --git a/chrome/browser/ash/login/test/js_checker.cc b/chrome/browser/ash/login/test/js_checker.cc index 78d23ab6..bc70f8b 100644 --- a/chrome/browser/ash/login/test/js_checker.cc +++ b/chrome/browser/ash/login/test/js_checker.cc
@@ -338,8 +338,7 @@ void JSChecker::GetIntImpl(const std::string& expression, int* result) { CHECK(web_contents_); - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - web_contents_, WrapSend(expression), result)); + *result = content::EvalJs(web_contents_, expression).ExtractInt(); } void JSChecker::GetStringImpl(const std::string& expression,
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 407692a..32a94773 100644 --- a/chrome/browser/ash/login/ui/login_display_host_mojo.cc +++ b/chrome/browser/ash/login/ui/login_display_host_mojo.cc
@@ -58,7 +58,7 @@ #include "components/user_manager/user_manager.h" #include "components/user_manager/user_names.h" #include "components/version_info/version_info.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "google_apis/gaia/gaia_auth_util.h" #include "ui/aura/window.h" #include "ui/compositor/layer.h" @@ -885,8 +885,10 @@ void LoginDisplayHostMojo::OnUserActivity(const ui::Event* event) { // ESC button can be used to hide login dialog when SAML is configured. // Prevent reopening it with ESC. - if (event->IsKeyEvent() && event->AsKeyEvent()->key_code() == ui::VKEY_ESCAPE) + if (event && (event->IsKeyEvent() && + event->AsKeyEvent()->key_code() == ui::VKEY_ESCAPE)) { return; + } scoped_activity_observation_.Reset(); ShowGaiaDialog(EmptyAccountId()); }
diff --git a/chrome/browser/ash/net/client_cert_filter.cc b/chrome/browser/ash/net/client_cert_filter.cc index d547a7d..26d9ee30 100644 --- a/chrome/browser/ash/net/client_cert_filter.cc +++ b/chrome/browser/ash/net/client_cert_filter.cc
@@ -7,7 +7,7 @@ #include <utility> #include "base/functional/bind.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "crypto/nss_util_internal.h" #include "crypto/scoped_nss_types.h" #include "net/cert/nss_profile_filter_chromeos.h"
diff --git a/chrome/browser/ash/net/network_diagnostics/http_firewall_routine_unittest.cc b/chrome/browser/ash/net/network_diagnostics/http_firewall_routine_unittest.cc index c0403c0..389088c 100644 --- a/chrome/browser/ash/net/network_diagnostics/http_firewall_routine_unittest.cc +++ b/chrome/browser/ash/net/network_diagnostics/http_firewall_routine_unittest.cc
@@ -11,7 +11,7 @@ #include "base/functional/callback_helpers.h" #include "chrome/browser/ash/net/network_diagnostics/fake_host_resolver.h" #include "chrome/browser/ash/net/network_diagnostics/fake_network_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "net/base/net_errors.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/net/network_diagnostics/https_firewall_routine_unittest.cc b/chrome/browser/ash/net/network_diagnostics/https_firewall_routine_unittest.cc index af131057..6a16bbe 100644 --- a/chrome/browser/ash/net/network_diagnostics/https_firewall_routine_unittest.cc +++ b/chrome/browser/ash/net/network_diagnostics/https_firewall_routine_unittest.cc
@@ -11,7 +11,7 @@ #include "base/functional/callback_helpers.h" #include "chrome/browser/ash/net/network_diagnostics/fake_host_resolver.h" #include "chrome/browser/ash/net/network_diagnostics/fake_network_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "net/base/net_errors.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine_unittest.cc b/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine_unittest.cc index 62be33e..4a7a5509 100644 --- a/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine_unittest.cc +++ b/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine_unittest.cc
@@ -15,7 +15,7 @@ #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/browser/ash/policy/core/device_cloud_policy_store_ash.cc b/chrome/browser/ash/policy/core/device_cloud_policy_store_ash.cc index 5d16cd46..aa9d0c255 100644 --- a/chrome/browser/ash/policy/core/device_cloud_policy_store_ash.cc +++ b/chrome/browser/ash/policy/core/device_cloud_policy_store_ash.cc
@@ -6,10 +6,13 @@ #include <utility> +#include "base/files/file_path.h" +#include "base/files/file_util.h" #include "base/functional/bind.h" #include "base/logging.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" +#include "base/path_service.h" #include "base/sequence_checker.h" #include "base/task/sequenced_task_runner.h" #include "chrome/browser/ash/login/startup_utils.h" @@ -17,6 +20,7 @@ #include "chrome/browser/ash/policy/dev_mode/dev_mode_policy_util.h" #include "chrome/browser/ash/policy/value_validation/onc_device_policy_value_validator.h" #include "chromeos/ash/components/install_attributes/install_attributes.h" +#include "chromeos/dbus/constants/dbus_paths.h" #include "components/ownership/owner_key_util.h" #include "components/policy/core/common/cloud/cloud_external_data_manager.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" @@ -295,8 +299,23 @@ base::UmaHistogramBoolean(kDMTokenCheckHistogram, false); base::UmaHistogramBoolean(kPolicyCheckHistogram, policy_data); + std::stringstream debug_info; + debug_info << "has_policy: " << (policy_data != nullptr); + if (policy_data) { + debug_info << ", has_managed_by: " << policy_data->has_managed_by(); + if (policy_data->has_policy_type()) { + debug_info << ", policy_type: " << policy_data->policy_type(); + } + } + base::FilePath key_path; + bool path_found = + base::PathService::Get(chromeos::dbus_paths::FILE_OWNER_KEY, &key_path); + debug_info << ", has_key: " << (path_found && base::PathExists(key_path)); + debug_info << ", attrs mode: " << install_attributes_->GetMode() + << ", is_locked: " << install_attributes_->IsDeviceLocked(); LOG(ERROR) << "Device policy read on enrolled device yields " - << "no DM token! Status: " << service_status << "."; + << "no DM token! Status: " << service_status + << ", debug_info: " << debug_info.str() << "."; // At the time LoginDisplayHostWebUI decides whether enrollment flow is to // be started, policy hasn't been read yet. To work around this, once the
diff --git a/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc b/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc index c8f71d76..dab6ee8f 100644 --- a/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc +++ b/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc
@@ -1354,11 +1354,8 @@ // Rename "image3.jpg" to "x.jpg". constexpr int kRenameResultSuccess = 0; constexpr char kScript[] = - "lastLoadedReceivedFileList().item(0).renameOriginalFile('x.jpg')" - ".then(result => domAutomationController.send(result));"; - int result = ~kRenameResultSuccess; - EXPECT_EQ(true, content::ExecuteScriptAndExtractInt(app, kScript, &result)); - EXPECT_EQ(kRenameResultSuccess, result); + "lastLoadedReceivedFileList().item(0).renameOriginalFile('x.jpg')"; + EXPECT_EQ(kRenameResultSuccess, content::EvalJs(app, kScript)); folder.Refresh(); @@ -1389,12 +1386,11 @@ EXPECT_EQ("640x480", WaitForImageAlt(web_ui, kFileJpeg640x480)); - int result = 0; constexpr char kScript[] = "lastLoadedReceivedFileList().item(0).deleteOriginalFile()" - ".then(() => domAutomationController.send(42));"; - EXPECT_EQ(true, content::ExecuteScriptAndExtractInt(app, kScript, &result)); - EXPECT_EQ(42, result); // Magic success (no exception thrown). + ".then(() => 42);"; + EXPECT_EQ(42, content::EvalJs( + app, kScript)); // Magic success (no exception thrown). // Ensure the file *not* deleted is the only one that remains. folder.Refresh(); @@ -1498,10 +1494,9 @@ // here that 0-1 retries are usually sufficient. int received_file_length = 0; do { - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - app, - "domAutomationController.send(lastLoadedReceivedFileList().length);", - &received_file_length)); + received_file_length = + content::EvalJs(app, "lastLoadedReceivedFileList().length;") + .ExtractInt(); } while (received_file_length != 2); bool result;
diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillUiUtils.java b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillUiUtils.java index 708289c9..c4216cb 100644 --- a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillUiUtils.java +++ b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillUiUtils.java
@@ -468,12 +468,14 @@ * retrieved. * @param widthId Resource Id for the width spec. * @param heightId Resource Id for the height spec. + * @param cornerRadiusId Resource Id for the corner radius spec. * @param showCustomIcon If true, custom card icon is fetched, else, default icon is fetched. * @return {@link Drawable} that can be set as the card icon. If neither the custom icon nor the * default icon is available, returns null. */ public static @Nullable Drawable getCardIcon(Context context, @Nullable GURL cardArtUrl, - int defaultIconId, int widthId, int heightId, boolean showCustomIcon) { + int defaultIconId, int widthId, int heightId, int cornerRadiusId, + boolean showCustomIcon) { Drawable defaultIcon = defaultIconId == 0 ? null : AppCompatResources.getDrawable(context, defaultIconId); if (!showCustomIcon || cardArtUrl == null || !cardArtUrl.isValid()) { @@ -487,11 +489,12 @@ return AppCompatResources.getDrawable(context, R.drawable.capitalone_metadata_card); } - Resources resources = context.getResources(); + Resources res = context.getResources(); Bitmap customIconBitmap = PersonalDataManager.getInstance().getCustomImageForAutofillSuggestionIfAvailable( - getCCIconURLWithParams(cardArtUrl, resources.getDimensionPixelSize(widthId), - resources.getDimensionPixelSize(heightId))); + getCCIconURLWithParams(cardArtUrl, res.getDimensionPixelSize(widthId), + res.getDimensionPixelSize(heightId)), + res.getDimension(cornerRadiusId)); if (customIconBitmap == null) { return defaultIcon; } @@ -500,14 +503,13 @@ ChromeFeatureList.AUTOFILL_ENABLE_NEW_CARD_ART_AND_NETWORK_IMAGES)) { // The new Capital One card icon assets are stored at all scales in the // client code, and there's no need to scale the bitmap. - return new BitmapDrawable(resources, customIconBitmap); + return new BitmapDrawable(res, customIconBitmap); } // Scale the icon to the desired dimension. Bitmap scaledBitmap = Bitmap.createScaledBitmap(customIconBitmap, - resources.getDimensionPixelSize(widthId), resources.getDimensionPixelSize(heightId), - true); - return new BitmapDrawable(resources, scaledBitmap); + res.getDimensionPixelSize(widthId), res.getDimensionPixelSize(heightId), true); + return new BitmapDrawable(res, scaledBitmap); } public static int getSettingsPageIconWidthId() { @@ -529,18 +531,17 @@ /** * If {@code roundBitmapCorners} is true, add a corner radius to bitmap corners. * @param bitmap to be updated. + * @param cornerRadius for the bitmap. * @param roundBitmapCorners If true, the bitmap corners are rounded, else the input bitmap is * returned as it is. * @return {@link Bitmap} with the corners rounded. */ - public static Bitmap getRoundedBitmap(Bitmap bitmap, boolean roundBitmapCorners) { + public static Bitmap getRoundedBitmap( + Bitmap bitmap, float cornerRadius, boolean roundBitmapCorners) { if (!roundBitmapCorners) { return bitmap; } - float cornerRadius = ContextUtils.getApplicationContext().getResources().getDimension( - R.dimen.card_art_corner_radius); - Bitmap roundedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(roundedBitmap);
diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java index a17b169..745a03b 100644 --- a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java +++ b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java
@@ -1381,7 +1381,8 @@ * it is fetched from this URL. * @return Bitmap if found in the local cache, else return null. */ - public Bitmap getCustomImageForAutofillSuggestionIfAvailable(GURL customImageUrl) { + public Bitmap getCustomImageForAutofillSuggestionIfAvailable( + GURL customImageUrl, float cornerRadius) { if (mCreditCardArtImages.containsKey(customImageUrl.getSpec())) { return mCreditCardArtImages.get(customImageUrl.getSpec()); } @@ -1393,7 +1394,7 @@ if (bitmap == null) return; mCreditCardArtImages.put(customImageUrl.getSpec(), - AutofillUiUtils.getRoundedBitmap(bitmap, + AutofillUiUtils.getRoundedBitmap(bitmap, cornerRadius, ChromeFeatureList.isEnabled( ChromeFeatureList .AUTOFILL_ENABLE_NEW_CARD_ART_AND_NETWORK_IMAGES)));
diff --git a/chrome/browser/autofill/autofill_interactive_uitest.cc b/chrome/browser/autofill/autofill_interactive_uitest.cc index 0b9467e..9a9e5280 100644 --- a/chrome/browser/autofill/autofill_interactive_uitest.cc +++ b/chrome/browser/autofill/autofill_interactive_uitest.cc
@@ -1246,9 +1246,7 @@ // show if it's going to. If it does show, an assert in // BrowserAutofillManagerTestDelegateImpl will trigger. void MakeSurePopupDoesntAppear() { - int unused; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - GetWebContents(), "domAutomationController.send(42)", &unused)); + EXPECT_EQ(42, content::EvalJs(GetWebContents(), "42")); } void SimulateKeyPress(const ui::DomKey& dom_key, @@ -2129,12 +2127,7 @@ kEmptyAddress, {"firstname", "M"}))})); EXPECT_THAT(GetFormValues(), ValuesAre(kDefaultAddress)); - int num_input_element_events = -1; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - GetWebContents(), - "domAutomationController.send(inputElementEvents.length);", - &num_input_element_events)); - EXPECT_EQ(2, num_input_element_events); + EXPECT_EQ(2, content::EvalJs(GetWebContents(), "inputElementEvents.length;")); std::vector<std::string> input_element_events; input_element_events.resize(2); @@ -2149,12 +2142,8 @@ EXPECT_EQ("input", input_element_events[0]); EXPECT_EQ("change", input_element_events[1]); - int num_select_element_events = -1; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - GetWebContents(), - "domAutomationController.send(selectElementEvents.length);", - &num_select_element_events)); - EXPECT_EQ(2, num_select_element_events); + EXPECT_EQ(2, + content::EvalJs(GetWebContents(), "selectElementEvents.length;")); std::vector<std::string> select_element_events; select_element_events.resize(2);
diff --git a/chrome/browser/autofill/test/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java b/chrome/browser/autofill/test/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java index b4cc176..9bb553a 100644 --- a/chrome/browser/autofill/test/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java +++ b/chrome/browser/autofill/test/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java
@@ -209,6 +209,8 @@ @SmallTest @Feature({"Autofill"}) public void testCreditCardWithCardArtUrl_imageDownloaded() throws TimeoutException { + Context context = ContextUtils.getApplicationContext(); + int cornerRadiusId = R.dimen.card_art_corner_radius; GURL cardArtUrl = new GURL("http://google.com/test.png"); CreditCard cardWithCardArtUrl = new CreditCard(/* guid= */ "serverGuid", /* origin= */ "", /* isLocal= */ false, /* isCached= */ false, "John Doe Server", "41111111111111111", @@ -222,7 +224,8 @@ TestThreadUtils.runOnUiThreadBlocking(() -> { assertEquals(TEST_CARD_ART_IMAGE, PersonalDataManager.getInstance() - .getCustomImageForAutofillSuggestionIfAvailable(cardArtUrl)); + .getCustomImageForAutofillSuggestionIfAvailable(cardArtUrl, + context.getResources().getDimension(cornerRadiusId))); }); } @@ -666,6 +669,7 @@ Context context = ContextUtils.getApplicationContext(); int widthId = R.dimen.autofill_dropdown_icon_width; int heightId = R.dimen.autofill_dropdown_icon_height; + int cornerRadiusId = R.dimen.card_art_corner_radius; Bitmap scaledTestCardArtImage = Bitmap.createScaledBitmap(TEST_CARD_ART_IMAGE, context.getResources().getDimensionPixelSize(widthId), context.getResources().getDimensionPixelSize(heightId), true); @@ -678,14 +682,15 @@ .getBitmap() .sameAs(((BitmapDrawable) AutofillUiUtils.getCardIcon(context, new GURL("http://google.com/test.png"), - R.drawable.mc_card, widthId, heightId, true)) + R.drawable.mc_card, widthId, heightId, cornerRadiusId, + true)) .getBitmap())); // The custom icon is already cached, and gets returned. assertTrue(scaledTestCardArtImage.sameAs( ((BitmapDrawable) AutofillUiUtils.getCardIcon(context, new GURL("http://google.com/test.png"), R.drawable.mc_card, widthId, - heightId, true)) + heightId, cornerRadiusId, true)) .getBitmap())); }); } @@ -698,6 +703,7 @@ Context context = ContextUtils.getApplicationContext(); int widthId = R.dimen.autofill_dropdown_icon_width; int heightId = R.dimen.autofill_dropdown_icon_height; + int cornerRadiusId = R.dimen.card_art_corner_radius; TestThreadUtils.runOnUiThreadBlocking(() -> { // In the absence of custom icon URL, the default icon is returned. @@ -706,7 +712,7 @@ .getBitmap() .sameAs(((BitmapDrawable) AutofillUiUtils.getCardIcon(context, new GURL(""), R.drawable.mc_card, widthId, heightId, - true)) + cornerRadiusId, true)) .getBitmap())); // Calling it twice just to make sure that there is no caching behavior like it happens @@ -716,7 +722,7 @@ .getBitmap() .sameAs(((BitmapDrawable) AutofillUiUtils.getCardIcon(context, new GURL(""), R.drawable.mc_card, widthId, heightId, - true)) + cornerRadiusId, true)) .getBitmap())); }); } @@ -729,14 +735,13 @@ Context context = ContextUtils.getApplicationContext(); int widthId = R.dimen.autofill_dropdown_icon_width; int heightId = R.dimen.autofill_dropdown_icon_height; - Bitmap scaledTestCardArtImage = Bitmap.createScaledBitmap(TEST_CARD_ART_IMAGE, - context.getResources().getDimensionPixelSize(widthId), - context.getResources().getDimensionPixelSize(heightId), true); + int cornerRadiusId = R.dimen.card_art_corner_radius; TestThreadUtils.runOnUiThreadBlocking(() -> { // If neither the custom icon nor the default icon is available, null is returned. assertEquals(null, - AutofillUiUtils.getCardIcon(context, new GURL(""), 0, widthId, heightId, true)); + AutofillUiUtils.getCardIcon( + context, new GURL(""), 0, widthId, heightId, cornerRadiusId, true)); }); } }
diff --git a/chrome/browser/browser_keyevents_browsertest.cc b/chrome/browser/browser_keyevents_browsertest.cc index 2cd1822..abc199a 100644 --- a/chrome/browser/browser_keyevents_browsertest.cc +++ b/chrome/browser/browser_keyevents_browsertest.cc
@@ -35,8 +35,7 @@ "window.domAutomationController.send(setDefaultAction('%ls', %ls));"; const char kGetResultJS[] = "window.domAutomationController.send(keyEventResult[%d]);"; -const char kGetResultLengthJS[] = - "window.domAutomationController.send(keyEventResult.length);"; +const char kGetResultLengthJS[] = "keyEventResult.length;"; const char kGetFocusedElementJS[] = "window.domAutomationController.send(focusedElement);"; const char kSetFocusedElementJS[] = @@ -169,10 +168,10 @@ void GetResultLength(int tab_index, int* length) { ASSERT_LT(tab_index, browser()->tab_strip_model()->count()); - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - browser()->tab_strip_model()->GetWebContentsAt(tab_index), - kGetResultLengthJS, - length)); + *length = content::EvalJs( + browser()->tab_strip_model()->GetWebContentsAt(tab_index), + kGetResultLengthJS) + .ExtractInt(); } void CheckResult(int tab_index, int length, const char* const result[]) {
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc index 02f2aad..85e86dd 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_unittest.cc
@@ -140,7 +140,7 @@ #include "components/site_isolation/pref_names.h" #include "components/ukm/test_ukm_recorder.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/browsing_data_filter_builder.h" #include "content/public/browser/browsing_data_remover.h" #include "content/public/browser/network_service_instance.h"
diff --git a/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc b/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc index 406bab9..b4efa2c 100644 --- a/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc +++ b/chrome/browser/browsing_data/counters/site_data_counting_helper_unittest.cc
@@ -17,7 +17,7 @@ #include "chrome/test/base/testing_profile.h" #include "components/services/storage/public/mojom/local_storage_control.mojom.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "content/public/test/browser_task_environment.h" #include "mojo/public/cpp/bindings/remote.h"
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc index 4bbabc01..b594474 100644 --- a/chrome/browser/chrome_browser_interface_binders.cc +++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -399,14 +399,16 @@ content::RenderFrameHost* const host, mojo::PendingReceiver<blink::mojom::UnhandledTapNotifier> receiver) { auto* web_contents = content::WebContents::FromRenderFrameHost(host); - if (!web_contents) + if (!web_contents) { return; + } auto* unhandled_tap_notifier_observer = contextual_search::UnhandledTapWebContentsObserver::FromWebContents( web_contents); - if (!unhandled_tap_notifier_observer) + if (!unhandled_tap_notifier_observer) { return; + } contextual_search::CreateUnhandledTapNotifierImpl( unhandled_tap_notifier_observer->unhandled_tap_callback(), @@ -457,26 +459,32 @@ frame_host->GetProcess()->GetBrowserContext()); auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); ProfileManager* profile_manager = g_browser_process->profile_manager(); - if (!identity_manager || !profile_manager) + if (!identity_manager || !profile_manager) { return; + } if (!identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) && - profile_manager->GetNumberOfProfiles() <= 1) + profile_manager->GetNumberOfProfiles() <= 1) { return; + } #endif auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host); - if (!web_contents) + if (!web_contents) { return; + } content::BrowserContext* browser_context = web_contents->GetBrowserContext(); - if (!browser_context) + if (!browser_context) { return; - if (browser_context->IsOffTheRecord()) + } + if (browser_context->IsOffTheRecord()) { return; + } cart::CommerceHintService::CreateForWebContents(web_contents); cart::CommerceHintService* service = cart::CommerceHintService::FromWebContents(web_contents); - if (!service) + if (!service) { return; + } service->BindCommerceHintObserver(frame_host, std::move(receiver)); } @@ -485,13 +493,15 @@ mojo::PendingReceiver<dom_distiller::mojom::DistillabilityService> receiver) { auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host); - if (!web_contents) + if (!web_contents) { return; + } dom_distiller::DistillabilityDriver* driver = dom_distiller::DistillabilityDriver::FromWebContents(web_contents); - if (!driver) + if (!driver) { return; + } driver->SetIsSecureCallback( base::BindRepeating([](content::WebContents* contents) { // SecurityStateTabHelper uses chrome-specific @@ -508,8 +518,9 @@ mojo::PendingReceiver<dom_distiller::mojom::DistillerJavaScriptService> receiver) { auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host); - if (!web_contents) + if (!web_contents) { return; + } dom_distiller::DomDistillerService* dom_distiller_service = dom_distiller::DomDistillerServiceFactory::GetForBrowserContext( @@ -527,14 +538,16 @@ content::RenderFrameHost* frame_host, mojo::PendingReceiver<prerender::mojom::PrerenderCanceler> receiver) { auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host); - if (!web_contents) + if (!web_contents) { return; + } auto* no_state_prefetch_contents = prerender::ChromeNoStatePrefetchContentsDelegate::FromWebContents( web_contents); - if (!no_state_prefetch_contents) + if (!no_state_prefetch_contents) { return; + } no_state_prefetch_contents->AddPrerenderCancelerReceiver(std::move(receiver)); } @@ -553,8 +566,9 @@ mojo::PendingReceiver<Interface> receiver) { content::WebContents* contents = content::WebContents::FromRenderFrameHost(frame_host); - if (contents) + if (contents) { contents->GetJavaInterfaces()->GetInterface(std::move(receiver)); + } } template <typename Interface> @@ -571,8 +585,9 @@ receiver) { auto* guest_view = extensions::MimeHandlerViewGuest::FromRenderFrameHost(frame_host); - if (!guest_view) + if (!guest_view) { return; + } extensions::MimeHandlerServiceImpl::Create(guest_view->GetStreamWeakPtr(), std::move(receiver)); } @@ -583,8 +598,9 @@ receiver) { auto* guest_view = extensions::MimeHandlerViewGuest::FromRenderFrameHost(frame_host); - if (!guest_view) + if (!guest_view) { return; + } guest_view->FuseBeforeUnloadControl(std::move(receiver)); } #endif @@ -960,6 +976,7 @@ ash::OobeUI, ash::personalization_app::PersonalizationAppUI, ash::settings::OSSettingsUI, ash::DiagnosticsDialogUI, ash::FirmwareUpdateAppUI, ash::ScanningUI, + ash::ShortcutCustomizationAppUI, ash::printing::printing_manager::PrintManagementUI, #endif NewTabPageUI, OmniboxPopupUI, BookmarksSidePanelUI>(map);
diff --git a/chrome/browser/chrome_browser_main_linux.cc b/chrome/browser/chrome_browser_main_linux.cc index 5b96e73..6f421c1 100644 --- a/chrome/browser/chrome_browser_main_linux.cc +++ b/chrome/browser/chrome_browser_main_linux.cc
@@ -18,7 +18,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/chromium_strings.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "device/bluetooth/dbus/bluez_dbus_thread_manager.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/events/BUILD.gn b/chrome/browser/chromeos/extensions/telemetry/api/events/BUILD.gn index 82d1383..6a8fb36 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/events/BUILD.gn +++ b/chrome/browser/chromeos/extensions/telemetry/api/events/BUILD.gn
@@ -67,8 +67,14 @@ ] deps = [ + ":event_router", "//base", + "//chrome/browser/profiles:profile", + "//chrome/browser/ui", + "//chrome/common/chromeos/extensions", + "//chromeos/crosapi/mojom", "//content/public/browser", + "//extensions/common", ] public_deps = [ "//extensions/browser" ] @@ -105,17 +111,32 @@ source_set("browser_tests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] - sources = [ "events_api_browsertests.cc" ] + sources = [ + "events_api_browsertests.cc", + "fake_events_service.cc", + "fake_events_service.h", + ] deps = [ ":events", "//chrome/browser/chromeos/extensions/telemetry/api/common:test_support", + "//chromeos/crosapi/mojom", "//content/test:test_support", "//extensions/common", + "//mojo/public/cpp/bindings", "//testing/gtest", ] data = [ "//chrome/test/data" ] + + if (is_chromeos_ash) { + sources += [ + "fake_events_service_factory.cc", + "fake_events_service_factory.h", + ] + + deps += [ "//chrome/browser/ash/telemetry_extension" ] + } } source_set("unit_tests") {
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.cc b/chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.cc index 3415b1c..7813c6c1 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.cc
@@ -4,12 +4,67 @@ #include "chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.h" +#include "base/check.h" #include "base/no_destructor.h" +#include "chrome/browser/chromeos/extensions/telemetry/api/events/event_router.h" +#include "chrome/browser/chromeos/extensions/telemetry/api/events/remote_event_service_strategy.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" +#include "chrome/common/chromeos/extensions/chromeos_system_extension_info.h" +#include "chromeos/crosapi/mojom/telemetry_event_service.mojom.h" +#include "chromeos/crosapi/mojom/telemetry_extension_exception.mojom.h" #include "content/public/browser/browser_context.h" +#include "content/public/browser/web_contents.h" #include "extensions/browser/browser_context_keyed_api_factory.h" +#include "extensions/common/extension_id.h" +#include "extensions/common/url_pattern.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "url/gurl.h" namespace chromeos { +namespace { + +bool IsRelatedPwaUrl(const std::string& related_pwa, GURL url_to_compare) { + URLPattern pattern(URLPattern::SCHEME_ALL); + return pattern.Parse(related_pwa) == URLPattern::ParseResult::kSuccess && + pattern.MatchesURL(url_to_compare); +} + +bool IsPwaOpenForExtensionId(extensions::ExtensionId extension_id, + content::BrowserContext* context) { + if (!IsChromeOSSystemExtension(extension_id)) { + return false; + } + auto related_pwa = GetChromeOSExtensionInfoForId(extension_id).pwa_origin; + + Profile* profile = Profile::FromBrowserContext(context); + for (auto* target_browser : *BrowserList::GetInstance()) { + // Ignore incognito. + if (target_browser->profile() != profile) { + continue; + } + + TabStripModel* target_tab_strip = target_browser->tab_strip_model(); + for (int i = 0; i < target_tab_strip->count(); ++i) { + content::WebContents* target_contents = + target_tab_strip->GetWebContentsAt(i); + + if (IsRelatedPwaUrl(related_pwa, + target_contents->GetLastCommittedURL())) { + return true; + } + } + } + + return false; +} + +} // namespace + // static extensions::BrowserContextKeyedAPIFactory<EventManager>* EventManager::GetFactoryInstance() { @@ -26,8 +81,112 @@ } EventManager::EventManager(content::BrowserContext* context) - : browser_context_(context) {} + : event_router_(context), browser_context_(context) { + // Register this class as an observer of the correct tab strip models. + auto* profile = Profile::FromBrowserContext(context); + auto* browser_list = BrowserList::GetInstance(); + browser_list->AddObserver(this); -EventManager::~EventManager() = default; + for (auto* target_browser : *browser_list) { + if (target_browser->profile() != profile) { + continue; + } + + TabStripModel* tab_strip = target_browser->tab_strip_model(); + tab_strip->AddObserver(this); + } +} + +EventManager::~EventManager() { + BrowserList::RemoveObserver(this); + for (auto* target_browser : *BrowserList::GetInstance()) { + if (target_browser->profile() != target_browser->profile()) { + continue; + } + + TabStripModel* tab_strip = target_browser->tab_strip_model(); + tab_strip->RemoveObserver(this); + } +} + +void EventManager::OnTabStripModelChanged( + TabStripModel* tab_strip_model, + const TabStripModelChange& change, + const TabStripSelectionChange& selection) { + if (tab_strip_model->profile() != + Profile::FromBrowserContext(browser_context_)) { + return; + } + + for (auto& [extension_id, open] : open_pwas_) { + auto related_pwa = GetChromeOSExtensionInfoForId(extension_id).pwa_origin; + if (change.type() == TabStripModelChange::kRemoved) { + for (auto& removed_tab : change.GetRemove()->contents) { + if (IsRelatedPwaUrl(related_pwa, + removed_tab.contents->GetLastCommittedURL())) { + // The PWA has been closed, safe that state and cut all connections. + open = false; + event_router_.ResetReceiversForExtension(extension_id); + } + } + } else if (change.type() == TabStripModelChange::kInserted) { + for (auto& inserted_tab : change.GetInsert()->contents) { + if (IsRelatedPwaUrl(related_pwa, + inserted_tab.contents->GetLastCommittedURL())) { + // The PWA is now open. + open = true; + } + } + } + } +} + +void EventManager::OnBrowserAdded(Browser* browser) { + // Add ourselves as an observer in case a new browser is opened. + if (browser->profile() == Profile::FromBrowserContext(browser_context_)) { + browser->tab_strip_model()->AddObserver(this); + } +} + +EventManager::RegisterEventResult EventManager::RegisterExtensionForEvent( + extensions::ExtensionId extension_id, + crosapi::mojom::TelemetryEventCategoryEnum category) { + auto is_related_pwa_open = + IsPwaOpenForExtensionId(extension_id, browser_context_); + // This is a noop in case the pwa is closed or there is already an existing + // observation. + if (!is_related_pwa_open) { + return kPwaClosed; + } + if (event_router_.IsExtensionObservingForCategory(extension_id, category)) { + return kEventAlreadyObserved; + } + + open_pwas_.emplace(extension_id, is_related_pwa_open); + GetRemoteService()->AddEventObserver( + category, event_router_.GetPendingRemoteForCategoryAndExtension( + category, extension_id)); + return kSuccess; +} + +void EventManager::RemoveObservationsForExtensionAndCategory( + extensions::ExtensionId extension_id, + crosapi::mojom::TelemetryEventCategoryEnum category) { + event_router_.ResetReceiversOfExtensionByCategory(extension_id, category); +} + +void EventManager::IsEventSupported( + crosapi::mojom::TelemetryEventCategoryEnum category, + crosapi::mojom::TelemetryEventService::IsEventSupportedCallback callback) { + GetRemoteService()->IsEventSupported(category, std::move(callback)); +} + +mojo::Remote<crosapi::mojom::TelemetryEventService>& +EventManager::GetRemoteService() { + if (!remote_event_service_strategy_) { + remote_event_service_strategy_ = RemoteEventServiceStrategy::Create(); + } + return remote_event_service_strategy_->GetRemoteService(); +} } // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.h b/chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.h index 8039c5b..2d97bf8c 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.h +++ b/chrome/browser/chromeos/extensions/telemetry/api/events/event_manager.h
@@ -5,14 +5,35 @@ #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_EVENTS_EVENT_MANAGER_H_ #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_EVENTS_EVENT_MANAGER_H_ +#include <memory> + +#include "base/containers/flat_map.h" #include "base/memory/raw_ptr.h" +#include "chrome/browser/chromeos/extensions/telemetry/api/events/event_router.h" +#include "chrome/browser/chromeos/extensions/telemetry/api/events/remote_event_service_strategy.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list_observer.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" +#include "chromeos/crosapi/mojom/telemetry_event_service.mojom.h" +#include "chromeos/crosapi/mojom/telemetry_extension_exception.mojom.h" #include "content/public/browser/browser_context.h" #include "extensions/browser/browser_context_keyed_api_factory.h" +#include "extensions/common/extension_id.h" +#include "mojo/public/cpp/bindings/remote.h" namespace chromeos { -class EventManager : public extensions::BrowserContextKeyedAPI { +class EventManager : public extensions::BrowserContextKeyedAPI, + public TabStripModelObserver, + public BrowserListObserver { public: + enum RegisterEventResult { + kSuccess, + kPwaClosed, + kEventAlreadyObserved, + }; + // extensions::BrowserContextKeyedAPI: static extensions::BrowserContextKeyedAPIFactory<EventManager>* GetFactoryInstance(); @@ -27,6 +48,34 @@ ~EventManager() override; + // TabStripModelObserver: + void OnTabStripModelChanged( + TabStripModel* tab_strip_model, + const TabStripModelChange& change, + const TabStripSelectionChange& selection) override; + + // BrowserListObserver: + void OnBrowserAdded(Browser* browser) override; + + // Registers an extension for a certain event category. This results in a + // subscription with cros_healthd which is cut when either: + // 1. The PWA associated with the extension is closed. + // 2. The connection gets cut manually. + RegisterEventResult RegisterExtensionForEvent( + extensions::ExtensionId extension_id, + crosapi::mojom::TelemetryEventCategoryEnum category); + + // Removes an observation for a certain extension and category. + // This results in a cut of the mojom pipe to cros_healthd. + void RemoveObservationsForExtensionAndCategory( + extensions::ExtensionId extension_id, + crosapi::mojom::TelemetryEventCategoryEnum category); + + // Checks whether a certain event category is supported. + void IsEventSupported( + crosapi::mojom::TelemetryEventCategoryEnum category, + crosapi::mojom::TelemetryEventService::IsEventSupportedCallback callback); + private: friend class extensions::BrowserContextKeyedAPIFactory<EventManager>; @@ -35,6 +84,12 @@ static const bool kServiceIsCreatedInGuestMode = false; static const bool kServiceRedirectedInIncognito = true; + mojo::Remote<crosapi::mojom::TelemetryEventService>& GetRemoteService(); + + base::flat_map<extensions::ExtensionId, bool> open_pwas_; + EventRouter event_router_; + std::unique_ptr<RemoteEventServiceStrategy> remote_event_service_strategy_; + const raw_ptr<content::BrowserContext> browser_context_; };
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.cc b/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.cc new file mode 100644 index 0000000..48befed --- /dev/null +++ b/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.cc
@@ -0,0 +1,115 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.h" + +#include <tuple> +#include <utility> + +#include "base/functional/callback.h" +#include "base/location.h" +#include "base/task/sequenced_task_runner.h" +#include "base/test/bind.h" +#include "chromeos/crosapi/mojom/telemetry_event_service.mojom.h" +#include "chromeos/crosapi/mojom/telemetry_extension_exception.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote_set.h" + +namespace chromeos { + +FakeEventsService::FakeEventsService() = default; + +FakeEventsService::~FakeEventsService() = default; + +void FakeEventsService::BindPendingReceiver( + mojo::PendingReceiver<crosapi::mojom::TelemetryEventService> receiver) { + receiver_.Bind(std::move(receiver)); +} + +mojo::PendingRemote<crosapi::mojom::TelemetryEventService> +FakeEventsService::BindNewPipeAndPassRemote() { + return receiver_.BindNewPipeAndPassRemote(); +} + +void FakeEventsService::AddEventObserver( + crosapi::mojom::TelemetryEventCategoryEnum category, + mojo::PendingRemote<crosapi::mojom::TelemetryEventObserver> observer) { + auto it = event_observers_.find(category); + if (it == event_observers_.end()) { + it = event_observers_.emplace_hint(it, std::piecewise_construct, + std::forward_as_tuple(category), + std::forward_as_tuple()); + } + + it->second.Add(std::move(observer)); + + // Register the call to on_subscription_change in case the connection is + // reset. SAFETY: We can pass `this` to the callback, since this can only be + // invoked on a connected ReceiverSet, which lives shorter than `this`. + it->second.set_disconnect_handler( + base::BindLambdaForTesting([this](mojo::RemoteSetElementId _) { + if (on_subscription_change_) { + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, std::move(on_subscription_change_)); + } + })); + + // Invoke the callback for on_subscription_change, since we added a + // subscription. + if (on_subscription_change_) { + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, std::move(on_subscription_change_)); + } +} + +void FakeEventsService::IsEventSupported( + crosapi::mojom::TelemetryEventCategoryEnum category, + IsEventSupportedCallback callback) { + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), + is_event_supported_response_.Clone())); +} + +void FakeEventsService::SetIsEventSupportedResponse( + crosapi::mojom::TelemetryExtensionSupportStatusPtr status) { + is_event_supported_response_.Swap(&status); +} + +void FakeEventsService::EmitEventForCategory( + crosapi::mojom::TelemetryEventCategoryEnum category, + crosapi::mojom::TelemetryEventInfoPtr info) { + // Flush the receiver, so any pending observers are registered before the + // event is emitted. + if (receiver_.is_bound()) { + receiver_.FlushForTesting(); + } + + auto it = event_observers_.find(category); + if (it == event_observers_.end()) { + return; + } + + for (auto& observer : it->second) { + observer->OnEvent(info.Clone()); + } +} + +mojo::RemoteSet<crosapi::mojom::TelemetryEventObserver>* +FakeEventsService::GetObserversByCategory( + crosapi::mojom::TelemetryEventCategoryEnum category) { + auto it = event_observers_.find(category); + if (it == event_observers_.end()) { + return nullptr; + } + + return &it->second; +} + +void FakeEventsService::SetOnSubscriptionChange( + base::RepeatingClosure callback) { + on_subscription_change_ = std::move(callback); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.h b/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.h new file mode 100644 index 0000000..9d55cf2d --- /dev/null +++ b/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.h
@@ -0,0 +1,79 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_EVENTS_FAKE_EVENTS_SERVICE_H_ +#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_EVENTS_FAKE_EVENTS_SERVICE_H_ + +#include "base/functional/callback_forward.h" +#include "chromeos/crosapi/mojom/telemetry_event_service.mojom.h" +#include "chromeos/crosapi/mojom/telemetry_extension_exception.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote_set.h" + +namespace chromeos { + +class FakeEventsService : public crosapi::mojom::TelemetryEventService { + public: + FakeEventsService(); + FakeEventsService(const FakeEventsService&) = delete; + FakeEventsService& operator=(const FakeEventsService&) = delete; + ~FakeEventsService() override; + + void BindPendingReceiver( + mojo::PendingReceiver<crosapi::mojom::TelemetryEventService> receiver); + + mojo::PendingRemote<crosapi::mojom::TelemetryEventService> + BindNewPipeAndPassRemote(); + + // TelemetryEventService: + void AddEventObserver( + crosapi::mojom::TelemetryEventCategoryEnum category, + mojo::PendingRemote<crosapi::mojom::TelemetryEventObserver> observer) + override; + void IsEventSupported(crosapi::mojom::TelemetryEventCategoryEnum category, + IsEventSupportedCallback callback) override; + + // Sets the response for a call to `IsEventSupported`. + void SetIsEventSupportedResponse( + crosapi::mojom::TelemetryExtensionSupportStatusPtr status); + + // Emits an `info` for all observers subscribed to `category`. + void EmitEventForCategory(crosapi::mojom::TelemetryEventCategoryEnum category, + crosapi::mojom::TelemetryEventInfoPtr info); + + // Returns the remotes that are observing a certain category, returns nullptr + // if no remote is observing a certain category. + mojo::RemoteSet<crosapi::mojom::TelemetryEventObserver>* + GetObserversByCategory(crosapi::mojom::TelemetryEventCategoryEnum category); + + // Sets a callback that is invoked in two cases: + // - A new subscription is added (`AddEventObserver` was called). + // - A subscription is removed (the mojo connection was cut). + // This is useful since in tests we usually want to perform a certain action + // as soon as an observation is registered or removed. + void SetOnSubscriptionChange(base::RepeatingClosure callback); + + private: + mojo::Receiver<crosapi::mojom::TelemetryEventService> receiver_{this}; + + // Collection of registered general observers grouped by category. + std::map<crosapi::mojom::TelemetryEventCategoryEnum, + mojo::RemoteSet<crosapi::mojom::TelemetryEventObserver>> + event_observers_; + + // Called when a new subscription is opened or an existing one is closed. + base::RepeatingClosure on_subscription_change_; + + // Used as the response to any IsEventSupported IPCs received. + crosapi::mojom::TelemetryExtensionSupportStatusPtr + is_event_supported_response_{ + crosapi::mojom::TelemetryExtensionSupportStatus:: + NewUnmappedUnionField(0)}; +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_EVENTS_FAKE_EVENTS_SERVICE_H_
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service_factory.cc b/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service_factory.cc new file mode 100644 index 0000000..cb53911f --- /dev/null +++ b/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service_factory.cc
@@ -0,0 +1,33 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service_factory.h" + +#include <memory> +#include <utility> + +#include "base/check.h" +#include "chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.h" +#include "chromeos/crosapi/mojom/telemetry_event_service.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" + +namespace chromeos { + +FakeEventsServiceFactory::FakeEventsServiceFactory() = default; +FakeEventsServiceFactory::~FakeEventsServiceFactory() = default; + +void FakeEventsServiceFactory::SetCreateInstanceResponse( + std::unique_ptr<FakeEventsService> fake_service) { + fake_service_ = std::move(fake_service); +} + +std::unique_ptr<crosapi::mojom::TelemetryEventService> +FakeEventsServiceFactory::CreateInstance( + mojo::PendingReceiver<crosapi::mojom::TelemetryEventService> receiver) { + DCHECK(fake_service_); + fake_service_->BindPendingReceiver(std::move(receiver)); + return std::move(fake_service_); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service_factory.h b/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service_factory.h new file mode 100644 index 0000000..227e295 --- /dev/null +++ b/chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service_factory.h
@@ -0,0 +1,37 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_EVENTS_FAKE_EVENTS_SERVICE_FACTORY_H_ +#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_EVENTS_FAKE_EVENTS_SERVICE_FACTORY_H_ + +#include <memory> + +#include "chrome/browser/ash/telemetry_extension/telemetry_event_service_ash.h" +#include "chrome/browser/chromeos/extensions/telemetry/api/events/fake_events_service.h" +#include "chromeos/crosapi/mojom/telemetry_event_service.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" + +namespace chromeos { + +class FakeEventsServiceFactory : public ash::TelemetryEventServiceAsh::Factory { + public: + FakeEventsServiceFactory(); + ~FakeEventsServiceFactory() override; + + void SetCreateInstanceResponse( + std::unique_ptr<FakeEventsService> fake_service); + + protected: + // TelemetryEventServiceAsh::Factory: + std::unique_ptr<crosapi::mojom::TelemetryEventService> CreateInstance( + mojo::PendingReceiver<crosapi::mojom::TelemetryEventService> receiver) + override; + + private: + std::unique_ptr<FakeEventsService> fake_service_; +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_EVENTS_FAKE_EVENTS_SERVICE_FACTORY_H_
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc index 40d6f17..f3769d5 100644 --- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc +++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc
@@ -36,7 +36,7 @@ #include "components/reporting/client/report_queue_impl.h" #include "components/reporting/storage/test_storage_module.h" #include "components/reporting/util/test_support_callbacks.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/browser/device_reauth/mac/device_authenticator_mac.h b/chrome/browser/device_reauth/mac/device_authenticator_mac.h index 807998df..d614aea 100644 --- a/chrome/browser/device_reauth/mac/device_authenticator_mac.h +++ b/chrome/browser/device_reauth/mac/device_authenticator_mac.h
@@ -13,13 +13,9 @@ class AuthenticatorMacInterface; -namespace device { -namespace fido { -namespace mac { +namespace device::fido::mac { class TouchIdContext; -} // namespace mac -} // namespace fido -} // namespace device +} // namespace device::fido::mac class DeviceAuthenticatorMac : public ChromeDeviceAuthenticatorCommon { public:
diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc index fcd107c7..99500134 100644 --- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc +++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
@@ -37,7 +37,7 @@ #include "components/guest_view/browser/guest_view_base.h" #include "components/keep_alive_registry/keep_alive_types.h" #include "components/keep_alive_registry/scoped_keep_alive.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/devtools_agent_host_client_channel.h" #include "content/public/browser/render_frame_host.h"
diff --git a/chrome/browser/devtools/device/android_device_manager.cc b/chrome/browser/devtools/device/android_device_manager.cc index 244260dc..ae52e71 100644 --- a/chrome/browser/devtools/device/android_device_manager.cc +++ b/chrome/browser/devtools/device/android_device_manager.cc
@@ -23,7 +23,7 @@ #include "base/threading/thread.h" #include "chrome/browser/devtools/device/usb/usb_device_manager_helper.h" #include "chrome/browser/devtools/device/usb/usb_device_provider.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "net/base/io_buffer.h" #include "net/base/ip_endpoint.h" #include "net/base/net_errors.h"
diff --git a/chrome/browser/devtools/device/cast_device_provider.cc b/chrome/browser/devtools/device/cast_device_provider.cc index 3497a07..b4c2cc2c 100644 --- a/chrome/browser/devtools/device/cast_device_provider.cc +++ b/chrome/browser/devtools/device/cast_device_provider.cc
@@ -15,7 +15,7 @@ #include "base/strings/string_split.h" #include "base/task/single_thread_task_runner.h" #include "chrome/browser/local_discovery/service_discovery_shared_client.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "net/base/host_port_pair.h" #include "net/base/ip_address.h"
diff --git a/chrome/browser/devtools/devtools_file_system_indexer.cc b/chrome/browser/devtools/devtools_file_system_indexer.cc index 6142232b..8f0defd 100644 --- a/chrome/browser/devtools/devtools_file_system_indexer.cc +++ b/chrome/browser/devtools/devtools_file_system_indexer.cc
@@ -22,7 +22,7 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/task/lazy_thread_pool_task_runner.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/extensions/api/messaging/messaging_apitest.cc b/chrome/browser/extensions/api/messaging/messaging_apitest.cc index 73bc4c31..edb00d3 100644 --- a/chrome/browser/extensions/api/messaging/messaging_apitest.cc +++ b/chrome/browser/extensions/api/messaging/messaging_apitest.cc
@@ -333,13 +333,12 @@ Result CanConnectAndSendMessagesToFrame(content::RenderFrameHost* frame, const Extension* extension, const char* message) { - int result; std::string command = base::StringPrintf( "assertions.canConnectAndSendMessages('%s', %s, %s)", extension->id().c_str(), extension->is_platform_app() ? "true" : "false", message ? base::StringPrintf("'%s'", message).c_str() : "undefined"); - CHECK(content::ExecuteScriptAndExtractInt(frame, command, &result)); + int result = content::EvalJs(frame, command).ExtractInt(); return static_cast<Result>(result); } @@ -1515,13 +1514,8 @@ ASSERT_TRUE(background_host); content::WebContents* background_contents = background_host->host_contents(); ASSERT_TRUE(background_contents); - int message_count = -1; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - background_contents, - "window.domAutomationController.send(window.messageCount);", - &message_count)); // There shouldn't be any messages yet. - EXPECT_EQ(0, message_count); + EXPECT_EQ(0, content::EvalJs(background_contents, "window.messageCount;")); content::WebContentsDestroyedWatcher destroyed_watcher( browser()->tab_strip_model()->GetActiveWebContents()); @@ -1529,11 +1523,7 @@ destroyed_watcher.Wait(); base::RunLoop().RunUntilIdle(); // The extension should have sent a message from its unload handler. - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - background_contents, - "window.domAutomationController.send(window.messageCount);", - &message_count)); - EXPECT_EQ(1, message_count); + EXPECT_EQ(1, content::EvalJs(background_contents, "window.messageCount;")); } // Tests that messages over a certain size are not sent.
diff --git a/chrome/browser/extensions/api/platform_keys/verify_trust_api.cc b/chrome/browser/extensions/api/platform_keys/verify_trust_api.cc index 3d3a2b2..9aba379d 100644 --- a/chrome/browser/extensions/api/platform_keys/verify_trust_api.cc +++ b/chrome/browser/extensions/api/platform_keys/verify_trust_api.cc
@@ -15,7 +15,7 @@ #include "base/memory/ref_counted.h" #include "chrome/browser/extensions/api/platform_keys/platform_keys_api.h" #include "chrome/common/extensions/api/platform_keys_internal.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "extensions/browser/extension_registry_factory.h" #include "net/base/net_errors.h" #include "net/cert/cert_verifier.h"
diff --git a/chrome/browser/extensions/api/runtime/runtime_apitest.cc b/chrome/browser/extensions/api/runtime/runtime_apitest.cc index 011b8612..80b8f3a 100644 --- a/chrome/browser/extensions/api/runtime/runtime_apitest.cc +++ b/chrome/browser/extensions/api/runtime/runtime_apitest.cc
@@ -664,6 +664,13 @@ std::vector<api::runtime::ExtensionContext> GetContextStructs( base::StringPiece filter) { base::Value value = GetContexts(filter); + return ContextValueToContextStructs(value); + } + + // Converts the given `value` into a vector of strongly-typed + // `ExtensionContext`s. Expects the value to properly convert. + std::vector<api::runtime::ExtensionContext> ContextValueToContextStructs( + const base::Value& value) { if (!value.is_list()) { ADD_FAILURE() << "Invalid return value: " << value; return {}; @@ -943,6 +950,193 @@ EXPECT_THAT(background_contexts, base::test::IsJson(expected)); } -// TODO(crbug/1426192): Add tests for popups, incognito, etc. +// Tests the behavior of `runtime.getContexts()` with a split-mode incognito +// extension. In split mode, the extension should only be able to access data +// about its own process's contexts. +IN_PROC_BROWSER_TEST_F(RuntimeGetContextsApiTest, + RetrievingIncognitoContexts_SplitMode) { + // Load up a split-mode extension. + static constexpr char kManifest[] = + R"({ + "name": "Split mode extension", + "version": "0.1", + "manifest_version": 3, + "incognito": "split", + "background": {"service_worker": "background.js"} + })"; + + // Since we need to wait for the incognito profile's separate service worker + // to start, our bootstrapping code in LoadExtension() doesn't automatically + // handle it for us. Include a separate "ready" message. + TestExtensionDir test_dir; + test_dir.WriteManifest(kManifest); + test_dir.WriteFile(FILE_PATH_LITERAL("background.js"), + "chrome.test.sendMessage('ready');"); + test_dir.WriteFile(FILE_PATH_LITERAL("regular.html"), "<html>Regular</html>"); + test_dir.WriteFile(FILE_PATH_LITERAL("incognito.html"), + "<html>Incognito</html>"); + + ExtensionTestMessageListener ready_listener("ready"); + const Extension* extension = + LoadExtension(test_dir.UnpackedPath(), {.allow_in_incognito = true}); + ASSERT_TRUE(extension); + ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); + + // Open a tab on-the-record to one of the extension's pages. + GURL regular_url = extension->GetResourceURL("regular.html"); + content::RenderFrameHost* regular_host = + ui_test_utils::NavigateToURL(browser(), regular_url); + ASSERT_TRUE(regular_host); + + // Open up an incognito tab to another extension page, and wait for the + // incognito version of the extension to start up. + ready_listener.Reset(); + GURL incognito_url = extension->GetResourceURL("incognito.html"); + Browser* incognito_browser = OpenURLOffTheRecord(profile(), incognito_url); + ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); + + // A helper method to retrieve the contexts for the given `profile`. + auto run_get_contexts_in_profile = [extension](Profile* profile) { + static constexpr char kScript[] = + R"((async () => { + chrome.test.sendScriptResult( + await chrome.runtime.getContexts({})); + })();)"; + return BackgroundScriptExecutor::ExecuteScript( + profile, extension->id(), kScript, + BackgroundScriptExecutor::ResultCapture::kSendScriptResult); + }; + + { + // Verify the on-the-record contexts. There should be a single background + // context and the on-the-record tab. + base::Value regular_results = run_get_contexts_in_profile(profile()); + std::vector<api::runtime::ExtensionContext> contexts = + ContextValueToContextStructs(regular_results); + EXPECT_THAT(contexts, testing::UnorderedElementsAre( + GetBackgroundMatcher(), + GetFrameMatcher(api::runtime::CONTEXT_TYPE_TAB, + regular_url))); + } + { + // Now verify the incognito contexts. Here, too, there should be a single + // background context and tab, but it should be the incognito tab. + base::Value incognito_results = + run_get_contexts_in_profile(incognito_browser->profile()); + std::vector<api::runtime::ExtensionContext> contexts = + ContextValueToContextStructs(incognito_results); + EXPECT_THAT(contexts, testing::UnorderedElementsAre( + GetBackgroundMatcher(), + GetFrameMatcher(api::runtime::CONTEXT_TYPE_TAB, + incognito_url))); + } +} + +// Tests the behavior of `runtime.getContexts()` with a spanning-mode incognito +// extension. +IN_PROC_BROWSER_TEST_F(RuntimeGetContextsApiTest, + RetrievingIncognitoContexts_SpanningMode) { + ASSERT_TRUE(StartEmbeddedTestServer()); + + // Load up a spanning mode extension. See comment below for why we have + // a web accessible resource. + static constexpr char kManifest[] = + R"({ + "name": "Split mode extension", + "version": "0.1", + "manifest_version": 3, + "incognito": "spanning", + "web_accessible_resources": [{ + "resources": ["incognito.html"], + "matches": ["*://example.com/*"] + }], + "background": {"service_worker": "background.js"} + })"; + + TestExtensionDir test_dir; + test_dir.WriteManifest(kManifest); + test_dir.WriteFile(FILE_PATH_LITERAL("background.js"), + "// Intentionally blank"); + test_dir.WriteFile(FILE_PATH_LITERAL("regular.html"), "<html>Regular</html>"); + test_dir.WriteFile(FILE_PATH_LITERAL("incognito.html"), + "<html>Incognito</html>"); + + const Extension* extension = + LoadExtension(test_dir.UnpackedPath(), {.allow_in_incognito = true}); + ASSERT_TRUE(extension); + + // Open an on-the-record tab to an extension page. + GURL regular_url = extension->GetResourceURL("regular.html"); + content::RenderFrameHost* regular_host = + ui_test_utils::NavigateToURL(browser(), regular_url); + ASSERT_TRUE(regular_host); + + // Now, the tricky part. Spanning mode extensions aren't, typically, allowed + // to open contexts in an incognito profile (which means all contexts just + // open in the same profile). There's one exception to this: an embedded web- + // accessible iframe in an incognito tab. Make it so. + GURL incognito_url = extension->GetResourceURL("incognito.html"); + Browser* incognito_browser = OpenURLOffTheRecord( + profile(), embedded_test_server()->GetURL("example.com", "/simple.html")); + // Inject a script to add an iframe and navigate it to the extension's + // web-accessible resource. + content::RenderFrameHost* incognito_main_frame = + incognito_browser->tab_strip_model() + ->GetActiveWebContents() + ->GetPrimaryMainFrame(); + static constexpr char kNavigateTemplate[] = + R"(let frame = document.createElement('iframe'); + frame.src = '%s'; + frame.onload = () => { domAutomationController.send('success'); }; + frame.onerror = (e) => { + domAutomationController.send('failure: ' + e.toString()); + }; + document.body.appendChild(frame);)"; + + std::string navigation_result; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + incognito_main_frame, + base::StringPrintf(kNavigateTemplate, incognito_url.spec().c_str()), + &navigation_result)); + EXPECT_EQ("success", navigation_result); + + // Verify the frame loaded properly by checking both the URL and the content. + content::RenderFrameHost* incognito_extension_frame = + content::ChildFrameAt(incognito_main_frame, 0); + ASSERT_TRUE(incognito_extension_frame); + EXPECT_EQ(incognito_url, incognito_extension_frame->GetLastCommittedURL()); + std::string incognito_frame_content; + EXPECT_TRUE(content::ExecuteScriptAndExtractString( + incognito_extension_frame, + "domAutomationController.send(document.body.textContent);", + &incognito_frame_content)); + EXPECT_EQ("Incognito", incognito_frame_content); + + // A helper method to retrieve the contexts for the given `profile`. + auto run_get_contexts_in_profile = [extension](Profile* profile) { + static constexpr char kScript[] = + R"((async () => { + chrome.test.sendScriptResult( + await chrome.runtime.getContexts({})); + })();)"; + return BackgroundScriptExecutor::ExecuteScript( + profile, extension->id(), kScript, + BackgroundScriptExecutor::ResultCapture::kSendScriptResult); + }; + + { + // Verify the results for the on-the-record profile. Since the extension + // is in spanning mode, this is effectively the only instance of the + // extension. It should see the background context and the on-the-record + // tab, but not the embedded frame. + base::Value regular_results = run_get_contexts_in_profile(profile()); + std::vector<api::runtime::ExtensionContext> contexts = + ContextValueToContextStructs(regular_results); + EXPECT_THAT(contexts, testing::UnorderedElementsAre( + GetBackgroundMatcher(), + GetFrameMatcher(api::runtime::CONTEXT_TYPE_TAB, + regular_url))); + } +} } // namespace extensions
diff --git a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc index da69133..b973a5b3 100644 --- a/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc +++ b/chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_api_unittest.cc
@@ -26,7 +26,7 @@ #include "components/password_manager/core/browser/mock_password_store_interface.h" #include "components/password_manager/core/browser/password_manager_test_utils.h" #include "components/sessions/content/session_tab_helper.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_entry.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/web_contents_tester.h"
diff --git a/chrome/browser/extensions/api/side_panel/side_panel_api.cc b/chrome/browser/extensions/api/side_panel/side_panel_api.cc index 1913061..1718b4f 100644 --- a/chrome/browser/extensions/api/side_panel/side_panel_api.cc +++ b/chrome/browser/extensions/api/side_panel/side_panel_api.cc
@@ -53,4 +53,26 @@ return RespondNow(NoArguments()); } +ExtensionFunction::ResponseAction +SidePanelSetPanelBehaviorFunction::RunFunction() { + absl::optional<api::side_panel::SetPanelBehavior::Params> params = + api::side_panel::SetPanelBehavior::Params::Create(args()); + EXTENSION_FUNCTION_VALIDATE(params); + if (params->behavior.open_panel_on_action_click.has_value()) { + GetService()->SetOpenSidePanelOnIconClick( + extension()->id(), *params->behavior.open_panel_on_action_click); + } + + return RespondNow(NoArguments()); +} + +ExtensionFunction::ResponseAction +SidePanelGetPanelBehaviorFunction::RunFunction() { + api::side_panel::PanelBehavior behavior; + behavior.open_panel_on_action_click = + GetService()->GetOpenSidePanelOnIconClick(extension()->id()); + + return RespondNow(WithArguments(behavior.ToValue())); +} + } // namespace extensions
diff --git a/chrome/browser/extensions/api/side_panel/side_panel_api.h b/chrome/browser/extensions/api/side_panel/side_panel_api.h index c2cb6cf..43f7fbe5 100644 --- a/chrome/browser/extensions/api/side_panel/side_panel_api.h +++ b/chrome/browser/extensions/api/side_panel/side_panel_api.h
@@ -48,6 +48,36 @@ ResponseAction RunFunction() override; }; +class SidePanelSetPanelBehaviorFunction : public SidePanelApiFunction { + public: + DECLARE_EXTENSION_FUNCTION("sidePanel.setPanelBehavior", + SIDEPANEL_SETPANELBEHAVIOR) + SidePanelSetPanelBehaviorFunction() = default; + SidePanelSetPanelBehaviorFunction(const SidePanelSetPanelBehaviorFunction&) = + delete; + SidePanelSetPanelBehaviorFunction& operator=( + const SidePanelSetPanelBehaviorFunction&) = delete; + + private: + ~SidePanelSetPanelBehaviorFunction() override = default; + ResponseAction RunFunction() override; +}; + +class SidePanelGetPanelBehaviorFunction : public SidePanelApiFunction { + public: + DECLARE_EXTENSION_FUNCTION("sidePanel.getPanelBehavior", + SIDEPANEL_GETPANELBEHAVIOR) + SidePanelGetPanelBehaviorFunction() = default; + SidePanelGetPanelBehaviorFunction(const SidePanelGetPanelBehaviorFunction&) = + delete; + SidePanelGetPanelBehaviorFunction& operator=( + const SidePanelGetPanelBehaviorFunction&) = delete; + + private: + ~SidePanelGetPanelBehaviorFunction() override = default; + ResponseAction RunFunction() override; +}; + } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_SIDE_PANEL_SIDE_PANEL_API_H_
diff --git a/chrome/browser/extensions/api/side_panel/side_panel_apitest.cc b/chrome/browser/extensions/api/side_panel/side_panel_apitest.cc index 5eb9872..f88208d 100644 --- a/chrome/browser/extensions/api/side_panel/side_panel_apitest.cc +++ b/chrome/browser/extensions/api/side_panel/side_panel_apitest.cc
@@ -41,11 +41,16 @@ ASSERT_TRUE(RunExtensionTest("side_panel/permission_missing")) << message_; } -// Verify chrome.sidePanel.get behavior without side_panel manifest key. +// Verify chrome.sidePanel.getOptions behavior without side_panel manifest key. IN_PROC_BROWSER_TEST_F(SidePanelApiTest, MissingManifestKey) { ASSERT_TRUE(RunExtensionTest("side_panel/missing_manifest_key")) << message_; } +// Verify chrome.sidePanel.get/setPanelBehavior behavior. +IN_PROC_BROWSER_TEST_F(SidePanelApiTest, PanelBehavior) { + ASSERT_TRUE(RunExtensionTest("side_panel/panel_behavior")) << message_; +} + class SidePanelApiWithExtensionTest : public SidePanelApiTest { public: // Load and get extension.
diff --git a/chrome/browser/extensions/api/side_panel/side_panel_service.cc b/chrome/browser/extensions/api/side_panel/side_panel_service.cc index 4a2ccf8..8e31756 100644 --- a/chrome/browser/extensions/api/side_panel/side_panel_service.cc +++ b/chrome/browser/extensions/api/side_panel/side_panel_service.cc
@@ -11,12 +11,20 @@ #include "chrome/common/extensions/api/side_panel.h" #include "chrome/common/extensions/api/side_panel/side_panel_info.h" #include "components/sessions/core/session_id.h" +#include "extensions/browser/extension_prefs.h" +#include "extensions/browser/pref_types.h" #include "third_party/abseil-cpp/absl/types/optional.h" namespace extensions { namespace { +// Key corresponding to whether the extension's side panel entry (if one exists) +// should be opened when its icon is clicked in the toolbar. +constexpr PrefMap kOpenSidePanelOnIconClickPref = { + "open_side_panel_on_icon_click", PrefType::kBool, + PrefScope::kExtensionSpecific}; + api::side_panel::PanelOptions GetPanelOptionsFromManifest( const Extension& extension) { auto path = SidePanelInfo::GetDefaultPath(&extension); @@ -139,6 +147,23 @@ panels_.erase(id); } +bool SidePanelService::GetOpenSidePanelOnIconClick( + const ExtensionId& extension_id) { + bool open_side_panel_on_icon_click = false; + ExtensionPrefs::Get(browser_context_) + ->ReadPrefAsBoolean(extension_id, kOpenSidePanelOnIconClickPref, + &open_side_panel_on_icon_click); + return open_side_panel_on_icon_click; +} + +void SidePanelService::SetOpenSidePanelOnIconClick( + const ExtensionId& extension_id, + bool open_side_panel_on_icon_click) { + ExtensionPrefs::Get(browser_context_) + ->SetBooleanPref(extension_id, kOpenSidePanelOnIconClickPref, + open_side_panel_on_icon_click); +} + void SidePanelService::AddObserver(Observer* observer) { observers_.AddObserver(observer); }
diff --git a/chrome/browser/extensions/api/side_panel/side_panel_service.h b/chrome/browser/extensions/api/side_panel/side_panel_service.h index 3c59543..2e08e32 100644 --- a/chrome/browser/extensions/api/side_panel/side_panel_service.h +++ b/chrome/browser/extensions/api/side_panel/side_panel_service.h
@@ -58,6 +58,15 @@ // Determine if panel options have been set for extension id. Used in tests. bool HasExtensionPanelOptionsForTest(const ExtensionId& id); + // Returns whether the extension will open its side panel entry when its icon + // in the toolbar is clicked. + bool GetOpenSidePanelOnIconClick(const ExtensionId& extension_id); + + // Updates whether the extension will open its side panel entry when its icon + // in the toolbar is clicked. + void SetOpenSidePanelOnIconClick(const ExtensionId& extension_id, + bool open_side_panel_on_icon_click); + // Adds or removes observers. void AddObserver(Observer* observer); void RemoveObserver(Observer* observer);
diff --git a/chrome/browser/extensions/api/terminal/terminal_private_apitest.cc b/chrome/browser/extensions/api/terminal/terminal_private_apitest.cc index 643fc13..65c30446 100644 --- a/chrome/browser/extensions/api/terminal/terminal_private_apitest.cc +++ b/chrome/browser/extensions/api/terminal/terminal_private_apitest.cc
@@ -10,7 +10,7 @@ #include "base/test/bind.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chromeos/process_proxy/process_proxy_registry.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" #include "extensions/common/switches.h"
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc index 68904f2..dfd1bd22 100644 --- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -5695,10 +5695,7 @@ return GetCountFromBackgroundScript(extension, profile(), "secondCount"); }; auto get_third_count = [page_host]() { - int count = -1; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - page_host, "domAutomationController.send(window.thirdCount);", &count)); - return count; + return content::EvalJs(page_host, "window.thirdCount;").ExtractInt(); }; // No listeners should have fired yet. @@ -6111,10 +6108,7 @@ return GetCountFromBackgroundScript(extension, profile(), "eventCount"); }; auto get_page_event_count = [page_host]() { - int count = -1; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - page_host, "domAutomationController.send(self.eventCount);", &count)); - return count; + return content::EvalJs(page_host, "self.eventCount;").ExtractInt(); }; // Stop the extension's service worker. The worker listener should now be
diff --git a/chrome/browser/extensions/content_script_apitest.cc b/chrome/browser/extensions/content_script_apitest.cc index 829605a08..1c1684e 100644 --- a/chrome/browser/extensions/content_script_apitest.cc +++ b/chrome/browser/extensions/content_script_apitest.cc
@@ -581,14 +581,8 @@ }; // Returns the number of stylesheets attached to the document. auto get_style_sheet_count = [&get_active_tab]() { - int count = -1; - constexpr char kGetStyleSheetCount[] = - "domAutomationController.send(document.styleSheets.length);"; - if (!content::ExecuteScriptAndExtractInt(get_active_tab(), - kGetStyleSheetCount, &count)) { - return -1; - } - return count; + constexpr char kGetStyleSheetCount[] = "document.styleSheets.length;"; + return content::EvalJs(get_active_tab(), kGetStyleSheetCount).ExtractInt(); }; // CSS injection should be allowed on an unprivileged web page that matches
diff --git a/chrome/browser/extensions/extension_bindings_apitest.cc b/chrome/browser/extensions/extension_bindings_apitest.cc index 92e0576..325ad39 100644 --- a/chrome/browser/extensions/extension_bindings_apitest.cc +++ b/chrome/browser/extensions/extension_bindings_apitest.cc
@@ -313,13 +313,11 @@ // then ask |receiver| for the total message count. It should be 1 since // |receiver| should not have received any impersonated messages. sender_ready.Reply(receiver->id()); - int message_count = 0; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - ProcessManager::Get(profile()) - ->GetBackgroundHostForExtension(receiver->id()) - ->host_contents(), - "getMessageCountAfterReceivingRealSenderMessage()", &message_count)); - EXPECT_EQ(1, message_count); + EXPECT_EQ( + 1, content::EvalJs(ProcessManager::Get(profile()) + ->GetBackgroundHostForExtension(receiver->id()) + ->host_contents(), + "getMessageCountAfterReceivingRealSenderMessage()")); } IN_PROC_BROWSER_TEST_F(ExtensionBindingsApiTest, TestFreezingChrome) { @@ -592,10 +590,8 @@ // The extension should have been notified about the new tab, and have // recorded the result. - int result_tab_id = -1; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - first_tab, "domAutomationController.send(window.tabEventId)", - &result_tab_id)); + int result_tab_id = + content::EvalJs(first_tab, "window.tabEventId").ExtractInt(); EXPECT_EQ(sessions::SessionTabHelper::IdForTab(new_tab).id(), result_tab_id); }
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index 7723d57..a348905 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -107,7 +107,7 @@ #include "components/sync/model/string_ordinal.h" #include "components/sync_preferences/pref_service_syncable.h" #include "components/sync_preferences/testing_pref_service_syncable.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/dom_storage_context.h" #include "content/public/browser/gpu_data_manager.h" #include "content/public/browser/notification_service.h"
diff --git a/chrome/browser/extensions/extension_webui_apitest.cc b/chrome/browser/extensions/extension_webui_apitest.cc index e6c9192..24f4017 100644 --- a/chrome/browser/extensions/extension_webui_apitest.cc +++ b/chrome/browser/extensions/extension_webui_apitest.cc
@@ -259,23 +259,15 @@ &set_result)); ASSERT_EQ("success", set_result); - int actual_value = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - guest_rfh, - content::JsReplace("chrome.storage.local.get((storage) => {" - " domAutomationController.send(storage[$1]);" - "});", - storage_key), - &actual_value)); - EXPECT_EQ(storage_value, actual_value); + EXPECT_EQ( + storage_value, + content::EvalJs(guest_rfh, content::JsReplace( + "new Promise(resolve =>" + " chrome.storage.local.get((storage) => " + " resolve(storage[$1])));", + storage_key))); - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - guest_rfh, - "onChangedPromise.then((newValue) => {" - " domAutomationController.send(newValue);" - "});", - &actual_value)); - EXPECT_EQ(storage_value, actual_value); + EXPECT_EQ(storage_value, content::EvalJs(guest_rfh, "onChangedPromise;")); } IN_PROC_BROWSER_TEST_F(ExtensionWebUIEmbeddedOptionsTest,
diff --git a/chrome/browser/extensions/test_resources_browsertest.cc b/chrome/browser/extensions/test_resources_browsertest.cc index dd0e363..036cd91 100644 --- a/chrome/browser/extensions/test_resources_browsertest.cc +++ b/chrome/browser/extensions/test_resources_browsertest.cc
@@ -35,18 +35,10 @@ // Returns the value of window.injectedSentinel from the active web contents of // |browser|. -absl::optional<int> RetrieveSentinelValue(Browser* browser) { - int result = 0; +int RetrieveSentinelValue(Browser* browser) { content::WebContents* web_contents = browser->tab_strip_model()->GetActiveWebContents(); - if (!content::ExecuteScriptAndExtractInt( - web_contents, - "domAutomationController.send(window.injectedSentinel);", &result)) { - ADD_FAILURE() << "Failed to execute script."; - return absl::nullopt; - } - - return result; + return content::EvalJs(web_contents, "window.injectedSentinel;").ExtractInt(); } class ExtensionBrowserTestWithCustomTestResourcesLocation @@ -96,9 +88,7 @@ ASSERT_TRUE(ui_test_utils::NavigateToURL( browser(), extension->GetResourceURL("page.html"))); - absl::optional<int> sentinel = RetrieveSentinelValue(browser()); - ASSERT_TRUE(sentinel); - EXPECT_EQ(kSentinelValue, *sentinel); + EXPECT_EQ(kSentinelValue, RetrieveSentinelValue(browser())); } // Tests that resources from _test_resources work in component extensions @@ -131,9 +121,7 @@ ASSERT_TRUE(ui_test_utils::NavigateToURL( browser(), extension->GetResourceURL("page.html"))); - absl::optional<int> sentinel = RetrieveSentinelValue(browser()); - ASSERT_TRUE(sentinel); - EXPECT_EQ(kSentinelValue, *sentinel); + EXPECT_EQ(kSentinelValue, RetrieveSentinelValue(browser())); } IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, @@ -217,9 +205,7 @@ ASSERT_TRUE(ui_test_utils::NavigateToURL( browser(), extension->GetResourceURL("page.html"))); - absl::optional<int> sentinel = RetrieveSentinelValue(browser()); - ASSERT_TRUE(sentinel); - EXPECT_EQ(kSentinelValue, *sentinel); + EXPECT_EQ(kSentinelValue, RetrieveSentinelValue(browser())); } } // namespace extensions
diff --git a/chrome/browser/extensions/view_extension_source_browsertest.cc b/chrome/browser/extensions/view_extension_source_browsertest.cc index 50630b5a..2c30969 100644 --- a/chrome/browser/extensions/view_extension_source_browsertest.cc +++ b/chrome/browser/extensions/view_extension_source_browsertest.cc
@@ -89,12 +89,7 @@ // Verify that the view-source content is not empty, and that the // renderer-side URL is correct. - int view_source_length; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - view_source_tab, - "domAutomationController.send(document.body.innerText.length)", - &view_source_length)); - EXPECT_GT(view_source_length, 0); + EXPECT_GT(EvalJs(view_source_tab, "document.body.innerText.length"), 0); std::string location; EXPECT_TRUE(ExecuteScriptAndExtractString(
diff --git a/chrome/browser/feedback/android/process_id_feedback_source.cc b/chrome/browser/feedback/android/process_id_feedback_source.cc index 882a0c1..85df41e9 100644 --- a/chrome/browser/feedback/android/process_id_feedback_source.cc +++ b/chrome/browser/feedback/android/process_id_feedback_source.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/feedback/android/process_id_feedback_source.h" #include "chrome/browser/feedback/android/jni_headers/ProcessIdFeedbackSource_jni.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "base/android/jni_array.h" #include "base/functional/bind.h"
diff --git a/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc b/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc index bcb4d42..da87978 100644 --- a/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc +++ b/chrome/browser/feedback/system_logs/log_sources/crash_ids_source.cc
@@ -16,7 +16,7 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) #include "chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #endif namespace system_logs {
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index dcbf2c96..d2feed04 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -469,6 +469,11 @@ "expiry_milestone": 113 }, { + "name": "autofill-account-profiles-storage", + "owners": [ "vidhanj", "koerber" ], + "expiry_milestone": 120 + }, + { "name": "autofill-account-profiles-union-view", "owners": [ "vidhanj", "koerber" ], "expiry_milestone": 120 @@ -3025,6 +3030,14 @@ "expiry_milestone": 115 }, { + "name": "enable-proto-api-for-classify-url", + "owners": [ + "tju@google.com", + "chrome-kids-eng@google.com" + ], + "expiry_milestone": 117 + }, + { "name": "enable-pwas-default-offline-page", "owners": [ "finnur@google.com", "beverloo@google.com" ], "expiry_milestone": 120 @@ -5883,11 +5896,6 @@ "expiry_milestone": 115 }, { - "name": "page-info-about-this-site-non-msbb", - "owners": [ "dullweber", "fsenra@google.com" ], - "expiry_milestone": 115 - }, - { "name": "page-info-cookies-subpage", "owners": [ "zsalata@google.com", "olesiamarukhno@google.com", "dullweber" ], "expiry_milestone": 115
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 3e74f46..ccd10fa 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2539,11 +2539,6 @@ "Enable the 'About this site' section in the page info UI in languages " "other than English."; -const char kPageInfoAboutThisSiteNonMsbbName[] = - "'About this site' for non-MSBB users"; -const char kPageInfoAboutThisSiteNonMsbbDescription[] = - "Make 'About this site' section in Page Info available for non-MSBB users."; - const char kPageInfoboutThisPageDescriptionPlaceholderName[] = "AboutThisPage description placeholder"; const char kPageInfoboutThisPageDescriptionPlaceholderDescription[] = @@ -6705,6 +6700,14 @@ "refresh needs to also be enabled."; #endif +#if BUILDFLAG(ENABLE_SUPERVISED_USERS) +const char kEnableProtoApiForClassifyUrlName[] = + "Enable Proto API for Classify URL"; +const char kEnableProtoApiForClassifyUrlDescription[] = + "Calls to Classify URL RPC will use Protocol Buffer format in resposnes, " + "instead of JSON."; +#endif + #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) const char kUseOutOfProcessVideoDecodingName[] = "Use out-of-process video decoding (OOP-VD)";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index d76fe08..4593d21 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1424,9 +1424,6 @@ extern const char kPageInfoAboutThisSiteNonEnName[]; extern const char kPageInfoAboutThisSiteNonEnDescription[]; -extern const char kPageInfoAboutThisSiteNonMsbbName[]; -extern const char kPageInfoAboutThisSiteNonMsbbDescription[]; - extern const char kPageInfoboutThisPageDescriptionPlaceholderName[]; extern const char kPageInfoboutThisPageDescriptionPlaceholderDescription[]; @@ -3907,6 +3904,11 @@ extern const char kLocalWebApprovalsDescription[]; #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_SUPERVISED_USERS) +extern const char kEnableProtoApiForClassifyUrlName[]; +extern const char kEnableProtoApiForClassifyUrlDescription[]; +#endif // BUILDFLAG(ENABLE_SUPERVISED_USERS) + #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) extern const char kUseOutOfProcessVideoDecodingName[]; extern const char kUseOutOfProcessVideoDecodingDescription[];
diff --git a/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthCoordinatorBase.java b/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthCoordinatorBase.java index b2d85c88..f903f73 100644 --- a/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthCoordinatorBase.java +++ b/chrome/browser/incognito/android/java/src/org/chromium/chrome/browser/incognito/reauth/IncognitoReauthCoordinatorBase.java
@@ -98,6 +98,15 @@ mIncognitoReauthView = LayoutInflater.from(mContext).inflate( R.layout.incognito_reauth_view, /*root=*/null); + // When the re-auth view is shown, then own all the on touch events happening on it. + // This prevents the touch event to propagate to other children when our re-auth view + // is part of a ViewGroup when shown inside tab-switcher. + mIncognitoReauthView.setOnTouchListener((view, motionEvent) -> { + // Consume the click event. + view.performClick(); + return true; + }); + assert mPropertyModel == null : "Property model must not be reused."; mPropertyModel = createPropertyModel(mIncognitoReauthMediator::onUnlockIncognitoButtonClicked,
diff --git a/chrome/browser/interstitials/security_interstitial_page_test_utils.cc b/chrome/browser/interstitials/security_interstitial_page_test_utils.cc index bfa761e..639c1df 100644 --- a/chrome/browser/interstitials/security_interstitial_page_test_utils.cc +++ b/chrome/browser/interstitials/security_interstitial_page_test_utils.cc
@@ -22,26 +22,21 @@ DCHECK(text.find("\'") == std::string::npos); std::string command = base::StringPrintf( "var hasText = document.body.textContent.indexOf('%s') >= 0;" - "window.domAutomationController.send(hasText ? %d : %d);", + "hasText ? %d : %d;", text.c_str(), security_interstitials::CMD_TEXT_FOUND, security_interstitials::CMD_TEXT_NOT_FOUND); - int result = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt(interstitial_frame, command, - &result)); - return result == security_interstitials::CMD_TEXT_FOUND; + return content::EvalJs(interstitial_frame, command).ExtractInt() == + security_interstitials::CMD_TEXT_FOUND; } bool InterstitialHasProceedLink(content::RenderFrameHost* interstitial_frame) { - int result = security_interstitials::CMD_ERROR; const std::string javascript = base::StringPrintf( - "domAutomationController.send(" - "(document.querySelector(\"#proceed-link\") === null) " - "? (%d) : (%d))", + "document.querySelector(\"#proceed-link\") === null " + "? %d : %d", security_interstitials::CMD_TEXT_NOT_FOUND, security_interstitials::CMD_TEXT_FOUND); - EXPECT_TRUE(content::ExecuteScriptAndExtractInt(interstitial_frame, - javascript, &result)); - return result == security_interstitials::CMD_TEXT_FOUND; + return content::EvalJs(interstitial_frame, javascript).ExtractInt() == + security_interstitials::CMD_TEXT_FOUND; } bool IsShowingInterstitial(content::WebContents* tab) {
diff --git a/chrome/browser/lacros/cert/cert_db_initializer_browsertest.cc b/chrome/browser/lacros/cert/cert_db_initializer_browsertest.cc index dcbf3390..5566c8d 100644 --- a/chrome/browser/lacros/cert/cert_db_initializer_browsertest.cc +++ b/chrome/browser/lacros/cert/cert_db_initializer_browsertest.cc
@@ -21,7 +21,7 @@ #include "chromeos/lacros/lacros_service.h" #include "chromeos/lacros/lacros_test_helper.h" #include "components/version_info/version_info.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "content/public/test/browser_test.h" #include "net/cert/cert_database.h"
diff --git a/chrome/browser/lacros/keystore_service_lacros_browsertest.cc b/chrome/browser/lacros/keystore_service_lacros_browsertest.cc index a132a6f..3e2eccd 100644 --- a/chrome/browser/lacros/keystore_service_lacros_browsertest.cc +++ b/chrome/browser/lacros/keystore_service_lacros_browsertest.cc
@@ -18,7 +18,7 @@ #include "chromeos/crosapi/mojom/keystore_service.mojom-test-utils.h" #include "chromeos/crosapi/mojom/keystore_service.mojom.h" #include "chromeos/lacros/lacros_service.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" #include "net/cert/nss_cert_database.h" #include "net/cert/scoped_nss_types.h"
diff --git a/chrome/browser/media/cast_mirroring_service_host_browsertest.cc b/chrome/browser/media/cast_mirroring_service_host_browsertest.cc index f0771be2..6fe56b6 100644 --- a/chrome/browser/media/cast_mirroring_service_host_browsertest.cc +++ b/chrome/browser/media/cast_mirroring_service_host_browsertest.cc
@@ -24,7 +24,7 @@ #include "components/mirroring/mojom/session_observer.mojom.h" #include "components/mirroring/mojom/session_parameters.mojom.h" #include "components/prefs/pref_service.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/media/encrypted_media_browsertest.cc b/chrome/browser/media/encrypted_media_browsertest.cc index 52cdd46..a6d29a6 100644 --- a/chrome/browser/media/encrypted_media_browsertest.cc +++ b/chrome/browser/media/encrypted_media_browsertest.cc
@@ -852,17 +852,12 @@ IN_PROC_BROWSER_TEST_P(ECKEncryptedMediaTest, MAYBE_MessageTypeTest) { TestPlaybackCase(media::kExternalClearKeyMessageTypeTestKeySystem, kNoSessionToLoad, media::kEndedTitle); - - int num_received_message_types = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - browser()->tab_strip_model()->GetActiveWebContents(), - "window.domAutomationController.send(" - "document.querySelector('video').receivedMessageTypes.size);", - &num_received_message_types)); - // Expects 3 message types: 'license-request', 'license-renewal' and // 'individualization-request'. - EXPECT_EQ(3, num_received_message_types); + EXPECT_EQ(3, + content::EvalJs( + browser()->tab_strip_model()->GetActiveWebContents(), + "document.querySelector('video').receivedMessageTypes.size;")); } IN_PROC_BROWSER_TEST_P(ECKEncryptedMediaTest, LoadPersistentLicense) { @@ -1014,22 +1009,6 @@ // and H264 is always supported. class MediaFoundationEncryptedMediaTest : public EncryptedMediaTestBase { public: - void SetUp() override { - EncryptedMediaTestBase::SetUp(); - - // Run test only if the test machine supports MediaFoundation playback. - // Otherwise, NotSupportedError is expected. - if (!media::SupportMediaFoundationEncryptedPlayback()) { - auto os_version = static_cast<int>(base::win::GetVersion()); - DLOG(INFO) << "os_version=" << os_version; - GTEST_SKIP() - << "Test method " - << ::testing::UnitTest::GetInstance()->current_test_info()->name() - << " is inconclusive since MediaFoundation " - "playback is not supported."; - } - } - void TestLicenseExchange(const std::string& encrypted_media) { // Skip the playback since we test the EME parts only. RunSimpleEncryptedMediaTest(encrypted_media, @@ -1043,20 +1022,54 @@ SetUpCommandLineForKeySystem(media::kMediaFoundationClearKeyKeySystem, command_line); } + + bool IsMediaFoundationEncryptedPlaybackSupported() { + static bool is_mediafoundation_encrypted_playback_supported = + media::SupportMediaFoundationEncryptedPlayback(); + DLOG(INFO) << "is_mediafoundation_encrypted_playback_supported=" + << is_mediafoundation_encrypted_playback_supported; + + // Run test only if the test machine supports MediaFoundation playback. + // Otherwise, NotSupportedError is expected. + if (!is_mediafoundation_encrypted_playback_supported) { + // if (!is_mediafoundation_encrypted_playback_supported) { + auto os_version = static_cast<int>(base::win::GetVersion()); + DLOG(WARNING) + << "Test method " + << ::testing::UnitTest::GetInstance()->current_test_info()->name() + << " is inconclusive since MediaFoundation " + "playback is not supported. " + << "os_version=" << os_version; + } + + return is_mediafoundation_encrypted_playback_supported; + } }; IN_PROC_BROWSER_TEST_F(MediaFoundationEncryptedMediaTest, Playback_ClearLeadEncryptedCencVideo_Success) { + if (!IsMediaFoundationEncryptedPlaybackSupported()) { + GTEST_SKIP(); + } + TestLicenseExchange("bear-640x360-v_frag-cenc.mp4"); // H.264 } IN_PROC_BROWSER_TEST_F(MediaFoundationEncryptedMediaTest, Playback_ClearLeadEncryptedCbcsVideo_Success) { + if (!IsMediaFoundationEncryptedPlaybackSupported()) { + GTEST_SKIP(); + } + TestLicenseExchange("bear-640x360-v_frag-cbcs.mp4"); // H.264 } IN_PROC_BROWSER_TEST_F(MediaFoundationEncryptedMediaTest, Playback_EncryptedAudioCbcs_MediaTypeUnsupported) { + if (!IsMediaFoundationEncryptedPlaybackSupported()) { + GTEST_SKIP(); + } + // MediaFoundation Clear Key Key System supports only H.264 videos // (codecs=avc1.64001E). See AddMediaFoundationClearKey() in // components/cdm/renderer/key_system_support_update.cc
diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_browsertest.cc b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_browsertest.cc index 2b20f49..f4fa53e 100644 --- a/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_browsertest.cc +++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service_browsertest.cc
@@ -8,7 +8,7 @@ #include "chrome/browser/media/router/discovery/access_code/access_code_media_sink_util.h" #include "chrome/browser/media/router/discovery/access_code/access_code_test_util.h" #include "components/sessions/content/session_tab_helper.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "testing/gtest/include/gtest/gtest.h" using testing::_;
diff --git a/chrome/browser/media/router/logger_list.cc b/chrome/browser/media/router/logger_list.cc index acc7d31..884362c 100644 --- a/chrome/browser/media/router/logger_list.cc +++ b/chrome/browser/media/router/logger_list.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/media/router/logger_list.h" #include "base/task/sequenced_task_runner.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" namespace media_router {
diff --git a/chrome/browser/media/router/providers/cast/mirroring_activity.cc b/chrome/browser/media/router/providers/cast/mirroring_activity.cc index ddc9f32f..b8fcecd 100644 --- a/chrome/browser/media/router/providers/cast/mirroring_activity.cc +++ b/chrome/browser/media/router/providers/cast/mirroring_activity.cc
@@ -38,7 +38,7 @@ #include "components/media_router/common/providers/cast/channel/enum_table.h" #include "components/media_router/common/route_request_result.h" #include "components/mirroring/mojom/session_parameters.mojom.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "media/base/media_switches.h" #include "media/cast/constants.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/chrome/browser/media/webrtc/webrtc_desktop_capture_browsertest.cc b/chrome/browser/media/webrtc/webrtc_desktop_capture_browsertest.cc index 78a9a6c6..2e15ea60 100644 --- a/chrome/browser/media/webrtc/webrtc_desktop_capture_browsertest.cc +++ b/chrome/browser/media/webrtc/webrtc_desktop_capture_browsertest.cc
@@ -32,7 +32,7 @@ #include "components/infobars/core/confirm_infobar_delegate.h" #include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_switches.h" #include "content/public/test/browser_test.h"
diff --git a/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc b/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc index 31f1ee04..eca7c00 100644 --- a/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc +++ b/chrome/browser/media_galleries/chromeos/mtp_device_delegate_impl_chromeos.cc
@@ -30,7 +30,7 @@ #include "chrome/browser/media_galleries/chromeos/mtp_device_task_helper_map_service.h" #include "chrome/browser/media_galleries/chromeos/snapshot_file_details.h" #include "components/services/filesystem/public/mojom/types.mojom.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "net/base/io_buffer.h" #include "third_party/cros_system_api/dbus/service_constants.h"
diff --git a/chrome/browser/metrics/perf/metric_collector_unittest.cc b/chrome/browser/metrics/perf/metric_collector_unittest.cc index 9b683ed..23b81f7 100644 --- a/chrome/browser/metrics/perf/metric_collector_unittest.cc +++ b/chrome/browser/metrics/perf/metric_collector_unittest.cc
@@ -14,7 +14,7 @@ #include "base/memory/scoped_refptr.h" #include "base/test/bind.h" #include "base/test/metrics/histogram_tester.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/sampled_profile.pb.h"
diff --git a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc index 8b1a67e7..5091c69 100644 --- a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc +++ b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
@@ -26,7 +26,7 @@ #include "chrome/browser/metrics/perf/cpu_identity.h" #include "chrome/browser/metrics/perf/windowed_incognito_observer.h" #include "components/variations/variations_associated_data.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/sampled_profile.pb.h"
diff --git a/chrome/browser/metrics/pressure/pressure_metrics_unittest.cc b/chrome/browser/metrics/pressure/pressure_metrics_unittest.cc index 0c204c2b..173422c8 100644 --- a/chrome/browser/metrics/pressure/pressure_metrics_unittest.cc +++ b/chrome/browser/metrics/pressure/pressure_metrics_unittest.cc
@@ -8,7 +8,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/test/metrics/histogram_tester.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc b/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc index e688ce6..acd03bb3 100644 --- a/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc +++ b/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc
@@ -19,7 +19,7 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/network_service_instance.h" #include "content/public/common/content_features.h"
diff --git a/chrome/browser/net/network_quality_estimator_prefs_browsertest.cc b/chrome/browser/net/network_quality_estimator_prefs_browsertest.cc index df60668..fd1e0a6 100644 --- a/chrome/browser/net/network_quality_estimator_prefs_browsertest.cc +++ b/chrome/browser/net/network_quality_estimator_prefs_browsertest.cc
@@ -31,7 +31,7 @@ #include "components/prefs/json_pref_store.h" #include "components/prefs/pref_service.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/network_service_util.h"
diff --git a/chrome/browser/net/trial_comparison_cert_verifier_controller_unittest.cc b/chrome/browser/net/trial_comparison_cert_verifier_controller_unittest.cc index ffe2d91d..770bd9e6 100644 --- a/chrome/browser/net/trial_comparison_cert_verifier_controller_unittest.cc +++ b/chrome/browser/net/trial_comparison_cert_verifier_controller_unittest.cc
@@ -23,7 +23,7 @@ #include "components/safe_browsing/core/common/safe_browsing_prefs.h" #include "components/security_interstitials/content/cert_logger.pb.h" #include "components/sync_preferences/testing_pref_service_syncable.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_utils.h" #include "mojo/public/cpp/bindings/receiver.h"
diff --git a/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc b/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc index 7ac8821..8ffaa8a 100644 --- a/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc +++ b/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc
@@ -52,7 +52,7 @@ #include "components/site_engagement/content/site_engagement_service.h" #include "components/ukm/test_ukm_recorder.h" #include "components/variations/hashing.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_base.h" #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/page_annotations/DIR_METADATA b/chrome/browser/page_annotations/DIR_METADATA deleted file mode 100644 index a05e831..0000000 --- a/chrome/browser/page_annotations/DIR_METADATA +++ /dev/null
@@ -1,4 +0,0 @@ -monorail { - component: "UI>Browser>Shopping" -} -os: ANDROID
diff --git a/chrome/browser/page_annotations/OWNERS b/chrome/browser/page_annotations/OWNERS deleted file mode 100644 index d0ed117..0000000 --- a/chrome/browser/page_annotations/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -file://chrome/browser/persisted_state_db/OWNERS
diff --git a/chrome/browser/page_annotations/README b/chrome/browser/page_annotations/README deleted file mode 100644 index 8ce6eb94..0000000 --- a/chrome/browser/page_annotations/README +++ /dev/null
@@ -1,6 +0,0 @@ -This directory stores files related to Chrome's Page Annotations Service. - -Page Annotations Service is a URL-to-metadata mapping service where the metadata -(aka annotations) can be generated on either the client or the server side. The -service abstracts the details of the data acquisition and maintenance and -exposes a simple URL lookup interface for consumers.
diff --git a/chrome/browser/page_annotations/android/BUILD.gn b/chrome/browser/page_annotations/android/BUILD.gn deleted file mode 100644 index fb9616a..0000000 --- a/chrome/browser/page_annotations/android/BUILD.gn +++ /dev/null
@@ -1,31 +0,0 @@ -# Copyright 2020 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/android/rules.gni") - -android_library("java") { - sources = [ - "java/src/org/chromium/chrome/browser/page_annotations/BuyableProductPageAnnotation.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotation.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationUtils.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsService.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceConfig.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceFactory.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceProxy.java", - "java/src/org/chromium/chrome/browser/page_annotations/ProductPriceUpdatePageAnnotation.java", - "java/src/org/chromium/chrome/browser/page_annotations/SinglePageAnnotationsServiceResponse.java", - ] - - deps = [ - "//base:base_java", - "//build/android:build_java", - "//chrome/browser/endpoint_fetcher:java", - "//chrome/browser/flags:java", - "//chrome/browser/profiles/android:java", - "//components/embedder_support/android:util_java", - "//net/android:net_java", - "//third_party/androidx:androidx_annotation_annotation_java", - "//url:gurl_java", - ] -}
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/BuyableProductPageAnnotation.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/BuyableProductPageAnnotation.java deleted file mode 100644 index a909c8a..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/BuyableProductPageAnnotation.java +++ /dev/null
@@ -1,89 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.json.JSONException; -import org.json.JSONObject; - -import org.chromium.base.Log; -import org.chromium.build.annotations.DoNotClassMerge; - -import java.util.Locale; - -/** - * {@link PageAnnotation} for products in a page. - * - * This class should not be merged because it is being used as a key in a Map - * in PageAnnotationUtils.java. - */ -@DoNotClassMerge -public class BuyableProductPageAnnotation extends PageAnnotation { - private static final String TAG = "BPPA"; - private static final String BUYABLE_PRODUCT_KEY = "buyableProduct"; - private static final String CURRENT_PRICE_KEY = "currentPrice"; - private static final String CURRENCY_CODE_KEY = "currencyCode"; - private static final String AMOUNT_MICROS_KEY = "amountMicros"; - private static final String OFFER_ID_KEY = "offerId"; - - private final long mPriceMicros; - private final String mCurrencyCode; - private final String mOfferId; - - /** Creates a new instance. */ - public BuyableProductPageAnnotation(long priceMicros, String currencyCode, String offerId) { - super(PageAnnotationType.BUYABLE_PRODUCT); - mPriceMicros = priceMicros; - mCurrencyCode = currencyCode; - mOfferId = offerId; - } - - /** Gets the current price amount in micros. */ - public long getCurrentPriceMicros() { - return mPriceMicros; - } - - /** Gets the currency code used for the price. */ - public String getCurrencyCode() { - return mCurrencyCode; - } - - /** Gets the offer id. */ - public String getOfferId() { - return mOfferId; - } - - /** Creates a new {@link BuyableProductPageAnnotation} from a {@link JSONObject}. */ - public static BuyableProductPageAnnotation fromJson(JSONObject object) { - try { - JSONObject metadata = object.getJSONObject(BUYABLE_PRODUCT_KEY); - JSONObject priceMetadata = metadata.getJSONObject(CURRENT_PRICE_KEY); - if (priceMetadata == null || !priceMetadata.has(AMOUNT_MICROS_KEY) - || priceMetadata.isNull(AMOUNT_MICROS_KEY)) { - Log.i(TAG, String.format(Locale.US, "Invalid price info.")); - return null; - } - - Long priceAmountMicros = - PageAnnotationUtils.safeParseLong(priceMetadata.getString(AMOUNT_MICROS_KEY)); - - if (priceAmountMicros == null) { - Log.i(TAG, String.format(Locale.US, "Invalid price micros.")); - return null; - } - - return new BuyableProductPageAnnotation(priceAmountMicros, - priceMetadata.getString(CURRENCY_CODE_KEY), metadata.getString(OFFER_ID_KEY)); - } catch (JSONException e) { - Log.i(TAG, - String.format(Locale.US, - "There was a problem parsing " - + "BuyableProductPageAnnotation " - + "Details: %s", - e.toString())); - } - - return null; - } -}
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotation.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotation.java deleted file mode 100644 index a915e4a..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotation.java +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import androidx.annotation.StringDef; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** - * Base class for all page annotations. - */ -public abstract class PageAnnotation { - private final @PageAnnotationType String mAnnotationType; - - /** - * Enumerates the various types of {@link PageAnnotation} subclasses. - */ - @StringDef({PageAnnotationType.UNKNOWN, PageAnnotationType.BUYABLE_PRODUCT, - PageAnnotationType.PRODUCT_PRICE_UPDATE}) - @Retention(RetentionPolicy.SOURCE) - public @interface PageAnnotationType { - String UNKNOWN = "UNKNOWN"; - String BUYABLE_PRODUCT = "BUYABLE_PRODUCT"; - String PRODUCT_PRICE_UPDATE = "PRODUCT_PRICE_UPDATE"; - } - - /** Creates a new instance. */ - PageAnnotation(@PageAnnotationType String type) { - mAnnotationType = type; - } - - /** Gets the annotation type. */ - @PageAnnotationType - String getType() { - return mAnnotationType; - } -}
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationUtils.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationUtils.java deleted file mode 100644 index f4babb8..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationUtils.java +++ /dev/null
@@ -1,103 +0,0 @@ -// Copyright 2019 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.json.JSONException; -import org.json.JSONObject; - -import org.chromium.base.Log; -import org.chromium.chrome.browser.page_annotations.PageAnnotation.PageAnnotationType; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -/** - * A collection of helper functions for dealing with {@link PageAnnotation} instances. - */ -public class PageAnnotationUtils { - private static final String TAG = "PAU"; - private static final String TYPE_KEY = "type"; - - private static final Map<Class<? extends PageAnnotation>, String> CLASS_TO_TYPE_MAP = - new LinkedHashMap<Class<? extends PageAnnotation>, String>() { - { put(BuyableProductPageAnnotation.class, PageAnnotationType.BUYABLE_PRODUCT); } - { - put(ProductPriceUpdatePageAnnotation.class, - PageAnnotationType.PRODUCT_PRICE_UPDATE); - } - }; - - /** - * Creates a {@link PageAnnotation} object from the provided {@link JSONObject}. - */ - public static PageAnnotation createPageAnnotationFromJson(JSONObject json) { - try { - @PageAnnotationType - String type = json.getString(TYPE_KEY); - if (type == null) { - type = PageAnnotationType.UNKNOWN; - } - - switch (type) { - case PageAnnotationType.BUYABLE_PRODUCT: { - return BuyableProductPageAnnotation.fromJson(json); - } - - case PageAnnotationType.PRODUCT_PRICE_UPDATE: { - return ProductPriceUpdatePageAnnotation.fromJson(json); - } - - case PageAnnotationType.UNKNOWN: - default: - break; - } - - } catch (JSONException e) { - Log.i(TAG, - String.format(Locale.US, - "Failed to parse PageAnnotation." - + "Details: %s", - e.toString())); - } - - return null; - } - - /** - * @return the first {@link PageAnnotation} object that matches the provided - * type from a list of generic {@link PageAnnotation} objects - */ - public static <T extends PageAnnotation> T getAnnotation( - List<PageAnnotation> annotations, Class<T> clazz) { - if (annotations == null || annotations.size() == 0) { - return null; - } - - @PageAnnotationType - String targetType = CLASS_TO_TYPE_MAP.get(clazz); - if (targetType == null) { - return null; - } - - for (PageAnnotation annotation : annotations) { - if (targetType.equals(annotation.getType())) { - return (T) annotation; - } - } - - return null; - } - - /** @return a {@link Long} from the provided string or null in case of an unprasable input. */ - static Long safeParseLong(String number) { - try { - return Long.parseLong(number); - } catch (NumberFormatException e) { - return null; - } - } -}
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsService.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsService.java deleted file mode 100644 index 809a227..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsService.java +++ /dev/null
@@ -1,52 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.chromium.base.Callback; -import org.chromium.url.GURL; - -import java.util.LinkedList; -import java.util.List; - -/** - * Responsible for fetching and aggregating {@link PageAnnotation}s from the - * registered data sources. - */ -public class PageAnnotationsService { - private final PageAnnotationsServiceProxy mServiceProxy; - - /** - * Creates a new instance. - * - * @param serviceProxy {@link PageAnnotationsServiceProxy} instance to be used - * when fetching from the server. - */ - PageAnnotationsService(PageAnnotationsServiceProxy serviceProxy) { - mServiceProxy = serviceProxy; - } - - /** - * Fetches all {@link PageAnnotation}s for the provided URL. The caller of this - * method is expected to cast the {@link PageAnnotation} instances to their - * specific subclasses based on their types. See - * {@link PageAnnotationUtils#getAnnotation}. - * - * @param url The URL to annotate. - * @param callback Invoked when the fetch is complete. - */ - public void getAnnotations(GURL url, Callback<List<PageAnnotation>> callback) { - if (url == null || url.isEmpty()) { - callback.onResult(new LinkedList<PageAnnotation>()); - return; - } - - // TODO(crbug.com/1169545): Return cached annotations if possible. - mServiceProxy.fetchAnnotations(url, (response) -> { - // TODO(crbug.com/1169545): Cache annotations on the client. - callback.onResult(response == null ? new LinkedList<PageAnnotation>() - : response.getAnnotations()); - }); - } -} \ No newline at end of file
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceConfig.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceConfig.java deleted file mode 100644 index cf1804a..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceConfig.java +++ /dev/null
@@ -1,18 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.chromium.chrome.browser.flags.ChromeFeatureList; -import org.chromium.chrome.browser.flags.StringCachedFieldTrialParameter; - -/** Flag configuration for Page Annotations Service. */ -public class PageAnnotationsServiceConfig { - private static final String BASE_URL_PARAM = "page_annotations_base_url"; - private static final String DEFAULT_BASE_URL = "https://memex-pa.googleapis.com/v1/annotations"; - - public static final StringCachedFieldTrialParameter PAGE_ANNOTATIONS_BASE_URL = - new StringCachedFieldTrialParameter( - ChromeFeatureList.PAGE_ANNOTATIONS_SERVICE, BASE_URL_PARAM, DEFAULT_BASE_URL); -} \ No newline at end of file
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceFactory.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceFactory.java deleted file mode 100644 index 0506191..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceFactory.java +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import androidx.annotation.VisibleForTesting; - -import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.chrome.browser.profiles.ProfileKeyedMap; - -/** - * {@link PageAnnotationService} cached by {@link Profile}. - */ -public class PageAnnotationsServiceFactory { - @VisibleForTesting - protected static ProfileKeyedMap<PageAnnotationsService> sProfileToPageAnnotationsService; - - /** Creates new instance. */ - public PageAnnotationsServiceFactory() { - if (sProfileToPageAnnotationsService == null) { - sProfileToPageAnnotationsService = new ProfileKeyedMap<PageAnnotationsService>( - ProfileKeyedMap.NO_REQUIRED_CLEANUP_ACTION); - } - } - - /** - * Creates a new instance or reuses an existing one based on the current {@link Profile}. - * - * Note: Don't hold a reference to the returned value. Always use this method to access {@link - * PageAnnotationService} instead. - * @return {@link PageAnnotationsService} instance for the current regular - * profile. - */ - public PageAnnotationsService getForLastUsedProfile() { - Profile profile = Profile.getLastUsedRegularProfile(); - return sProfileToPageAnnotationsService.getForProfile(profile, - () -> new PageAnnotationsService(new PageAnnotationsServiceProxy(profile))); - } -}
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceProxy.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceProxy.java deleted file mode 100644 index a4bf2eff..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceProxy.java +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.chromium.base.Callback; -import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.url.GURL; - -/** - * Contains the business logic to call the Page Annotations backend over HTTPS. - * Deprecated in favor of OptimizationGuide - */ -public class PageAnnotationsServiceProxy { - private final Profile mProfile; - - /** - * Creates a new proxy instance. - * - * @param profile Profile to use for auth. - */ - PageAnnotationsServiceProxy(Profile profile) { - mProfile = profile; - } - - /** - * Makes an HTTPS call to the backend and returns the service response through - * the provided callback. - * - * @param url The URL to annotate. - * @param callback {@link Callback} to invoke once the request is complete. - */ - public void fetchAnnotations( - GURL url, Callback<SinglePageAnnotationsServiceResponse> callback) { - callback.onResult(null); - return; - } -}
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/ProductPriceUpdatePageAnnotation.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/ProductPriceUpdatePageAnnotation.java deleted file mode 100644 index b38f8d0..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/ProductPriceUpdatePageAnnotation.java +++ /dev/null
@@ -1,109 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.json.JSONException; -import org.json.JSONObject; - -import org.chromium.base.Log; -import org.chromium.build.annotations.DoNotClassMerge; - -import java.util.Locale; - -/** - * {@link PageAnnotation} for product price updates in a page. - * - * This class should not be merged because it is being used as a key in a Map - * in PageAnnotationUtils.java. - */ -@DoNotClassMerge -public class ProductPriceUpdatePageAnnotation extends PageAnnotation { - private static final String TAG = "PPUPA"; - private static final String PRICE_UPDATE_KEY = "priceUpdate"; - private static final String OLD_PRICE_KEY = "oldPrice"; - private static final String NEW_PRICE_KEY = "newPrice"; - private static final String CURRENCY_CODE_KEY = "currencyCode"; - private static final String AMOUNT_MICROS_KEY = "amountMicros"; - - private final long mOldPriceMicros; - private final long mNewPriceMicros; - private final String mCurrencyCode; - - /** Creates a new instance. */ - public ProductPriceUpdatePageAnnotation( - long oldPriceMicros, long newPriceMicros, String currencyCode) { - super(PageAnnotationType.PRODUCT_PRICE_UPDATE); - mOldPriceMicros = oldPriceMicros; - mNewPriceMicros = newPriceMicros; - mCurrencyCode = currencyCode; - } - - /** Gets the old price amount in micros. */ - public long getOldPriceMicros() { - return mOldPriceMicros; - } - - /** Gets the new price amount in micros. */ - public long getNewPriceMicros() { - return mNewPriceMicros; - } - - /** Gets the currency code for the price update. */ - public String getCurrencyCode() { - return mCurrencyCode; - } - - /** Creates a new {@link ProductPriceUpdatePageAnnotation} from a {@link JSONObject}. */ - public static ProductPriceUpdatePageAnnotation fromJson(JSONObject object) { - try { - JSONObject priceUpdateData = object.getJSONObject(PRICE_UPDATE_KEY); - JSONObject oldPrice = priceUpdateData.getJSONObject(OLD_PRICE_KEY); - JSONObject newPrice = priceUpdateData.getJSONObject(NEW_PRICE_KEY); - - if (!isValidPriceJsonObject(oldPrice) || !isValidPriceJsonObject(newPrice)) { - Log.i(TAG, String.format(Locale.US, "Invalid price update.")); - return null; - } - - String oldCurrencyCode = oldPrice.getString(CURRENCY_CODE_KEY); - String newCurrencyCode = newPrice.getString(CURRENCY_CODE_KEY); - - if (oldCurrencyCode == null || !oldCurrencyCode.equals(newCurrencyCode)) { - Log.i(TAG, - String.format( - Locale.US, "There was currency code mismatch in price update.")); - return null; - } - - Long oldAmountMicros = - PageAnnotationUtils.safeParseLong(oldPrice.getString(AMOUNT_MICROS_KEY)); - Long newAmountMicros = - PageAnnotationUtils.safeParseLong(newPrice.getString(AMOUNT_MICROS_KEY)); - - if (oldAmountMicros == null || newAmountMicros == null) { - Log.i(TAG, String.format(Locale.US, "Invalid amount micros.")); - return null; - } - - return new ProductPriceUpdatePageAnnotation( - oldAmountMicros, newAmountMicros, oldCurrencyCode); - - } catch (JSONException e) { - Log.i(TAG, - String.format(Locale.US, - "There was a problem parsing " - + "ProductPriceUpdatePageAnnotation " - + "Details: %s", - e.toString())); - } - - return null; - } - - private static boolean isValidPriceJsonObject(JSONObject json) { - return json != null && json.has(CURRENCY_CODE_KEY) && !json.isNull(CURRENCY_CODE_KEY) - && json.has(AMOUNT_MICROS_KEY) && !json.isNull(AMOUNT_MICROS_KEY); - } -}
diff --git a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/SinglePageAnnotationsServiceResponse.java b/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/SinglePageAnnotationsServiceResponse.java deleted file mode 100644 index 0d133bb..0000000 --- a/chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/SinglePageAnnotationsServiceResponse.java +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import java.util.List; - -/** - * Represents the Page Annotations backend response for a single URL request. - */ -class SinglePageAnnotationsServiceResponse { - private final List<PageAnnotation> mAnnotations; - - public SinglePageAnnotationsServiceResponse(List<PageAnnotation> annotations) { - mAnnotations = annotations; - } - - /** - * List of annotations returned by the service. - */ - public List<PageAnnotation> getAnnotations() { - return mAnnotations; - } -}
diff --git a/chrome/browser/page_annotations/test/android/BUILD.gn b/chrome/browser/page_annotations/test/android/BUILD.gn deleted file mode 100644 index 26e7469..0000000 --- a/chrome/browser/page_annotations/test/android/BUILD.gn +++ /dev/null
@@ -1,54 +0,0 @@ -# Copyright 2020 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/android/config.gni") -import("//build/config/android/rules.gni") - -robolectric_library("junit") { - sources = [ - "java/src/org/chromium/chrome/browser/page_annotations/BuyableProductPageAnnotationUnitTest.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationUtilsUnitTest.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceUnitTest.java", - "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsTestUtils.java", - "java/src/org/chromium/chrome/browser/page_annotations/ProductPriceUpdatePageAnnotationUnitTest.java", - ] - - deps = [ - "//base:base_java", - "//base:base_java_test_support", - "//base:base_junit_test_support", - "//chrome/browser/endpoint_fetcher:java", - "//chrome/browser/flags:java", - "//chrome/browser/page_annotations/android:java", - "//chrome/browser/profiles/android:java", - "//chrome/test/android:chrome_java_unit_test_support", - "//third_party/androidx:androidx_annotation_annotation_java", - "//third_party/junit", - "//third_party/mockito:mockito_java", - "//url:gurl_java", - "//url:gurl_junit_test_support", - ] -} - -android_library("javatests") { - testonly = true - - sources = [ "java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceFactoryUnitTest.java" ] - - deps = [ - "//base:base_java_test_support", - "//chrome/browser/endpoint_fetcher:java", - "//chrome/browser/flags:java", - "//chrome/browser/page_annotations/android:java", - "//chrome/browser/profiles/android:java", - "//chrome/test/android:chrome_java_integration_test_support", - "//net/android:net_java", - "//third_party/androidx:androidx_test_core_java", - "//third_party/androidx:androidx_test_runner_java", - "//third_party/junit", - "//third_party/mockito:mockito_java", - "//url:gurl_java", - "//url:gurl_junit_test_support", - ] -}
diff --git a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/BuyableProductPageAnnotationUnitTest.java b/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/BuyableProductPageAnnotationUnitTest.java deleted file mode 100644 index 1e7d4a6..0000000 --- a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/BuyableProductPageAnnotationUnitTest.java +++ /dev/null
@@ -1,75 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.json.JSONException; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.annotation.Config; - -import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.chrome.browser.page_annotations.PageAnnotation.PageAnnotationType; - -/** - * Tests for {@link BuyableProductPageAnnotation}. - */ -@RunWith(BaseRobolectricTestRunner.class) -@Config(manifest = Config.NONE) -public class BuyableProductPageAnnotationUnitTest { - private static final String FAKE_PRICE_MICORS = "10000"; - private static final String FAKE_CURRENCY_CODE = "USD"; - private static final String FAKE_OFFER_ID = "200"; - - @Test - public void testFromValidJsonObject() throws JSONException { - BuyableProductPageAnnotation annotation = BuyableProductPageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeBuyableProductJson( - true, FAKE_PRICE_MICORS, FAKE_CURRENCY_CODE, FAKE_OFFER_ID)); - Assert.assertNotNull(annotation); - Assert.assertEquals(PageAnnotationType.BUYABLE_PRODUCT, annotation.getType()); - Assert.assertEquals(FAKE_CURRENCY_CODE, annotation.getCurrencyCode()); - Assert.assertEquals(10000L, annotation.getCurrentPriceMicros()); - } - - @Test - public void testFromMissingPriceMetadataJson() throws JSONException { - BuyableProductPageAnnotation annotation = BuyableProductPageAnnotation.fromJson( - PageAnnotationsTestUtils.createEmptyBuyableProduct()); - Assert.assertNull(annotation); - } - - @Test - public void testFromMissingPriceMicrosJson() throws JSONException { - BuyableProductPageAnnotation annotation = BuyableProductPageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeBuyableProductJson( - true, null, FAKE_CURRENCY_CODE, FAKE_OFFER_ID)); - Assert.assertNull(annotation); - } - - @Test - public void testFromMissingCurrencyCodeJson() throws JSONException { - BuyableProductPageAnnotation annotation = BuyableProductPageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeBuyableProductJson( - true, FAKE_PRICE_MICORS, null, FAKE_OFFER_ID)); - Assert.assertNull(annotation); - } - - @Test - public void testFromBadPriceAmountJson() throws JSONException { - BuyableProductPageAnnotation annotation = BuyableProductPageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeBuyableProductJson( - true, FAKE_PRICE_MICORS, null, FAKE_OFFER_ID)); - Assert.assertNull(annotation); - } - - @Test - public void testFromMissingOfferIdJson() throws JSONException { - BuyableProductPageAnnotation annotation = BuyableProductPageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeBuyableProductJson( - true, FAKE_PRICE_MICORS, null, null)); - Assert.assertNull(annotation); - } -}
diff --git a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationUtilsUnitTest.java b/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationUtilsUnitTest.java deleted file mode 100644 index 1bbbffce..0000000 --- a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationUtilsUnitTest.java +++ /dev/null
@@ -1,69 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.json.JSONException; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.annotation.Config; - -import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.chrome.browser.page_annotations.PageAnnotation.PageAnnotationType; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests for {@link PageAnnotationUtils}. - */ -@RunWith(BaseRobolectricTestRunner.class) -@Config(manifest = Config.NONE) -public class PageAnnotationUtilsUnitTest { - private static final List<PageAnnotation> DUMMY_ANNOTATIONS_LIST = Arrays.asList( - new PageAnnotation[] {new BuyableProductPageAnnotation(100L, "USD", "200")}); - - private static class DummyPageAnnotation extends PageAnnotation { - DummyPageAnnotation() { - super(PageAnnotationType.UNKNOWN); - } - } - - @Test - public void testCreateFromJsonUnknownType() throws JSONException { - PageAnnotation annotation = PageAnnotationUtils.createPageAnnotationFromJson( - PageAnnotationsTestUtils.createDummyPageAnnotationJson("DUMMY_TYPE")); - Assert.assertNull(annotation); - } - - @Test - public void testCreateFromJsonBuyableProduct() throws JSONException { - PageAnnotation annotation = PageAnnotationUtils.createPageAnnotationFromJson( - PageAnnotationsTestUtils.createFakeBuyableProductJson(true, "100", "USD", "200")); - Assert.assertNotNull(annotation); - } - - @Test - public void testCreateProductPriceUpdate() throws JSONException { - PageAnnotation annotation = PageAnnotationUtils.createPageAnnotationFromJson( - PageAnnotationsTestUtils.createFakeProductPriceUpdate("100", "USD", "10", "USD")); - Assert.assertNotNull(annotation); - Assert.assertEquals(annotation.getType(), PageAnnotationType.PRODUCT_PRICE_UPDATE); - } - - @Test - public void testGetAnnotationByType() { - BuyableProductPageAnnotation annotation = PageAnnotationUtils.getAnnotation( - DUMMY_ANNOTATIONS_LIST, BuyableProductPageAnnotation.class); - Assert.assertNotNull(annotation); - } - - @Test - public void testGetAnnotationByTypeInvalid() { - DummyPageAnnotation annotation = PageAnnotationUtils.getAnnotation( - DUMMY_ANNOTATIONS_LIST, DummyPageAnnotation.class); - Assert.assertNull(annotation); - } -}
diff --git a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceFactoryUnitTest.java b/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceFactoryUnitTest.java deleted file mode 100644 index 475750e1..0000000 --- a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceFactoryUnitTest.java +++ /dev/null
@@ -1,70 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import androidx.test.filters.SmallTest; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import org.chromium.base.test.UiThreadTest; -import org.chromium.base.test.util.Batch; -import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.chrome.test.ChromeBrowserTestRule; -import org.chromium.chrome.test.ChromeJUnit4ClassRunner; - -/** - * Unit tests for {@link PageAnnotationsServiceFactory}. - */ -@RunWith(ChromeJUnit4ClassRunner.class) -@Batch(Batch.PER_CLASS) -public class PageAnnotationsServiceFactoryUnitTest { - @Rule - public final ChromeBrowserTestRule mBrowserTestRule = new ChromeBrowserTestRule(); - - @Mock - private Profile mProfileOne; - - @Mock - private Profile mProfileTwo; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - @Test - @SmallTest - @UiThreadTest - public void testFactoryMethod() { - PageAnnotationsServiceFactory factory = new PageAnnotationsServiceFactory(); - PageAnnotationsService regularProfileService = factory.getForLastUsedProfile(); - Assert.assertEquals(regularProfileService, factory.getForLastUsedProfile()); - - Profile.setLastUsedProfileForTesting(mProfileOne); - PageAnnotationsService regularProfileOneService = factory.getForLastUsedProfile(); - Assert.assertNotEquals(regularProfileService, regularProfileOneService); - Assert.assertEquals(regularProfileOneService, factory.getForLastUsedProfile()); - - Profile.setLastUsedProfileForTesting(mProfileTwo); - PageAnnotationsService regularProfileTwoService = factory.getForLastUsedProfile(); - Assert.assertNotEquals(regularProfileService, regularProfileTwoService); - Assert.assertEquals(regularProfileTwoService, factory.getForLastUsedProfile()); - - Profile.setLastUsedProfileForTesting(null); - Assert.assertEquals(regularProfileService, factory.getForLastUsedProfile()); - - Profile.setLastUsedProfileForTesting(mProfileOne); - Assert.assertEquals(regularProfileOneService, factory.getForLastUsedProfile()); - - Profile.setLastUsedProfileForTesting(mProfileTwo); - Assert.assertEquals(regularProfileTwoService, factory.getForLastUsedProfile()); - } -}
diff --git a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceUnitTest.java b/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceUnitTest.java deleted file mode 100644 index dd63e45..0000000 --- a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceUnitTest.java +++ /dev/null
@@ -1,92 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doAnswer; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.robolectric.annotation.Config; - -import org.chromium.base.Callback; -import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.chrome.browser.page_annotations.PageAnnotation.PageAnnotationType; -import org.chromium.url.GURL; -import org.chromium.url.JUnitTestGURLs; - -import java.util.LinkedList; - -/** - * Tests for {@link PageAnnotationsServiceUnitTest}. - */ -@RunWith(BaseRobolectricTestRunner.class) -@Config(manifest = Config.NONE) -public class PageAnnotationsServiceUnitTest { - private static final GURL DUMMY_URL = JUnitTestGURLs.getGURL(JUnitTestGURLs.RED_1); - - private static final LinkedList<PageAnnotation> FAKE_ANNOTATIONS_LIST = - new LinkedList<PageAnnotation>() { - { add(new BuyableProductPageAnnotation(10000000L, "USD", "200")); } - }; - - @Mock - private PageAnnotationsServiceProxy mServiceProxyMock; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - private void mockServiceProxyResult(SinglePageAnnotationsServiceResponse response) { - doAnswer(new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) { - Callback callback = (Callback) invocation.getArguments()[1]; - callback.onResult(response); - return null; - } - }) - .when(mServiceProxyMock) - .fetchAnnotations(any(GURL.class), any(Callback.class)); - } - - @Test - public void testReturnEmptyListOnNullResponse() { - mockServiceProxyResult(null); - PageAnnotationsService service = new PageAnnotationsService(mServiceProxyMock); - service.getAnnotations(DUMMY_URL, (result) -> { - Assert.assertNotNull(result); - Assert.assertEquals(0, result.size()); - }); - } - - @Test - public void testNullUrl() { - mockServiceProxyResult(new SinglePageAnnotationsServiceResponse(FAKE_ANNOTATIONS_LIST)); - PageAnnotationsService service = new PageAnnotationsService(mServiceProxyMock); - service.getAnnotations(null, (result) -> { - Assert.assertNotNull(result); - Assert.assertEquals(0, result.size()); - }); - } - - @Test - public void testServerGeneratedAnnotations() { - mockServiceProxyResult(new SinglePageAnnotationsServiceResponse(FAKE_ANNOTATIONS_LIST)); - PageAnnotationsService service = new PageAnnotationsService(mServiceProxyMock); - service.getAnnotations(DUMMY_URL, (result) -> { - Assert.assertNotNull(result); - Assert.assertEquals(1, result.size()); - Assert.assertEquals(PageAnnotationType.BUYABLE_PRODUCT, result.get(0).getType()); - }); - } -}
diff --git a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsTestUtils.java b/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsTestUtils.java deleted file mode 100644 index aae67481..0000000 --- a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsTestUtils.java +++ /dev/null
@@ -1,99 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import androidx.annotation.Nullable; - -import org.json.JSONException; -import org.json.JSONObject; - -import org.chromium.chrome.browser.page_annotations.PageAnnotation.PageAnnotationType; - -/** Utility functions used in page annotations unit tests. */ -class PageAnnotationsTestUtils { - private static final String BUYABLE_PRODUCT_KEY = "buyableProduct"; - private static final String CURRENT_PRICE_KEY = "currentPrice"; - private static final String CURRENCY_CODE_KEY = "currencyCode"; - private static final String AMOUNT_MICROS_KEY = "amountMicros"; - private static final String TYPE_KEY = "type"; - private static final String PRICE_UPDATE_KEY = "priceUpdate"; - private static final String OLD_PRICE_KEY = "oldPrice"; - private static final String NEW_PRICE_KEY = "newPrice"; - private static final String OFFER_ID_KEY = "offerId"; - - static JSONObject createEmptyBuyableProduct() throws JSONException { - return createFakeBuyableProductJson(false, null, null, null); - } - - static JSONObject createFakeBuyableProductJson(boolean includePriceMetadata, - @Nullable String priceInMicros, @Nullable String currencyCode, @Nullable String offerId) - throws JSONException { - JSONObject root = new JSONObject(); - JSONObject buyableProductJson = new JSONObject(); - - if (includePriceMetadata) { - JSONObject priceMetadata = new JSONObject(); - if (priceInMicros != null) { - priceMetadata.put(AMOUNT_MICROS_KEY, priceInMicros); - } - - if (currencyCode != null) { - priceMetadata.put(CURRENCY_CODE_KEY, currencyCode); - } - - buyableProductJson.put(CURRENT_PRICE_KEY, priceMetadata); - } - - if (offerId != null) { - buyableProductJson.put(OFFER_ID_KEY, offerId); - } - - root.put(BUYABLE_PRODUCT_KEY, buyableProductJson); - root.put(TYPE_KEY, PageAnnotationType.BUYABLE_PRODUCT); - return root; - } - - static JSONObject createEmptyProductPriceUpdate() throws JSONException { - return createFakeProductPriceUpdate(null, null, null, null); - } - - static JSONObject createFakeProductPriceUpdate(@Nullable String oldPriceMicros, - @Nullable String oldCurrencyCode, @Nullable String newPriceMicros, - @Nullable String newCurrencyCode) throws JSONException { - JSONObject root = new JSONObject(); - JSONObject productPriceUpdate = new JSONObject(); - - JSONObject oldPrice = new JSONObject(); - if (oldPriceMicros != null) { - oldPrice.put(AMOUNT_MICROS_KEY, oldPriceMicros); - } - - if (oldCurrencyCode != null) { - oldPrice.put(CURRENCY_CODE_KEY, oldCurrencyCode); - } - - JSONObject newPrice = new JSONObject(); - if (newPriceMicros != null) { - newPrice.put(AMOUNT_MICROS_KEY, newPriceMicros); - } - - if (newCurrencyCode != null) { - newPrice.put(CURRENCY_CODE_KEY, newCurrencyCode); - } - - productPriceUpdate.put(OLD_PRICE_KEY, oldPrice); - productPriceUpdate.put(NEW_PRICE_KEY, newPrice); - - root.put(PRICE_UPDATE_KEY, productPriceUpdate); - root.put(TYPE_KEY, PageAnnotationType.PRODUCT_PRICE_UPDATE); - return root; - } - - static JSONObject createDummyPageAnnotationJson(String type) throws JSONException { - JSONObject root = new JSONObject(); - root.put("type", type); - return root; - } -}
diff --git a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/ProductPriceUpdatePageAnnotationUnitTest.java b/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/ProductPriceUpdatePageAnnotationUnitTest.java deleted file mode 100644 index 0da06bb..0000000 --- a/chrome/browser/page_annotations/test/android/java/src/org/chromium/chrome/browser/page_annotations/ProductPriceUpdatePageAnnotationUnitTest.java +++ /dev/null
@@ -1,78 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_annotations; - -import org.json.JSONException; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.annotation.Config; - -import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.chrome.browser.page_annotations.PageAnnotation.PageAnnotationType; - -/** - * Tests for {@link ProductPriceUpdatePageAnnotation}. - */ -@RunWith(BaseRobolectricTestRunner.class) -@Config(manifest = Config.NONE) -public class ProductPriceUpdatePageAnnotationUnitTest { - private static final String FAKE_OLD_PRICE_MICORS = "10000"; - private static final String FAKE_NEW_PRICE_MICORS = "10"; - private static final String FAKE_CURRENCY_CODE = "USD"; - - @Test - public void testFromValidJsonObject() throws JSONException { - ProductPriceUpdatePageAnnotation annotation = ProductPriceUpdatePageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeProductPriceUpdate(FAKE_OLD_PRICE_MICORS, - FAKE_CURRENCY_CODE, FAKE_NEW_PRICE_MICORS, FAKE_CURRENCY_CODE)); - - Assert.assertNotNull(annotation); - Assert.assertEquals(PageAnnotationType.PRODUCT_PRICE_UPDATE, annotation.getType()); - Assert.assertEquals(10000L, annotation.getOldPriceMicros()); - Assert.assertEquals(FAKE_CURRENCY_CODE, annotation.getCurrencyCode()); - - Assert.assertEquals(10L, annotation.getNewPriceMicros()); - Assert.assertEquals(FAKE_CURRENCY_CODE, annotation.getCurrencyCode()); - } - - @Test - public void testFromMissingPriceMetadataJson() throws JSONException { - ProductPriceUpdatePageAnnotation annotation = ProductPriceUpdatePageAnnotation.fromJson( - PageAnnotationsTestUtils.createEmptyProductPriceUpdate()); - Assert.assertNull(annotation); - } - - @Test - public void testFromJsonMissingNewPrice() throws JSONException { - ProductPriceUpdatePageAnnotation annotation = ProductPriceUpdatePageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeProductPriceUpdate( - FAKE_OLD_PRICE_MICORS, FAKE_CURRENCY_CODE, null, null)); - Assert.assertNull(annotation); - } - - @Test - public void testFromJsonMissingOldPrice() throws JSONException { - ProductPriceUpdatePageAnnotation annotation = ProductPriceUpdatePageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeProductPriceUpdate( - null, null, FAKE_NEW_PRICE_MICORS, FAKE_CURRENCY_CODE)); - Assert.assertNull(annotation); - } - - @Test - public void testFromJsonBadAmountMicros() throws JSONException { - ProductPriceUpdatePageAnnotation badNewPriceAnnotation = - ProductPriceUpdatePageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeProductPriceUpdate(FAKE_OLD_PRICE_MICORS, - FAKE_CURRENCY_CODE, "NOT_A_LONG", FAKE_CURRENCY_CODE)); - Assert.assertNull(badNewPriceAnnotation); - - ProductPriceUpdatePageAnnotation badOldPriceAnnotation = - ProductPriceUpdatePageAnnotation.fromJson( - PageAnnotationsTestUtils.createFakeProductPriceUpdate( - "", FAKE_CURRENCY_CODE, FAKE_NEW_PRICE_MICORS, FAKE_CURRENCY_CODE)); - Assert.assertNull(badOldPriceAnnotation); - } -}
diff --git a/chrome/browser/page_info/about_this_site_service_factory.cc b/chrome/browser/page_info/about_this_site_service_factory.cc index c251d60..7e235368e 100644 --- a/chrome/browser/page_info/about_this_site_service_factory.cc +++ b/chrome/browser/page_info/about_this_site_service_factory.cc
@@ -58,8 +58,7 @@ OptimizationGuideKeyedServiceFactory::GetForProfile(profile), profile->IsOffTheRecord(), profile->GetPrefs()), TemplateURLServiceFactory::GetForProfile(profile), - page_info::IsMoreAboutThisSiteFeatureEnabled(), - page_info::IsAboutThisSiteForNonMsbbFeatureEnabled()); + page_info::IsMoreAboutThisSiteFeatureEnabled()); } bool AboutThisSiteServiceFactory::ServiceIsCreatedWithBrowserContext() const {
diff --git a/chrome/browser/page_info/page_info_features.cc b/chrome/browser/page_info/page_info_features.cc index 7e002be..d5b1bbf9 100644 --- a/chrome/browser/page_info/page_info_features.cc +++ b/chrome/browser/page_info/page_info_features.cc
@@ -26,12 +26,6 @@ base::FeatureList::IsEnabled(page_info::kPageInfoAboutThisSiteNewIcon); } -bool IsAboutThisSiteForNonMsbbFeatureEnabled() { - return IsMoreAboutThisSiteFeatureEnabled() && - IsAboutThisSiteNewIconFeatureEnabled() && - base::FeatureList::IsEnabled(page_info::kPageInfoAboutThisSiteNonMsbb); -} - #if !BUILDFLAG(IS_ANDROID) bool IsPersistentSidePanelEntryFeatureEnabled() { return IsMoreAboutThisSiteFeatureEnabled() &&
diff --git a/chrome/browser/page_info/page_info_features.h b/chrome/browser/page_info/page_info_features.h index 671888d..c02b2d5 100644 --- a/chrome/browser/page_info/page_info_features.h +++ b/chrome/browser/page_info/page_info_features.h
@@ -16,10 +16,6 @@ // enabled. bool IsAboutThisSiteNewIconFeatureEnabled(); -// Returns true if `kPageInfoAboutThisSiteNonMsbb` and dependent features are -// enabled. -bool IsAboutThisSiteForNonMsbbFeatureEnabled(); - #if !BUILDFLAG(IS_ANDROID) // Returns true if kAboutThisSitePersistentSidePanelEntry and dependent // features are enabled.
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc index 1bc4191..588a23a 100644 --- a/chrome/browser/pdf/pdf_extension_test.cc +++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -1065,32 +1065,20 @@ static constexpr float kScrollPositionEpsilon = 2.0f; static int GetViewportHeight(content::ToRenderFrameHost guest_main_frame) { - int viewport_height = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - guest_main_frame, - "window.domAutomationController.send(viewer.viewport.size.height);", - &viewport_height)); - return viewport_height; + return content::EvalJs(guest_main_frame, "viewer.viewport.size.height;") + .ExtractInt(); } static int GetViewportScrollPositionX( content::ToRenderFrameHost guest_main_frame) { - int position_x = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - guest_main_frame, - "window.domAutomationController.send(viewer.viewport.position.x);", - &position_x)); - return position_x; + return content::EvalJs(guest_main_frame, "viewer.viewport.position.x;") + .ExtractInt(); } static int GetViewportScrollPositionY( content::ToRenderFrameHost guest_main_frame) { - int position_y = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - guest_main_frame, - "window.domAutomationController.send(viewer.viewport.position.y);", - &position_y)); - return position_y; + return content::EvalJs(guest_main_frame, "viewer.viewport.position.y;") + .ExtractInt(); } }; @@ -2460,15 +2448,9 @@ // Verify MouseEnter, MouseLeave received. int leave_count = 0; do { - ASSERT_TRUE(ExecuteScriptAndExtractInt( - guest_mainframe, "window.domAutomationController.send(leave_count);", - &leave_count)); + leave_count = EvalJs(guest_mainframe, "leave_count;").ExtractInt(); } while (!leave_count); - int enter_count = 0; - ASSERT_TRUE(ExecuteScriptAndExtractInt( - guest_mainframe, "window.domAutomationController.send(enter_count);", - &enter_count)); - EXPECT_EQ(1, enter_count); + EXPECT_EQ(1, EvalJs(guest_mainframe, "enter_count;")); } IN_PROC_BROWSER_TEST_F(PDFExtensionHitTestTest, ContextMenuCoordinates) {
diff --git a/chrome/browser/pdf/pdf_extension_test_util.cc b/chrome/browser/pdf/pdf_extension_test_util.cc index 5c0ae64..eb2e5aa 100644 --- a/chrome/browser/pdf/pdf_extension_test_util.cc +++ b/chrome/browser/pdf/pdf_extension_test_util.cc
@@ -132,21 +132,11 @@ return point; } - int x; - if (!content::ExecuteScriptAndExtractInt( - guest_main_frame, - "window.domAutomationController.send(linkScreenPositionX);", &x)) { - ADD_FAILURE() << "error getting linkScreenPositionX"; - return point; - } + int x = + content::EvalJs(guest_main_frame, "linkScreenPositionX;").ExtractInt(); - int y; - if (!content::ExecuteScriptAndExtractInt( - guest_main_frame, - "window.domAutomationController.send(linkScreenPositionY);", &y)) { - ADD_FAILURE() << "error getting linkScreenPositionY"; - return point; - } + int y = + content::EvalJs(guest_main_frame, "linkScreenPositionY;").ExtractInt(); return {x, y}; }
diff --git a/chrome/browser/permissions/crowd_deny_safe_browsing_request.cc b/chrome/browser/permissions/crowd_deny_safe_browsing_request.cc index c405c2b8..cad74634 100644 --- a/chrome/browser/permissions/crowd_deny_safe_browsing_request.cc +++ b/chrome/browser/permissions/crowd_deny_safe_browsing_request.cc
@@ -16,7 +16,7 @@ #include "base/timer/timer.h" #include "components/safe_browsing/core/browser/db/database_manager.h" #include "components/safe_browsing/core/common/features.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "url/origin.h" namespace {
diff --git a/chrome/browser/plugins/chrome_content_browser_client_plugins_part.cc b/chrome/browser/plugins/chrome_content_browser_client_plugins_part.cc index e66180dc..40b0a758 100644 --- a/chrome/browser/plugins/chrome_content_browser_client_plugins_part.cc +++ b/chrome/browser/plugins/chrome_content_browser_client_plugins_part.cc
@@ -20,7 +20,7 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/pepper_permission_util.h" #include "components/version_info/version_info.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" #include "extensions/buildflags/buildflags.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
diff --git a/chrome/browser/plugins/plugin_info_host_impl.cc b/chrome/browser/plugins/plugin_info_host_impl.cc index cb9253cf..95cd290 100644 --- a/chrome/browser/plugins/plugin_info_host_impl.cc +++ b/chrome/browser/plugins/plugin_info_host_impl.cc
@@ -34,7 +34,7 @@ #include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h" #include "components/nacl/common/buildflags.h" #include "components/prefs/pref_service.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/plugin_service.h" #include "content/public/browser/plugin_service_filter.h" #include "content/public/browser/render_frame_host.h"
diff --git a/chrome/browser/policy/test/certificate_transparency_policy_browsertest.cc b/chrome/browser/policy/test/certificate_transparency_policy_browsertest.cc index 4c391a9..f523d61 100644 --- a/chrome/browser/policy/test/certificate_transparency_policy_browsertest.cc +++ b/chrome/browser/policy/test/certificate_transparency_policy_browsertest.cc
@@ -13,7 +13,7 @@ #include "components/policy/core/common/policy_types.h" #include "components/policy/policy_constants.h" #include "components/security_interstitials/content/security_interstitial_tab_helper.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/network_service_util.h"
diff --git a/chrome/browser/policy/test/safe_browsing_policy_browsertest.cc b/chrome/browser/policy/test/safe_browsing_policy_browsertest.cc index fc1cebc..2c71094 100644 --- a/chrome/browser/policy/test/safe_browsing_policy_browsertest.cc +++ b/chrome/browser/policy/test/safe_browsing_policy_browsertest.cc
@@ -31,14 +31,16 @@ SafeBrowsingPolicyTest* browser_test) { const std::string command = base::StringPrintf( "var node = document.getElementById('enhanced-protection-message');" + "var result;" "if (node) {" - " window.domAutomationController.send(node.offsetWidth > 0 || " - " node.offsetHeight > 0 ? %d : %d);" + " result = node.offsetWidth > 0 || " + " node.offsetHeight > 0 ? %d : %d;" "} else {" // The node should be present but not visible, so trigger an error // by sending false if it's not present. - " window.domAutomationController.send(%d);" - "}", + " result = %d;" + "}" + "result;", security_interstitials::CMD_TEXT_FOUND, security_interstitials::CMD_TEXT_NOT_FOUND, security_interstitials::CMD_ERROR); @@ -49,10 +51,7 @@ ADD_FAILURE() << "Expected interstitial when checking for enhanced " "protection message."; } - int result = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt(tab->GetPrimaryMainFrame(), - command, &result)); - return result; + return content::EvalJs(tab->GetPrimaryMainFrame(), command).ExtractInt(); } // Test extended reporting is managed by policy.
diff --git a/chrome/browser/policy/test/url_blocklist_policy_browsertest.cc b/chrome/browser/policy/test/url_blocklist_policy_browsertest.cc index af7ea9a..811be5f 100644 --- a/chrome/browser/policy/test/url_blocklist_policy_browsertest.cc +++ b/chrome/browser/policy/test/url_blocklist_policy_browsertest.cc
@@ -96,10 +96,7 @@ // Fetch value from page generated by JSIncrementerPageHandler. int JSIncrementerFetch(content::WebContents* contents) { - int result; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - contents, "domAutomationController.send(value);", &result)); - return result; + return content::EvalJs(contents, "value;").ExtractInt(); } } // namespace
diff --git a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service_browsertest.cc b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service_browsertest.cc index 17ab536..70a81979 100644 --- a/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service_browsertest.cc +++ b/chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service_browsertest.cc
@@ -3122,36 +3122,28 @@ content::RenderFrameHost* frame = GetWebContents()->GetPrimaryMainFrame(); // Check the request total time is non-negative. - int value = -1; std::string script = - "window.domAutomationController.send(window.performance.timing." - "responseEnd - window.performance.timing.requestStart)"; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt(frame, script, &value)); - EXPECT_LE(0, value); + "window.performance.timing." + "responseEnd - window.performance.timing.requestStart"; + EXPECT_LE(0, content::EvalJs(frame, script)); // Check the response time is non-negative. - value = -1; script = - "window.domAutomationController.send(window.performance.timing." - "responseEnd - window.performance.timing.responseStart)"; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt(frame, script, &value)); - EXPECT_LE(0, value); + "window.performance.timing." + "responseEnd - window.performance.timing.responseStart"; + EXPECT_LE(0, content::EvalJs(frame, script)); // Check request start is after (or the same as) navigation start. - value = -1; script = - "window.domAutomationController.send(window.performance.timing." - "requestStart - window.performance.timing.navigationStart)"; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt(frame, script, &value)); - EXPECT_LE(0, value); + "window.performance.timing." + "requestStart - window.performance.timing.navigationStart"; + EXPECT_LE(0, content::EvalJs(frame, script)); // Check response end is after (or the same as) navigation start. - value = -1; script = - "window.domAutomationController.send(window.performance.timing." - "responseEnd - window.performance.timing.navigationStart)"; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt(frame, script, &value)); - EXPECT_LE(0, value); + "window.performance.timing." + "responseEnd - window.performance.timing.navigationStart"; + EXPECT_LE(0, content::EvalJs(frame, script)); } INSTANTIATE_TEST_SUITE_P(
diff --git a/chrome/browser/privacy/traffic_annotation.proto b/chrome/browser/privacy/traffic_annotation.proto index 8b747e2..e17034e7 100644 --- a/chrome/browser/privacy/traffic_annotation.proto +++ b/chrome/browser/privacy/traffic_annotation.proto
@@ -191,6 +191,9 @@ USERNAME = 27; + // Data originating from the content of the current webpage. + WEB_CONTENT = 28; + // If none of the below apply, use this and provide // more info in the data field. OTHER = 999;
diff --git a/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java index 4c227a0..e093f03 100644 --- a/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java +++ b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java
@@ -123,7 +123,7 @@ private void modifyAppBar() { AppCompatActivity settingsActivity = (AppCompatActivity) getActivity(); - settingsActivity.setTitle(R.string.prefs_privacy_guide_title); + settingsActivity.setTitle(R.string.privacy_guide_fragment_title); settingsActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(false); }
diff --git a/chrome/browser/privacy_guide/android/javatests/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragmentTest.java b/chrome/browser/privacy_guide/android/javatests/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragmentTest.java index 861a243..91a219d8 100644 --- a/chrome/browser/privacy_guide/android/javatests/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragmentTest.java +++ b/chrome/browser/privacy_guide/android/javatests/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragmentTest.java
@@ -111,7 +111,7 @@ private void launchPrivacyGuide() { mSettingsActivityTestRule.startSettingsActivity(); - onViewWaiting(withText(R.string.prefs_privacy_guide_title)); + onViewWaiting(withText(R.string.privacy_guide_fragment_title)); } private void navigateFromWelcomeToMSBBCard() {
diff --git a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java index 332fd09e..88e41dc 100644 --- a/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java +++ b/chrome/browser/quick_delete/android/java/src/org/chromium/chrome/browser/quick_delete/QuickDeleteController.java
@@ -5,6 +5,9 @@ package org.chromium.chrome.browser.quick_delete; import android.content.Context; +import android.os.Build; +import android.os.VibrationEffect; +import android.os.Vibrator; import androidx.annotation.NonNull; @@ -89,6 +92,7 @@ private void onQuickDeleteFinished() { navigateToTabSwitcher(); + triggerHapticFeedback(); // TODO(crbug.com/1412087): Show post-delete animation. showSnackbar(); } @@ -101,6 +105,17 @@ mLayoutManager.showLayout(LayoutType.TAB_SWITCHER, /*animate=*/true); } + private void triggerHapticFeedback() { + Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); + final long duration = 50; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + v.vibrate(VibrationEffect.createOneShot(duration, VibrationEffect.DEFAULT_AMPLITUDE)); + } else { + // Deprecated in API 26. + v.vibrate(duration); + } + } + /** * A method to show the quick delete snack-bar. */
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc index 4d38983..f3aefd41 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -1467,22 +1467,16 @@ ContextMenuWaiter menu_observer; content::WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); - int x; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - tab, - "var bounds = document.getElementById('anchor1')" - ".getBoundingClientRect();" - "domAutomationController.send(" - " Math.floor(bounds.left + bounds.width / 2));", - &x)); - int y; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - tab, - "var bounds = document.getElementById('anchor1')" - ".getBoundingClientRect();" - "domAutomationController.send(" - " Math.floor(bounds.top + bounds.height / 2));", - &y)); + int x = content::EvalJs(tab, + "var bounds = document.getElementById('anchor1')" + ".getBoundingClientRect();" + "Math.floor(bounds.left + bounds.width / 2);") + .ExtractInt(); + int y = content::EvalJs(tab, + "var bounds = document.getElementById('anchor1')" + ".getBoundingClientRect();" + "Math.floor(bounds.top + bounds.height / 2);") + .ExtractInt(); // Focus in the middle of an anchor element. content::SimulateMouseClickAt(tab, /*modifiers=*/0,
diff --git a/chrome/browser/renderer_host/chrome_extension_message_filter.cc b/chrome/browser/renderer_host/chrome_extension_message_filter.cc index 5a06ee2..aa95c5a2 100644 --- a/chrome/browser/renderer_host/chrome_extension_message_filter.cc +++ b/chrome/browser/renderer_host/chrome_extension_message_filter.cc
@@ -22,7 +22,7 @@ #include "chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/l10n_file_util.h"
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_browsertest.mm b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_browsertest.mm index 09d4da3..1156a0d 100644 --- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_browsertest.mm +++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_browsertest.mm
@@ -119,12 +119,7 @@ // Returns the value of |query| from Javascript as an int. int GetScriptIntValue(const std::string& query) { - int value = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - GetWebContents(), - "domAutomationController.send(" + query + ")", - &value)); - return value; + return content::EvalJs(GetWebContents(), query).ExtractInt(); } // Returns the vertical scroll offset of the current page.
diff --git a/chrome/browser/resources/app_home/app_home_empty_page.html b/chrome/browser/resources/app_home/app_home_empty_page.html index 45588fc..624f2fe 100644 --- a/chrome/browser/resources/app_home/app_home_empty_page.html +++ b/chrome/browser/resources/app_home/app_home_empty_page.html
@@ -41,9 +41,10 @@ </style> <div class="container"> - <img src="chrome://resources/images/apps_home_empty_238x170.svg"> + <img src="chrome://resources/images/apps_home_empty_238x170.svg"> <p>$i18n{appAppearanceLabel}</p> - <a href="https://support.google.com/chrome?p=install_web_apps" target="_blank"> - <cr-button>$i18n{learnToInstall}</cr-button> + <a href="https://support.google.com/chrome?p=install_web_apps" + target="_blank"> + <cr-button>$i18n{learnToInstall}</cr-button> </a> </div>
diff --git a/chrome/browser/resources/app_home/app_item.html b/chrome/browser/resources/app_home/app_item.html index 28968693..a4a118c6 100644 --- a/chrome/browser/resources/app_home/app_item.html +++ b/chrome/browser/resources/app_home/app_item.html
@@ -55,10 +55,6 @@ height: 0; } -cr-checkbox::part(checkbox) { - padding-inline-end: 0; -} - cr-checkbox::part(label-container) { flex: 1; } @@ -68,54 +64,62 @@ <div title="[[appInfo.name]]" aria-hidden="true"> <div id="iconContainer"> <img src="[[getIconUrl_(appInfo)]]" id="iconImage" - alt="[[appInfo.name]]" aria-hidden="true" draggable="false"></img> + alt="[[appInfo.name]]" + aria-hidden="true" + draggable="false"> <img id="deprecatedIcon" - src="chrome://resources/images/error_yellow900.svg" - hidden$="[[!appInfo.isDeprecatedApp]]"></img> + src="chrome://resources/images/error_yellow900.svg" + hidden$="[[!appInfo.isDeprecatedApp]]"> </div> - <div id="textContainer" aria-hidden="true">[[appInfo.name]]</div> + <div id="textContainer" + aria-hidden="true">[[appInfo.name]]</div> </div> -<cr-action-menu - id="menu" on-mousedown="onMenuMousedown_" on-click="onMenuClick_"> +<cr-action-menu id="menu" on-mousedown="onMenuMousedown_" + on-click="onMenuClick_"> <button id="showStorePage" class="dropdown-item" - on-click="openStorePage_" hidden="[[isWebStoreLinkHidden_(appInfo)]]"> + on-click="openStorePage_" + hidden="[[isWebStoreLinkHidden_(appInfo)]]"> $i18n{viewInWebStore} </button> - <cr-checkbox id="openInWindow" class="dropdown-item label-first" - on-click="onOpenInWindowItemClick_" - hidden="[[!isOpenInWindowHidden_(appInfo)]]" - checked="{{appInfo.openInWindow}}">$i18n{appWindowOpenLabel} + <cr-checkbox id="openInWindow" + class="dropdown-item label-first" + on-click="onOpenInWindowItemClick_" + hidden="[[!isOpenInWindowHidden_(appInfo)]]" + checked="{{appInfo.openInWindow}}"> + $i18n{appWindowOpenLabel} </cr-checkbox> - <cr-checkbox id="launchOnStartup" class="dropdown-item label-first" - on-click="onLaunchOnStartupItemClick_" - hidden="[[isLaunchOnStartupHidden_(appInfo)]]" + <cr-checkbox + id="launchOnStartup" + class="dropdown-item label-first" + on-click="onLaunchOnStartupItemClick_" + hidden="[[isLaunchOnStartupHidden_(appInfo)]]" checked="[[isLaunchOnStartUp_(appInfo)]]" - disabled= - "[[isLaunchOnStartupDisabled_(appInfo)]]"> - $i18n{appLaunchAtStartupLabel} + disabled="[[isLaunchOnStartupDisabled_(appInfo)]]"> + $i18n{appLaunchAtStartupLabel} </cr-checkbox> - <button id="createShortcut" class="dropdown-item" + <button id="createShortcut" + class="dropdown-item" on-click="onCreateShortcutItemClick_" hidden="[[isCreateShortcutHidden_(appInfo)]]"> $i18n{createShortcutForAppLabel} </button> <button id="installLocally" class="dropdown-item" - on-click="onInstallLocallyItemClick_" - hidden="[[isInstallLocallyHidden_(appInfo)]]"> - $i18n{installLocallyLabel} + on-click="onInstallLocallyItemClick_" + hidden="[[isInstallLocallyHidden_(appInfo)]]"> + $i18n{installLocallyLabel} </button> <hr> <button id="uninstall" class="dropdown-item" - disabled="[[!appInfo.mayUninstall]]" - hidden="[[isUninstallHidden_(appInfo)]]" - on-click="onUninstallItemClick_"> + disabled="[[!appInfo.mayUninstall]]" + hidden="[[isUninstallHidden_(appInfo)]]" + on-click="onUninstallItemClick_"> $i18n{uninstallAppLabel} </button> <button id="removeFromChrome" class="dropdown-item" - disabled="[[!appInfo.mayUninstall]]" - hidden="[[isRemoveFromChromeHidden_(appInfo)]]" - on-click="onUninstallItemClick_"> + disabled="[[!appInfo.mayUninstall]]" + hidden="[[isRemoveFromChromeHidden_(appInfo)]]" + on-click="onUninstallItemClick_"> $i18n{removeAppLabel} </button> <button id="appSettings" class="dropdown-item"
diff --git a/chrome/browser/resources/app_home/app_list.html b/chrome/browser/resources/app_home/app_list.html index 3ff46cb2..2050abc 100644 --- a/chrome/browser/resources/app_home/app_list.html +++ b/chrome/browser/resources/app_home/app_list.html
@@ -42,18 +42,18 @@ </style> <template is="dom-if" if="[[apps_.length]]"> - <div id="container"> - <template is="dom-repeat" items="[[apps_]]"> - <app-item class="item" id="[[item.id]]" app-info="[[item]]" - aria-label="[[item.name]][[notLocallyInstalledString_( - item.isLocallyInstalled, '$i18n{notInstalled}')]]" - role="button" tabindex="0"> - </app-item> - </template> - </div> + <div id="container"> + <template is="dom-repeat" items="[[apps_]]"> + <app-item class="item" id="[[item.id]]" app-info="[[item]]" + aria-label="[[item.name]][[notLocallyInstalledString_( + item.isLocallyInstalled, '$i18n{notInstalled}')]]" + role="button" tabindex="0"> + </app-item> + </template> + </div> </template> <template is="dom-if" if="[[!apps_.length]]"> - <app-home-empty-page></app-home-empty-page> + <app-home-empty-page></app-home-empty-page> </template>
diff --git a/chrome/browser/resources/chromeos/login/oobe.css b/chrome/browser/resources/chromeos/login/oobe.css index 5b411f0..229180a 100644 --- a/chrome/browser/resources/chromeos/login/oobe.css +++ b/chrome/browser/resources/chromeos/login/oobe.css
@@ -98,13 +98,6 @@ } } -#welcome-backdrop { - visibility: hidden; -} - -html.simon-enabled #welcome-backdrop { - visibility: visible; -} button { font-family: inherit; outline: none; @@ -215,16 +208,14 @@ #top-header-bar { display: none; + min-height: 0; + position: absolute; + top: 0; + width: 100%; z-index: 1; } .oobe-display #top-header-bar { - display: block; -} - -.top-header-bar-strip { display: flex; justify-content: flex-end; - min-height: 0; - width: 100%; }
diff --git a/chrome/browser/resources/chromeos/login/oobe.html b/chrome/browser/resources/chromeos/login/oobe.html index 8a9b153f..239f7da9 100644 --- a/chrome/browser/resources/chromeos/login/oobe.html +++ b/chrome/browser/resources/chromeos/login/oobe.html
@@ -24,10 +24,6 @@ <!-- OOBE Start Script --> <script type="module" src="./oobe.js"></script> </head> -<if expr="_google_chrome"> - <img id="welcome-backdrop" src="internal_assets/welcome_backdrop.svg" aria-hidden="true"> -</if> - <custom-style> <style include="oobe-flex-layout-styles"></style> </custom-style> @@ -48,12 +44,10 @@ </div> </div> <div id="top-header-bar"> - <div class="top-header-bar-strip"> - <div id="version-labels" hidden> - <div id="version"></div> - <div id="asset-id"></div> - <div id="bluetooth-name" hidden></div> - </div> + <div id="version-labels" hidden> + <div id="version"></div> + <div id="asset-id"></div> + <div id="bluetooth-name" hidden></div> </div> </div> </body>
diff --git a/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.html b/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.html index 7468925..5218e7e 100644 --- a/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.html +++ b/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.html
@@ -36,7 +36,7 @@ </div> <div slot="bottom-buttons"> <oobe-text-button id="manualRecoveryButton" - on-click="onOldPasswordEntered_" + on-click="onGoToManualRecovery_" text-key="cryptohomeRecoveryManualRecoveryButton"> </oobe-text-button> <oobe-text-button id="retryButton" on-click="onRetry_" @@ -68,4 +68,4 @@ on-click="onReauthButtonClicked_"> </oobe-next-button> </div> -</oobe-adaptive-dialog> \ No newline at end of file +</oobe-adaptive-dialog>
diff --git a/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.js b/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.js index e8c71d4..4a78a47 100644 --- a/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.js +++ b/chrome/browser/resources/chromeos/login/screens/login/cryptohome_recovery.js
@@ -59,6 +59,16 @@ type: Boolean, value: false, }, + + /** + * Whether the buttons on the screen are disabled. Prevents sending double + * requests. + * @private {boolean} + */ + disabled_: { + type: Boolean, + value: false, + }, }; } @@ -91,6 +101,7 @@ reset() { this.setUIStep(CryptohomeRecoveryUIState.LOADING); + this.disabled_ = false; } /** @@ -98,6 +109,7 @@ */ onRecoverySucceeded() { this.setUIStep(CryptohomeRecoveryUIState.DONE); + this.disabled_ = false; } /** @@ -105,6 +117,7 @@ */ onRecoveryFailed() { this.setUIStep(CryptohomeRecoveryUIState.ERROR); + this.disabled_ = false; } /** @@ -112,13 +125,18 @@ */ showReauthNotification() { this.setUIStep(CryptohomeRecoveryUIState.REAUTH_NOTIFICATION); + this.disabled_ = false; } /** * Enter old password button click handler. * @private */ - onOldPasswordEntered_() { + onGoToManualRecovery_() { + if (this.disabled_) { + return; + } + this.disabled_ = true; this.userActed('enter-old-password'); } @@ -127,6 +145,10 @@ * @private */ onRetry_() { + if (this.disabled_) { + return; + } + this.disabled_ = true; this.userActed('retry'); } @@ -135,6 +157,10 @@ * @private */ onDone_() { + if (this.disabled_) { + return; + } + this.disabled_ = true; this.userActed('done'); } @@ -143,6 +169,10 @@ * @private */ onReauthButtonClicked_() { + if (this.disabled_) { + return; + } + this.disabled_ = true; this.userActed('reauth'); }
diff --git a/chrome/browser/resources/chromeos/login/screens/login/gaia_password_changed.js b/chrome/browser/resources/chromeos/login/screens/login/gaia_password_changed.js index 76f9834..3640d24c 100644 --- a/chrome/browser/resources/chromeos/login/screens/login/gaia_password_changed.js +++ b/chrome/browser/resources/chromeos/login/screens/login/gaia_password_changed.js
@@ -276,6 +276,7 @@ if (this.disabled) { return; } + this.disabled = true; this.userActed('cancel'); } }
diff --git a/chrome/browser/resources/new_tab_page/customize_backgrounds.ts b/chrome/browser/resources/new_tab_page/customize_backgrounds.ts index f8c5f04..69f9310c 100644 --- a/chrome/browser/resources/new_tab_page/customize_backgrounds.ts +++ b/chrome/browser/resources/new_tab_page/customize_backgrounds.ts
@@ -172,11 +172,15 @@ } revertBackgroundChanges() { - this.pageHandler_.revertBackgroundChanges(); + if (!this.customBackgroundDisabledByPolicy_) { + this.pageHandler_.revertBackgroundChanges(); + } } confirmBackgroundChanges() { - this.pageHandler_.confirmBackgroundChanges(); + if (!this.customBackgroundDisabledByPolicy_) { + this.pageHandler_.confirmBackgroundChanges(); + } } }
diff --git a/chrome/browser/resources/password_manager/checkup_section.ts b/chrome/browser/resources/password_manager/checkup_section.ts index 7446bc4a..267db247 100644 --- a/chrome/browser/resources/password_manager/checkup_section.ts +++ b/chrome/browser/resources/password_manager/checkup_section.ts
@@ -301,7 +301,8 @@ return 'checkup_result_banner_error'; } - if (this.computeIsCheckRunning_()) { + if (this.computeIsCheckRunning_() || + this.status_.state === CheckState.NO_PASSWORDS) { return 'checkup_result_banner_running'; } if (this.computeIsCheckSuccessful_()) {
diff --git a/chrome/browser/resources/side_panel/companion/companion.ts b/chrome/browser/resources/side_panel/companion/companion.ts index fb075ea9..96350f4 100644 --- a/chrome/browser/resources/side_panel/companion/companion.ts +++ b/chrome/browser/resources/side_panel/companion/companion.ts
@@ -33,7 +33,13 @@ // Handler for postMessage() calls from the embedded iframe. function onCompanionMessageEvent(event: MessageEvent) { - if (event.origin !== loadTimeData.getString('companion_origin')) { + // Because the |companion_origin| string has a trailing slash that can cause + // failures when doing a string comparison, convert the string to a URL and + // compare the origin to prevent failures when origins are the same but + // strings differ. + const validOrigin = + new URL(loadTimeData.getString('companion_origin')).origin; + if (validOrigin !== event.origin) { return; }
diff --git a/chrome/browser/resources/suggest_internals/app.html b/chrome/browser/resources/suggest_internals/app.html index ea04586fd7..e46cc45 100644 --- a/chrome/browser/resources/suggest_internals/app.html +++ b/chrome/browser/resources/suggest_internals/app.html
@@ -5,8 +5,12 @@ overflow: hidden; } + cr-button { + width: 100%; + } + cr-toolbar { - --cr-toolbar-left-spacer-width: 300px; + --cr-toolbar-left-spacer-width: 500px; } #requests { @@ -17,11 +21,53 @@ [slot='header'] { padding: 0 var(--cr-section-padding) var(--cr-section-padding); } + + .upload-container { + position: relative; + } + + .upload-container input[type=file] { + position: absolute; + top:0; + left:0; + width: 100%; + height: 100%; + opacity: 0; + cursor: pointer; + } </style> <cr-toolbar page-name="Suggest Debug Tool" search-prompt="Filter requests" clear-label="Clear filter" on-search-changed="onFilterChanged_" - always-show-logo show-search> + always-show-logo show-search show-menu on-cr-toolbar-menu-tap="showOutputControls_"> </cr-toolbar> +<cr-drawer id="drawer" heading="Output controls"> + <div slot="body"> + <cr-button title="export requests to clipboard" on-click="onCopyClick_"> + Copy + <iron-icon icon="cr:insert-drive-file" slot="suffix-icon"></iron-icon> + </cr-button> + <cr-button title="Download requests in JSON format." on-click="onDownloadClick_"> + Download + <iron-icon icon="cr:file-download" slot="suffix-icon"></iron-icon> + </cr-button> + <cr-button title="Import requests from clipboard." on-click="onPasteClick_"> + Paste + <iron-icon icon="cr:insert-drive-file" slot="suffix-icon"></iron-icon> + </cr-button> + <div class="upload-container"> + <cr-button> + Upload + <iron-icon icon="cr:insert-drive-file" slot="suffix-icon"></iron-icon> + </cr-button> + <input placeholder="Upload previously downloaded requests to load them." on-change="onImportFile_" type="file" accept=".json"> + </div> + <cr-button title="Clears the result list" on-click="onClearClick_"> + Clear + <iron-icon icon="cr:delete" slot="suffix-icon"></iron-icon> + </cr-button> + </div> +</cr-drawer> + <div id="requests"> <template is="dom-if" if="[[hardcodedRequest_]]"> <suggest-request request="[[hardcodedRequest_]]"
diff --git a/chrome/browser/resources/suggest_internals/app.ts b/chrome/browser/resources/suggest_internals/app.ts index 963d0bd..bf2de99 100644 --- a/chrome/browser/resources/suggest_internals/app.ts +++ b/chrome/browser/resources/suggest_internals/app.ts
@@ -12,8 +12,10 @@ import '//resources/cr_elements/cr_button/cr_button.js'; import '//resources/cr_elements/cr_dialog/cr_dialog.js'; import '//resources/cr_elements/cr_toolbar/cr_toolbar.js'; +import '//resources/cr_elements/cr_drawer/cr_drawer.js'; import {CrDialogElement} from '//resources/cr_elements/cr_dialog/cr_dialog.js'; +import {CrDrawerElement} from '//resources/cr_elements/cr_drawer/cr_drawer.js'; import {CrToastElement} from '//resources/cr_elements/cr_toast/cr_toast.js'; import {assert} from 'chrome://resources/js/assert_ts.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -27,6 +29,7 @@ toast: CrToastElement, viewRequestDialog: CrDialogElement, viewResponseDialog: CrDialogElement, + drawer: CrDrawerElement, }; } @@ -91,6 +94,10 @@ this.suggestionsRequestCompletedListenerId_); } + private onClearClick_() { + this.requests_ = []; + } + private onClientDataLinkClick_() { window.open('http://protoshop/webserver.gws.ClientDataHeader'); } @@ -109,6 +116,22 @@ this.$.hardcodeResponseDialog.close(); } + private onCopyClick_() { + navigator.clipboard.writeText(this.stringifyRequests_()) + .catch(error => console.error('unable to copy to clipboard:', error)); + } + + private onDownloadClick_() { + const a = document.createElement('a'); + const file = + new Blob([this.stringifyRequests_()], {type: 'application/json'}); + a.href = URL.createObjectURL(file); + const iso = (new Date()).toISOString(); + iso.replace(/:/g, '').split('.')[0]!; + a.download = `suggest_internals_export_${iso}.json`; + a.click(); + } + private onEntityInfoLinkClick_() { window.open('http://protoshop/gws.searchbox.chrome.EntityInfo'); } @@ -121,6 +144,21 @@ window.open('http://protoshop/gws.searchbox.chrome.GroupsInfo'); } + private onImportFile_(event: Event) { + const file = (event.target as HTMLInputElement).files?.[0]; + if (!file) { + return; + } + + this.readFile(file).then((importString: string) => { + try { + this.requests_ = JSON.parse(importString); + } catch (error) { + console.error('error during import, invalid json:', error); + } + }); + } + private onOpenHardcodeResponseDialog_(e: CustomEvent<string>) { this.responseText_ = e.detail; this.$.hardcodeResponseDialog.showModal(); @@ -134,6 +172,10 @@ this.$.viewResponseDialog.showModal(); } + private async onPasteClick_() { + this.requests_ = JSON.parse(await navigator.clipboard.readText()); + } + private onShowToast_(e: CustomEvent<string>) { this.toastMessage_ = e.detail; this.$.toast.show(); @@ -157,10 +199,34 @@ } } + private readFile(file: File): Promise<string> { + return new Promise(resolve => { + const reader = new FileReader(); + reader.onloadend = () => { + if (reader.readyState === FileReader.DONE) { + resolve(reader.result as string); + } else { + console.error('error importing, unable to read file:', reader.error); + } + }; + reader.readAsText(file); + }); + } + private requestFilter_(): (request: Request) => boolean { const filter = this.filter_.trim().toLowerCase(); return request => request.url.url.toLowerCase().includes(filter); } + + private showOutputControls_() { + this.$.drawer.openDrawer(); + } + + private stringifyRequests_() { + return JSON.stringify( + this.requests_, + (_key, value) => typeof value === 'bigint' ? value.toString() : value); + } } declare global {
diff --git a/chrome/browser/safe_browsing/chrome_ping_manager_factory.cc b/chrome/browser/safe_browsing/chrome_ping_manager_factory.cc index ac23f87c..09ae21a 100644 --- a/chrome/browser/safe_browsing/chrome_ping_manager_factory.cc +++ b/chrome/browser/safe_browsing/chrome_ping_manager_factory.cc
@@ -17,7 +17,7 @@ #include "components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.h" #include "components/safe_browsing/core/browser/sync/sync_utils.h" #include "components/safe_browsing/core/common/features.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" namespace safe_browsing {
diff --git a/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc b/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc index bee7e995..63ee7fc0 100644 --- a/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc +++ b/chrome/browser/safe_browsing/client_side_detection_host_browsertest.cc
@@ -22,7 +22,7 @@ #include "components/safe_browsing/core/common/features.h" #include "components/safe_browsing/core/common/proto/client_model.pb.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_test.h" #include "content/public/test/mock_navigation_handle.h" #include "content/public/test/prerender_test_util.h"
diff --git a/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc b/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc index 5994f4b..46b5f7f 100644 --- a/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc +++ b/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc
@@ -49,7 +49,7 @@ #include "components/safe_browsing/core/common/features.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h" #include "components/signin/public/identity_manager/identity_test_environment.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/download_item_utils.h" #include "content/public/test/browser_task_environment.h" #include "crypto/sha2.h"
diff --git a/chrome/browser/safe_browsing/download_protection/download_url_sb_client.cc b/chrome/browser/safe_browsing/download_protection/download_url_sb_client.cc index a82c3c20..a9c00eb1 100644 --- a/chrome/browser/safe_browsing/download_protection/download_url_sb_client.cc +++ b/chrome/browser/safe_browsing/download_protection/download_url_sb_client.cc
@@ -12,7 +12,7 @@ #include "components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.h" #include "components/safe_browsing/content/browser/ui_manager.h" #include "components/safe_browsing/core/common/features.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/download_item_utils.h" namespace safe_browsing {
diff --git a/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_persister_unittest.cc b/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_persister_unittest.cc index 437c53d..c2546dac 100644 --- a/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_persister_unittest.cc +++ b/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_persister_unittest.cc
@@ -13,7 +13,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_paths.h" #include "chrome/test/base/testing_profile.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/safe_browsing/threat_details_unittest.cc b/chrome/browser/safe_browsing/threat_details_unittest.cc index 5db3c7be..694cd41 100644 --- a/chrome/browser/safe_browsing/threat_details_unittest.cc +++ b/chrome/browser/safe_browsing/threat_details_unittest.cc
@@ -44,6 +44,7 @@ #include "net/base/net_errors.h" #include "net/http/http_util.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" +#include "services/network/public/mojom/fetch_api.mojom.h" #include "services/network/public/mojom/url_response_head.mojom.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gmock/include/gmock/gmock-matchers.h" @@ -279,6 +280,9 @@ web_contents()->GetPrimaryMainFrame()->GetGlobalId(); resource->url = url; resource->is_subresource = is_subresource; + resource->request_destination = + is_subresource ? network::mojom::RequestDestination::kScript + : network::mojom::RequestDestination::kDocument; resource->threat_type = threat_type; resource->threat_source = threat_source; resource->render_process_id = primary_main_frame_id.child_id; @@ -290,6 +294,8 @@ EXPECT_EQ(expected_pb.type(), report_pb.type()); EXPECT_EQ(expected_pb.url(), report_pb.url()); EXPECT_EQ(expected_pb.page_url(), report_pb.page_url()); + EXPECT_EQ(expected_pb.url_request_destination(), + report_pb.url_request_destination()); EXPECT_EQ(expected_pb.referrer_url(), report_pb.referrer_url()); EXPECT_EQ(expected_pb.did_proceed(), report_pb.did_proceed()); EXPECT_EQ(expected_pb.has_repeat_visit(), report_pb.has_repeat_visit()); @@ -462,6 +468,7 @@ ClientSafeBrowsingReportRequest expected; expected.set_type(ClientSafeBrowsingReportRequest::URL_MALWARE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); // The referrer is stripped to its origin because it's a cross-origin URL. expected.set_referrer_url( @@ -521,6 +528,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::PVER4_NATIVE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); // The referrer is stripped to its origin because it's a cross-origin URL. expected.set_referrer_url( @@ -572,6 +580,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::PVER4_NATIVE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(false); @@ -639,6 +648,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::PVER4_NATIVE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(false); @@ -756,6 +766,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::PVER4_NATIVE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(false); @@ -964,6 +975,7 @@ ClientSafeBrowsingReportRequest expected; expected.set_type(ClientSafeBrowsingReportRequest::URL_UNWANTED); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(false); @@ -1175,6 +1187,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::PVER4_NATIVE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(false); @@ -1411,6 +1424,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::ANDROID_SAFETYNET); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(true); @@ -1488,6 +1502,8 @@ ClientSafeBrowsingReportRequest expected; expected.set_type(ClientSafeBrowsingReportRequest::URL_MALWARE); expected.set_url(kLandingURL); + expected.set_url_request_destination( + ClientSafeBrowsingReportRequest::DOCUMENT); expected.set_page_url(kLandingURL); // Note that the referrer policy is not actually enacted here, since that's // done in Blink. @@ -1548,6 +1564,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::PVER4_NATIVE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); // The referrer is stripped to its origin because it's a cross-origin URL. expected.set_referrer_url( @@ -1598,6 +1615,7 @@ ClientSafeBrowsingReportRequest expected; expected.set_type(ClientSafeBrowsingReportRequest::URL_MALWARE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_did_proceed(true); expected.set_repeat_visit(true); @@ -1644,6 +1662,7 @@ ClientSafeBrowsingReportRequest expected; expected.set_type(ClientSafeBrowsingReportRequest::URL_CLIENT_SIDE_PHISHING); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(true); @@ -1725,6 +1744,7 @@ ClientSafeBrowsingReportRequest expected; expected.set_type(ClientSafeBrowsingReportRequest::URL_CLIENT_SIDE_PHISHING); expected.set_url(kThreatURLHttps); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(true); @@ -1811,6 +1831,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::PVER4_NATIVE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(false); @@ -1870,6 +1891,7 @@ expected.mutable_client_properties()->set_url_api_type( ClientSafeBrowsingReportRequest::PVER4_NATIVE); expected.set_url(kThreatURL); + expected.set_url_request_destination(ClientSafeBrowsingReportRequest::SCRIPT); expected.set_page_url(kLandingURL); expected.set_referrer_url(""); expected.set_did_proceed(true);
diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc index bb26b01..1110543 100644 --- a/chrome/browser/sessions/session_restore_browsertest.cc +++ b/chrome/browser/sessions/session_restore_browsertest.cc
@@ -543,18 +543,10 @@ const gfx::Size contents_size = restored->window()->GetContentsSize(); for (int i = 0; i < tab_strip_model->count(); ++i) { content::WebContents* contents = tab_strip_model->GetWebContentsAt(i); - int width = 0; - const char kGetWidthJS[] = - "window.domAutomationController.send(" - "window.innerWidth);"; - EXPECT_TRUE( - content::ExecuteScriptAndExtractInt(contents, kGetWidthJS, &width)); - int height = 0; - const char kGetHeigthJS[] = - "window.domAutomationController.send(" - "window.innerHeight);"; - EXPECT_TRUE( - content::ExecuteScriptAndExtractInt(contents, kGetHeigthJS, &height)); + const char kGetWidthJS[] = "window.innerWidth;"; + int width = content::EvalJs(contents, kGetWidthJS).ExtractInt(); + const char kGetHeigthJS[] = "window.innerHeight;"; + int height = content::EvalJs(contents, kGetHeigthJS).ExtractInt(); const gfx::Size tab_size(width, height); EXPECT_EQ(contents_size, tab_size); } @@ -4048,12 +4040,9 @@ content::WebContents* restored_contents = active_browser_list_->get(0)->tab_strip_model()->GetWebContentsAt(0); EXPECT_EQ(GetUrl3(), restored_contents->GetLastCommittedURL()); - int entries_length = 0; - const char kCheckEntriesLength[] = - "window.domAutomationController.send(" - "navigation.entries().length);"; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - restored_contents, kCheckEntriesLength, &entries_length)); + const char kCheckEntriesLength[] = "navigation.entries().length;"; + int entries_length = + content::EvalJs(restored_contents, kCheckEntriesLength).ExtractInt(); EXPECT_EQ(entries_length, 3); EXPECT_TRUE(content::ExecuteScriptAndExtractBool( restored_contents, kCheckEntry1Js, &url1_is_censored));
diff --git a/chrome/browser/sharing/sharing_device_source_sync.cc b/chrome/browser/sharing/sharing_device_source_sync.cc index bd070e3..7002d76 100644 --- a/chrome/browser/sharing/sharing_device_source_sync.cc +++ b/chrome/browser/sharing/sharing_device_source_sync.cc
@@ -21,7 +21,7 @@ #include "components/sync_device_info/device_info.h" #include "components/sync_device_info/local_device_info_provider.h" #include "components/sync_device_info/local_device_info_util.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" using sync_pb::SharingSpecificFields;
diff --git a/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc b/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc index 9cc82b83..1aa5ad2b 100644 --- a/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc +++ b/chrome/browser/site_isolation/site_per_process_interactive_browsertest.cc
@@ -632,13 +632,9 @@ // Helper to retrieve the frame's (window.innerWidth, window.innerHeight). gfx::Size GetFrameSize(content::RenderFrameHost* frame) { - int width = 0; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - frame, "domAutomationController.send(window.innerWidth);", &width)); + int width = EvalJs(frame, "window.innerWidth;").ExtractInt(); - int height = 0; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - frame, "domAutomationController.send(window.innerHeight);", &height)); + int height = EvalJs(frame, "window.innerHeight;").ExtractInt(); return gfx::Size(width, height); }
diff --git a/chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc b/chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc index 8bcc7283..8acc30b 100644 --- a/chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc +++ b/chrome/browser/ssl/captive_portal_blocking_page_browsertest.cc
@@ -37,7 +37,7 @@ #include "components/security_interstitials/content/ssl_cert_reporter.h" #include "components/security_state/core/security_state.h" #include "components/variations/variations_params_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test.h"
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc index e4199ae..e9b9215 100644 --- a/chrome/browser/ssl/ssl_browsertest.cc +++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -395,13 +395,12 @@ // Send CMD_TEXT_FOUND to indicate that the 'hidden' class is found, and // CMD_TEXT_NOT_FOUND if not. std::string command = base::StringPrintf( - "window.domAutomationController.send(document.querySelector('#%s')" + "document.querySelector('#%s')" " .classList.contains('hidden')" - " ? %d : %d);", + " ? %d : %d;", element_id.c_str(), security_interstitials::CMD_TEXT_FOUND, security_interstitials::CMD_TEXT_NOT_FOUND); - int result = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt(frame, command, &result)); + int result = content::EvalJs(frame, command).ExtractInt(); EXPECT_EQ(expect_hidden ? security_interstitials::CMD_TEXT_FOUND : security_interstitials::CMD_TEXT_NOT_FOUND, result); @@ -2488,10 +2487,7 @@ EXPECT_EQ(2u, chrome::GetBrowserCount(browser()->profile())); // In order to check that the image was loaded, check its width. // The actual image (Google logo) is 276 pixels wide. - int img_width = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - tab, "window.domAutomationController.send(ImageWidth());", &img_width)); - EXPECT_EQ(img_width, 276); + EXPECT_EQ(276, content::EvalJs(tab, "ImageWidth();")); // Check that variable |foo| is set. bool js_result = false; EXPECT_TRUE(content::ExecuteScriptAndExtractBool( @@ -2514,10 +2510,7 @@ // Previous popup is still open. EXPECT_EQ(2u, chrome::GetBrowserCount(browser()->profile())); // The broken image width is zero. - int img_width = 99; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - tab, "window.domAutomationController.send(ImageWidth());", &img_width)); - EXPECT_EQ(img_width, 16); + EXPECT_EQ(16, content::EvalJs(tab, "ImageWidth();")); // Check that variable |foo| is not set. bool js_result = false; EXPECT_TRUE(content::ExecuteScriptAndExtractBool( @@ -3806,13 +3799,10 @@ EXPECT_TRUE(visible_security_state->ran_content_with_cert_errors); EXPECT_TRUE(visible_security_state->displayed_content_with_cert_errors); - int img_width; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - tab, "window.domAutomationController.send(ImageWidth());", &img_width)); // In order to check that the image was loaded, we check its width. // The actual image (Google logo) is 114 pixels wide, so we assume a good // image is greater than 100. - EXPECT_GT(img_width, 100); + EXPECT_GT(content::EvalJs(tab, "ImageWidth();"), 100); bool js_result = false; EXPECT_TRUE(content::ExecuteScriptAndExtractBool( @@ -3856,13 +3846,10 @@ EXPECT_TRUE(visible_security_state->displayed_content_with_cert_errors); EXPECT_EQ(0u, visible_security_state->cert_status); - int img_width; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - tab, "window.domAutomationController.send(ImageWidth());", &img_width)); // In order to check that the image was loaded, we check its width. // The actual image (Google logo) is 114 pixels wide, so we assume a good // image is greater than 100. - EXPECT_GT(img_width, 100); + EXPECT_GT(content::EvalJs(tab, "ImageWidth();"), 100); } // Test that when the browser blocks displaying insecure content (iframes), @@ -3998,10 +3985,7 @@ ssl_test_util::CheckAuthenticatedState(tab, AuthState::NONE); // In order to check that the image was loaded, check its width. // The actual image (Google logo) is 276 pixels wide. - int img_width = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - tab, "window.domAutomationController.send(ImageWidth());", &img_width)); - EXPECT_GT(img_width, 200); + EXPECT_GT(content::EvalJs(tab, "ImageWidth();"), 200); } #endif // !BUILDFLAG(IS_CHROMEOS_ASH) @@ -4114,14 +4098,12 @@ content::RenderFrameHost* child = content::ChildFrameAt(tab->GetPrimaryMainFrame(), 0); ASSERT_TRUE(child); - int result = security_interstitials::CMD_ERROR; const std::string javascript = base::StringPrintf( - "domAutomationController.send(" "(document.querySelector(\"#proceed-link\") === null) " - "? (%d) : (%d))", + "? (%d) : (%d)", security_interstitials::CMD_TEXT_NOT_FOUND, security_interstitials::CMD_TEXT_FOUND); - ASSERT_TRUE(content::ExecuteScriptAndExtractInt(child, javascript, &result)); + int result = content::EvalJs(child, javascript).ExtractInt(); EXPECT_EQ(security_interstitials::CMD_TEXT_NOT_FOUND, result); } @@ -4144,15 +4126,13 @@ ASSERT_TRUE(chrome_browser_interstitials::IsShowingSSLInterstitial(tab)); - int result = security_interstitials::CMD_ERROR; const std::string javascript = base::StringPrintf( - "domAutomationController.send(" "(document.querySelector(\"#proceed-link\") === null) " - "? (%d) : (%d))", + "? (%d) : (%d)", security_interstitials::CMD_TEXT_NOT_FOUND, security_interstitials::CMD_TEXT_FOUND); - ASSERT_TRUE(content::ExecuteScriptAndExtractInt(tab->GetPrimaryMainFrame(), - javascript, &result)); + int result = + content::EvalJs(tab->GetPrimaryMainFrame(), javascript).ExtractInt(); EXPECT_EQ(security_interstitials::CMD_TEXT_NOT_FOUND, result); }
diff --git a/chrome/browser/sync/prefs/chrome_syncable_prefs_database.cc b/chrome/browser/sync/prefs/chrome_syncable_prefs_database.cc index 7ea1802c..cf17889 100644 --- a/chrome/browser/sync/prefs/chrome_syncable_prefs_database.cc +++ b/chrome/browser/sync/prefs/chrome_syncable_prefs_database.cc
@@ -242,6 +242,7 @@ kDynamicColorColorScheme = 100196, kDynamicColorSeedColor = 100197, kLongPressDiacritics = 100198, + kSidePanelCompanionEntryPinnedToToolbar = 100199, }; } // namespace syncable_prefs_ids @@ -307,6 +308,9 @@ syncer::PREFERENCES}}, {prefs::kShowHomeButton, {syncable_prefs_ids::kShowHomeButton, syncer::PREFERENCES}}, + {prefs::kSidePanelCompanionEntryPinnedToToolbar, + {syncable_prefs_ids::kSidePanelCompanionEntryPinnedToToolbar, + syncer::PREFERENCES}}, #endif // BUILDFLAG(IS_ANDROID) #if BUILDFLAG(ENABLE_EXTENSIONS) {extensions::pref_names::kPinnedExtensions,
diff --git a/chrome/browser/tab/BUILD.gn b/chrome/browser/tab/BUILD.gn index 586d0fb1..6b70279b 100644 --- a/chrome/browser/tab/BUILD.gn +++ b/chrome/browser/tab/BUILD.gn
@@ -79,7 +79,6 @@ "//chrome/browser/endpoint_fetcher:java", "//chrome/browser/flags:java", "//chrome/browser/optimization_guide/android:java", - "//chrome/browser/page_annotations/android:java", "//chrome/browser/preferences:java", "//chrome/browser/profiles/android:java", "//chrome/browser/ui/android/native_page:java",
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/DEPS b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/DEPS index 7fc94a81..0bdf417d 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/DEPS +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/DEPS
@@ -1,6 +1,5 @@ include_rules = [ "+chrome/browser/tabpersistence", - "+chrome/browser/page_annotations", "+components/payments/content/android", "+net/android", ]
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java index 33b5749..2d1a0bd 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/ShoppingPersistedTabData.java
@@ -22,11 +22,6 @@ import org.chromium.chrome.browser.commerce.PriceUtils; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeFactory; -import org.chromium.chrome.browser.page_annotations.BuyableProductPageAnnotation; -import org.chromium.chrome.browser.page_annotations.PageAnnotation; -import org.chromium.chrome.browser.page_annotations.PageAnnotationUtils; -import org.chromium.chrome.browser.page_annotations.PageAnnotationsServiceFactory; -import org.chromium.chrome.browser.page_annotations.ProductPriceUpdatePageAnnotation; import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.proto.ShoppingPersistedTabData.ShoppingPersistedTabDataProto; @@ -90,10 +85,6 @@ @VisibleForTesting public static final long NO_PRICE_KNOWN = -1; - @VisibleForTesting - protected static PageAnnotationsServiceFactory sPageAnnotationsServiceFactory = - new PageAnnotationsServiceFactory(); - private static boolean sPriceTrackingWithOptimizationGuideForTesting; private static Queue<ShoppingDataRequest> sShoppingDataRequests = new ArrayDeque<>(); @@ -502,53 +493,44 @@ return; } - if (isPriceTrackingWithOptimizationGuideEnabled()) { - OptimizationGuideBridgeFactoryHolder.sOptimizationGuideBridgeFactory - .create() - .canApplyOptimization(tab.getUrl(), - HintsProto.OptimizationType.PRICE_TRACKING, - (decision, metadata) -> { - if (tab.isDestroyed()) { - supplierCallback.onResult(null); - return; - } - if (decision != OptimizationGuideDecision.TRUE) { - ShoppingPersistedTabData res = - getEmptyShoppingPersistedTabData(tab); - res.logPriceDropMetrics( - METRICS_IDENTIFIER_PREFIX); - supplierCallback.onResult(res); - return; - } - try { - PriceTrackingData priceTrackingDataProto = - PriceTrackingData.parseFrom( - metadata.getValue()); - ShoppingPersistedTabData sptd = - ShoppingPersistedTabData.from(tab); - sptd.parsePriceTrackingDataProto( - tab, priceTrackingDataProto, previous); - sptd.logPriceDropMetrics( - METRICS_IDENTIFIER_PREFIX); - supplierCallback.onResult(sptd); - } catch (InvalidProtocolBufferException e) { - Log.i(TAG, - String.format(Locale.US, - "There was a problem " - + "parsing " - + "PriceTracking" - + "DataProto. " - + "Details %s.", - e)); - supplierCallback.onResult(null); - } - }); - } else { - sPageAnnotationsServiceFactory.getForLastUsedProfile().getAnnotations( - tab.getUrl(), (result) -> { - supplierCallback.onResult(build(tab, result, previous)); - }); - } + OptimizationGuideBridgeFactoryHolder.sOptimizationGuideBridgeFactory + .create() + .canApplyOptimization(tab.getUrl(), + HintsProto.OptimizationType.PRICE_TRACKING, + (decision, metadata) -> { + if (tab.isDestroyed()) { + supplierCallback.onResult(null); + return; + } + if (decision != OptimizationGuideDecision.TRUE) { + ShoppingPersistedTabData res = + getEmptyShoppingPersistedTabData(tab); + res.logPriceDropMetrics(METRICS_IDENTIFIER_PREFIX); + supplierCallback.onResult(res); + return; + } + try { + PriceTrackingData priceTrackingDataProto = + PriceTrackingData.parseFrom( + metadata.getValue()); + ShoppingPersistedTabData sptd = + ShoppingPersistedTabData.from(tab); + sptd.parsePriceTrackingDataProto( + tab, priceTrackingDataProto, previous); + sptd.logPriceDropMetrics(METRICS_IDENTIFIER_PREFIX); + supplierCallback.onResult(sptd); + } catch (InvalidProtocolBufferException e) { + Log.i(TAG, + String.format(Locale.US, + "There was a problem " + + "parsing " + + "PriceTracking" + + "DataProto. " + + "Details %s.", + e)); + supplierCallback.onResult(null); + } + }); }); }, ShoppingPersistedTabData.class, callback); @@ -636,49 +618,6 @@ mIsTabSaveEnabledSupplier.set(false); } - private static ShoppingPersistedTabData build( - Tab tab, List<PageAnnotation> annotations, PriceDataSnapshot previousPricingData) { - ShoppingPersistedTabData res = ShoppingPersistedTabData.from(tab); - @FoundBuyableProductAnnotation - int foundBuyableProductAnnotation = FoundBuyableProductAnnotation.NOT_FOUND; - - BuyableProductPageAnnotation buyableProduct = - PageAnnotationUtils.getAnnotation(annotations, BuyableProductPageAnnotation.class); - - ProductPriceUpdatePageAnnotation productPriceUpdate = PageAnnotationUtils.getAnnotation( - annotations, ProductPriceUpdatePageAnnotation.class); - - if (buyableProduct != null && productPriceUpdate != null) { - res.setPriceMicros(productPriceUpdate.getNewPriceMicros()); - res.setPreviousPriceMicros(productPriceUpdate.getOldPriceMicros()); - res.setCurrencyCode(productPriceUpdate.getCurrencyCode()); - res.setLastUpdatedMs(System.currentTimeMillis()); - res.setMainOfferId(buyableProduct.getOfferId()); - res.setPriceDropGurl(tab.getUrl()); - foundBuyableProductAnnotation = FoundBuyableProductAnnotation.FOUND_WITH_PRICE_UPDATE; - } else if (buyableProduct != null) { - res.setPriceMicros(buyableProduct.getCurrentPriceMicros(), previousPricingData); - res.setCurrencyCode(buyableProduct.getCurrencyCode()); - res.setLastUpdatedMs(System.currentTimeMillis()); - res.setMainOfferId(buyableProduct.getOfferId()); - res.setPriceDropGurl(tab.getUrl()); - foundBuyableProductAnnotation = FoundBuyableProductAnnotation.FOUND; - } - - RecordHistogram.recordEnumeratedHistogram( - "Tabs.ShoppingPersistedTabData.FoundBuyableProductAnnotation", - foundBuyableProductAnnotation, FoundBuyableProductAnnotation.NUM_ENTRIES); - // Only persist this ShoppingPersistedTabData if it was correctly populated from the - // response - if (foundBuyableProductAnnotation == FoundBuyableProductAnnotation.FOUND - || foundBuyableProductAnnotation - == FoundBuyableProductAnnotation.FOUND_WITH_PRICE_UPDATE) { - res.enableSaving(); - return res; - } - return null; - } - @VisibleForTesting protected void parsePriceTrackingDataProto( Tab tab, PriceTrackingData priceTrackingData, PriceDataSnapshot previousPricingData) {
diff --git a/chrome/browser/task_manager/task_manager_browsertest.cc b/chrome/browser/task_manager/task_manager_browsertest.cc index ac74d2b..dd74e02 100644 --- a/chrome/browser/task_manager/task_manager_browsertest.cc +++ b/chrome/browser/task_manager/task_manager_browsertest.cc
@@ -311,11 +311,11 @@ // SiteInstance. Then immediately hang the renderer so that title3.html can't // load in this process. content::WebContentsAddedObserver web_contents_added_observer; - int dummy_value = 0; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( + bool dummy_value; + ASSERT_TRUE(content::ExecuteScriptAndExtractBool( tab1->GetPrimaryMainFrame(), "window.open('title3.html', '_blank');\n" - "window.domAutomationController.send(55);\n" + "window.domAutomationController.send(false);\n" "while(1);", &dummy_value));
diff --git a/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardControllerRobolectricTest.java b/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardControllerRobolectricTest.java index e846cebc..a6829a0 100644 --- a/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardControllerRobolectricTest.java +++ b/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardControllerRobolectricTest.java
@@ -19,6 +19,7 @@ import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardMediator.TOUCH_TO_FILL_INDEX_SELECTED; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardMediator.TOUCH_TO_FILL_NUMBER_OF_CARDS_SHOWN; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardMediator.TOUCH_TO_FILL_OUTCOME_HISTOGRAM; +import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardMediator.TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardProperties.CreditCardProperties.CARD_NAME; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardProperties.CreditCardProperties.CARD_NUMBER; import static org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardProperties.CreditCardProperties.NETWORK_NAME; @@ -51,6 +52,7 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.Batch; +import org.chromium.base.test.util.HistogramWatcher; import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard; import org.chromium.chrome.browser.touch_to_fill.common.BottomSheetFocusHelper; import org.chromium.chrome.browser.touch_to_fill.payments.TouchToFillCreditCardMediator.TouchToFillCreditCardOutcome; @@ -186,6 +188,10 @@ assertEquals(1, RecordHistogram.getHistogramValueCountForTesting(TOUCH_TO_FILL_OUTCOME_HISTOGRAM, TouchToFillCreditCardOutcome.SCAN_NEW_CARD)); + assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED, + TouchToFillCreditCardOutcome.SCAN_NEW_CARD)); } @Test @@ -200,6 +206,10 @@ assertEquals(1, RecordHistogram.getHistogramValueCountForTesting(TOUCH_TO_FILL_OUTCOME_HISTOGRAM, TouchToFillCreditCardOutcome.MANAGE_PAYMENTS)); + assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED, + TouchToFillCreditCardOutcome.MANAGE_PAYMENTS)); } @Test @@ -220,6 +230,10 @@ RecordHistogram.getHistogramValueCountForTesting( TOUCH_TO_FILL_OUTCOME_HISTOGRAM, TouchToFillCreditCardOutcome.CREDIT_CARD)); assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED, + TouchToFillCreditCardOutcome.CREDIT_CARD)); + assertEquals(1, RecordHistogram.getHistogramValueCountForTesting(TOUCH_TO_FILL_INDEX_SELECTED, 0)); } @@ -242,6 +256,10 @@ RecordHistogram.getHistogramValueCountForTesting(TOUCH_TO_FILL_OUTCOME_HISTOGRAM, TouchToFillCreditCardOutcome.VIRTUAL_CARD)); assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED, + TouchToFillCreditCardOutcome.VIRTUAL_CARD)); + assertEquals(1, RecordHistogram.getHistogramValueCountForTesting(TOUCH_TO_FILL_INDEX_SELECTED, 0)); } @@ -262,13 +280,28 @@ } @Test - public void testDismissWithNoAction() { + public void testDismissWithSwipe() { mCoordinator.showSheet(new CreditCard[] {VISA, MASTER_CARD}, true); mTouchToFillCreditCardModel.get(DISMISS_HANDLER).onResult(StateChangeReason.SWIPE); assertEquals(1, RecordHistogram.getHistogramValueCountForTesting( TOUCH_TO_FILL_OUTCOME_HISTOGRAM, TouchToFillCreditCardOutcome.DISMISS)); + assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED, + TouchToFillCreditCardOutcome.DISMISS)); + } + + @Test + public void testDismissWithTap() { + HistogramWatcher metricsWatcher = HistogramWatcher.newSingleRecordWatcher( + TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED, TouchToFillCreditCardOutcome.DISMISS); + mCoordinator.showSheet(new CreditCard[] {VISA, MASTER_CARD}, true); + + mTouchToFillCreditCardModel.get(DISMISS_HANDLER).onResult(StateChangeReason.TAP_SCRIM); + + metricsWatcher.assertExpected(); } @Test
diff --git a/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardMediator.java b/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardMediator.java index 7b2c58a..2101d2e 100644 --- a/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardMediator.java +++ b/chrome/browser/touch_to_fill/payments/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/payments/TouchToFillCreditCardMediator.java
@@ -62,6 +62,9 @@ @VisibleForTesting static final String TOUCH_TO_FILL_OUTCOME_HISTOGRAM = "Autofill.TouchToFill.CreditCard.Outcome"; @VisibleForTesting + static final String TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED = + "Autofill.TouchToFill.CreditCard.Outcome2"; + @VisibleForTesting static final String TOUCH_TO_FILL_INDEX_SELECTED = "Autofill.TouchToFill.CreditCard.SelectedIndex"; @VisibleForTesting @@ -118,36 +121,38 @@ public void onDismissed(@StateChangeReason int reason) { if (!mModel.get(VISIBLE)) return; // Dismiss only if not dismissed yet. mModel.set(VISIBLE, false); - boolean dismissedByUser = - reason == StateChangeReason.SWIPE || reason == StateChangeReason.BACK_PRESS; + boolean dismissedByUser = reason == StateChangeReason.SWIPE + || reason == StateChangeReason.BACK_PRESS || reason == StateChangeReason.TAP_SCRIM; mDelegate.onDismissed(dismissedByUser); - if (dismissedByUser) { + // TODO (crbug.com/1247698) Record the old histogram as before to not mix the old and the + // new metrics. Remove after M114 is launched. + if (reason == StateChangeReason.SWIPE || reason == StateChangeReason.BACK_PRESS) { RecordHistogram.recordEnumeratedHistogram(TOUCH_TO_FILL_OUTCOME_HISTOGRAM, TouchToFillCreditCardOutcome.DISMISS, TouchToFillCreditCardOutcome.MAX_VALUE + 1); } + if (dismissedByUser) { + RecordHistogram.recordEnumeratedHistogram(TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED, + TouchToFillCreditCardOutcome.DISMISS, + TouchToFillCreditCardOutcome.MAX_VALUE + 1); + } } public void scanCreditCard() { mDelegate.scanCreditCard(); - RecordHistogram.recordEnumeratedHistogram(TOUCH_TO_FILL_OUTCOME_HISTOGRAM, - TouchToFillCreditCardOutcome.SCAN_NEW_CARD, - TouchToFillCreditCardOutcome.MAX_VALUE + 1); + recordTouchToFillOutcomeHistogram(TouchToFillCreditCardOutcome.SCAN_NEW_CARD); } public void showCreditCardSettings() { mDelegate.showCreditCardSettings(); - RecordHistogram.recordEnumeratedHistogram(TOUCH_TO_FILL_OUTCOME_HISTOGRAM, - TouchToFillCreditCardOutcome.MANAGE_PAYMENTS, - TouchToFillCreditCardOutcome.MAX_VALUE + 1); + recordTouchToFillOutcomeHistogram(TouchToFillCreditCardOutcome.MANAGE_PAYMENTS); } public void onSelectedCreditCard(CreditCard card) { mDelegate.suggestionSelected(card.getGUID(), card.getIsVirtual()); - RecordHistogram.recordEnumeratedHistogram(TOUCH_TO_FILL_OUTCOME_HISTOGRAM, - card.getIsVirtual() ? TouchToFillCreditCardOutcome.VIRTUAL_CARD - : TouchToFillCreditCardOutcome.CREDIT_CARD, - TouchToFillCreditCardOutcome.MAX_VALUE + 1); + recordTouchToFillOutcomeHistogram(card.getIsVirtual() + ? TouchToFillCreditCardOutcome.VIRTUAL_CARD + : TouchToFillCreditCardOutcome.CREDIT_CARD); RecordHistogram.recordCount100Histogram(TOUCH_TO_FILL_INDEX_SELECTED, mCards.indexOf(card)); } @@ -213,4 +218,12 @@ } return true; } + + private static void recordTouchToFillOutcomeHistogram( + @TouchToFillCreditCardOutcome int outcome) { + RecordHistogram.recordEnumeratedHistogram(TOUCH_TO_FILL_OUTCOME_HISTOGRAM, outcome, + TouchToFillCreditCardOutcome.MAX_VALUE + 1); + RecordHistogram.recordEnumeratedHistogram(TOUCH_TO_FILL_OUTCOME_HISTOGRAM_FIXED, outcome, + TouchToFillCreditCardOutcome.MAX_VALUE + 1); + } }
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index 2fc8b7f..f8e6d8b4 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -1400,12 +1400,15 @@ </message> <!-- Privacy Guide --> - <message name="IDS_PREFS_PRIVACY_GUIDE_TITLE" desc="The title of the privacy guide menu item."> - Privacy guide + <message name="IDS_PRIVACY_GUIDE_PREF_TITLE" desc="The title of the privacy guide menu item. The text between the BEGIN_NEW and END_NEW tokens is a chip shown on the menu item, informing users that this is a new feature."> + Privacy guide <ph name="BEGIN_NEW"><new></ph>New<ph name="END_NEW"></new></ph> </message> - <message name="IDS_PREFS_PRIVACY_GUIDE_SUMMARY" desc="The summary of the privacy menu item."> + <message name="IDS_PRIVACY_GUIDE_PREF_SUMMARY" desc="The summary of the privacy menu item."> Review key privacy and security controls </message> + <message name="IDS_PRIVACY_GUIDE_FRAGMENT_TITLE" desc="The title of all privacy guide fragments."> + Privacy guide + </message> <message name="IDS_PRIVACY_GUIDE_WELCOME_TITLE" desc="Title on the welcome page of the privacy guide."> A guide of your privacy choices </message>
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PREFS_PRIVACY_GUIDE_SUMMARY.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PREFS_PRIVACY_GUIDE_SUMMARY.png.sha1 deleted file mode 100644 index 9a20ecc..0000000 --- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PREFS_PRIVACY_GUIDE_SUMMARY.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -082f3cbdee49df30b233df9a08731abedd8591f2 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PREFS_PRIVACY_GUIDE_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PREFS_PRIVACY_GUIDE_TITLE.png.sha1 deleted file mode 100644 index eacb188..0000000 --- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PREFS_PRIVACY_GUIDE_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e73e14dd6f9e89cecae8a923f222102b6f16e917 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_FRAGMENT_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_FRAGMENT_TITLE.png.sha1 new file mode 100644 index 0000000..d6a5900 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_FRAGMENT_TITLE.png.sha1
@@ -0,0 +1 @@ +00756520e01e73a5c32991f218398c777006b6c4 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_PREF_SUMMARY.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_PREF_SUMMARY.png.sha1 new file mode 100644 index 0000000..5eb1eb2c --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_PREF_SUMMARY.png.sha1
@@ -0,0 +1 @@ +a78952d4c61a334c4c162b37a55479073ee02998 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_PREF_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_PREF_TITLE.png.sha1 new file mode 100644 index 0000000..5eb1eb2c --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_PRIVACY_GUIDE_PREF_TITLE.png.sha1
@@ -0,0 +1 @@ +a78952d4c61a334c4c162b37a55479073ee02998 \ No newline at end of file
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 e659d8d..28e7508 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
@@ -87,7 +87,7 @@ <translation id="1386674309198842382">نشط قبل <ph name="LAST_UPDATED" /> من الأيام</translation> <translation id="13931502444227376">للمتابعة، سيشارك <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /> اسمك وعنوان بريدك الإلكتروني وصورة ملفك الشخصي مع هذا الموقع الإلكتروني. يُرجى الاطّلاع على <ph name="BEGIN_LINK1" />بنود الخدمة<ph name="END_LINK1" /> لهذا الموقع الإلكتروني.</translation> <translation id="1397811292916898096">البحث باستخدام <ph name="PRODUCT_NAME" /></translation> -<translation id="139993653570221430">يمكنك تغيير رأيك متى شئت من خلال إعدادات Chrome. تتم هذه التجارب جنبًا إلى جنب مع الطريقة الحالية لعرض الإعلانات، لذا لن تظهر التغيرات على الفور.</translation> +<translation id="139993653570221430">يمكنك تغيير رأيك متى شئت من خلال إعدادات Chrome. نجري هذه التجارب بدون إيقاف الإعدادات الحالية لعرض الإعلانات، لذا لن تظهر التغييرات على الفور.</translation> <translation id="1406000523432664303">"عدم التعقب"</translation> <translation id="1407069428457324124">المظهر الداكن</translation> <translation id="1407135791313364759">فتح الكل</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 04ce8f6..3287955 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708">পৰামৰ্শ দিয়া সমলৰ বিষয়ে <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation> <translation id="3495219333887281978">ছাইন ইন কৰাৰ সুবিধা থকা তলৰ শ্বীটখন অৰ্ধ উচ্চতাত খোলা হৈছে।</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">পুৰণি অনুসৰি সজাওক</translation> <translation id="3507132249039706973">সাধাৰণ সুৰক্ষা অন আছে</translation> <translation id="3509330069915219067">অফলাইন হৈ আছে। Chromeএ আপডে’ট আছেনে নাই পৰীক্ষা কৰিব নোৱাৰে।</translation> <translation id="3513704683820682405">পৰিৱৰ্ধিত বাস্তৱিকতা</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">আপোনাৰ আটাইবোৰ বুকমাৰ্ক পাওক</translation> <translation id="4177501066905053472">বিজ্ঞাপনৰ বিষয়বস্তু</translation> <translation id="4181841719683918333">ভাষাসমূহ</translation> +<translation id="4188221736490993796">Zৰ পৰা Aলৈ সজাওক</translation> <translation id="4195643157523330669">নতুন টেবত খোলক</translation> <translation id="4196597275619698563">কাৰ্ড সৃষ্টি কৰক</translation> <translation id="4198423547019359126">ডাউনল’ড কৰিবলৈ কোনো অৱস্থান নাই</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">পাছৱৰ্ড লুকুৱাওক</translation> <translation id="4572422548854449519">পৰিচালিত একাউণ্টত ছাইন ইন কৰক</translation> <translation id="4576892426230499203">সত্যাপনৰ অন্য এটা বিকল্প ব্যৱহাৰ কৰি চাওক</translation> +<translation id="4577115723294378384">Aৰ পৰা Zলৈ সজাওক</translation> <translation id="4578289292431526768">আৰম্ভ কৰক</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# মিনিট পূর্বে}one{# মিনিট পূর্বে}other{# মিনিট পূর্বে}}</translation> <translation id="4587589328781138893">Sites</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Google <ph name="BEGIN_NEW" />New<ph name="END_NEW" />ৰ জৰিয়তে প্ৰতিচ্ছবি সন্ধান কৰক</translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 আৰু <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />টা}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 আৰু <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />টা}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 আৰু <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />টা}}</translation> <translation id="4699172675775169585">কেশ্ব প্ৰতিচ্ছবি আৰু ফাইল</translation> +<translation id="4710167854527459075">নতুন অনুসৰি সজাওক</translation> <translation id="4719927025381752090">অনুবাদ কৰাৰ প্ৰস্তাৱ দিয়ক</translation> <translation id="4720023427747327413"><ph name="PRODUCT_NAME" />ত খোলক</translation> <translation id="47217992755561375">আপোনাৰ শীৰ্ষ ছাইটসমূহ চাওক</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">বিপজ্জনক ঘটনাবোৰ চিনাক্ত কৰে আৰু সেইবোৰ ঘটাৰ সময়ত আপোনাক সকীয়নি দিয়ে</translation> <translation id="5561549206367097665">নেটৱৰ্কৰ বাবে অপেক্ষাৰত…</translation> <translation id="5568069709869097550">ছাইন ইন কৰিব নোৱাৰি</translation> +<translation id="557018954714092179">নতুন ফ’ল্ডাৰ সৃষ্টি কৰক</translation> <translation id="5578795271662203820">এই ছবিৰ বাবে <ph name="SEARCH_ENGINE" />ত সন্ধান কৰক</translation> <translation id="5581519193887989363">আপুনি কি ছিংক কৰিব লাগে সেয়া <ph name="BEGIN_LINK1" />ছেটিংসমূহ<ph name="END_LINK1" />-লৈ গৈ যেতিয়াই মন যায় তেতিয়াই সলনি কৰিব পাৰে।</translation> <translation id="5590372121997663538">এই কম্পিউটাৰটো মনত ৰাখিব</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">ইয়াত আপোনাৰ ছাইটৰ ছেটিং সলনি কৰক</translation> <translation id="6140709049082532940">বৰ্ধিত সুৰক্ষা:</translation> <translation id="6140912465461743537">দেশ/অঞ্চল</translation> +<translation id="6148266338772765473">লিংক বহিৰ্ভূত কৰক</translation> <translation id="6150320133806434356">বুকমাৰ্ক ছেভ কৰা হৈছে</translation> <translation id="6154478581116148741">এই ডিভাইচটোৰ পৰা আপোনাৰ পাছৱৰ্ডসমূহ ৰপ্তানি কৰিবলৈ ছেটিংসমূহ-লৈ গৈ স্ক্রীণ লক অন কৰক</translation> <translation id="6159729262978459665">আটাইবোৰ ছিংক কৰা ডিভাইচৰ পৰা ইতিহাস মচে।</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">আপুনি ছেভ কৰিবলৈ লোৱা পাছৱৰ্ডটো যাতে আপোনাৰ <ph name="SITE" />ৰ পাছৱৰ্ডটোৰ সৈতে মিলে সেয়া নিশ্চিত কৰক</translation> <translation id="6593061639179217415">ডেস্কটপৰ ছাইট</translation> <translation id="6594121454516132231">মুক্ত ৱেব সুৰক্ষিত কৰি ৰাখি ক্ৰছ-ছাইট ট্ৰেকিঙৰ পৰা আপোনাক সুৰক্ষা প্ৰদান কৰিবলৈ Chromeএ কেনেকৈ পৰিকল্পনা কৰে সেয়া চাওক</translation> +<translation id="6594347733515723558">বিকল্পবোৰ সজাওক আৰু চাওক</translation> <translation id="6595046016124923392">আপোনাৰ বাবে বিৱৰণ উন্নত কৰিবলৈ Googleলৈ প্ৰতিচ্ছবিসমূহ পঠিওৱা হয়।</translation> <translation id="6600954340915313787">Chromeলৈ প্ৰতিলিপি কৰা হ’ল</translation> <translation id="661266467055912436">আপোনাৰ লগতে ৱেবত থকা প্ৰত্যেকজনৰ বাবে সুৰক্ষা উন্নত কৰে।</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 c9e65d7..2b53922 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708">Təklif məzmunu haqqında <ph name="BEGIN_LINK" />daha ətraflı<ph name="END_LINK" /></translation> <translation id="3495219333887281978">Giriş alt vərəqi yarı hündürlükdə açılıb.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Ən köhnə üzrə sıralayın</translation> <translation id="3507132249039706973">Standart Qoruma aktivdir</translation> <translation id="3509330069915219067">Oflayn. Chrome güncəlləmələri yoxlaya bilmir.</translation> <translation id="3513704683820682405">Artırılmış Reallıq</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Bütün əlfəcinlərinizi əldə edin</translation> <translation id="4177501066905053472">Reklam mövzuları</translation> <translation id="4181841719683918333">Dillər</translation> +<translation id="4188221736490993796">Z-dən A-ya sıralayın</translation> <translation id="4195643157523330669">Yeni tabda açın</translation> <translation id="4196597275619698563">Kart yaradın</translation> <translation id="4198423547019359126">Əlçatan endirmə məkanı yoxdur</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Parolu gizlədin</translation> <translation id="4572422548854449519">İdarə olunan hesablara daxil olun</translation> <translation id="4576892426230499203">Digər doğrulama seçimini sınayın</translation> +<translation id="4577115723294378384">A-dan Z-yə sıralayın</translation> <translation id="4578289292431526768">Başlayaq</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# dəqiqə öncə}other{# dəqiqə öncə}}</translation> <translation id="4587589328781138893">Saytlar</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Google ilə şəkil axtarın <ph name="BEGIN_NEW" />Yeni<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 və <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> digəri}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 və <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> digəri}}</translation> <translation id="4699172675775169585">Keşlənmiş şəkillər və fayllar</translation> +<translation id="4710167854527459075">Ən yeni üzrə sıralayın</translation> <translation id="4719927025381752090">Tərcümə təklif edin</translation> <translation id="4720023427747327413">Aç <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Populyar saytlara baxın</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Təhlükəli hadisələr baş verdikdə onları aşkarlayır və sizə xəbərdarlıq edir</translation> <translation id="5561549206367097665">Şəbəkə gözlənilir…</translation> <translation id="5568069709869097550">Daxil ola bilməz</translation> +<translation id="557018954714092179">Yeni qovluq yaradın</translation> <translation id="5578795271662203820">Bu şəkil üçün <ph name="SEARCH_ENGINE" /> axtarın</translation> <translation id="5581519193887989363">Sinxronizasiya seçimlərini <ph name="BEGIN_LINK1" />ayarlarda<ph name="END_LINK1" /> edə bilərsiniz.</translation> <translation id="5590372121997663538">Bu kompüteri yadda saxlayın</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Sayt ayarlarınızı burada dəyişdirin</translation> <translation id="6140709049082532940">Geniş qoruma:</translation> <translation id="6140912465461743537">Ölkə/Region</translation> +<translation id="6148266338772765473">Linki istisna edin</translation> <translation id="6150320133806434356">Əlfəcin yadda saxlanıldı</translation> <translation id="6154478581116148741">Bu cihazdan parolları eksport etmək üçün Ayarlarda ekran kilidini aktiv edin</translation> <translation id="6159729262978459665">Bütün sinxronizasiya edilmiş cihazlardan tarixçəni təmizləyir.</translation> @@ -1025,6 +1031,7 @@ <translation id="6590680911007613645">Yadda saxlanılan parolun <ph name="SITE" /> paroluna uyğun olduğuna əmin olun</translation> <translation id="6593061639179217415">Masaüstü saytı</translation> <translation id="6594121454516132231">Chrome'un açıq vebi saxlayarkən sizi saytlararası izləmədən necə qoruyacağına baxın</translation> +<translation id="6594347733515723558">Sıra və baxış seçimləri</translation> <translation id="6595046016124923392">Sizin üçün təsvirləri yaxşılaşdırmaq üçün şəkillər Google'a göndərilir.</translation> <translation id="6600954340915313787">Chrome'a kopYanlışır</translation> <translation id="661266467055912436">Siz və vebdəki hər kəs üçün təhlükəsizliyi artırır.</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 9dc979b..4d8ef907 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /> пра прапанаванае змесціва</translation> <translation id="3495219333887281978">Ніжні аркуш са спісам даступных для выбару ўліковых запісаў разгорнуты на палову экрана.</translation> <translation id="3499246418971111862">chrome_qr-код_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Спачатку старыя</translation> <translation id="3507132249039706973">Стандартная абарона ўключана</translation> <translation id="3509330069915219067">Няма падключэння да сеткі. Chrome не можа праверыць наяўнасць абнаўленняў.</translation> <translation id="3513704683820682405">Дапоўненая рэальнасць</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Трымайце ўсе свае закладкі пад рукой</translation> <translation id="4177501066905053472">Тэмы рэкламы</translation> <translation id="4181841719683918333">Мовы</translation> +<translation id="4188221736490993796">Па алфавіце (ад Я да А)</translation> <translation id="4195643157523330669">Адкрыць у новай укладцы</translation> <translation id="4196597275619698563">Стварыць картку</translation> <translation id="4198423547019359126">Няма месца для спампоўкі</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Схаваць пароль</translation> <translation id="4572422548854449519">Увайдзіце ва ўліковы запіс пад кіраваннем</translation> <translation id="4576892426230499203">Паспрабуйце іншы спосаб спраўджання</translation> +<translation id="4577115723294378384">Па алфавіце (ад А да Я)</translation> <translation id="4578289292431526768">Пачаць</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{1 хвіліну таму}one{# хвіліну таму}few{# хвіліны таму}many{# хвілін таму}other{# хвіліны таму}}</translation> <translation id="4587589328781138893">Сайты</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Пошук відарыса ў Google <ph name="BEGIN_NEW" />Новае<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 і яшчэ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 і яшчэ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 і яшчэ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}many{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 і яшчэ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 і яшчэ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation> <translation id="4699172675775169585">Відарысы і файлы ў кэшы</translation> +<translation id="4710167854527459075">Спачатку новыя</translation> <translation id="4719927025381752090">Прапаноўваць пераклад</translation> <translation id="4720023427747327413">Адкрыць у <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Прагледзьце папулярныя сайты</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Выяўляе небяспечныя падзеі і папярэджвае пра іх</translation> <translation id="5561549206367097665">Чакаецца адказ сеткі…</translation> <translation id="5568069709869097550">Не ўдалося ўвайсці ў сістэму</translation> +<translation id="557018954714092179">Стварыць новую папку</translation> <translation id="5578795271662203820">Шукаць гэты відарыс праз <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">У <ph name="BEGIN_LINK1" />наладах<ph name="END_LINK1" /> заўсёды можна выбраць, што трэба сінхранізаваць.</translation> <translation id="5590372121997663538">Запомніць гэты камп'ютар</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Тут можна змяніць налады сайта</translation> <translation id="6140709049082532940">Палепшаная абарона:</translation> <translation id="6140912465461743537">Краіна або рэгіён</translation> +<translation id="6148266338772765473">Выдаліць спасылку</translation> <translation id="6150320133806434356">Закладка захавана</translation> <translation id="6154478581116148741">Каб экспартаваць паролі з гэтай прылады, уключыце блакіроўку экрана ў Наладах</translation> <translation id="6159729262978459665">З усіх сінхранізаваных прылад будзе выдалена гісторыя.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Праверце, ці супадае пароль, які вы захоўваеце, з паролем для сайта <ph name="SITE" /></translation> <translation id="6593061639179217415">Версія для ПК</translation> <translation id="6594121454516132231">Даведайцеся, як Chrome збіраецца абараняць вас ад механізмаў адсочвання паводзін на розных сайтах, захоўваючы адкрытасць інтэрнэту</translation> +<translation id="6594347733515723558">Сартаванне і паказ</translation> <translation id="6595046016124923392">Відарысы перасылаюцца ў Google з мэтай паляпшэння апісанняў для вас.</translation> <translation id="6600954340915313787">Скапіравана ў Chrome</translation> <translation id="661266467055912436">Павышае бяспеку для вас і іншых карыстальнікаў у інтэрнэце.</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 e40c9c56..7d11b1ad 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /> за предложеното съдържание</translation> <translation id="3495219333887281978">Долният лист за вход в профила е отворен на половината височина.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Сортиране по най-стари</translation> <translation id="3507132249039706973">Режимът за стандартна защита е включен</translation> <translation id="3509330069915219067">Офлайн сте. Chrome не може да провери за актуализации.</translation> <translation id="3513704683820682405">Обогатена реалност</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Получете всичките си отметки</translation> <translation id="4177501066905053472">Рекламни теми</translation> <translation id="4181841719683918333">Езици</translation> +<translation id="4188221736490993796">Сортиране от Я до А</translation> <translation id="4195643157523330669">Отваряне в нов раздел</translation> <translation id="4196597275619698563">Създаване на карта</translation> <translation id="4198423547019359126">Няма местоположения за изтегляне</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Скриване на паролата</translation> <translation id="4572422548854449519">Вход в управляван профил</translation> <translation id="4576892426230499203">Опитайте с друга опция за потвърждаване</translation> +<translation id="4577115723294378384">Сортиране от А до Я</translation> <translation id="4578289292431526768">Начало</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{преди # минута}other{преди # минути}}</translation> <translation id="4587589328781138893">Сайтове</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Търс. на изобр. с Google <ph name="BEGIN_NEW" />Ново<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 и още <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 и още <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation> <translation id="4699172675775169585">Кеширани изображения и файлове</translation> +<translation id="4710167854527459075">Сортиране по най-нови</translation> <translation id="4719927025381752090">Предложения за превод</translation> <translation id="4720023427747327413">Отваряне в <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Преглед на водещите сайтове за вас</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Открива опасни събития, когато се случват, и ви предупреждава за тях</translation> <translation id="5561549206367097665">Изчаква се връзка с мрежата…</translation> <translation id="5568069709869097550">Не може да се влезе</translation> +<translation id="557018954714092179">Създаване на нова папка</translation> <translation id="5578795271662203820">Търсене на изображението със: <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Винаги можете да изберете какво да се синхронизира от <ph name="BEGIN_LINK1" />настройките<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Запомняне на този компютър</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Тук можете да промените настройките си за сайта</translation> <translation id="6140709049082532940">Подобрена защита:</translation> <translation id="6140912465461743537">Държава/регион</translation> +<translation id="6148266338772765473">Изключване на връзката</translation> <translation id="6150320133806434356">Отметката е запазена</translation> <translation id="6154478581116148741">Включете функцията за заключване на екрана от настройките, за да експортирате паролите си от това устройство</translation> <translation id="6159729262978459665">Изчиства историята от всички синхронизирани устройства.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Уверете се, че запазваната парола съвпада с тази за <ph name="SITE" /></translation> <translation id="6593061639179217415">Настолен сайт</translation> <translation id="6594121454516132231">Вижте как Chrome ще ви предпазва от проследяване в различни сайтове, без да нарушава баланса на отворената мрежа</translation> +<translation id="6594347733515723558">Сорт./преглед на опциите</translation> <translation id="6595046016124923392">Изображенията се изпращат до Google с цел подобряване на описанията за вас.</translation> <translation id="6600954340915313787">Копирано в Chrome</translation> <translation id="661266467055912436">Подобрява сигурността за вас и всички потребители в мрежата.</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 bd2a991..ea7258a 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
@@ -836,7 +836,7 @@ <translation id="5561162485081632007">Detecta esdeveniments perillosos quan es produeixen i t'avisa</translation> <translation id="5561549206367097665">S'està esperant la xarxa…</translation> <translation id="5568069709869097550">No puc accedir</translation> -<translation id="557018954714092179">Crea una carpeta nova</translation> +<translation id="557018954714092179">Crea una carpeta</translation> <translation id="5578795271662203820">Cerca aquesta imatge a <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Sempre pots anar a la <ph name="BEGIN_LINK1" />configuració<ph name="END_LINK1" /> per decidir què vols sincronitzar.</translation> <translation id="5590372121997663538">Recorda aquest ordinador</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 fa3fd53..8444f13 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /> o navrhovaném obsahu</translation> <translation id="3495219333887281978">Spodní tabulka s přihlášením je otevřená na polovinu výšky</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Seřadit od nejstarších</translation> <translation id="3507132249039706973">Je zapnutá standardní ochrana</translation> <translation id="3509330069915219067">Offline. Chrome nemůže vyhledat dostupné aktualizace.</translation> <translation id="3513704683820682405">Rozšířená realita</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Získejte všechny své záložky</translation> <translation id="4177501066905053472">Témata reklam</translation> <translation id="4181841719683918333">Jazyky</translation> +<translation id="4188221736490993796">Seřadit od Z do A</translation> <translation id="4195643157523330669">Otevřít na nové kartě</translation> <translation id="4196597275619698563">Vytvořit kartu</translation> <translation id="4198423547019359126">Nejsou k dispozici žádná umístění stažených souborů</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Skrýt heslo</translation> <translation id="4572422548854449519">Přihlaste se ke spravovanému účtu</translation> <translation id="4576892426230499203">Zkuste jiný způsob ověření</translation> +<translation id="4577115723294378384">Seřadit od A do Z</translation> <translation id="4578289292431526768">Jdeme na to</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{před # minutou}few{před # minutami}many{před # minuty}other{před # minutami}}</translation> <translation id="4587589328781138893">Weby</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Vyhledat obrázek <ph name="BEGIN_NEW" />Nové<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}few{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}many{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> další}other{<ph name="SHIPPING_OPTION_PREVIEW" /> a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> dalších}}</translation> <translation id="4699172675775169585">Obrázky a soubory v mezipaměti</translation> +<translation id="4710167854527459075">Seřadit od nejnovějších</translation> <translation id="4719927025381752090">Nabízet překlad</translation> <translation id="4720023427747327413">Otevřít v aplikaci <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Zobrazit vaše top weby</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Rozpoznává nebezpečné události a upozorňuje vás na ně, když k nim dojde.</translation> <translation id="5561549206367097665">Čekání na síť…</translation> <translation id="5568069709869097550">Nepodařilo se přihlásit</translation> +<translation id="557018954714092179">Vytvořit novou složku</translation> <translation id="5578795271662203820">Hledat obrázek pomocí <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Synchronizované položky můžete kdykoliv vybrat v <ph name="BEGIN_LINK1" />nastavení<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Zapamatovat si tento počítač</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Tady můžete změnit nastavení webu</translation> <translation id="6140709049082532940">Vylepšená ochrana:</translation> <translation id="6140912465461743537">Země/Region</translation> +<translation id="6148266338772765473">Nezahrnovat odkaz</translation> <translation id="6150320133806434356">Záložka uložena</translation> <translation id="6154478581116148741">Chcete-li z tohoto zařízení exportovat svá hesla, zapněte v Nastavení zámek obrazovky</translation> <translation id="6159729262978459665">Vymaže historii ze všech synchronizovaných zařízení.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Zkontrolujte, zda se ukládané heslo shoduje s heslem pro web <ph name="SITE" />.</translation> <translation id="6593061639179217415">Stránky pro počítač</translation> <translation id="6594121454516132231">Podívejte se, jak vás Chrome plánuje chránit před sledováním mezi weby, aniž by omezoval otevřenost webu</translation> +<translation id="6594347733515723558">Řazení a zobrazení</translation> <translation id="6595046016124923392">Za účelem zlepšení popisů se obrázky odesílají do Googlu.</translation> <translation id="6600954340915313787">Zkopírováno do Chromu</translation> <translation id="661266467055912436">Zlepšuje bezpečnost pro vás i všechny ostatní uživatele internetu.</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 336df6b..56336c0d 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Dysgu rhagor<ph name="END_LINK" /> am gynnwys a awgrymir</translation> <translation id="3495219333887281978">Mae'r ddalen waelod mewngofnodi wedi'i hagor ar hanner uchder.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Trefnu yn ôl hynaf</translation> <translation id="3507132249039706973">Mae Amddiffyniad Safonol ymlaen</translation> <translation id="3509330069915219067">All-lein. Ni all Chrome wirio am ddiweddariadau.</translation> <translation id="3513704683820682405">Realiti Estynedig</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Cael eich holl nodau tudalen</translation> <translation id="4177501066905053472">Pynciau hysbysebion</translation> <translation id="4181841719683918333">Ieithoedd</translation> +<translation id="4188221736490993796">Trefnu yn ôl Z i A</translation> <translation id="4195643157523330669">Agor mewn tab newydd</translation> <translation id="4196597275619698563">Creu cerdyn</translation> <translation id="4198423547019359126">Nid oes unrhyw leoliadau lawrlwytho ar gael</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Cuddio'r cyfrinair</translation> <translation id="4572422548854449519">Mewngofnodi i gyfrif a reolir</translation> <translation id="4576892426230499203">Rhowch gynnig ar opsiwn dilysu arall</translation> +<translation id="4577115723294378384">Trefnu yn ôl A i Z</translation> <translation id="4578289292431526768">I ffwrdd â ni</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# funud yn ôl}zero{# munud yn ôl}two{# funud yn ôl}few{# munud yn ôl}many{# munud yn ôl}other{# munud yn ôl}}</translation> <translation id="4587589328781138893">Gwefannau</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Chwilio llun gyda Google <ph name="BEGIN_NEW" />Newydd<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ac <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> arall}zero{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> arall}two{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> arall}few{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> arall}many{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> arall}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> arall}}</translation> <translation id="4699172675775169585">Lluniau a ffeiliau sydd wedi'u storio dros dro</translation> +<translation id="4710167854527459075">Trefnu yn ôl newydd</translation> <translation id="4719927025381752090">Cynnig cyfieithu</translation> <translation id="4720023427747327413">Agor yn <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Gweld eich hoff wefannau</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Yn canfod ac yn eich rhybuddio am ddigwyddiadau peryglus pan fyddant yn digwydd</translation> <translation id="5561549206367097665">Wthi'n aros am rwydwaith…</translation> <translation id="5568069709869097550">Methu â mewngofnodi</translation> +<translation id="557018954714092179">Creu ffolder newydd</translation> <translation id="5578795271662203820">Chwilio <ph name="SEARCH_ENGINE" /> am y llun hwn</translation> <translation id="5581519193887989363">Gallwch bob amser ddewis beth i'w gysoni yn y <ph name="BEGIN_LINK1" />gosodiadau<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Cofio'r cyfrifiadur hwn</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Gallwch newid eich gosodiadau gwefan yma</translation> <translation id="6140709049082532940">Gwell amddiffyniad:</translation> <translation id="6140912465461743537">Gwlad/Rhanbarth</translation> +<translation id="6148266338772765473">Eithrio dolen</translation> <translation id="6150320133806434356">Cadwyd nod tudalen</translation> <translation id="6154478581116148741">Trowch y clo sgrîn ymlaen yn y Gosodiadau i allforio'ch cyfrineiriau o'r ddyfais hon</translation> <translation id="6159729262978459665">Yn clirio hanes o'r holl ddyfeisiau sydd wedi'u cysoni.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Gwnewch yn siŵr bod y cyfrinair rydych yn ei gadw yn cyd-fynd â'ch cyfrinair <ph name="SITE" /></translation> <translation id="6593061639179217415">Gwefan bwrdd gwaith</translation> <translation id="6594121454516132231">Gweld sut mae Chrome yn bwriadu eich amddiffyn rhag olrhain traws-wefan wrth ddiogelu'r we agored</translation> +<translation id="6594347733515723558">Trefnu a gweld opsiynau</translation> <translation id="6595046016124923392">Anfonir lluniau at Google i wella disgrifiadau i chi.</translation> <translation id="6600954340915313787">Copïwyd i Chrome</translation> <translation id="661266467055912436">Yn gwella diogelwch i chi a phawb ar y we.</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 1c3d4c7b..0aa3f0b 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /> om anbefalet indhold</translation> <translation id="3495219333887281978">Loginfeltet i bunden er åbnet i halv højde.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Sortér efter ældste</translation> <translation id="3507132249039706973">Standardbeskyttelse er aktiveret</translation> <translation id="3509330069915219067">Offline. Chrome kan ikke søge efter opdateringer.</translation> <translation id="3513704683820682405">Augmented reality</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Få alle dine bogmærker</translation> <translation id="4177501066905053472">Annonceemner</translation> <translation id="4181841719683918333">Sprog</translation> +<translation id="4188221736490993796">Sortér fra Å til A</translation> <translation id="4195643157523330669">Åbn på ny fane</translation> <translation id="4196597275619698563">Opret kort</translation> <translation id="4198423547019359126">Der er ingen tilgængelige downloadplaceringer</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Skjul adgangskode</translation> <translation id="4572422548854449519">Log ind på managerstyret konto</translation> <translation id="4576892426230499203">Prøv en anden verificeringsmulighed</translation> +<translation id="4577115723294378384">Sortér fra A til Å</translation> <translation id="4578289292431526768">Kom i gang</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{For # minut siden}one{For # minut siden}other{For # minutter siden}}</translation> <translation id="4587589328781138893">Websites</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Søg efter billedet med Google <ph name="BEGIN_NEW" />Nyhed<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> mere}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> mere}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> mere}}</translation> <translation id="4699172675775169585">Billeder og filer, der er gemt i cache</translation> +<translation id="4710167854527459075">Sortér efter nyeste</translation> <translation id="4719927025381752090">Tilbyd at oversætte</translation> <translation id="4720023427747327413">Åbn i <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Se dine mest anvendte websites</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Registrerer og advarer dig om skadelige hændelser, når de opstår</translation> <translation id="5561549206367097665">Venter på netværk…</translation> <translation id="5568069709869097550">Kan ikke logge ind</translation> +<translation id="557018954714092179">Opret ny mappe</translation> <translation id="5578795271662203820">Søg efter billedet på <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Du kan altid vælge, hvad der skal synkroniseres, i <ph name="BEGIN_LINK1" />indstillingerne<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Husk denne computer</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Skift indstillinger for websites her</translation> <translation id="6140709049082532940">Forbedret beskyttelse:</translation> <translation id="6140912465461743537">Land/region</translation> +<translation id="6148266338772765473">Ekskluder link</translation> <translation id="6150320133806434356">Bogmærket er gemt</translation> <translation id="6154478581116148741">Aktivér skærmlåsen i Indstillinger for at eksportere dine adgangskoder fra denne enhed</translation> <translation id="6159729262978459665">Ryder historikken fra alle synkroniserede enheder.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Sørg for, at den adgangskode, du gemmer, er den samme som din adgangskode til <ph name="SITE" /></translation> <translation id="6593061639179217415">Standardwebsite</translation> <translation id="6594121454516132231">Se, hvordan Chrome bestræber sig på at beskytte dig mod sporing på tværs af forskellige websites og samtidig bevarer det åbne net</translation> +<translation id="6594347733515723558">Valgmuligheder for visning og sortering</translation> <translation id="6595046016124923392">Billederne sendes til Google med henblik på at give dig bedre beskrivelser.</translation> <translation id="6600954340915313787">Kopieret til Chrome</translation> <translation id="661266467055912436">Forbedrer din og alles sikkerhed på nettet.</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 4ca8dbc..6ecf265 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
@@ -366,7 +366,7 @@ <translation id="301080557829842765">Guía sobre privacidad</translation> <translation id="3016635187733453316">Comprueba que este dispositivo tenga conexión a Internet</translation> <translation id="3026955690410463085">Incluir vínculo</translation> -<translation id="3027644380269727216">Según tu actividad en un sitio. Esta configuración está activada.</translation> +<translation id="3027644380269727216">Según tu actividad en un sitio. Este parámetro de configuración está activado.</translation> <translation id="3029276696788198026">Sin precarga</translation> <translation id="3029704984691124060">Las frases de contraseña no coinciden.</translation> <translation id="3036750288708366620"><ph name="BEGIN_LINK" />Obtener ayuda<ph name="END_LINK" /></translation> @@ -423,7 +423,7 @@ <translation id="3282568296779691940">Acceder a Chrome</translation> <translation id="3285080554353377245">Videos sobre cómo usar Chrome</translation> <translation id="3290249595466894471">También envía una pequeña muestra de páginas, descargas, información del sistema y actividad de extensiones para ayudar a descubrir nuevas amenazas.</translation> -<translation id="3293181007446299124">Se mantendrá la privacidad del historial de navegación en tu dispositivo y los informes se enviarán con demora para proteger tu identidad</translation> +<translation id="3293181007446299124">Se mantendrá la privacidad del historial de navegación en tu dispositivo y los informes se enviarán con demora para proteger tu identidad.</translation> <translation id="3303414029551471755">¿Deseas descargar el contenido?</translation> <translation id="3305795716056605962">Traducir páginas desde el botón Más opciones</translation> <translation id="3319664549618064419">Cambia al sitio para computadoras para obtener una mejor vista de este sitio</translation> @@ -1532,7 +1532,7 @@ <translation id="9100610230175265781">Se necesita una frase de contraseña.</translation> <translation id="9101137867221042551">Administración</translation> <translation id="9102803872260866941">Está abierta la pestaña de vista previa</translation> -<translation id="9102864637938129124">Los sitios y anunciantes pueden entender el rendimiento de los anuncios. Esta configuración está activada.</translation> +<translation id="9102864637938129124">Los sitios y anunciantes pueden entender el rendimiento de los anuncios. Este parámetro de configuración está activado.</translation> <translation id="9104217018994036254">Lista de dispositivos con los que se puede compartir una pestaña.</translation> <translation id="9106148373857059373">El flujo para guardar favoritos está cerrado</translation> <translation id="9108312223223904744">Asistencia del teléfono como llave de seguridad</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 3f56d58..51a4f5f 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
@@ -187,7 +187,7 @@ <translation id="2046634576464120978">No se ha podido registrar</translation> <translation id="2049574241039454490"><ph name="FILE_SIZE_OF_TOTAL" /> <ph name="SEPARATOR" /> <ph name="DESCRIPTION" /></translation> <translation id="2052422354554967744">Buscar en Internet</translation> -<translation id="2053105195397337973">Estamos explorando formas de restringir el seguimiento, así como que los sitios puedan detener el spam publicitario y el fraude.</translation> +<translation id="2053105195397337973">Estamos buscando formas de restringir el seguimiento, al tiempo que permitimos que los sitios puedan detener el spam publicitario y el fraude.</translation> <translation id="2056878612599315956">Sitio web en pausa</translation> <translation id="2065944887543506430">{FILE_COUNT,plural, =1{No se ha podido descargar 1 archivo}other{No se han podido descargar # archivos}}</translation> <translation id="2067805253194386918">texto</translation> @@ -274,7 +274,7 @@ <translation id="2569733278091928697">Podrás gestionar fácilmente los controles multimedia, las sesiones de incógnito, las descargas y más</translation> <translation id="2571711316400087311">Ofrecer que se traduzcan páginas en otros idiomas con el Traductor de Google</translation> <translation id="2573452357057307036">Descubre cómo establecer Chrome como navegador predeterminado</translation> -<translation id="257470231920177468">Cuando la opción está activada, una lista de los sitios que visitas y que estiman tus intereses se muestra aquí.</translation> +<translation id="257470231920177468">Cuando está activada la opción, aquí se muestra una lista de los sitios que visitas y que estiman tus intereses.</translation> <translation id="2580436639406015883">La reducción del spam y el fraude se basa en tokens de confianza que ayudan a los sitios a luchar contra el fraude y a distinguir a los bots de las personas. Un sitio, en función de cuál sea tu interacción con él (por ejemplo, si habitualmente inicias sesión con una cuenta), puede emitir un token de confianza a tu navegador. Después, si otros sitios que visites buscan y encuentran un token de confianza válido, es más probable que te traten como a una persona y no como a un bot. @@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /> sobre el contenido sugerido</translation> <translation id="3495219333887281978">Hoja inferior de inicio de sesión abierta a media altura.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">El más antiguo primero</translation> <translation id="3507132249039706973">La protección estándar está activada</translation> <translation id="3509330069915219067">No hay conexión. Chrome no puede comprobar si hay actualizaciones.</translation> <translation id="3513704683820682405">Realidad aumentada</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Accede a todos tus marcadores</translation> <translation id="4177501066905053472">Temas de anuncios</translation> <translation id="4181841719683918333">Idiomas</translation> +<translation id="4188221736490993796">Ordenar de la Z a la A</translation> <translation id="4195643157523330669">Abrir en una pestaña nueva</translation> <translation id="4196597275619698563">Crear tarjeta</translation> <translation id="4198423547019359126">No hay ubicaciones de descarga disponibles</translation> @@ -600,7 +602,7 @@ <translation id="433213510553688132">Siguiendo...</translation> <translation id="4335835283689002019">La función Navegación segura está desactivada</translation> <translation id="4351244548802238354">Cerrar cuadro de diálogo</translation> -<translation id="4369735607080757018">Algunos tipos de datos (como la hora del día en la que has visto un anuncio) se compartirán entre los sitios para medir el rendimiento de los anuncios.</translation> +<translation id="4369735607080757018">Algunos tipos de datos limitados (como la hora del día en la que has visto un anuncio) se compartirán entre los sitios para medir el rendimiento de los anuncios.</translation> <translation id="4378154925671717803">Teléfono</translation> <translation id="438319986296050901">Compartir solo la tarjeta</translation> <translation id="4384468725000734951">Sogou se ha establecido como motor de búsqueda predeterminado</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Ocultar contraseña</translation> <translation id="4572422548854449519">Inicia sesión en la cuenta gestionada</translation> <translation id="4576892426230499203">Prueba con otra opción de verificación</translation> +<translation id="4577115723294378384">Ordenar de la A a la Z</translation> <translation id="4578289292431526768">Empezar</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{Hace # minuto}other{Hace # minutos}}</translation> <translation id="4587589328781138893">Sitios web</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Buscar imagen con Google <ph name="BEGIN_NEW" />Nuevo<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 y <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> más}}</translation> <translation id="4699172675775169585">Archivos e imágenes en caché</translation> +<translation id="4710167854527459075">Ordenar por más reciente</translation> <translation id="4719927025381752090">Ofrecer la traducción</translation> <translation id="4720023427747327413">Abrir en <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Ver tus sitios favoritos</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Detecta y te advierte de los eventos peligrosos cuando suceden</translation> <translation id="5561549206367097665">Esperando red…</translation> <translation id="5568069709869097550">No puedo iniciar sesión</translation> +<translation id="557018954714092179">Crear carpeta nueva</translation> <translation id="5578795271662203820">Buscar esta imagen en <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Siempre puedes seleccionar qué contenido quieres sincronizar en los <ph name="BEGIN_LINK1" />ajustes<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Recordar este ordenador</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Cambia los ajustes de tu sitio aquí</translation> <translation id="6140709049082532940">Protección mejorada:</translation> <translation id="6140912465461743537">País/región</translation> +<translation id="6148266338772765473">Excluir enlace</translation> <translation id="6150320133806434356">Marcador guardado</translation> <translation id="6154478581116148741">Activa el bloqueo de pantalla en Configuración para exportar las contraseñas de este dispositivo</translation> <translation id="6159729262978459665">Borra el historial de todos los dispositivos sincronizados.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">La contraseña que guardes debe coincidir con tu contraseña de <ph name="SITE" /></translation> <translation id="6593061639179217415">Vista ordenador</translation> <translation id="6594121454516132231">Descubre lo que va a hacer Chromium para protegerte de mecanismos de seguimiento entre sitios mientras preserva la Web abierta</translation> +<translation id="6594347733515723558">Orden y visualización</translation> <translation id="6595046016124923392">Las imágenes se envían a Google para mejorar las descripciones que recibes.</translation> <translation id="6600954340915313787">Copiada a Chrome</translation> <translation id="661266467055912436">Mejora tu seguridad y la de todo el mundo en la Web.</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 48a7774..77fd022b 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Lortu informazio gehiago<ph name="END_LINK" /> iradokitako edukiari buruz</translation> <translation id="3495219333887281978">Pantailaren behealdean ainguratutako orria, saioa hasteko balio duena, altuera erdian irekita dago.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Ordenatu zaharrenetik hasita</translation> <translation id="3507132249039706973">Babes estandarra aktibatuta dago</translation> <translation id="3509330069915219067">Konexiorik gabe. Chrome-k ezin ditu bilatu eguneratzeak.</translation> <translation id="3513704683820682405">Errealitate areagotua</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Eskuratu laster-marka guztiak</translation> <translation id="4177501066905053472">Iragarkien gaiak</translation> <translation id="4181841719683918333">Hizkuntzak</translation> +<translation id="4188221736490993796">Ordenatu Ztik Ara</translation> <translation id="4195643157523330669">Ireki fitxa berri batean</translation> <translation id="4196597275619698563">Sortu txartel bat</translation> <translation id="4198423547019359126">Ez dago deskarga-kokapenik eskuragarri</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Ezkutatu pasahitza</translation> <translation id="4572422548854449519">Hasi saioa kontu kudeatuan</translation> <translation id="4576892426230499203">Probatu beste egiaztapen-aukera bat</translation> +<translation id="4577115723294378384">Ordenatu Atik Zra</translation> <translation id="4578289292431526768">Has gaitezen</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{Duela # minutu}other{Duela # minutu}}</translation> <translation id="4587589328781138893">Webguneak</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Bilatu irudia Google erabilita <ph name="BEGIN_NEW" />Berria<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" /> eta beste <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> eta beste <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation> <translation id="4699172675775169585">Cachean gordetako irudiak eta fitxategiak</translation> +<translation id="4710167854527459075">Ordenatu berrienetik hasita</translation> <translation id="4719927025381752090">Eskaini itzultzea</translation> <translation id="4720023427747327413">Ireki <ph name="PRODUCT_NAME" />-n</translation> <translation id="47217992755561375">Ikusi zure webgune nagusiak</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Gertaera arriskutsuak hautematen ditu eta haien berri ematen dizu gertatu ahala</translation> <translation id="5561549206367097665">Konektatzeko zain…</translation> <translation id="5568069709869097550">Ezin da hasi saioa</translation> +<translation id="557018954714092179">Sortu karpeta bat</translation> <translation id="5578795271662203820">Bilatu irudia <ph name="SEARCH_ENGINE" /> bilatzailean</translation> <translation id="5581519193887989363">Zer sinkronizatu nahi duzun aukeratzeko, joan <ph name="BEGIN_LINK1" />Ezarpenak<ph name="END_LINK1" /> atalera.</translation> <translation id="5590372121997663538">Gogoratu ordenagailu hau</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Aldatu webgunearen ezarpenak hemen</translation> <translation id="6140709049082532940">Babes hobetua:</translation> <translation id="6140912465461743537">Herrialdea/Lurraldea</translation> +<translation id="6148266338772765473">Utzi kanpoan esteka</translation> <translation id="6150320133806434356">Gorde da laster-marka</translation> <translation id="6154478581116148741">Gailu honetako pasahitzak esportatzeko, aktibatu pantailaren blokeoa Ezarpenak atalean</translation> <translation id="6159729262978459665">Sinkronizatuta dauden gailu guztietako historia garbitzen du</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Ziurtatu gordetzera zoazen pasahitza bat datorrela <ph name="SITE" /> webguneko pasahitzarekin</translation> <translation id="6593061639179217415">Ordenagailuetarako webgunea</translation> <translation id="6594121454516132231">Ikusi zer egin nahi duen Chrome-k sare irekia mantendu bitartean zu webguneen arteko jarraipenetik babesteko</translation> +<translation id="6594347733515723558">Ordena-/Ikuspegi-aukerak</translation> <translation id="6595046016124923392">Jasotzen dituzun deskribapenak hobetzeko bidaltzen zaizkio irudiak Google-ri.</translation> <translation id="6600954340915313787">Chrome-n kopiatu da</translation> <translation id="661266467055912436">Segurtasuna hobetzen du, bai zuretzat, bai sareko gainontzeko erabiltzaileentzat.</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 33f4a0d..b226e330 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
@@ -191,7 +191,7 @@ <translation id="2056878612599315956">سایت موقتاً متوقف شد</translation> <translation id="2065944887543506430">{FILE_COUNT,plural, =1{۱ بارگیری انجام نشد}one{# بارگیری انجام نشد}other{# بارگیری انجام نشد}}</translation> <translation id="2067805253194386918">نوشتار</translation> -<translation id="2068748236079642969">تماشای ویدیوی بعدی</translation> +<translation id="2068748236079642969">تماشای ویدیو بعدی</translation> <translation id="2079545284768500474">لغو</translation> <translation id="2082238445998314030"><ph name="RESULT_NUMBER" /> نتیجه از <ph name="TOTAL_RESULTS" /></translation> <translation id="2096012225669085171">همگامسازی و شخصیسازی در همه دستگاهها</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 2dd18230..58ae6f1 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Lue lisätietoja<ph name="END_LINK" /> suositellusta sisällöstä.</translation> <translation id="3495219333887281978">Kirjautumispaneeli avattu puolelle näytölle.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Lajittelu: vanhin ensin</translation> <translation id="3507132249039706973">Perustason suojaus on päällä</translation> <translation id="3509330069915219067">Offline-tilassa. Chrome ei voi tarkistaa päivityksiä.</translation> <translation id="3513704683820682405">Lisätty todellisuus</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Hae kaikki kirjanmerkkisi</translation> <translation id="4177501066905053472">Mainosten aiheet</translation> <translation id="4181841719683918333">Kielet</translation> +<translation id="4188221736490993796">Lajittele Z:sta A:han</translation> <translation id="4195643157523330669">Avaa uudelle välilehdelle</translation> <translation id="4196597275619698563">Luo kortti</translation> <translation id="4198423547019359126">Tallennussijainteja ei ole saatavilla</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Piilota salasana</translation> <translation id="4572422548854449519">Kirjaudu hallinnoidulle tilille</translation> <translation id="4576892426230499203">Kokeile toista vahvistustapaa</translation> +<translation id="4577115723294378384">Lajittele A:sta Z:aan</translation> <translation id="4578289292431526768">Aloitetaan</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# minuutti sitten}other{# minuuttia sitten}}</translation> <translation id="4587589328781138893">Sivustot</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Hae kuvaa Googlella <ph name="BEGIN_NEW" />Uusi<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ja <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> muu}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ja <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> muuta}}</translation> <translation id="4699172675775169585">Välimuistissa olevat kuvat ja tiedostot</translation> +<translation id="4710167854527459075">Lajittele: uusin ensin</translation> <translation id="4719927025381752090">Tarjoudu kääntämään</translation> <translation id="4720023427747327413">Avaa kohteessa <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Katso suositut sivustosi</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Havaitsee vaaralliset tapahtumat ja varoittaa niistä etukäteen</translation> <translation id="5561549206367097665">Odotetaan verkkoyhteyttä…</translation> <translation id="5568069709869097550">Ei voi kirjautua sisään</translation> +<translation id="557018954714092179">Luo uusi kansio</translation> <translation id="5578795271662203820">Etsi tätä kuvaa palvelusta <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Voit valita synkronoitavan sisällön <ph name="BEGIN_LINK1" />asetuksissa<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Muista tämä tietokone</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Muuta sivustoasetuksia täällä</translation> <translation id="6140709049082532940">Parannettu suojaus:</translation> <translation id="6140912465461743537">Maa/alue</translation> +<translation id="6148266338772765473">Jätä linkki pois</translation> <translation id="6150320133806434356">Kirjanmerkki tallennettu</translation> <translation id="6154478581116148741">Ota näytön lukitus käyttöön asetuksista viedäksesi salasanoja laitteelta.</translation> <translation id="6159729262978459665">Tyhjentää kaikkien synkronoitujen laitteiden historian.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Varmista, että tallennettava salasana vastaa palvelun (<ph name="SITE" />) salasanaa</translation> <translation id="6593061639179217415">Tietokonesivusto</translation> <translation id="6594121454516132231">Katso, miten Chrome suojaa sinua sivustojen väliseltä seurannalta verkon pysyessä avoimena.</translation> +<translation id="6594347733515723558">Lajittelu ja katselu</translation> <translation id="6595046016124923392">Kuvat lähetetään Googlelle, jotta näkemiäsi kuvauksia voidaan parantaa.</translation> <translation id="6600954340915313787">Kopioitiin Chromeen.</translation> <translation id="661266467055912436">Parantaa sinun ja kaikkien verkon käyttäjien suojausta</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 4501d46..4cc9706 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /> sur le contenu suggéré</translation> <translation id="3495219333887281978">La zone de contenu dans le bas de l'écran de connexion est ouverte à mi-hauteur.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Trier par le plus ancien</translation> <translation id="3507132249039706973">La protection standard est activée</translation> <translation id="3509330069915219067">Hors ligne. Chrome ne peut pas vérifier la présence de mises à jour.</translation> <translation id="3513704683820682405">Réalité augmentée</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Ajoutez tous vos favoris</translation> <translation id="4177501066905053472">Sujets d'annonces</translation> <translation id="4181841719683918333">Langues</translation> +<translation id="4188221736490993796">Trier de Z à A</translation> <translation id="4195643157523330669">Ouvrir dans un nouvel onglet</translation> <translation id="4196597275619698563">Créer une carte</translation> <translation id="4198423547019359126">Aucun dossier de téléchargement n'est disponible</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Masquer le mot de passe</translation> <translation id="4572422548854449519">Connectez-vous à un compte géré</translation> <translation id="4576892426230499203">Essayez avec une autre option de vérification</translation> +<translation id="4577115723294378384">Trier de A à Z</translation> <translation id="4578289292431526768">Allons-y</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{Il y a # minute}one{Il y a # minute}other{Il y a # minutes}}</translation> <translation id="4587589328781138893">Sites</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Rechercher avec Google <ph name="BEGIN_NEW" />Nouveau<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autre option de livraison}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autre option de livraison}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autres options de livraison}}</translation> <translation id="4699172675775169585">Images et fichiers dans la mémoire cache</translation> +<translation id="4710167854527459075">Trier par le plus récent</translation> <translation id="4719927025381752090">Proposer une traduction</translation> <translation id="4720023427747327413">Ouvrir dans <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Afficher vos sites les plus fréquentés</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Il détecte les événements dangereux et vous en informe lorsqu'ils surviennent</translation> <translation id="5561549206367097665">En attente du réseau…</translation> <translation id="5568069709869097550">Impossible de se connecter</translation> +<translation id="557018954714092179">Créer un dossier</translation> <translation id="5578795271662203820">Rechercher cette image avec <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Vous pouvez toujours choisir les éléments à synchroniser dans les <ph name="BEGIN_LINK1" />paramètres<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Mémoriser cet ordinateur</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Modifier les paramètres de votre site ici</translation> <translation id="6140709049082532940">Protection renforcée :</translation> <translation id="6140912465461743537">Pays/région</translation> +<translation id="6148266338772765473">Exclure le lien</translation> <translation id="6150320133806434356">Favori enregistré</translation> <translation id="6154478581116148741">Activez le verrouillage de l'écran dans Paramètres pour exporter vos mots de passe à partir de cet appareil</translation> <translation id="6159729262978459665">Efface l'historique de tous les appareils synchronisés.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Assurez-vous que le mot de passe que vous enregistrez correspond à celui pour <ph name="SITE" /></translation> <translation id="6593061639179217415">Version ordinateur</translation> <translation id="6594121454516132231">Découvrez comment Chrome planifie de vous protéger du suivi intersites, tout en préservant le caractère ouvert du Web</translation> +<translation id="6594347733515723558">Options tri et affichage</translation> <translation id="6595046016124923392">Les images sont envoyées à Google afin d'améliorer les descriptions pour vous.</translation> <translation id="6600954340915313787">Copiée dans Chrome</translation> <translation id="661266467055912436">Il renforce votre sécurité et celle de tous les utilisateurs sur le Web.</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 56815013..551fa1b 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
@@ -288,7 +288,7 @@ <translation id="2612676031748830579">Numéro de carte</translation> <translation id="2625189173221582860">Mot de passe copié</translation> <translation id="2642087927315268160">La bottom sheet de connexion est fermée.</translation> -<translation id="2643064289437760082">Vous pouvez toujours supprimer les données de mesure des performances des annonces en supprimant vos données de navigation</translation> +<translation id="2643064289437760082">Vous pouvez toujours supprimer les données de mesure des annonces en supprimant vos données de navigation</translation> <translation id="2647434099613338025">Ajouter une langue</translation> <translation id="2649068648233607930">Votre navigateur est géré par <ph name="DOMAIN" /></translation> <translation id="2650348088770008516">Explications du Guide sur la confidentialité fermées</translation> @@ -395,7 +395,7 @@ <translation id="316694332262407393">Chrome est déjà en cours d'exécution ici.</translation> <translation id="3167258285411721858">Vous pouvez demander le site mobile de <ph name="HOST_NAME" /></translation> <translation id="3169472444629675720">Discover</translation> -<translation id="3187472288455401631">Performances des annonces</translation> +<translation id="3187472288455401631">Mesure des annonces</translation> <translation id="3207960819495026254">Favori</translation> <translation id="3208584281581115441">Vérifier maintenant</translation> <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> a été supprimé</translation> @@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /> sur le contenu suggéré</translation> <translation id="3495219333887281978">Bottom sheet de connexion ouverte à mi-hauteur.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Trier par le plus ancien</translation> <translation id="3507132249039706973">La protection standard est activée</translation> <translation id="3509330069915219067">Hors connexion. Chrome ne parvient pas à rechercher les mises à jour.</translation> <translation id="3513704683820682405">Réalité augmentée</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Récupérer tous vos favoris</translation> <translation id="4177501066905053472">Thèmes publicitaires</translation> <translation id="4181841719683918333">Langues</translation> +<translation id="4188221736490993796">Trier de Z à A</translation> <translation id="4195643157523330669">Ouvrir dans un nouvel onglet</translation> <translation id="4196597275619698563">Créer une fiche</translation> <translation id="4198423547019359126">Aucun emplacement de téléchargements disponible</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Masquer le mot de passe</translation> <translation id="4572422548854449519">Se connecter à un compte géré</translation> <translation id="4576892426230499203">Essayez une autre option de validation</translation> +<translation id="4577115723294378384">Trier de A à Z</translation> <translation id="4578289292431526768">C'est parti</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{Il y a # minute}one{Il y a # minute}other{Il y a # minutes}}</translation> <translation id="4587589328781138893">Sites</translation> @@ -654,7 +657,7 @@ <translation id="4662373422909645029">Le pseudo ne doit pas contenir de chiffres</translation> <translation id="4663499661119906179">Retrouvez les meilleurs sites et articles pour vous</translation> <translation id="4663756553811254707"><ph name="NUMBER_OF_BOOKMARKS" /> favoris ont été supprimés.</translation> -<translation id="4668279686271488041">Les données de mesure des performances des annonces sont régulièrement supprimées de votre appareil</translation> +<translation id="4668279686271488041">Les données de mesure des annonces sont régulièrement supprimées de votre appareil</translation> <translation id="4668347365065281350">Toutes les données stockées par les sites, y compris les cookies et autres données stockées en local</translation> <translation id="4678082183394354975">Le thème sombre pour les sites est activé dans Chrome</translation> <translation id="4684427112815847243">Tout synchroniser</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Rech. image avec Google <ph name="BEGIN_NEW" />Nouv.<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> de plus}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> de plus}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> de plus}}</translation> <translation id="4699172675775169585">Images et fichiers en cache</translation> +<translation id="4710167854527459075">Trier par le plus récent</translation> <translation id="4719927025381752090">Proposer de traduire</translation> <translation id="4720023427747327413">Ouvrir dans <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Retrouvez les meilleurs sites pour vous</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Il détecte les événements dangereux et vous en informe lorsqu'ils surviennent</translation> <translation id="5561549206367097665">En attente de connexion au réseau…</translation> <translation id="5568069709869097550">Impossible de se connecter</translation> +<translation id="557018954714092179">Créer un dossier</translation> <translation id="5578795271662203820">Rechercher l'image sur <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Vous avez toujours la possibilité de sélectionner les éléments à synchroniser dans les <ph name="BEGIN_LINK1" />paramètres<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Mémoriser cet ordinateur</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Modifiez les paramètres des sites ici</translation> <translation id="6140709049082532940">Protection renforcée :</translation> <translation id="6140912465461743537">Pays/Région</translation> +<translation id="6148266338772765473">Exclure le lien</translation> <translation id="6150320133806434356">Favori enregistré</translation> <translation id="6154478581116148741">Activez le verrouillage de l'écran dans les paramètres pour exporter vos mots de passe à partir de cet appareil</translation> <translation id="6159729262978459665">Efface l'historique de tous les appareils synchronisés.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Assurez-vous que le mot de passe que vous enregistrez correspond bien à celui que vous utilisez pour accéder à <ph name="SITE" /></translation> <translation id="6593061639179217415">Version pour ordinateur</translation> <translation id="6594121454516132231">Découvrez comment Chrome vous protège contre le suivi intersite tout en préservant le Web ouvert</translation> +<translation id="6594347733515723558">Options tri et affichage</translation> <translation id="6595046016124923392">Les images sont envoyées à Google afin de vous proposer de meilleures descriptions.</translation> <translation id="6600954340915313787">Copiée dans Chrome</translation> <translation id="661266467055912436">Il renforce votre sécurité et celle de tous les utilisateurs sur le Web.</translation> @@ -1153,7 +1160,7 @@ <translation id="7242755609445462077">En surbrillance et stylisé, <ph name="CURRENT_DATE" /></translation> <translation id="7248069434667874558">Assurez-vous que la synchronisation est activée sur votre <ph name="TARGET_DEVICE_NAME" /> dans Chrome</translation> <translation id="7252076891734325316">Posez le téléphone près de l'ordinateur</translation> -<translation id="7260367682327802201">Votre appareil Android peut inclure un paramètre similaire. Si la mesure des performances des annonces est activée dans Chrome et sur votre appareil Android, une entreprise peut mesurer l'efficacité d'une annonce sur les sites Web que vous consultez et dans les applis que vous utilisez.</translation> +<translation id="7260367682327802201">Votre appareil Android peut inclure un paramètre similaire. Si la mesure des annonces est activée dans Chrome et sur votre appareil Android, une entreprise peut mesurer l'efficacité d'une annonce sur les sites Web que vous consultez et dans les applis que vous utilisez.</translation> <translation id="727288900855680735">Envoyer <ph name="ONE_TIME_CODE" /> à <ph name="ORIGIN" /> ?</translation> <translation id="7274013316676448362">Site bloqué</translation> <translation id="7286572596625053347">Modifier <ph name="LANGUAGE" /> ?</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 5df7d70e..cc72d60 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /> o predloženom sadržaju</translation> <translation id="3495219333887281978">Donja tablica za prijavu otvorena na pola visine.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Poredaj od najstarijeg</translation> <translation id="3507132249039706973">Uključena je Standardna zaštita</translation> <translation id="3509330069915219067">Offline. Chrome ne može provjeriti ima li ažuriranja.</translation> <translation id="3513704683820682405">Proširena stvarnost</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Pristup svim vašim oznakama</translation> <translation id="4177501066905053472">Teme oglasa</translation> <translation id="4181841719683918333">Jezici</translation> +<translation id="4188221736490993796">Poredaj od Ž do A</translation> <translation id="4195643157523330669">Otvori na novoj kartici</translation> <translation id="4196597275619698563">Izradi karticu</translation> <translation id="4198423547019359126">Lokacije preuzimanja nisu dostupne</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Sakrij zaporku</translation> <translation id="4572422548854449519">Prijava na upravljani račun</translation> <translation id="4576892426230499203">Pokušajte s drugom opcijom potvrde</translation> +<translation id="4577115723294378384">Poredaj od A do Ž</translation> <translation id="4578289292431526768">Započnimo</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{prije # minute}one{prije # minute}few{prije # minute}other{prije # minuta}}</translation> <translation id="4587589328781138893">Web-lokacije</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Pretraži sliku na Googleu <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation> <translation id="4699172675775169585">Predmemorirane slike i datoteke</translation> +<translation id="4710167854527459075">Poredaj od najnovijeg</translation> <translation id="4719927025381752090">Ponudi prijevod</translation> <translation id="4720023427747327413">Otvori u aplikaciji <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Prikaz web-lokacija koje najčešće posjećujete</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Otkriva opasne događaje i upozorava vas na njih kada se dogode</translation> <translation id="5561549206367097665">Čekanje na mrežu…</translation> <translation id="5568069709869097550">Ne mogu se prijaviti</translation> +<translation id="557018954714092179">Izradi novu mapu</translation> <translation id="5578795271662203820">Potraži sliku na usluzi <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Uvijek možete odabrati u <ph name="BEGIN_LINK1" />postavkama<ph name="END_LINK1" /> što će se sinkronizirati.</translation> <translation id="5590372121997663538">Zapamti ovo računalo</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Postavke web-lokacije promijenite ovdje</translation> <translation id="6140709049082532940">Poboljšana zaštita:</translation> <translation id="6140912465461743537">Država/regija</translation> +<translation id="6148266338772765473">Isključi vezu</translation> <translation id="6150320133806434356">Oznaka je spremljena</translation> <translation id="6154478581116148741">Uključite zaključavanje zaslona u postavkama da biste izvezli svoje zaporke s ovog uređaja</translation> <translation id="6159729262978459665">Briše povijest sa svih sinkroniziranih uređaja.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Provjerite podudara li se zaporka koju spremate sa zaporkom za <ph name="SITE" /></translation> <translation id="6593061639179217415">Klasični prikaz</translation> <translation id="6594121454516132231">Pogledajte kako vas Chrome planira štititi od praćenja na različitim web-lokacijama, a istovremeno očuvati otvorenost weba</translation> +<translation id="6594347733515723558">Opcije razvrstavanja i prikaza</translation> <translation id="6595046016124923392">Slike se šalju Googleu radi poboljšanja opisa za vas.</translation> <translation id="6600954340915313787">Kopirano u Chrome</translation> <translation id="661266467055912436">Poboljšava sigurnost za vas i sve ostale na webu.</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 0cdfdbaf..44ba553 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Իմացեք ավելին<ph name="END_LINK" /> առաջարկվող բովանդակության վերաբերյալ</translation> <translation id="3495219333887281978">Հաշիվ մտնելու ներքևի էկրանը բացված է կիսով չափ։</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Սկզբում հները</translation> <translation id="3507132249039706973">Սովորական պաշտպանությունը միացված է</translation> <translation id="3509330069915219067">Կապ չկա։ Chrome-ը չի կարող ստուգել թարմացումների առկայությունը։</translation> <translation id="3513704683820682405">Լրացված իրականություն</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Ձեր բոլոր էջանիշները՝ միշտ ձեռքի տակ</translation> <translation id="4177501066905053472">Գովազդի թեմաներ</translation> <translation id="4181841719683918333">Լեզուներ</translation> +<translation id="4188221736490993796">Դասավորել Ֆ-ից Ա</translation> <translation id="4195643157523330669">Բացել նոր ներդիրով</translation> <translation id="4196597275619698563">Ստեղծել քարտ</translation> <translation id="4198423547019359126">Ներբեռնումների պանակներ չկան</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Թաքցնել գաղտնաբառը</translation> <translation id="4572422548854449519">Մուտք գործեք կառավարվող հաշիվ</translation> <translation id="4576892426230499203">Ընտրեք հաստատման այլ տարբերակ</translation> +<translation id="4577115723294378384">Դասավորել Ա-ից Ֆ</translation> <translation id="4578289292431526768">Սկսել</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# րոպե առաջ}one{# րոպե առաջ}other{# րոպե առաջ}}</translation> <translation id="4587589328781138893">Կայքեր</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Որոնել պատկերներ Google-ով <ph name="BEGIN_NEW" />Նոր<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 և ուղարկման ևս <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> տարբերակ}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 և ուղարկման ևս <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> տարբերակ}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 և ուղարկման ևս <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> տարբերակ}}</translation> <translation id="4699172675775169585">Քեշավորված պատկերներ և ֆայլեր</translation> +<translation id="4710167854527459075">Սկզբում նորերը</translation> <translation id="4719927025381752090">Առաջարկել թարգմանել</translation> <translation id="4720023427747327413">Բացել <ph name="PRODUCT_NAME" />-ում</translation> <translation id="47217992755561375">Դիտեք ձեր թոփ կայքերը</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Հայտնաբերում է վտանգավոր իրադարձություններն ու զգուշացնում դրանց մասին</translation> <translation id="5561549206367097665">Ցանցի որոնում…</translation> <translation id="5568069709869097550">Չհաջողվեց մուտք գործել</translation> +<translation id="557018954714092179">Ստեղծել նոր պանակ</translation> <translation id="5578795271662203820">Որոնել այս պատկերը <ph name="SEARCH_ENGINE" />-ում</translation> <translation id="5581519193887989363">Ցանկացած ժամանակ կարող եք անցնել <ph name="BEGIN_LINK1" />կարգավորումներ<ph name="END_LINK1" /> և ընտրել, թե ինչն եք ուզում համաժամացնել:</translation> <translation id="5590372121997663538">Հիշել այս համակարգիչը</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Այստեղ կարող եք փոխել կայքի կարգավորումները</translation> <translation id="6140709049082532940">Բարելավված պաշտպանություն՝</translation> <translation id="6140912465461743537">Երկիր/տարածաշրջան</translation> +<translation id="6148266338772765473">Բացառել հղումը</translation> <translation id="6150320133806434356">Էջանիշը պահված է</translation> <translation id="6154478581116148741">Այս սարքից ձեր գաղտնաբառերն արտահանելու համար կարգավորումներում միացրեք էկրանի կողպումը։</translation> <translation id="6159729262978459665">Մաքրում է պատմությունը բոլոր համաժամացված սարքերից։</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Ստուգեք՝ արդյոք գաղտնաբառը, որն ուզում եք պահել, համընկնում է <ph name="SITE" /> կայքի ձեր գաղտնաբառի հետ։</translation> <translation id="6593061639179217415">Համակարգչային տարբերակ</translation> <translation id="6594121454516132231">Դիտեք, թե ինչպես է Chromе-ը պաշտպանելու ձեզ գործողությունների միջկայքային հետագծման մեխանիզմներից</translation> +<translation id="6594347733515723558">Դասավորում և դիտում</translation> <translation id="6595046016124923392">Պատկերներն ուղարկվում են Google-ին՝ նկարագրությունները բարելավելու նպատակով։</translation> <translation id="6600954340915313787">Պատճենվել է Chrome-ում</translation> <translation id="661266467055912436">Համացանցը դարձնում է ավելի անվտանգ ձեր և մյուս օգտատերերի համար։</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 e7823fd..a477143 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
@@ -10,7 +10,7 @@ <translation id="1049743911850919806">In incognito</translation> <translation id="1058669287135776095">Sei offline. Controlla la connessione a internet e riprova.</translation> <translation id="10614374240317010">Mai salvate</translation> -<translation id="1062628064301375934">Aiutaci a rendere il Web più privato</translation> +<translation id="1062628064301375934">Aiutaci a rendere il web più privato</translation> <translation id="107147699690128016">Se cambi l'estensione del file, il file potrebbe essere aperto in un'altra applicazione e costituire un pericolo per il dispositivo.</translation> <translation id="1089606299949659462">Revisione completata.</translation> <translation id="1095761715416917775">Assicurati di poter accedere sempre ai dati sincronizzati</translation> @@ -1193,7 +1193,7 @@ <translation id="7431991332293347422">Controlla la modalità di utilizzo della cronologia di navigazione per personalizzare la Ricerca e non solo</translation> <translation id="7435356471928173109">Disattivata dall'amministratore</translation> <translation id="7437998757836447326">Esci da Chrome</translation> -<translation id="7443901082822119557">Con la modalità di navigazione in incognito, i siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su siti diversi, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili.</translation> +<translation id="7443901082822119557">Con la modalità di navigazione in incognito, i siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili.</translation> <translation id="7453467225369441013">Verrai disconnesso dalla maggior parte dei siti, ma non dal tuo Account Google.</translation> <translation id="7453810262525006706">Comprimi in vista laterale</translation> <translation id="7454641608352164238">Spazio insufficiente</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 997aad34..a8d4926 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
@@ -87,7 +87,7 @@ <translation id="1386674309198842382">最終同期: <ph name="LAST_UPDATED" /> 日前</translation> <translation id="13931502444227376">続行すると、<ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /> からこのサイトに名前、メールアドレス、プロフィール画像が共有されます。このサイトの<ph name="BEGIN_LINK1" />利用規約<ph name="END_LINK1" />を確認してください。</translation> <translation id="1397811292916898096"><ph name="PRODUCT_NAME" /> で検索</translation> -<translation id="139993653570221430">この設定は Chrome の設定でいつでも変更できます。テストは、現在の方法での広告配信と並行して実施されるため、すぐに変更が行われるわけではありません。</translation> +<translation id="139993653570221430">この設定は Chrome の設定でいつでも変更できます。テストは、現在の方法での広告配信と並行して実施されるため、すぐに変化が現れるわけではありません。</translation> <translation id="1406000523432664303">「Do Not Track」</translation> <translation id="1407069428457324124">ダークモード</translation> <translation id="1407135791313364759">すべて開く</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 07b5fcf71..3e089a3c 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
@@ -542,6 +542,7 @@ <translation id="3999683152997576765">ທ່ານສາມາດເບິ່ງ ແລະ ລຶບຫົວຂໍ້ຂອງຄວາມສົນໃຈທີ່ເວັບໄຊຕ່າງໆໃຊ້ເພື່ອສະແດງໂຄສະນາໃຫ້ທ່ານເຫັນໄດ້. Chrome ປະເມີນຄວາມສົນໃຈຂອງທ່ານໂດຍອ້າງອີງໃສ່ປະຫວັດການທ່ອງເວັບຫຼ້າສຸດຂອງທ່ານ.</translation> <translation id="4000212216660919741">ໜ້າຫຼັກອອບລາຍຢູ່</translation> <translation id="4016425174436051808">ບໍ່ສາມາດຕິດຕາມໄດ້. ມີບາງຢ່າງຜິດພາດເກີດຂຶ້ນ.</translation> +<translation id="4024768890073681126">ໂປຣແກຣມທ່ອງເວັບຂອງທ່ານໄດ້ຮັບການຈັດການໂດຍຜູ້ປົກຄອງຂອງທ່ານ</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ຊົ່ວໂມງ}other{# ຊົ່ວໂມງ}}</translation> <translation id="4035877632587724847">ບໍ່ອະນຸຍາດ</translation> <translation id="4036177530563778041">ສືບຕໍ່ຈາກບ່ອນທີ່ທ່ານຄ້າງໄວ້ໄດ້ຢ່າງງ່າຍດາຍ</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 601e149..724872b3 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" /> par ieteikto saturu.</translation> <translation id="3495219333887281978">Pierakstīšanās ekrāna apakšdaļas lapa ir atvērta pusekrāna augstumā.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Kārtot pēc vecākās</translation> <translation id="3507132249039706973">Ir ieslēgta standarta aizsardzība.</translation> <translation id="3509330069915219067">Bezsaistē. Pārlūkprogrammā Chrome nevar pārbaudīt atjauninājumu pieejamību.</translation> <translation id="3513704683820682405">Papildinātā realitāte</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Iegūstiet visas savas grāmatzīmes</translation> <translation id="4177501066905053472">Reklāmu tēmas</translation> <translation id="4181841719683918333">Valodas</translation> +<translation id="4188221736490993796">Kārtot no Z līdz A</translation> <translation id="4195643157523330669">Atvērt jaunā cilnē</translation> <translation id="4196597275619698563">Izveidot kartīti</translation> <translation id="4198423547019359126">Nav pieejamu lejupielādes atrašanās vietu.</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Slēpt paroli</translation> <translation id="4572422548854449519">Pierakstīšanās pārvaldītā kontā</translation> <translation id="4576892426230499203">Izmēģiniet citu verifikācijas opciju</translation> +<translation id="4577115723294378384">Kārtot no A līdz Z</translation> <translation id="4578289292431526768">Sākt</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{pirms # minūtes}zero{pirms # minūtēm}one{pirms # minūtes}other{pirms # minūtēm}}</translation> <translation id="4587589328781138893">Vietnes</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Meklēt attēlu ar Google <ph name="BEGIN_NEW" />Jaunums<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />… un vēl <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}zero{<ph name="SHIPPING_OPTION_PREVIEW" />… un vēl <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />… un vēl <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />… un vēl <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation> <translation id="4699172675775169585">Kešatmiņā ievietotie attēli un faili</translation> +<translation id="4710167854527459075">Kārtot pēc jaunākās</translation> <translation id="4719927025381752090">Piedāvāt tulkot</translation> <translation id="4720023427747327413">Atvērt, izmantojot <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Skatīt vietnes, ko apmeklējat visbiežāk</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Kad atgadās bīstami notikumi, tie tiek noteikti un jūs saņemat brīdinājumus.</translation> <translation id="5561549206367097665">Tiek gaidīts savienojums ar tīklu…</translation> <translation id="5568069709869097550">Nevarat pieteikties</translation> +<translation id="557018954714092179">Izveidot jaunu mapi</translation> <translation id="5578795271662203820">Meklēt šo attēlu ar <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Jūs jebkurā laikā <ph name="BEGIN_LINK1" />iestatījumos<ph name="END_LINK1" /> varat izvēlēties, ko sinhronizēt.</translation> <translation id="5590372121997663538">Atcerēties šo datoru</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Šeit varat mainīt vietnes iestatījumus.</translation> <translation id="6140709049082532940">Uzlabota aizsardzība:</translation> <translation id="6140912465461743537">Valsts/reģions</translation> +<translation id="6148266338772765473">Bez saites</translation> <translation id="6150320133806434356">Grāmatzīme ir saglabāta</translation> <translation id="6154478581116148741">Lai eksportētu paroles no šīs ierīces, sadaļā “Iestatījumi” ieslēdziet ekrāna bloķēšanu.</translation> <translation id="6159729262978459665">Vēsture tiks notīrīta no visām sinhronizētajām ierīcēm.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Parolei, kuru vēlaties saglabāt, ir jāatbilst vietnē <ph name="SITE" /> izmantotajai parolei</translation> <translation id="6593061639179217415">Vietne datoriem</translation> <translation id="6594121454516132231">Skatiet, kā pārlūkā Chrome tiek plānots aizsargāt jūs no starpvietņu izsekošanas, vienlaikus saglabājot atvērtā tīmekļa darbību.</translation> +<translation id="6594347733515723558">Kārtošana un skatīšana</translation> <translation id="6595046016124923392">Attēli tiek sūtīti uz Google serveriem, lai uzlabotu aprakstus.</translation> <translation id="6600954340915313787">Nokopēta pārlūkā Chrome.</translation> <translation id="661266467055912436">Šis režīms efektīvāk aizsargā gan jūs, gan visus citus tīmekļa lietotājus.</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 a641f42..9ba48ab 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Дознајте повеќе<ph name="END_LINK" /> за предложените содржини</translation> <translation id="3495219333887281978">Долниот лист за најавување е отворен на половина екран.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Подредување по најстари</translation> <translation id="3507132249039706973">Вклучена е „Стандардната заштита“</translation> <translation id="3509330069915219067">Офлајн. Chrome не може да провери дали има ажурирања.</translation> <translation id="3513704683820682405">Проширена реалност</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Преземете ги сите ваши обележувачи</translation> <translation id="4177501066905053472">Теми на реклами</translation> <translation id="4181841719683918333">Јазици</translation> +<translation id="4188221736490993796">Подредување од Ш до А</translation> <translation id="4195643157523330669">Отвори во нова картичка</translation> <translation id="4196597275619698563">Создај картичка</translation> <translation id="4198423547019359126">Нема достапни локации за преземање</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Сокриј ја лозинката</translation> <translation id="4572422548854449519">Најавете се на управувана сметка</translation> <translation id="4576892426230499203">Обидете се со друга опција за потврда</translation> +<translation id="4577115723294378384">Подредување од А до Ш</translation> <translation id="4578289292431526768">Ајде</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{Пред # минута}one{Пред # минута}other{Пред # минути}}</translation> <translation id="4587589328781138893">Сајтови</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Пребарајте слика со Google <ph name="BEGIN_NEW" />Ново<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />… и уште <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />… и уште <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />… и уште <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation> <translation id="4699172675775169585">Кеширани слики и датотеки</translation> +<translation id="4710167854527459075">Подредување по најнови</translation> <translation id="4719927025381752090">Понудувај превод</translation> <translation id="4720023427747327413">Отвори во <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Видете ги вашите најдобри сајтови</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Открива опасни настани и ве предупредува кога ќе се случат</translation> <translation id="5561549206367097665">Се чека мрежа…</translation> <translation id="5568069709869097550">Не може да се најавите</translation> +<translation id="557018954714092179">Создавање нова папка</translation> <translation id="5578795271662203820">Пребарај во <ph name="SEARCH_ENGINE" /> за сликава</translation> <translation id="5581519193887989363">Секогаш може да изберете што да синхронизирате во <ph name="BEGIN_LINK1" />Поставки<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Запомни го компјутеров</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Променете ги поставките за сајтот тука</translation> <translation id="6140709049082532940">Подобрена заштита:</translation> <translation id="6140912465461743537">Држава/регион</translation> +<translation id="6148266338772765473">Изостави линк</translation> <translation id="6150320133806434356">Обележувачот е зачуван</translation> <translation id="6154478581116148741">Вклучете го заклучувањето на екранот во „Поставки“ за да ги извезете лозинките од уредов</translation> <translation id="6159729262978459665">Ќе ја исчисти историјата од сите синхронизирани уреди.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Проверете дали лозинката што ја зачувувате се совпаѓа со лозинката за <ph name="SITE" /></translation> <translation id="6593061639179217415">Сајт за десктоп</translation> <translation id="6594121454516132231">Погледнете како Chrome планира да ве заштити од следење на повеќе сајтови, додека истовремено го зачувува отворениот интернет</translation> +<translation id="6594347733515723558">Подредување и преглед</translation> <translation id="6595046016124923392">Сликите се испраќаат во Google за да им се подобрат описите.</translation> <translation id="6600954340915313787">Копирано на Chrome</translation> <translation id="661266467055912436">Ја подобрува безбедноста за вас и сите останати на интернет.</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 7615e90..3f34cd18 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708">നിർദ്ദേശിച്ച ഉള്ളടക്കത്തെക്കുറിച്ച് <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation> <translation id="3495219333887281978">സൈൻ ഇൻ ചെയ്യാനുള്ള ബോട്ടം ഷീറ്റ് പകുതി ഉയരത്തിൽ തുറന്നു.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">ഏറ്റവും പഴയത് ആദ്യം</translation> <translation id="3507132249039706973">സാധാരണ പരിരക്ഷ ഓണാക്കിയിരിക്കുന്നു</translation> <translation id="3509330069915219067">ഓഫ്ലൈൻ. Chrome-ന് അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കാനാകില്ല.</translation> <translation id="3513704683820682405">അനുബന്ധയാഥാർത്ഥ്യം</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">നിങ്ങളുടെ എല്ലാ ബുക്ക്മാർക്കുകളും നേടുക</translation> <translation id="4177501066905053472">പരസ്യ വിഷയങ്ങൾ</translation> <translation id="4181841719683918333">ഭാഷകൾ</translation> +<translation id="4188221736490993796">റ മുതൽ അ വരെയുള്ള ക്രമം</translation> <translation id="4195643157523330669">പുതിയ ടാബില് തുറക്കുക</translation> <translation id="4196597275619698563">കാർഡ് സൃഷ്ടിക്കുക</translation> <translation id="4198423547019359126">ലഭ്യമായ ഡൗൺലോഡ് ലൊക്കേഷനുകളൊന്നും ഇല്ല</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">പാസ്വേഡ് മറയ്ക്കുക</translation> <translation id="4572422548854449519">മാനേജ് ചെയ്ത അക്കൗണ്ടിലേക്ക് സൈൻ ഇൻ ചെയ്യുക</translation> <translation id="4576892426230499203">മറ്റൊരു പരിശോധിച്ചുറപ്പിക്കൽ ഓപ്ഷൻ പരീക്ഷിക്കുക</translation> +<translation id="4577115723294378384">അ മുതൽ റ വരെയുള്ള ക്രമം</translation> <translation id="4578289292431526768">തുടങ്ങാം</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# മിനിറ്റ് മുമ്പ്}other{# മിനിറ്റ് മുമ്പ്}}</translation> <translation id="4587589328781138893">സൈറ്റുകള്</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Google ഉപയോഗിച്ച് ചിത്രം തിരയൂ <ph name="BEGIN_NEW" />പുതിയത്<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 എന്നതും മറ്റ് <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> പേയ്മെന്റ് രീതികളും}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 എന്നതും മറ്റ് <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> പേയ്മെന്റ് രീതികളും}}</translation> <translation id="4699172675775169585">കാഷെ ചെയ്ത ചിത്രങ്ങളും ഫയലുകളും</translation> +<translation id="4710167854527459075">ഏറ്റവും പുതിയത് ആദ്യം</translation> <translation id="4719927025381752090">വിവർത്തനം ചെയ്യാനുള്ള ഓഫർ</translation> <translation id="4720023427747327413"><ph name="PRODUCT_NAME" />-ൽ തുറക്കുക</translation> <translation id="47217992755561375">നിങ്ങളുടെ പ്രധാന സൈറ്റുകൾ കാണുക</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">അപകടകരമായ ഇവന്റുകൾ നടക്കുമ്പോൾ അവ കണ്ടെത്തുകയും നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകുകയും ചെയ്യുന്നു</translation> <translation id="5561549206367097665">നെറ്റ്വർക്കിനായി കാത്തിരിക്കുന്നു...</translation> <translation id="5568069709869097550">സൈൻ ഇൻ ചെയ്യാനായില്ല</translation> +<translation id="557018954714092179">പുതിയ ഫോൾഡർ സൃഷ്ടിക്കുക</translation> <translation id="5578795271662203820">ഈ ചിത്രത്തിനായി <ph name="SEARCH_ENGINE" />-ൽ തിരയുക</translation> <translation id="5581519193887989363">എന്തൊക്കെ സമന്വയിക്കണമെന്നത് <ph name="BEGIN_LINK1" />ക്രമീകരണത്തിൽ<ph name="END_LINK1" /> നിങ്ങൾക്ക് എപ്പോഴും തിരഞ്ഞെടുക്കാം.</translation> <translation id="5590372121997663538">ഈ കമ്പ്യൂട്ടർ ഓർമ്മിക്കുക</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">നിങ്ങളുടെ സൈറ്റ് ക്രമീകരണം ഇവിടെ മാറ്റുക</translation> <translation id="6140709049082532940">മെച്ചപ്പെടുത്തിയ പരിരക്ഷ:</translation> <translation id="6140912465461743537">രാജ്യം/പ്രദേശം</translation> +<translation id="6148266338772765473">ലിങ്ക് ഒഴിവാക്കുക</translation> <translation id="6150320133806434356">ബുക്ക്മാർക്ക് സംരക്ഷിച്ചു</translation> <translation id="6154478581116148741">ഈ ഉപകരണത്തിൽ നിന്ന് നിങ്ങളുടെ പാസ്വേഡുകൾ എക്സ്പോർട്ട് ചെയ്യാൻ ക്രമീകരണത്തിൽ സ്ക്രീൻ ലോക്ക് ഓണാക്കുക</translation> <translation id="6159729262978459665">സമന്വയിപ്പിച്ച എല്ലാ ഉപകരണങ്ങളിൽ നിന്നും ചരിത്രം മായ്ക്കുന്നു.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">നിങ്ങൾ സംരക്ഷിക്കുന്ന പാസ്വേഡ്, <ph name="SITE" />-നുള്ള പാസ്വേഡുമായി പൊരുത്തപ്പെടുന്നു എന്ന് ഉറപ്പാക്കുക</translation> <translation id="6593061639179217415">ഡെസ്ക്ടോപ്പ് സൈറ്റ്</translation> <translation id="6594121454516132231">ഓപ്പൺ വെബിനെ പരിരക്ഷിച്ച് കൊണ്ട് നിങ്ങളെ ക്രോസ്-സെെറ്റ് ട്രാക്കിംഗിൽ നിന്ന് സംരക്ഷിക്കാൻ Chrome പദ്ധതിയിടുന്നത് എങ്ങനെയെന്ന് കാണുക</translation> +<translation id="6594347733515723558">ഓപ്ഷനുകൾ അടുക്കുക, കാണുക</translation> <translation id="6595046016124923392">നിങ്ങൾക്കായി വിവരണങ്ങൾ മെച്ചപ്പെടുത്തുന്നതിന് ചിത്രങ്ങൾ Google-ലേക്ക് അയയ്ക്കുന്നു.</translation> <translation id="6600954340915313787">Chrome-ലേക്ക് പ്കർത്തി</translation> <translation id="661266467055912436">നിങ്ങൾക്കും വെബിലെ എല്ലാവർക്കും സുരക്ഷ മെച്ചപ്പെടുത്തുന്നു.</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 b543f93a..67b71ed0 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708">ପ୍ରସ୍ତାବିତ ବିଷୟବସ୍ତୁ ବିଷୟରେ <ph name="BEGIN_LINK" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK" /></translation> <translation id="3495219333887281978">ସାଇନ ଇନ ବଟମ ସିଟ ଅଧା ସ୍କ୍ରିନରେ ଖୋଲିଛି।</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">ସବୁଠୁ ପୁରୁଣା ଅନୁସାରେ ସର୍ଟ କର</translation> <translation id="3507132249039706973">ଷ୍ଟାଣ୍ଡାର୍ଡ ସୁରକ୍ଷା ଚାଲୁ ଅଛି</translation> <translation id="3509330069915219067">ଅଫଲାଇନ୍। ଅପଡେଟଗୁଡ଼ିକ ଅଛି ନା ନାହିଁ ତାହା Chrome ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ।</translation> <translation id="3513704683820682405">ବୃଦ୍ଧି ହେଉଥିବା ବାସ୍ତବତା</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">ଆପଣଙ୍କର ସମସ୍ତ ବୁକମାର୍କ ପାଆନ୍ତୁ</translation> <translation id="4177501066905053472">ବିଜ୍ଞାପନ ବିଷୟ</translation> <translation id="4181841719683918333">ଭାଷାସମୂହ</translation> +<translation id="4188221736490993796">Zରୁ A ଅନୁସାରେ ସର୍ଟ କର</translation> <translation id="4195643157523330669">ନୂତନ ଟ୍ୟାବରେ ଖୋଲନ୍ତୁ</translation> <translation id="4196597275619698563">କାର୍ଡ ତିଆରି କରନ୍ତୁ</translation> <translation id="4198423547019359126">କୌଣସି ଡାଉନ୍ଲୋଡ୍ ହୋଇଥିବା ଲୋକେସନ୍ ଉପଲବ୍ଧ ନାହିଁ</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">ପାସୱାର୍ଡ୍ ଲୁଚାନ୍ତୁ</translation> <translation id="4572422548854449519">ପରିଚାଳିତ ଆକାଉଣ୍ଟରେ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation> <translation id="4576892426230499203">ଅନ୍ୟ ଏକ ଯାଞ୍ଚକରଣ ବିକଳ୍ପ ବ୍ୟବହାର କରି ଦେଖନ୍ତୁ</translation> +<translation id="4577115723294378384">Aରୁ Z ଅନୁସାରେ ସର୍ଟ କର</translation> <translation id="4578289292431526768">ଚାଲନ୍ତୁ ଆରମ୍ଭ କରିବା</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# ମିନିଟ୍ ପୂର୍ବେ}other{#ମିନିଟ୍ ପୂର୍ବେ}}</translation> <translation id="4587589328781138893">Sites</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Google <ph name="BEGIN_NEW" />ନୂଆ<ph name="END_NEW" /> ସହ ଇମେଜ ସର୍ଚ୍ଚ କର</translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ଏବଂ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ଅଧିକ}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ଏବଂ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ଅଧିକ}}</translation> <translation id="4699172675775169585">କେଚ୍ ଛବି ଏବଂ ଫାଇଲ୍</translation> +<translation id="4710167854527459075">ସବୁଠୁ ନୂଆ ଅନୁସାରେ ସର୍ଟ କର</translation> <translation id="4719927025381752090">ଅନୁବାଦ କରିବାକୁ ପ୍ରସ୍ତାବ ଦିଅନ୍ତୁ</translation> <translation id="4720023427747327413"><ph name="PRODUCT_NAME" />ରେ ଖୋଲନ୍ତୁ</translation> <translation id="47217992755561375">ଆପଣଙ୍କ ଶ୍ରେଷ୍ଠ ସାଇଟଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">ବିପଦଜନକ ଘଟଣାଗୁଡ଼ିକ ଘଟିଲେ ଏଗୁଡ଼ିକୁ ଚିହ୍ନଟ କରି ଆପଣଙ୍କୁ ଚେତାବନୀ ଦିଏ</translation> <translation id="5561549206367097665">ନେଟ୍ୱର୍କ ପାଇଁ ଅପେକ୍ଷାରତ…</translation> <translation id="5568069709869097550">ସାଇନ୍ ଇନ୍ କରିପାରିବ ନାହିଁ</translation> +<translation id="557018954714092179">ନୂଆ ଫୋଲ୍ଡର ତିଆରି କରନ୍ତୁ</translation> <translation id="5578795271662203820">ଏହି ଛବି ପାଇଁ <ph name="SEARCH_ENGINE" /> ସନ୍ଧାନ କରନ୍ତୁ</translation> <translation id="5581519193887989363"><ph name="BEGIN_LINK1" />ସେଟିଂସ୍<ph name="END_LINK1" />ରେ କ’ଣ ସିଙ୍କ୍ କରିବାକୁ ହେବ ତାହା ଆପଣ ସର୍ବଦା ବାଛି ପାରିବେ।</translation> <translation id="5590372121997663538">ଏହି କମ୍ପ୍ୟୁଟରକୁ ମନେ ରଖନ୍ତୁ</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">ଏଠାରେ ଆପଣଙ୍କ ସାଇଟର ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation> <translation id="6140709049082532940">ଉନ୍ନତ ସୁରକ୍ଷା:</translation> <translation id="6140912465461743537">ଦେଶ/ଅଞ୍ଚଳ</translation> +<translation id="6148266338772765473">ଲିଙ୍କକୁ ବାଦ ଦିଅନ୍ତୁ</translation> <translation id="6150320133806434356">ବୁକମାର୍କ ସେଭ କରାଯାଇଛି</translation> <translation id="6154478581116148741">ଏହି ଡିଭାଇସ୍ରୁ ଆପଣଙ୍କର ପାସ୍ୱର୍ଡ ଏକ୍ସପୋର୍ଟ କରିବାକୁ ସେଟିଂସ୍ରେ ସ୍କ୍ରିନ୍ ଲକ୍ ଚାଲୁ କରନ୍ତୁ</translation> <translation id="6159729262978459665">ସିଙ୍କ୍ କରାଯାଇଥିବା ସମସ୍ତ ଡିଭାଇସରୁ ଇତିହାସକୁ ଖାଲି କରେ।</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">ଆପଣ ସେଭ୍ କରୁଥିବା ପାସୱାର୍ଡ <ph name="SITE" /> ପାଇଁ ଆପଣଙ୍କ ପାସୱାର୍ଡ ସହ ମେଳ ହେଉଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation> <translation id="6593061639179217415">ଡେସ୍କଟପ୍ ସାଇଟ୍</translation> <translation id="6594121454516132231">ଓପନ ୱେବକୁ ସଂରକ୍ଷିତ କରିବା ସମୟରେ କ୍ରସ-ସାଇଟ ଟ୍ରାକିଂରୁ ଆପଣଙ୍କୁ ସୁରକ୍ଷିତ ରଖିବା ପାଇଁ Chrome କିପରି ପ୍ଲାନ କରେ ଦେଖନ୍ତୁ</translation> +<translation id="6594347733515723558">ସର୍ଟ ଓ ଭ୍ୟୁ ବିକଳ୍ପଗୁଡ଼ିକ</translation> <translation id="6595046016124923392">ଆପଣଙ୍କ ପାଇଁ ବର୍ଣ୍ଣନାକୁ ଉନ୍ନତ କରିବା ନିମନ୍ତେ ଛବିଗୁଡ଼ିକ Googleକୁ ପଠାଯାଇଛି।</translation> <translation id="6600954340915313787">କପି କରାଯାଇ Chromeକୁ ନିଆଗଲା</translation> <translation id="661266467055912436">ଆପଣ ଏବଂ ୱେବରେ ଥିବା ପ୍ରତ୍ୟେକ ବ୍ୟକ୍ତିଙ୍କ ପାଇଁ ସୁରକ୍ଷାକୁ ଉନ୍ନତ କରେ।</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 e26a7a2..b7c43ec2 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /> sobre o conteúdo sugerido</translation> <translation id="3495219333887281978">Página inferior de login aberta na metade da altura.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Ordenar por mais antigo</translation> <translation id="3507132249039706973">A Proteção padrão está ativa</translation> <translation id="3509330069915219067">Off-line. O Chrome não pode verificar se há atualizações.</translation> <translation id="3513704683820682405">Realidade aumentada</translation> @@ -556,7 +557,7 @@ <translation id="4096227151372679484">Fluxo para adicionar aos favoritos aberto na metade da altura</translation> <translation id="4101475238162928417">Sincronize para acessar seus favoritos, senhas e muito mais em outros dispositivos</translation> <translation id="410351446219883937">Reprodução automática</translation> -<translation id="4106587138345390261">O Chrome está explorando novos recursos que permitem que os sites ofereçam a mesma experiência de navegação atual usando menos informações pessoais</translation> +<translation id="4106587138345390261">O Chrome está explorando novos recursos para permitir que os sites ofereçam a mesma experiência de navegação atual usando menos informações pessoais</translation> <translation id="4108314971463891922">Seguir</translation> <translation id="4108998448622696017">Detecta e avisa você sobre eventos perigosos quando eles acontecerem.</translation> <translation id="4116038641877404294">Faça o download de páginas e acesse off-line</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Acesse todos os seus favoritos</translation> <translation id="4177501066905053472">Temas de anúncios</translation> <translation id="4181841719683918333">Idiomas</translation> +<translation id="4188221736490993796">Ordenar de Z a A</translation> <translation id="4195643157523330669">Abrir em uma nova guia</translation> <translation id="4196597275619698563">Criar card</translation> <translation id="4198423547019359126">Não há locais de download disponíveis</translation> @@ -641,6 +643,7 @@ <translation id="4565377596337484307">Ocultar senha</translation> <translation id="4572422548854449519">Fazer login em conta gerenciada</translation> <translation id="4576892426230499203">Tente outra opção de verificação</translation> +<translation id="4577115723294378384">Ordenar de A a Z</translation> <translation id="4578289292431526768">Vamos lá</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# minuto atrás}one{# minutos atrás}other{# minutos atrás}}</translation> <translation id="4587589328781138893">Sites</translation> @@ -664,6 +667,7 @@ <translation id="4689792375321623175">Pesquisar imagem com o Google <ph name="BEGIN_NEW" />Novo<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation> <translation id="4699172675775169585">Imagens e arquivos armazenados em cache</translation> +<translation id="4710167854527459075">Ordenar por mais recente</translation> <translation id="4719927025381752090">Oferecer para traduzir</translation> <translation id="4720023427747327413">Abrir no <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Veja seus principais sites</translation> @@ -833,6 +837,7 @@ <translation id="5561162485081632007">Detecta e avisa você sobre eventos perigosos quando eles acontecem</translation> <translation id="5561549206367097665">Aguardando a rede…</translation> <translation id="5568069709869097550">Não consigo acessar</translation> +<translation id="557018954714092179">Criar pasta</translation> <translation id="5578795271662203820">Pesquisar imagem no <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Nas <ph name="BEGIN_LINK1" />configurações<ph name="END_LINK1" />, é possível escolher a qualquer momento o que é sincronizado.</translation> <translation id="5590372121997663538">Lembrar deste computador</translation> @@ -937,6 +942,7 @@ <translation id="6138832295072039549">Mude as configurações do site aqui</translation> <translation id="6140709049082532940">Proteção reforçada:</translation> <translation id="6140912465461743537">País/região</translation> +<translation id="6148266338772765473">Excluir link</translation> <translation id="6150320133806434356">Favorito salvo</translation> <translation id="6154478581116148741">Ative o bloqueio da tela em Configurações para exportar suas senhas deste dispositivo</translation> <translation id="6159729262978459665">Limpa o histórico de todos os dispositivos sincronizados.</translation> @@ -1028,6 +1034,7 @@ <translation id="6590680911007613645">A senha que você está salvando precisa ser igual à usada em <ph name="SITE" /></translation> <translation id="6593061639179217415">Para computador</translation> <translation id="6594121454516132231">Veja como o Chrome pretende proteger você contra mecanismos de rastreamento entre sites ao mesmo tempo em que preserva uma Internet livre</translation> +<translation id="6594347733515723558">Ordenar e mostrar opções</translation> <translation id="6595046016124923392">As imagens são enviadas para o Google e, assim, podemos melhorar as descrições para você.</translation> <translation id="6600954340915313787">Copiado no Chrome</translation> <translation id="661266467055912436">Melhora a segurança para você e para todos na Web.</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 f6ddaff..140cdda 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
@@ -753,7 +753,7 @@ <translation id="5091199029769593641">Скоро, открывая новую вкладку, вы будете видеть статьи с сайта "<ph name="SITE_NAME" />". Сайты, на которые вы подписаны, сохранены в вашем аккаунте Google. Управлять ими можно в настройках рекомендаций.</translation> <translation id="5091249083535528968">Расширенные данные</translation> <translation id="509429900233858213">Произошла ошибка.</translation> -<translation id="5097349930204431044">Сайты, которые вы посещаете, могут определять ваши предпочтения и впоследствии показывать более подходящую рекламу</translation> +<translation id="5097349930204431044">Сайты, которые вы посещаете, могут определять, что вам нравится, и в дальнейшем предлагать другим сайтам рекламу для вас</translation> <translation id="5099845111805573968">Если выбрать версию сайта для ПК, она будет загружаться при каждом его посещении.</translation> <translation id="5102401324271069229">Если вы скачаете вредоносный файл или сайт попытается похитить ваш пароль, Chrome может отправить URL с образцами контента на проверку с помощью Безопасного просмотра.</translation> <translation id="510275257476243843">Остался 1 час</translation> @@ -1267,7 +1267,7 @@ <translation id="7780645209293383778">Если вы вошли в аккаунт Google, эти данные связываются с ним на некоторое время, чтобы защитить вас при работе с приложениями Google.</translation> <translation id="7791543448312431591">Добавить</translation> <translation id="7798392620021911922">Восстановлено вкладок: <ph name="TAB_COUNT" /></translation> -<translation id="780301667611848630">Пропустить</translation> +<translation id="780301667611848630">Нет, спасибо</translation> <translation id="7808889146555843082">Это действие не приведет к удалению вашего аккаунта на сайте <ph name="SITE" />. Чтобы защитить от злоумышленников свои данные на сайте <ph name="SITE" />, удалите аккаунт или измените пароль.</translation> <translation id="7810647596859435254">Открыть с помощью...</translation> <translation id="7815484226266492798">Длинный скриншот</translation> @@ -1469,7 +1469,7 @@ <translation id="8788968922598763114">Открыть последнюю закрытую вкладку</translation> <translation id="879027982257117598">Например, вы перешли на сайт, где продаются кроссовки для бега на длинные дистанции. Он может определить, что вам интересны марафоны. Затем, когда вы перейдете на другой сайт, там может появиться реклама беговых кроссовок.</translation> <translation id="8798449543960971550">Прочитано</translation> -<translation id="8803526663383843427">Функция включена</translation> +<translation id="8803526663383843427">Если функция включена</translation> <translation id="8805097383171548551">Для сканирования QR-кодов требуется устройство с камерой.</translation> <translation id="8812260976093120287">На некоторых сайтах вы можете совершать платежи со своего устройства с помощью перечисленных выше приложений.</translation> <translation id="881688628773363275">Контент вкладки предпросмотра недоступен для показа.</translation> @@ -1512,7 +1512,7 @@ <translation id="8998289560386111590">Недоступно на вашем устройстве</translation> <translation id="8998729206196772491">Вы входите в аккаунт, которым управляет администратор домена <ph name="MANAGED_DOMAIN" />. Он может контролировать ваши данные Chrome, которые теперь будут связаны с управляемым аккаунтом. При выходе из системы все данные Chrome, хранящиеся на этом устройстве, будут удалены, но останутся в вашем аккаунте Google.</translation> <translation id="9022774213089566801">Часто посещаемые</translation> -<translation id="9022871169049522985">Сайты и рекламодатели могут проводить оценку эффективности своих рекламных объявлений</translation> +<translation id="9022871169049522985">Сайты и рекламодатели могут оценивать эффективность своей рекламы</translation> <translation id="9041669420854607037">{FILE_COUNT,plural, =1{# видеофайл}one{# видеофайл}few{# видеофайла}many{# видеофайлов}other{# видеофайла}}</translation> <translation id="9042893549633094279">Конфиденциальность и безопасность</translation> <translation id="9050666287014529139">Кодовая фраза</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 7238f51..652a448f 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708">යෝජිත අන්තර්ගතය ගැන <ph name="BEGIN_LINK" />තවත් දැනගන්න<ph name="END_LINK" /></translation> <translation id="3495219333887281978">පිරීමේ පහළ පත්රය අර්ධ උසින් විවෘත විය.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">පැරණිම අනුව වර්ග කරන්න</translation> <translation id="3507132249039706973">සම්මත ආරක්ෂව සක්රීයයි</translation> <translation id="3509330069915219067">නොබැඳිය. Chrome හට යාවත්කාලීන සඳහා පරීක්ෂා කළ නොහැකිය.</translation> <translation id="3513704683820682405">ආවර්ධිත යථාර්තය</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">ඔබගේ සියලු පිටුසන් ලබා ගන්න</translation> <translation id="4177501066905053472">දැන්වීම් මාතෘකා</translation> <translation id="4181841719683918333">භාෂා</translation> +<translation id="4188221736490993796">Z සිට A දක්වා වර්ග කරන්න</translation> <translation id="4195643157523330669">නව ටැබයක විවෘත කරන්න</translation> <translation id="4196597275619698563">කාඩ්පත තනන්න</translation> <translation id="4198423547019359126">බාගැනීම් ස්ථාන කිසිවක් නැත</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">මුරපදය සඟවන්න</translation> <translation id="4572422548854449519">කළමනාකරණය කරන ලද ගිණුමට පිරීම</translation> <translation id="4576892426230499203">වෙනත් සත්යාපනය කිරිමේ විකල්පයක් උත්සාහ කරන්න</translation> +<translation id="4577115723294378384">A සිට Z දක්වා වර්ග කරන්න</translation> <translation id="4578289292431526768">අපි යමු</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{මිනිත්තු #කට පෙර}one{මිනිත්තු #කට පෙර}other{මිනිත්තු #කට පෙර}}</translation> <translation id="4587589328781138893">අඩවි</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Google <ph name="BEGIN_NEW" />New<ph name="END_NEW" /> සමග රූපය සොයන්න</translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />... සහ තවත් <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation> <translation id="4699172675775169585">අනුරූ සහ ගොනු කෑෂ් කරන්න</translation> +<translation id="4710167854527459075">නවතම අනුව වර්ග කරන්න</translation> <translation id="4719927025381752090">පරිවර්තනය කිරීමට පිරිනමන්න</translation> <translation id="4720023427747327413"><ph name="PRODUCT_NAME" /> හි විවෘත කරන්න</translation> <translation id="47217992755561375">ඔබගේ ඉහළම අඩවි බලන්න</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">අනතුරුදායක සිදුවීම් සිදු වන විට ඒවා අනාවරණ කර ඔබට අවවාද කරයි</translation> <translation id="5561549206367097665">ජාලය සඳහා රැඳෙමින්…</translation> <translation id="5568069709869097550">පුරනය විය නොහැක</translation> +<translation id="557018954714092179">නව ෆෝල්ඩරය තනන්න</translation> <translation id="5578795271662203820">මෙම රූපය සඳහා <ph name="SEARCH_ENGINE" /> සොයන්න</translation> <translation id="5581519193887989363">ඔබට සැමවිට <ph name="BEGIN_LINK1" />සැකසීම්<ph name="END_LINK1" /> තුළ සමමුහු කළ යුතු දෙය තෝරා ගත හැක.</translation> <translation id="5590372121997663538">මෙම පරිගණකය මතක තබා ගන්න</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">ඔබගේ අඩවි සැකසීම් මෙහි වෙනස් කරන්න</translation> <translation id="6140709049082532940">වැඩිදියුණු කළ ආරක්ෂාව:</translation> <translation id="6140912465461743537">රට/කලාපය:</translation> +<translation id="6148266338772765473">සබැඳිය බැහැර කරන්න</translation> <translation id="6150320133806434356">පිටුසන සුරකින ලදි</translation> <translation id="6154478581116148741">මෙම උපාංගයෙන් ඔබේ මුරපද නිර්යාත කිරීමට සැකසීම් තුළ තිර අගුල ක්රියාත්මක කරන්න</translation> <translation id="6159729262978459665">සියලු සමමුහුර්ත කරන ලද උපාංග වෙතින් ඉතිහාසය හිස් කරයි</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">ඔබ සුරකින මුරපදය <ph name="SITE" /> සඳහා වන ඔබේ මුරපදයට ගැළපෙන බව සහතික කර ගන්න</translation> <translation id="6593061639179217415">ඩෙක්ස්ටොප් අඩවිය</translation> <translation id="6594121454516132231">විවෘත වෙබය සංරක්ෂණය කරන අතරතුර හරස්-අඩවි ලුහුබැඳීමෙන් ඔබව ආරක්ෂා කිරීමට Chrome සැලසුම් කරන ආකාරය බලන්න</translation> +<translation id="6594347733515723558">සුබෙදීම සහ බැලීම් විකල්ප</translation> <translation id="6595046016124923392">ඔබ සඳහා විස්තර වැඩි දියුණු කිරීම සඳහා පින්තූර Google වෙත යවනු ලැබේ.</translation> <translation id="6600954340915313787">Chrome වෙත පිටපත් කරන ලදි</translation> <translation id="661266467055912436">ඔබේ සහ වෙබය මත සියලු දෙනාගේම ආරක්ෂාව වැඩිදියුණු කරයි.</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 5046e71f..b63279b6 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /> mbi përmbajtjen e sugjeruar</translation> <translation id="3495219333887281978">Fleta e poshtme e identifikimit u hap në gjysmë lartësi.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Rendit nga më i vjetri</translation> <translation id="3507132249039706973">"Mbrojtja standarde" është aktive</translation> <translation id="3509330069915219067">Jashtë linje. Chrome nuk mund të kontrollojë për përditësime</translation> <translation id="3513704683820682405">Realiteti i zgjeruar</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Merr të gjithë faqeshënuesit e tu</translation> <translation id="4177501066905053472">Temat e reklamave</translation> <translation id="4181841719683918333">Gjuhët</translation> +<translation id="4188221736490993796">Rendit nga Zh-ja në A</translation> <translation id="4195643157523330669">Hape në një skedë të re</translation> <translation id="4196597275619698563">Krijo kartën</translation> <translation id="4198423547019359126">Nuk ka vendndodhje shkarkimi</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Fshih fjalëkalimin</translation> <translation id="4572422548854449519">Identifikohu në llogarinë e menaxhuar</translation> <translation id="4576892426230499203">Provo një opsion tjetër verifikimi</translation> +<translation id="4577115723294378384">Rendit nga A-ja në Zh</translation> <translation id="4578289292431526768">Fillojmë</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# minutë më parë}other{# minuta më parë}}</translation> <translation id="4587589328781138893">Sajtet</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Kërko për imazhin me Google <ph name="BEGIN_NEW" />E re<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 dhe <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> tjetër}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 dhe <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> të tjera}}</translation> <translation id="4699172675775169585">Imazhet dhe skedarët në memorien specifike</translation> +<translation id="4710167854527459075">Rendit nga më i riu</translation> <translation id="4719927025381752090">Ofro që t'i përkthesh</translation> <translation id="4720023427747327413">Hape në <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Shiko sajtet e tua kryesore</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Zbulon dhe të paralajmëron rreth ngjarjeve të rrezikshme kur ato ndodhin</translation> <translation id="5561549206367097665">Në pritje të rrjetit…</translation> <translation id="5568069709869097550">Nuk mund të identifkohet</translation> +<translation id="557018954714092179">Krijo dosje të re</translation> <translation id="5578795271662203820">Kërko në <ph name="SEARCH_ENGINE" /> për këtë imazh</translation> <translation id="5581519193887989363">Mund të zgjedhësh gjithmonë se çfarë do të sinkronizosh te <ph name="BEGIN_LINK1" />cilësimet<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Kujtoje këtë kompjuter</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Ndrysho këtu cilësimet e sajtit tënd</translation> <translation id="6140709049082532940">Mbrojtja e përmirësuar:</translation> <translation id="6140912465461743537">Shteti/rajoni</translation> +<translation id="6148266338772765473">Përjashto lidhjen</translation> <translation id="6150320133806434356">Faqeshënuesi u ruajt</translation> <translation id="6154478581116148741">Aktivizo kyçjen e ekranit te "Cilësimet" për të eksportuar fjalëkalime e tua nga kjo pajisje</translation> <translation id="6159729262978459665">Pastron historikun nga të gjitha pajisjet e sinkronizuara.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Sigurohu që fjalëkalimi që po ruan përputhet me fjalëkalimin tënd për <ph name="SITE" />.</translation> <translation id="6593061639179217415">Sajti për desktop</translation> <translation id="6594121454516132231">Shiko se si planifikon Chrome të të mbrojë nga gjurmimi nëpër sajtet e uebit, ndërkohë që vazhdon të ruajë uebin e hapur</translation> +<translation id="6594347733515723558">Opsionet e renditjes dhe shikimit</translation> <translation id="6595046016124923392">Imazhet janë dërguar te Google për të përmirësuar përshkrimet për ty.</translation> <translation id="6600954340915313787">Kopjuar në Chrome</translation> <translation id="661266467055912436">Përmirëson sigurinë për ty dhe këdo në ueb.</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 3311094..eab5437 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708"><ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /> kuhusu maudhui yaliyopendekezwa</translation> <translation id="3495219333887281978">Safu ya chini ya kuingia katika akaunti imefunguliwa katika hali ya nusu skrini.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Panga kulingana na alamisho za zamani zaidi</translation> <translation id="3507132249039706973">Kipengele cha Ulinzi wa Kawaida kimewashwa</translation> <translation id="3509330069915219067">Nje ya mtandao. Chrome imeshindwa kukagua kama kuna masasisho.</translation> <translation id="3513704683820682405">Uhalisia Ulioboreshwa</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Pata alamisho zako zote</translation> <translation id="4177501066905053472">Mada za matangazo</translation> <translation id="4181841719683918333">Lugha</translation> +<translation id="4188221736490993796">Panga kialfabeti Z hadi A</translation> <translation id="4195643157523330669">Fungua katika kichupo kipya</translation> <translation id="4196597275619698563">Weka kadi</translation> <translation id="4198423547019359126">Hakuna maeneno ya upakuaji</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Ficha nenosiri</translation> <translation id="4572422548854449519">Ingia katika akaunti zinazodhibitiwa</translation> <translation id="4576892426230499203">Jaribu njia nyingine ya kuthibitisha</translation> +<translation id="4577115723294378384">Panga kialfabeti A hadi Z</translation> <translation id="4578289292431526768">Twende kazi</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{Dakika # iliyopita}other{Dakika # zilizopita}}</translation> <translation id="4587589328781138893">Tovuti</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Tafuta picha ukitumia Google <ph name="BEGIN_NEW" />Kipya<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 na <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> zaidi}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 na <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> zaidi}}</translation> <translation id="4699172675775169585">Picha na faili zilizoakibishwa</translation> +<translation id="4710167854527459075">Panga kulingana na alamisho mpya zaidi</translation> <translation id="4719927025381752090">Jitolee kutafsiri</translation> <translation id="4720023427747327413">Fungua katika <ph name="PRODUCT_NAME" /></translation> <translation id="47217992755561375">Angalia tovuti zako maarufu</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Hutambua na kukuonya kuhusu matukio hatari yanapotendeka</translation> <translation id="5561549206367097665">Inasubiri intaneti…</translation> <translation id="5568069709869097550">Siwezi kuingia</translation> +<translation id="557018954714092179">Fungua folda mpya</translation> <translation id="5578795271662203820">Tafuta picha hii kwenye <ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">Unaweza kuchagua utakachosawazisha wakati wowote katika <ph name="BEGIN_LINK1" />mipangilio<ph name="END_LINK1" />.</translation> <translation id="5590372121997663538">Kumbuka kompyuta hii</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Badilisha mipangilio ya tovuti yako hapa</translation> <translation id="6140709049082532940">Ulinzi ulioboreshwa:</translation> <translation id="6140912465461743537">Nchi/Eneo</translation> +<translation id="6148266338772765473">Usijumuishe kiungo</translation> <translation id="6150320133806434356">Alamisho imehifadhiwa</translation> <translation id="6154478581116148741">Washa kipengele cha kufunga skrini katika Mipangilio ili uhamishe manenosiri yako kutoka kwenye kifaa hiki</translation> <translation id="6159729262978459665">Hufuta historia kwenye vifaa vyote vinavyosawazishwa.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Hakikisha kwamba nenosiri unalohifadhi linalingana na nenosiri lako kwenye <ph name="SITE" /></translation> <translation id="6593061639179217415">Tovuti ya kompyuta ya mezani</translation> <translation id="6594121454516132231">Angalia jinsi Chrome inavyopanga kukulinda dhidi ya ufuatiliaji wa data kwenye tovuti nyingi huku ikidumisha wavuti huria</translation> +<translation id="6594347733515723558">Chaguo za kupanga na kuangalia</translation> <translation id="6595046016124923392">Picha hutumwa kwa Google ili kuboresha maelezo unayopata.</translation> <translation id="6600954340915313787">Imenakiliwa kwenye Chrome</translation> <translation id="661266467055912436">Huboresha usalama wako na wa kila mtu kwenye wavuti.</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 197fa28..afcc2da 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
@@ -455,6 +455,7 @@ <translation id="3493531032208478708">Önerilen içerik hakkında <ph name="BEGIN_LINK" />daha fazla bilgi edinin<ph name="END_LINK" /></translation> <translation id="3495219333887281978">Oturum açma alt sayfası ekranın yarısına kadar açıldı.</translation> <translation id="3499246418971111862">chrome_qrcode_<ph name="CURRENT_TIMESTAMP_MS" /></translation> +<translation id="350276055892098337">Eskiden yeniye sırala</translation> <translation id="3507132249039706973">Standart Koruma açık</translation> <translation id="3509330069915219067">Çevrimdışı. Chrome, güncellemeleri denetleyemiyor.</translation> <translation id="3513704683820682405">Artırılmış Gerçeklik</translation> @@ -575,6 +576,7 @@ <translation id="4177222230309051052">Tüm yer işaretlerinize ulaşın</translation> <translation id="4177501066905053472">Reklam konuları</translation> <translation id="4181841719683918333">Diller</translation> +<translation id="4188221736490993796">Z'den A'ya sırala</translation> <translation id="4195643157523330669">Yeni sekmede aç</translation> <translation id="4196597275619698563">Kart oluştur</translation> <translation id="4198423547019359126">Kullanılabilir indirme yeri yok</translation> @@ -640,6 +642,7 @@ <translation id="4565377596337484307">Şifreyi gizle</translation> <translation id="4572422548854449519">Yönetilen hesapta oturum açın</translation> <translation id="4576892426230499203">Başka bir doğrulama seçeneğini deneyin</translation> +<translation id="4577115723294378384">A'dan Z'ye sırala</translation> <translation id="4578289292431526768">Başlayalım</translation> <translation id="4583164079174244168">{MINUTES,plural, =1{# dakika önce}other{# dakika önce}}</translation> <translation id="4587589328781138893">Siteler</translation> @@ -663,6 +666,7 @@ <translation id="4689792375321623175">Resmi Google'la ara <ph name="BEGIN_NEW" />Yeni<ph name="END_NEW" /></translation> <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ve <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> seçenek daha}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ve <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> seçenek daha}}</translation> <translation id="4699172675775169585">Önbelleğe alınan resimler ve dosyalar</translation> +<translation id="4710167854527459075">Yeniden eskiye sırala</translation> <translation id="4719927025381752090">Çevirmeyi öner</translation> <translation id="4720023427747327413"><ph name="PRODUCT_NAME" /> uygulamasında aç</translation> <translation id="47217992755561375">Popüler sitelerinize bakın</translation> @@ -832,6 +836,7 @@ <translation id="5561162485081632007">Tehlikeli etkinlik meydana geldiğinde tespit ederek sizi uyarır.</translation> <translation id="5561549206367097665">Ağ bekleniyor…</translation> <translation id="5568069709869097550">Oturum açılamıyor</translation> +<translation id="557018954714092179">Yeni klasör oluştur</translation> <translation id="5578795271662203820">Bu resmi, <ph name="SEARCH_ENGINE" /> üzerinde ara</translation> <translation id="5581519193887989363">Neyin senkronize edileceğini istediğiniz zaman <ph name="BEGIN_LINK1" />ayarlardan<ph name="END_LINK1" /> seçebilirsiniz.</translation> <translation id="5590372121997663538">Bu bilgisayarı hatırla</translation> @@ -936,6 +941,7 @@ <translation id="6138832295072039549">Site ayarlarınızı burada değiştirin</translation> <translation id="6140709049082532940">Gelişmiş koruma:</translation> <translation id="6140912465461743537">Ülke/Bölge</translation> +<translation id="6148266338772765473">Bağlantıyı hariç tut</translation> <translation id="6150320133806434356">Yer işareti kaydedildi.</translation> <translation id="6154478581116148741">Bu cihazdaki şifrelerinizi dışarı aktarmak için Ayarlar'da ekran kilidini açın</translation> <translation id="6159729262978459665">Geçmişi, tüm senkronize edilen cihazlardan temizler.</translation> @@ -1027,6 +1033,7 @@ <translation id="6590680911007613645">Kaydettiğiniz şifrenin <ph name="SITE" /> için kullandığınız şifreyle eşleştiğinden emin olun</translation> <translation id="6593061639179217415">Masaüstü sitesi</translation> <translation id="6594121454516132231">Chrome'un açık web'i korurken sizi siteler arası izlemeden nasıl koruduğunu öğrenin</translation> +<translation id="6594347733515723558">Sıralama ve görüntüleme</translation> <translation id="6595046016124923392">Resimler size daha iyi açıklamalar sunmak için Google'a gönderilir.</translation> <translation id="6600954340915313787">Chrome'a kopyalandı</translation> <translation id="661266467055912436">Hem siz hem de web'deki herkes için güvenliği iyileştirir.</translation> @@ -1448,7 +1455,7 @@ <translation id="8683039184091909753">resim</translation> <translation id="869891660844655955">Son kullanma tarihi</translation> <translation id="8699120352855309748">Şu dilleri çevirmeyi önerme</translation> -<translation id="8712637175834984815">Anlaşıldı</translation> +<translation id="8712637175834984815">Anladım</translation> <translation id="8723453889042591629">Bu sayfayı hızlıca çevirin. Bu kısayolu düzenlemek için dokunup basılı tutun.</translation> <translation id="8725066075913043281">Yeniden dene</translation> <translation id="8746155870861185046">Vurgulanan metni paylaş</translation>
diff --git a/chrome/browser/ui/ash/app_access_notifier.cc b/chrome/browser/ui/ash/app_access_notifier.cc index 519ab8a..570daee1 100644 --- a/chrome/browser/ui/ash/app_access_notifier.cc +++ b/chrome/browser/ui/ash/app_access_notifier.cc
@@ -193,7 +193,8 @@ app_id, /*app_name=*/GetAppShortNameFromAppId(app_id), is_camera_used, is_microphone_used, /*delegate=*/ base::MakeRefCounted<ash::PrivacyIndicatorsNotificationDelegate>( - launch_app, launch_settings)); + launch_app, launch_settings), + ash::PrivacyIndicatorsSource::kApps); auto* registry_cache = GetActiveUserAppRegistryCache(); if (registry_cache) {
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc index 248fc27..4c28169 100644 --- a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc +++ b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
@@ -731,10 +731,7 @@ "/popup_blocker/post-message-popup.html"))); content::WebContents* opener = browser()->tab_strip_model()->GetActiveWebContents(); - int popups = 0; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - opener, "openPopupsAndReport();", &popups)); - EXPECT_EQ(1, popups); + EXPECT_EQ(1, content::EvalJs(opener, "openPopupsAndReport();")); } // Test that popup blocker can show blocked contents in new foreground tab.
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc index f4cd163..1a9051f 100644 --- a/chrome/browser/ui/browser_command_controller.cc +++ b/chrome/browser/ui/browser_command_controller.cc
@@ -1160,6 +1160,7 @@ IDC_SHOW_HISTORY, (!profile()->IsGuestSession() && !profile()->IsSystemProfile())); command_updater_.UpdateCommandEnabled(IDC_SHOW_DOWNLOADS, true); + command_updater_.UpdateCommandEnabled(IDC_FIND_AND_EDIT_MENU, true); command_updater_.UpdateCommandEnabled(IDC_HELP_MENU, true); command_updater_.UpdateCommandEnabled(IDC_HELP_PAGE_VIA_KEYBOARD, true); command_updater_.UpdateCommandEnabled(IDC_HELP_PAGE_VIA_MENU, true);
diff --git a/chrome/browser/ui/side_panel/side_panel_prefs.cc b/chrome/browser/ui/side_panel/side_panel_prefs.cc index 629d004..5e0d5b0 100644 --- a/chrome/browser/ui/side_panel/side_panel_prefs.cc +++ b/chrome/browser/ui/side_panel/side_panel_prefs.cc
@@ -21,7 +21,8 @@ base::i18n::IsRTL() ? false : true); if (base::FeatureList::IsEnabled(companion::features::kSidePanelCompanion)) { registry->RegisterBooleanPref( - prefs::kSidePanelCompanionEntryPinnedToToolbar, true); + prefs::kSidePanelCompanionEntryPinnedToToolbar, true, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); } }
diff --git a/chrome/browser/ui/toolbar/app_menu_model.cc b/chrome/browser/ui/toolbar/app_menu_model.cc index 8a7db280..54ab3859 100644 --- a/chrome/browser/ui/toolbar/app_menu_model.cc +++ b/chrome/browser/ui/toolbar/app_menu_model.cc
@@ -311,6 +311,44 @@ } //////////////////////////////////////////////////////////////////////////////// +// FindAndEditSubMenuModel + +FindAndEditSubMenuModel::FindAndEditSubMenuModel( + ui::SimpleMenuModel::Delegate* delegate, + Browser* browser, + AppMenuIconController* app_menu_icon_controller) + : SimpleMenuModel(delegate), + app_menu_icon_controller_(app_menu_icon_controller) { + Build(browser); +} + +FindAndEditSubMenuModel::~FindAndEditSubMenuModel() = default; + +void FindAndEditSubMenuModel::Build(Browser* browser) { + AddItemWithStringIdAndIcon( + IDC_FIND, IDS_FIND, + ui::ImageModel::FromVectorIcon( + kSearchMenuIcon, + app_menu_icon_controller_->GetIconColor(absl::nullopt))); + AddSeparator(ui::NORMAL_SEPARATOR); + AddItemWithStringIdAndIcon( + IDC_CUT, IDS_CUT, + ui::ImageModel::FromVectorIcon( + kCutMenuIcon, + app_menu_icon_controller_->GetIconColor(absl::nullopt))); + AddItemWithStringIdAndIcon( + IDC_COPY, IDS_COPY, + ui::ImageModel::FromVectorIcon( + kCopyMenuIcon, + app_menu_icon_controller_->GetIconColor(absl::nullopt))); + AddItemWithStringIdAndIcon( + IDC_PASTE, IDS_PASTE, + ui::ImageModel::FromVectorIcon( + kPasteMenuIcon, + app_menu_icon_controller_->GetIconColor(absl::nullopt))); +} + +//////////////////////////////////////////////////////////////////////////////// // AppMenuModel // static @@ -975,16 +1013,25 @@ kExtensionsMenuItem); } - AddSeparator(ui::LOWER_SEPARATOR); + AddSeparator(features::IsChromeRefresh2023() ? ui::NORMAL_SEPARATOR + : ui::LOWER_SEPARATOR); CreateZoomMenu(); - AddSeparator(ui::UPPER_SEPARATOR); + AddSeparator(features::IsChromeRefresh2023() ? ui::NORMAL_SEPARATOR + : ui::UPPER_SEPARATOR); AddItemWithStringId(IDC_PRINT, IDS_PRINT); if (media_router::MediaRouterEnabled(browser()->profile())) AddItemWithStringId(IDC_ROUTE_MEDIA, IDS_MEDIA_ROUTER_MENU_ITEM_TITLE); - AddItemWithStringId(IDC_FIND, IDS_FIND); + if (features::IsChromeRefresh2023()) { + sub_menus_.push_back(std::make_unique<FindAndEditSubMenuModel>( + this, browser_, app_menu_icon_controller_)); + AddSubMenuWithStringId(IDC_FIND_AND_EDIT_MENU, IDS_FIND_AND_EDIT_MENU, + sub_menus_.back().get()); + } else { + AddItemWithStringId(IDC_FIND, IDS_FIND); + } if (absl::optional<std::u16string> name = GetInstallPWAAppMenuItemName(browser_)) { @@ -1041,11 +1088,18 @@ sub_menus_.back().get()); SetElementIdentifierAt(GetIndexOfCommandId(IDC_MORE_TOOLS_MENU).value(), kMoreToolsMenuItem); - AddSeparator(ui::LOWER_SEPARATOR); - CreateCutCopyPasteMenu(); - AddSeparator(ui::UPPER_SEPARATOR); - AddItemWithStringId(IDC_OPTIONS, IDS_SETTINGS); + if (!features::IsChromeRefresh2023()) { + AddSeparator(ui::LOWER_SEPARATOR); + CreateCutCopyPasteMenu(); + AddSeparator(ui::UPPER_SEPARATOR); + } + + if (!features::IsChromeRefresh2023()) { + AddItemWithStringId(IDC_OPTIONS, IDS_SETTINGS); + } else { + AddSeparator(ui::NORMAL_SEPARATOR); + } // The help submenu is only displayed on official Chrome builds. As the // 'About' item has been moved to this submenu, it's reinstated here for // Chromium builds. @@ -1060,8 +1114,14 @@ #endif #endif + if (features::IsChromeRefresh2023()) { + AddItemWithStringId(IDC_OPTIONS, IDS_SETTINGS); + } + if (browser_defaults::kShowExitMenuItem) { - AddSeparator(ui::NORMAL_SEPARATOR); + if (!features::IsChromeRefresh2023()) { + AddSeparator(ui::NORMAL_SEPARATOR); + } AddItemWithStringId(IDC_EXIT, IDS_EXIT); } @@ -1069,14 +1129,26 @@ // this menu. #if !BUILDFLAG(IS_CHROMEOS_ASH) if (chrome::ShouldDisplayManagedUi(browser_->profile())) { - AddSeparator(ui::LOWER_SEPARATOR); - const int kIconSize = 18; - AddHighlightedItemWithIcon( - IDC_SHOW_MANAGEMENT_PAGE, - chrome::GetManagedUiMenuItemLabel(browser_->profile()), - ui::ImageModel::FromVectorIcon(vector_icons::kBusinessIcon, - ui::kColorMenuItemForegroundHighlighted, - kIconSize)); + AddSeparator(features::IsChromeRefresh2023() ? ui::NORMAL_SEPARATOR + : ui::LOWER_SEPARATOR); + if (!features::IsChromeRefresh2023()) { + const int kIconSize = 18; + AddHighlightedItemWithIcon( + IDC_SHOW_MANAGEMENT_PAGE, + chrome::GetManagedUiMenuItemLabel(browser_->profile()), + ui::ImageModel::FromVectorIcon( + vector_icons::kBusinessIcon, + ui::kColorMenuItemForegroundHighlighted, kIconSize)); + } else { + const int kIconSize = 16; + AddItemWithIcon( + IDC_SHOW_MANAGEMENT_PAGE, + chrome::GetManagedUiMenuItemLabel(browser_->profile()), + ui::ImageModel::FromVectorIcon( + vector_icons::kBusinessChromeRefreshIcon, + app_menu_icon_controller_->GetIconColor(absl::nullopt), + kIconSize)); + } } #endif // !BUILDFLAG(IS_CHROMEOS_ASH) @@ -1096,9 +1168,10 @@ set_icon(IDC_RECENT_TABS_MENU, kHistoryIcon); set_icon(IDC_SHOW_DOWNLOADS, kDownloadMenuIcon); set_icon(IDC_BOOKMARKS_MENU, kBookmarksListsMenuIcon); + set_icon(IDC_ZOOM_MENU, kZoomInIcon); set_icon(IDC_PRINT, kPrintMenuIcon); set_icon(IDC_ROUTE_MEDIA, kCastMenuIcon); - set_icon(IDC_FIND, kSearchMenuIcon); + set_icon(IDC_FIND_AND_EDIT_MENU, kSearchMenuIcon); set_icon(IDC_MORE_TOOLS_MENU, kMoreToolsMenuIcon); set_icon(IDC_OPTIONS, kSettingsMenuIcon); #if BUILDFLAG(GOOGLE_CHROME_BRANDING) @@ -1111,8 +1184,8 @@ } void AppMenuModel::CreateCutCopyPasteMenu() { - // WARNING: Mac does not use the ButtonMenuItemModel, but instead defines the - // layout for this menu item in AppMenu.xib. It does, however, use the + // WARNING: Mac does not use the ButtonMenuItemModel, but instead defines + // the layout for this menu item in AppMenu.xib. It does, however, use the // command_id value from AddButtonItem() to identify this special item. edit_menu_item_model_ = std::make_unique<ui::ButtonMenuItemModel>(IDS_EDIT, this);
diff --git a/chrome/browser/ui/toolbar/app_menu_model.h b/chrome/browser/ui/toolbar/app_menu_model.h index e9346df8..b09709c 100644 --- a/chrome/browser/ui/toolbar/app_menu_model.h +++ b/chrome/browser/ui/toolbar/app_menu_model.h
@@ -137,6 +137,23 @@ void Build(Browser* browser); }; +class FindAndEditSubMenuModel : public ui::SimpleMenuModel { + public: + FindAndEditSubMenuModel(ui::SimpleMenuModel::Delegate* delegate, + Browser* browser, + AppMenuIconController* app_menu_icon_controller); + + FindAndEditSubMenuModel(const FindAndEditSubMenuModel&) = delete; + FindAndEditSubMenuModel& operator=(const FindAndEditSubMenuModel&) = delete; + + ~FindAndEditSubMenuModel() override; + + private: + void Build(Browser* browser); + + raw_ptr<AppMenuIconController> app_menu_icon_controller_ = nullptr; +}; + // A menu model that builds the contents of the app menu. class AppMenuModel : public ui::SimpleMenuModel, public ui::SimpleMenuModel::Delegate,
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc index b7bcac1..e4b4470 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -1975,12 +1975,10 @@ const SkColor color = color_provider->GetColor(kColorBookmarkBarForeground); other_bookmarks_button_->SetEnabledTextColors(color); - if (!base::FeatureList::IsEnabled(features::kPowerBookmarksSidePanel)) { - other_bookmarks_button_->SetImageModel( - views::Button::STATE_NORMAL, - chrome::GetBookmarkFolderIcon(chrome::BookmarkFolderIconType::kNormal, - kColorBookmarkFolderIcon)); - } + other_bookmarks_button_->SetImageModel( + views::Button::STATE_NORMAL, + chrome::GetBookmarkFolderIcon(chrome::BookmarkFolderIconType::kNormal, + kColorBookmarkFolderIcon)); managed_bookmarks_button_->SetEnabledTextColors(color); managed_bookmarks_button_->SetImageModel(
diff --git a/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc b/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc index d58e12f..a2202a7 100644 --- a/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc +++ b/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc
@@ -799,19 +799,17 @@ if (!frame) return false; - std::string script; - int response = 0; - // Navigate the frame and wait for the load event. - script = base::StringPrintf( + std::string script = base::StringPrintf( "location.href = '/cross-site/%s/drag_and_drop/%s';\n" - "setTimeout(function() { domAutomationController.send(42); }, 0);", + "new Promise(resolve => {" + " setTimeout(function() { resolve(42); }, 0);" + "});", origin.c_str(), filename.c_str()); content::TestFrameNavigationObserver observer(frame); - if (!content::ExecuteScriptAndExtractInt(frame, script, &response)) + if (content::EvalJs(frame, script).ExtractInt() != 42) { return false; - if (response != 42) - return false; + } observer.Wait(); // |frame| might have been swapped-out during a cross-site navigation,
diff --git a/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator.cc b/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator.cc index c0116b6..c224e35 100644 --- a/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator.cc +++ b/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator.cc
@@ -149,15 +149,14 @@ // Update the SidePanel when a user navigates to another url with the // correct Diner URL. - // TODO(1425421): Check for valid urls (non IP address, localhost and - // similar) before creating the Diner URL if (page_info::IsKeepSidePanelOnSameTabNavsFeatureEnabled() && about_this_site_side_panel_view_ && side_panel_coordinator->GetCurrentEntryId() == SidePanelEntry::Id::kAboutThisSite) { page_info::AboutThisSiteService::OnSameTabNavigation(); - RegisterEntryAndShow(page_info::AboutThisSiteService::CreateMoreAboutUrl( - navigation_handle->GetURL())); + RegisterEntryAndShow( + page_info::AboutThisSiteService::CreateMoreAboutUrlForNavigation( + navigation_handle->GetURL())); } // If the about this site side panel is no longer being shown and the view is
diff --git a/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator_browsertest.cc b/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator_browsertest.cc index b3d4c76..965b9f09 100644 --- a/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator_browsertest.cc +++ b/chrome/browser/ui/views/page_info/about_this_site_side_panel_coordinator_browsertest.cc
@@ -26,6 +26,7 @@ namespace { const char kRegularUrl1[] = "a.test"; const char kRegularUrl2[] = "b.test"; +const char kInvalidUrl[] = "127.0.0.1"; const char kAboutThisSiteUrl[] = "c.test"; } // namespace @@ -148,7 +149,7 @@ std::string kAboutThisSiteRegularUrl2 = base::StringPrintf( "https://www.google.com/search?" "q=About+%s" - "&tbm=ilp&ctx=chrome", + "&tbm=ilp&ctx=chrome_nav", base::EscapeQueryParamValue(kRegularGURL2.spec(), true).c_str()); EXPECT_TRUE(side_panel_coordinator()->GetCurrentSidePanelEntryForTesting()); @@ -159,6 +160,42 @@ } IN_PROC_BROWSER_TEST_F(AboutThisSiteKeepSidePanelOpenBrowserTest, + ShowSameTabNavWithInvalidOrigin) { + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), CreateUrl(kRegularUrl1))); + ASSERT_EQ(side_panel_coordinator()->GetCurrentEntryId(), absl::nullopt); + + // Test showing the side panel. + ShowAboutThisSiteSidePanel(web_contents(), CreateUrl(kAboutThisSiteUrl)); + EXPECT_TRUE(side_panel_coordinator()->IsSidePanelShowing()); + EXPECT_EQ(side_panel_coordinator()->GetCurrentEntryId(), + SidePanelEntry::Id::kAboutThisSite); + + // Check that side panel remains open on navigation to an invalid url with a + // path + GURL kInvalidGURL = CreateUrl(kInvalidUrl); + ASSERT_TRUE(ui_test_utils::NavigateToURL( + browser(), GURL(kInvalidGURL.spec() + "/index.html"))); + EXPECT_TRUE(side_panel_coordinator()->IsSidePanelShowing()); + EXPECT_EQ(side_panel_coordinator()->GetCurrentEntryId(), + SidePanelEntry::Id::kAboutThisSite); + + // Check that the diner url was updated with the invalid origin but with an + // empty path. + std::string kAboutThisSiteInvalidUrl = base::StringPrintf( + "https://www.google.com/search?" + "q=About+%s" + "&tbm=ilp&ctx=chrome_nav", + base::EscapeQueryParamValue(kInvalidGURL.GetWithEmptyPath().spec(), true) + .c_str()); + + EXPECT_TRUE(side_panel_coordinator()->GetCurrentSidePanelEntryForTesting()); + EXPECT_EQ(side_panel_coordinator() + ->GetCurrentSidePanelEntryForTesting() + ->GetOpenInNewTabURL(), + kAboutThisSiteInvalidUrl); +} + +IN_PROC_BROWSER_TEST_F(AboutThisSiteKeepSidePanelOpenBrowserTest, RemainsClosedOnSameTabNav) { ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), CreateUrl(kRegularUrl1))); ASSERT_EQ(side_panel_coordinator()->GetCurrentEntryId(), absl::nullopt);
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_browsertest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_browsertest.cc index 39b6e80..d2a27c8e7 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_browsertest.cc
@@ -987,61 +987,6 @@ AboutThisSiteInteraction::kNotShownOptimizationGuideNotAllowed, 1); } -// Test that info is shown and "kShownWithoutMsbb" and -// "kClickedWithoutDescription" are logged when users that have disabled hints -// fetching are supported (e.g. non-MSBB users) -class PageInfoBubbleViewAboutThisSiteAllowNonMsbbBrowserTest - : public PageInfoBubbleViewAboutThisSiteBrowserTest { - public: - PageInfoBubbleViewAboutThisSiteAllowNonMsbbBrowserTest() { - feature_list_.InitWithFeatures( - { - page_info::kPageInfoAboutThisSiteMoreInfo, - page_info::kPageInfoAboutThisSiteNewIcon, - page_info::kPageInfoAboutThisSiteNonMsbb, - }, - {}); - } - - void SetUpCommandLine(base::CommandLine* cmd) override { - // Don't set the flag to enable hints fetching. - } - - protected: - base::test::ScopedFeatureList feature_list_; -}; - -IN_PROC_BROWSER_TEST_F(PageInfoBubbleViewAboutThisSiteAllowNonMsbbBrowserTest, - AboutThisSiteWithoutOptinAndWithNonMsbbUsers) { - ukm::TestAutoSetUkmRecorder ukm_recorder; - base::HistogramTester histograms; - - auto url = https_server_.GetURL("a.test", "/title1.html"); - auto site_info = CreateValidSiteInfo(); - site_info.clear_description(); - EXPECT_EQ(page_info::about_this_site_validation::ValidateSiteInfo( - site_info, page_info::IsMoreAboutThisSiteFeatureEnabled()), - AboutThisSiteStatus::kValid); - AddHintForTesting(browser(), url, site_info); - - ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url)); - OpenPageInfoBubble(browser()); - - auto* page_info = PageInfoBubbleView::GetPageInfoBubbleForTesting(); - views::View* button = page_info->GetViewByID( - PageInfoViewFactory::VIEW_ID_PAGE_INFO_ABOUT_THIS_SITE_BUTTON); - ASSERT_TRUE(button); - - histograms.ExpectUniqueSample("Security.PageInfo.AboutThisSiteInteraction", - AboutThisSiteInteraction::kShownWithoutMsbb, 1); - - PerformMouseClickOnView(button); - histograms.ExpectTotalCount("Security.PageInfo.AboutThisSiteInteraction", 2); - histograms.ExpectBucketCount( - "Security.PageInfo.AboutThisSiteInteraction", - AboutThisSiteInteraction::kClickedWithoutDescription, 1); -} - class PageInfoBubbleViewSiteSettingsBrowserTest : public InProcessBrowserTest { public: PageInfoBubbleViewSiteSettingsBrowserTest() {
diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.cc b/chrome/browser/ui/views/page_info/page_info_main_view.cc index dee706d..2ae2712 100644 --- a/chrome/browser/ui/views/page_info/page_info_main_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_main_view.cc
@@ -85,6 +85,8 @@ } // namespace DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PageInfoMainView, kCookieButtonElementId); +DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PageInfoMainView, kMainLayoutElementId); +DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(PageInfoMainView, kPermissionsElementId); PageInfoMainView::ContainerView::ContainerView() { SetLayoutManager(std::make_unique<views::BoxLayout>( @@ -129,6 +131,8 @@ permissions_view_->SetLayoutManager(std::make_unique<views::FlexLayout>()) ->SetOrientation(views::LayoutOrientation::kVertical); + SetProperty(views::kElementIdentifierKey, kMainLayoutElementId); + site_settings_view_ = AddChildView(CreateContainerView()); int link_text_id = 0; @@ -274,6 +278,8 @@ content_view->SetLayoutManager(std::make_unique<views::FlexLayout>()) ->SetOrientation(views::LayoutOrientation::kVertical); content_view->SetID(PageInfoViewFactory::VIEW_ID_PAGE_INFO_PERMISSION_VIEW); + content_view->SetProperty(views::kElementIdentifierKey, + kPermissionsElementId); // If there is a permission that supports one time grants, offset all other // permissions to align toggles.
diff --git a/chrome/browser/ui/views/page_info/page_info_main_view.h b/chrome/browser/ui/views/page_info/page_info_main_view.h index 0596f4e..f64f2b49 100644 --- a/chrome/browser/ui/views/page_info/page_info_main_view.h +++ b/chrome/browser/ui/views/page_info/page_info_main_view.h
@@ -45,7 +45,8 @@ // The width of the column size for permissions and chosen object icons. static constexpr int kIconColumnWidth = 16; DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kCookieButtonElementId); - + DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kMainLayoutElementId); + DECLARE_CLASS_ELEMENT_IDENTIFIER_VALUE(kPermissionsElementId); // Container view that fills the bubble width for button rows. Supports // updating the layout. class ContainerView : public views::View { @@ -80,6 +81,10 @@ // ChosenObjectViewObserver: void OnChosenObjectDeleted(const PageInfoUI::ChosenObjectInfo& info) override; + int GetVisiblePermissionsCountForTesting() const { + return toggle_rows_.size(); + } + protected: // TODO(olesiamarukhno): Was used for tests, will update it after redesigning // moves forward.
diff --git a/chrome/browser/ui/views/page_info/page_info_row_view.cc b/chrome/browser/ui/views/page_info/page_info_row_view.cc index 85a5ee9..8436948 100644 --- a/chrome/browser/ui/views/page_info/page_info_row_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_row_view.cc
@@ -96,3 +96,7 @@ width = std::max(width, PageInfoViewFactory::kMinBubbleWidth); return gfx::Size(width, views::View::GetHeightForWidth(width)); } + +const std::u16string& PageInfoRowView::GetTitleForTesting() { + return title_->GetText(); +}
diff --git a/chrome/browser/ui/views/page_info/page_info_row_view.h b/chrome/browser/ui/views/page_info/page_info_row_view.h index 52bc45c..6eb2bfb 100644 --- a/chrome/browser/ui/views/page_info/page_info_row_view.h +++ b/chrome/browser/ui/views/page_info/page_info_row_view.h
@@ -49,6 +49,8 @@ // views::View: gfx::Size CalculatePreferredSize() const override; + const std::u16string& GetTitleForTesting(); + private: friend class test::PageInfoBubbleViewTestApi;
diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc b/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc index 0613ca8..2b6b3c1 100644 --- a/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc +++ b/chrome/browser/ui/views/page_info/permission_toggle_row_view.cc
@@ -11,7 +11,6 @@ #include "chrome/browser/ui/views/accessibility/non_accessible_image_view.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/page_info/page_info_navigation_handler.h" -#include "chrome/browser/ui/views/page_info/page_info_row_view.h" #include "chrome/browser/ui/views/page_info/page_info_view_factory.h" #include "components/permissions/features.h" #include "components/permissions/permission_util.h"
diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.h b/chrome/browser/ui/views/page_info/permission_toggle_row_view.h index 6011741..59b53bdc 100644 --- a/chrome/browser/ui/views/page_info/permission_toggle_row_view.h +++ b/chrome/browser/ui/views/page_info/permission_toggle_row_view.h
@@ -7,12 +7,12 @@ #include "base/memory/raw_ptr.h" #include "base/observer_list.h" +#include "chrome/browser/ui/views/page_info/page_info_row_view.h" #include "chrome/browser/ui/views/page_info/permission_toggle_row_view_observer.h" #include "components/page_info/page_info_ui.h" #include "ui/views/view.h" class ChromePageInfoUiDelegate; -class PageInfoRowView; class PageInfoNavigationHandler; namespace views { @@ -42,6 +42,10 @@ void PermissionChanged(); void ResetPermission(); + const std::u16string& GetRowTitleForTesting() const { + return row_view_->GetTitleForTesting(); + } + private: friend class test::PageInfoBubbleViewTestApi;
diff --git a/chrome/browser/ui/views/permissions/permissions_flow_interactive_uitest.cc b/chrome/browser/ui/views/permissions/permissions_flow_interactive_uitest.cc new file mode 100644 index 0000000..a94ba720 --- /dev/null +++ b/chrome/browser/ui/views/permissions/permissions_flow_interactive_uitest.cc
@@ -0,0 +1,121 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_element_identifiers.h" +#include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/views/collected_cookies_views.h" +#include "chrome/browser/ui/views/page_info/page_info_main_view.h" +#include "chrome/browser/ui/views/page_info/page_info_row_view.h" +#include "chrome/browser/ui/views/page_info/permission_toggle_row_view.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/interaction/interactive_browser_test.h" +#include "components/content_settings/core/browser/host_content_settings_map.h" +#include "components/content_settings/core/common/content_settings_types.h" +#include "components/strings/grit/components_strings.h" +#include "content/public/common/content_features.h" +#include "content/public/test/browser_test.h" +#include "net/dns/mock_host_resolver.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/views/interaction/interaction_test_util_views.h" +#include "ui/views/view_utils.h" + +namespace { +DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kWebContentsElementId); +const char kFirstPermissionRow[] = "FirstPermissionRow"; + +} // namespace + +class PermissionsFlowInteractiveUITest : public InteractiveBrowserTest { + public: + PermissionsFlowInteractiveUITest() { + https_server_ = std::make_unique<net::EmbeddedTestServer>( + net::EmbeddedTestServer::TYPE_HTTPS); + } + + ~PermissionsFlowInteractiveUITest() override = default; + PermissionsFlowInteractiveUITest(const PermissionsFlowInteractiveUITest&) = + delete; + void operator=(const PermissionsFlowInteractiveUITest&) = delete; + + void SetUp() override { + https_server()->SetSSLConfig(net::EmbeddedTestServer::CERT_TEST_NAMES); + https_server()->ServeFilesFromSourceDirectory(GetChromeTestDataDir()); + + ASSERT_TRUE(https_server()->InitializeAndListen()); + InteractiveBrowserTest::SetUp(); + } + + void SetUpOnMainThread() override { + InteractiveBrowserTest::SetUpOnMainThread(); + host_resolver()->AddRule("*", "127.0.0.1"); + content::SetupCrossSiteRedirector(https_server()); + https_server()->StartAcceptingConnections(); + } + + void TearDownOnMainThread() override { + EXPECT_TRUE(https_server()->ShutdownAndWaitUntilComplete()); + InteractiveBrowserTest::TearDownOnMainThread(); + } + + net::EmbeddedTestServer* https_server() { return https_server_.get(); } + + ui::ElementContext context() const { + return browser()->window()->GetElementContext(); + } + + // Navigates a tab to `GetURL()` and opens PageInfo. + auto NavigateAndOpenPageInfo() { + return Steps(InstrumentTab(kWebContentsElementId), + NavigateWebContents(kWebContentsElementId, GetURL()), + PressButton(kLocationIconElementId)); + } + + protected: + GURL GetURL() { return https_server()->GetURL("a.test", "/title1.html"); } + + void SetPermission(ContentSettingsType type, ContentSetting setting) { + HostContentSettingsMap* map = + HostContentSettingsMapFactory::GetForProfile(browser()->profile()); + + map->SetContentSettingDefaultScope(GetURL(), GetURL(), type, setting); + } + + std::unique_ptr<net::EmbeddedTestServer> https_server_; +}; + +// Tests that by default PageInfo has no visible permission. +IN_PROC_BROWSER_TEST_F(PermissionsFlowInteractiveUITest, + PageInfoWithEmptyPermissionsTest) { + RunTestSequenceInContext( + context(), NavigateAndOpenPageInfo(), + // There are no permissions in PageInfo as all of them have default state. + CheckViewProperty(PageInfoMainView::kMainLayoutElementId, + &PageInfoMainView::GetVisiblePermissionsCountForTesting, + 0)); +} + +IN_PROC_BROWSER_TEST_F(PermissionsFlowInteractiveUITest, + PageInfoCameraPermissionsTest) { + // Set Camera permission to Allow so it becomes visible in PageInfo. + SetPermission(ContentSettingsType::MEDIASTREAM_CAMERA, CONTENT_SETTING_ALLOW); + + RunTestSequenceInContext( + context(), NavigateAndOpenPageInfo(), + CheckViewProperty(PageInfoMainView::kMainLayoutElementId, + &PageInfoMainView::GetVisiblePermissionsCountForTesting, + 1), + // A view with permissions in PageInfo + WaitForShow(PageInfoMainView::kPermissionsElementId), + // Set id to the first children of `kPermissionsElementId` - + // permissions view in PageInfo. + NameChildView(PageInfoMainView::kPermissionsElementId, + kFirstPermissionRow, 0), + // Verify the row label is Camera + CheckViewProperty( + kFirstPermissionRow, &PermissionToggleRowView::GetRowTitleForTesting, + l10n_util::GetStringUTF16(IDS_SITE_SETTINGS_TYPE_CAMERA))); +}
diff --git a/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc b/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc index 4143047f..3ec1312 100644 --- a/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc +++ b/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc
@@ -48,8 +48,9 @@ #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH) // TODO(crbug.com/1315979): Flaky on most release builds. +// TODO(crbug.com/1430490): Broken on macOS #if defined(NDEBUG) || BUILDFLAG(IS_CHROMEOS_ASH) || \ - defined(OZONE_PLATFORM_WAYLAND) + defined(OZONE_PLATFORM_WAYLAND) || BUILDFLAG(IS_MAC) #define MAYBE_EscapeClosesNotice DISABLED_EscapeClosesNotice #else #define MAYBE_EscapeClosesNotice EscapeClosesNotice
diff --git a/chrome/browser/ui/views/select_file_dialog_extension_browsertest.cc b/chrome/browser/ui/views/select_file_dialog_extension_browsertest.cc index d6ae3c53..cfd343a 100644 --- a/chrome/browser/ui/views/select_file_dialog_extension_browsertest.cc +++ b/chrome/browser/ui/views/select_file_dialog_extension_browsertest.cc
@@ -228,23 +228,17 @@ auto* web_contents = content::WebContents::FromRenderFrameHost(frame_host); CHECK(web_contents); - int x; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - web_contents, - "var bounds = document.querySelector('" + selector + - "').getBoundingClientRect();" - "domAutomationController.send(" - " Math.floor(bounds.left + bounds.width / 2));", - &x)); + int x = content::EvalJs(web_contents, + "var bounds = document.querySelector('" + selector + + "').getBoundingClientRect();" + "Math.floor(bounds.left + bounds.width / 2);") + .ExtractInt(); - int y; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - web_contents, - "var bounds = document.querySelector('" + selector + - "').getBoundingClientRect();" - "domAutomationController.send(" - " Math.floor(bounds.top + bounds.height / 2));", - &y)); + int y = content::EvalJs(web_contents, + "var bounds = document.querySelector('" + selector + + "').getBoundingClientRect();" + "Math.floor(bounds.top + bounds.height / 2);") + .ExtractInt(); LOG(INFO) << "ClickElement " << selector << " (" << x << "," << y << ")"; constexpr auto kButton = blink::WebMouseEvent::Button::kLeft;
diff --git a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc index dd09a8f..59b0279 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator.cc
@@ -535,7 +535,6 @@ if (auto* side_panel_container = browser_view_->toolbar()->side_panel_container()) { UpdateHeaderPinButtonState(); - side_panel_container->UpdateSidePanelContainerButtonsState(); } }
diff --git a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.cc b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.cc index c22b5ed..6a0daab 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.cc
@@ -58,10 +58,8 @@ void SidePanelToolbarContainer::PinnedSidePanelToolbarButton::ButtonPressed() { auto* coordinator = browser_view_->side_panel_coordinator(); - if (coordinator->GetCurrentEntryId() == + if (coordinator->GetCurrentEntryId() != SidePanelEntry::Id::kSearchCompanion) { - coordinator->Close(); - } else { coordinator->Show( id_, SidePanelUtil::SidePanelOpenTrigger::kPinnedEntryToolbarButton); } @@ -183,10 +181,6 @@ auto button = std::make_unique<PinnedSidePanelToolbarButton>(browser_view_, id, name, icon); ObserveButton(button.get()); - pinned_button_visibility_change_subscription_ = - button->AddVisibleChangedCallback(base::BindRepeating( - &SidePanelToolbarContainer::UpdateSidePanelContainerButtonsState, - base::Unretained(this))); pinned_entry_buttons_.push_back(AddChildView(std::move(button))); ReorderViews(); @@ -203,8 +197,6 @@ DCHECK(iter != pinned_entry_buttons_.end()); RemoveChildView(*iter); pinned_entry_buttons_.erase(iter); - pinned_button_visibility_change_subscription_ = - base::CallbackListSubscription(); } bool SidePanelToolbarContainer::HasPinnedEntryButtonFor(SidePanelEntry::Id id) { @@ -215,22 +207,7 @@ void SidePanelToolbarContainer::UpdateSidePanelContainerButtonsState() { bool side_panel_visible = browser_view_->unified_side_panel()->GetVisible(); - bool side_panel_button_highlighted = side_panel_visible; - absl::optional<SidePanelEntry::Id> current_active_id = - browser_view_->side_panel_coordinator()->GetCurrentEntryId(); - for (PinnedSidePanelToolbarButton* pinned_button : pinned_entry_buttons_) { - if (browser_view_->unified_side_panel()->GetVisible() && - pinned_button->GetVisible() && - pinned_button->id() == current_active_id) { - pinned_button->SetHighlighted(true); - side_panel_button_highlighted = false; - } else { - pinned_button->SetHighlighted(false); - } - } - // TODO(corising): Update tooltip for case when pinned button is highlighted - // once provided by UX. - GetSidePanelButton()->SetHighlighted(side_panel_button_highlighted); + GetSidePanelButton()->SetHighlighted(side_panel_visible); GetSidePanelButton()->SetTooltipText(l10n_util::GetStringUTF16( side_panel_visible ? IDS_TOOLTIP_SIDE_PANEL_HIDE : IDS_TOOLTIP_SIDE_PANEL_SHOW));
diff --git a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.h b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.h index dfc632b..bc906e8 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.h +++ b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container.h
@@ -83,7 +83,6 @@ std::vector<PinnedSidePanelToolbarButton*> pinned_entry_buttons_; base::CallbackListSubscription side_panel_visibility_change_subscription_; - base::CallbackListSubscription pinned_button_visibility_change_subscription_; PrefChangeRegistrar pref_change_registrar_; };
diff --git a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container_unittest.cc b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container_unittest.cc index 1243708d..6bf6ce37 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_toolbar_container_unittest.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_toolbar_container_unittest.cc
@@ -99,11 +99,12 @@ TEST_F(SidePanelToolbarContainerTest, ClickingPinnedEntryOpensSidePanel) { auto* search_companion_button = GetPinnedEntryButtons()[0]; + auto* side_panel_button = browser_view()->toolbar()->GetSidePanelButton(); ClickButton(search_companion_button); ASSERT_TRUE(browser_view()->unified_side_panel()->GetVisible()); ASSERT_EQ(browser_view()->side_panel_coordinator()->GetCurrentEntryId(), SidePanelEntry::Id::kSearchCompanion); - ASSERT_TRUE(views::InkDrop::Get(search_companion_button)->GetHighlighted()); + ASSERT_TRUE(views::InkDrop::Get(side_panel_button)->GetHighlighted()); } TEST_F(SidePanelToolbarContainerTest,
diff --git a/chrome/browser/ui/views/toolbar/app_menu.cc b/chrome/browser/ui/views/toolbar/app_menu.cc index 99bcc02..b1051695 100644 --- a/chrome/browser/ui/views/toolbar/app_menu.cc +++ b/chrome/browser/ui/views/toolbar/app_menu.cc
@@ -51,6 +51,7 @@ #include "content/public/browser/host_zoom_map.h" #include "content/public/browser/web_contents.h" #include "extensions/common/feature_switch.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/core/SkPaint.h" #include "ui/accessibility/ax_node_data.h" @@ -62,6 +63,7 @@ #include "ui/base/models/image_model.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/themed_vector_icon.h" +#include "ui/base/ui_base_features.h" #include "ui/base/window_open_disposition_utils.h" #include "ui/color/color_id.h" #include "ui/color/color_provider.h" @@ -86,6 +88,7 @@ #include "ui/views/controls/menu/menu_runner.h" #include "ui/views/controls/menu/menu_scroll_view_container.h" #include "ui/views/controls/menu/submenu_view.h" +#include "ui/views/view_utils.h" #include "ui/views/widget/widget.h" using base::UserMetricsAction; @@ -133,29 +136,38 @@ // paint the border. class InMenuButtonBackground : public views::Background { public: - enum ButtonType { + enum class ButtonType { // A rectangular button with no drawn border. - NO_BORDER, + kNoBorder, // A rectangular button with a border drawn along the leading (left) side. - LEADING_BORDER, + kLeadingBorder, // A button with no drawn border and a rounded background. - ROUNDED_BUTTON, + kRoundedButton, }; - explicit InMenuButtonBackground(ButtonType type) : type_(type) {} + enum class ButtonShape { + // A rectagular or rounded rectangular button. + kRectangular, + // A circular button centered in the bounds. + kCircular, + }; + + explicit InMenuButtonBackground(ButtonType type, + ButtonShape shape = ButtonShape::kRectangular) + : type_(type), shape_(shape) {} InMenuButtonBackground(const InMenuButtonBackground&) = delete; InMenuButtonBackground& operator=(const InMenuButtonBackground&) = delete; // Overridden from views::Background. void Paint(gfx::Canvas* canvas, View* view) const override { - Button* button = Button::AsButton(view); + Button* button = views::AsViewClass<views::Button>(view); int h = view->height(); // Draw leading border if desired. gfx::Rect bounds(view->GetLocalBounds()); - if (type_ == LEADING_BORDER) { + if (type_ == ButtonType::kLeadingBorder) { // We need to flip the canvas for RTL iff the button is not auto-flipping // already, so we end up flipping exactly once. gfx::ScopedCanvas scoped_canvas(canvas); @@ -187,20 +199,27 @@ views::Button::ButtonState state) const { if (state == views::Button::STATE_HOVERED || state == views::Button::STATE_PRESSED) { + gfx::Rect bounds_rect = bounds; ui::NativeTheme::ExtraParams params; - if (type_ == ROUNDED_BUTTON) { + if (type_ == ButtonType::kRoundedButton) { // Consistent with a hover corner radius (kInkDropSmallCornerRadius). const int kBackgroundCornerRadius = 2; params.menu_item.corner_radius = kBackgroundCornerRadius; + } else if (shape_ == ButtonShape::kCircular) { + constexpr int kCircularButtonSize = 28; + bounds_rect.ClampToCenteredSize( + gfx::Size(kCircularButtonSize, kCircularButtonSize)); + params.menu_item.corner_radius = kCircularButtonSize / 2; } - view->GetNativeTheme()->Paint(canvas->sk_canvas(), - view->GetColorProvider(), - ui::NativeTheme::kMenuItemBackground, - ui::NativeTheme::kHovered, bounds, params); + view->GetNativeTheme()->Paint( + canvas->sk_canvas(), view->GetColorProvider(), + ui::NativeTheme::kMenuItemBackground, ui::NativeTheme::kHovered, + bounds_rect, params); } } const ButtonType type_; + const ButtonShape shape_; }; std::u16string GetAccessibleNameForAppMenuItem(ButtonMenuItemModel* model, @@ -238,7 +257,8 @@ SetFocusBehavior(FocusBehavior::ALWAYS); SetHorizontalAlignment(gfx::ALIGN_CENTER); - SetBackground(std::make_unique<InMenuButtonBackground>(type)); + SetBackground(std::make_unique<InMenuButtonBackground>( + InMenuButtonBackground::ButtonType::kNoBorder)); SetBorder(views::CreateEmptyBorder( gfx::Insets::TLBR(0, kHorizontalPadding, 0, kHorizontalPadding))); label()->SetFontList(MenuConfig::instance().font_list); @@ -270,6 +290,28 @@ BEGIN_METADATA(InMenuButton, LabelButton) END_METADATA +// A button with an image inside a menu item. +class InMenuImageButton : public ImageButton { + public: + METADATA_HEADER(InMenuImageButton); + explicit InMenuImageButton(PressedCallback callback) + : ImageButton(callback) {} + + void Init(InMenuButtonBackground::ButtonType type, + InMenuButtonBackground::ButtonShape shape, + const ui::ImageModel& image_model) { + SetImageModel(views::Button::STATE_NORMAL, image_model); + SetImageHorizontalAlignment(ImageButton::ALIGN_CENTER); + SetImageVerticalAlignment(ImageButton::ALIGN_MIDDLE); + SetBackground(std::make_unique<InMenuButtonBackground>(type, shape)); + SetBorder(views::CreateEmptyBorder( + gfx::Insets::TLBR(0, kHorizontalPadding, 0, kHorizontalPadding))); + } +}; + +BEGIN_METADATA(InMenuImageButton, ImageButton) +END_METADATA + // AppMenuView is a view that can contain label buttons. class AppMenuView : public views::View { public: @@ -286,7 +328,7 @@ node_data->role = ax::mojom::Role::kMenu; } - InMenuButton* CreateAndConfigureButton( + views::Button* CreateAndConfigureButton( views::Button::PressedCallback callback, int string_id, InMenuButtonBackground::ButtonType type, @@ -297,34 +339,45 @@ /*use_accessible_name_as_tooltip_text=*/false); } - InMenuButton* CreateButtonWithAccessibleName( + views::Button* CreateButtonWithAccessibleName( views::Button::PressedCallback callback, int string_id, InMenuButtonBackground::ButtonType type, size_t index, int accessible_name_id, bool add_accelerator_text, - bool use_accessible_name_as_tooltip_text) { + bool use_accessible_name_as_tooltip_text, + const ui::ImageModel image_model = ui::ImageModel()) { // Should only be invoked during construction when |menu_| is valid. DCHECK(menu_); - InMenuButton* button = new InMenuButton( - std::move(callback), - gfx::RemoveAccelerator(l10n_util::GetStringUTF16(string_id))); - button->Init(type); - button->SetAccessibleName(GetAccessibleNameForAppMenuItem( + std::unique_ptr<views::Button> menu_button; + if (features::IsChromeRefresh2023()) { + auto button = std::make_unique<InMenuImageButton>(std::move(callback)); + button->Init(type, InMenuButtonBackground::ButtonShape::kCircular, + image_model); + menu_button = std::move(button); + } else { + auto button = std::make_unique<InMenuButton>( + std::move(callback), + gfx::RemoveAccelerator(l10n_util::GetStringUTF16(string_id))); + button->Init(type); + menu_button = std::move(button); + } + menu_button->SetAccessibleName(GetAccessibleNameForAppMenuItem( menu_model_, index, accessible_name_id, add_accelerator_text)); - button->set_tag(index); - button->SetEnabled(menu_model_->IsEnabledAt(index)); + menu_button->set_tag(index); + menu_button->SetEnabled(menu_model_->IsEnabledAt(index)); if (use_accessible_name_as_tooltip_text) { - button->SetTooltipText(l10n_util::GetStringUTF16(accessible_name_id)); + menu_button->SetTooltipText( + l10n_util::GetStringUTF16(accessible_name_id)); } - AddChildView(button); // all buttons on menu should must be a custom button in order for // the keyboard nativigation work. - DCHECK(Button::AsButton(button)); - return button; + DCHECK(views::IsViewClass<views::Button>(menu_button.get())); + + return AddChildView(std::move(menu_button)); } protected: @@ -358,7 +411,10 @@ SetImageHorizontalAlignment(ImageButton::ALIGN_CENTER); SetImageVerticalAlignment(ImageButton::ALIGN_MIDDLE); SetBackground(std::make_unique<InMenuButtonBackground>( - InMenuButtonBackground::LEADING_BORDER)); + InMenuButtonBackground::ButtonType::kLeadingBorder, + features::IsChromeRefresh2023() + ? InMenuButtonBackground::ButtonShape::kCircular + : InMenuButtonBackground::ButtonShape::kRectangular)); const int accname_string_id = is_in_fullscreen ? IDS_ACCNAME_EXIT_FULLSCREEN : IDS_ACCNAME_FULLSCREEN; SetTooltipText(l10n_util::GetStringUTF16(accname_string_id)); @@ -417,15 +473,17 @@ CreateAndConfigureButton( base::BindRepeating(cancel_and_evaluate, base::Unretained(menu), menu_model, cut_index), - IDS_CUT, InMenuButtonBackground::LEADING_BORDER, cut_index); + IDS_CUT, InMenuButtonBackground::ButtonType::kLeadingBorder, cut_index); CreateAndConfigureButton( base::BindRepeating(cancel_and_evaluate, base::Unretained(menu), menu_model, copy_index), - IDS_COPY, InMenuButtonBackground::LEADING_BORDER, copy_index); + IDS_COPY, InMenuButtonBackground::ButtonType::kLeadingBorder, + copy_index); CreateAndConfigureButton( base::BindRepeating(cancel_and_evaluate, base::Unretained(menu), menu_model, paste_index), - IDS_PASTE, InMenuButtonBackground::LEADING_BORDER, paste_index); + IDS_PASTE, InMenuButtonBackground::ButtonType::kLeadingBorder, + paste_index); } CutCopyPasteView(const CutCopyPasteView&) = delete; CutCopyPasteView& operator=(const CutCopyPasteView&) = delete; @@ -476,13 +534,8 @@ size_t decrement_index, size_t increment_index, size_t fullscreen_index) - : AppMenuView(menu, menu_model), - increment_button_(nullptr), - zoom_label_(nullptr), - decrement_button_(nullptr), - fullscreen_button_(nullptr), - zoom_label_max_width_(0), - zoom_label_max_width_valid_(false) { + : AppMenuView(menu, menu_model) { + const bool is_chrome_refresh = features::IsChromeRefresh2023(); browser_zoom_subscription_ = zoom::ZoomEventManager::GetForBrowserContext(menu->browser_->profile()) ->AddZoomLevelChangedCallback( @@ -492,37 +545,49 @@ const auto activate = [](ButtonMenuItemModel* menu_model, size_t index) { menu_model->ActivatedAt(index); }; + auto image_model = is_chrome_refresh ? ui::ImageModel::FromVectorIcon( + kZoomMinusMenuRefreshIcon, + ui::kColorMenuItemForeground) + : ui::ImageModel(); decrement_button_ = CreateButtonWithAccessibleName( base::BindRepeating(activate, menu_model, decrement_index), - IDS_ZOOM_MINUS2, InMenuButtonBackground::LEADING_BORDER, + IDS_ZOOM_MINUS2, + is_chrome_refresh ? InMenuButtonBackground::ButtonType::kNoBorder + : InMenuButtonBackground::ButtonType::kLeadingBorder, decrement_index, IDS_ACCNAME_ZOOM_MINUS2, /*add_accelerator_text=*/false, - /*use_accessible_name_as_tooltip_text=*/true); + /*use_accessible_name_as_tooltip_text=*/true, + /*image_model=*/image_model); - zoom_label_ = new Label(base::FormatPercent(100)); - zoom_label_->SetAutoColorReadabilityEnabled(false); - zoom_label_->SetHorizontalAlignment(gfx::ALIGN_RIGHT); - zoom_label_->SetBorder(views::CreateEmptyBorder(gfx::Insets::TLBR( + auto zoom_label = std::make_unique<Label>(base::FormatPercent(100)); + zoom_label->SetAutoColorReadabilityEnabled(false); + zoom_label->SetHorizontalAlignment(gfx::ALIGN_RIGHT); + zoom_label->SetBorder(views::CreateEmptyBorder(gfx::Insets::TLBR( 0, kZoomLabelHorizontalPadding, 0, kZoomLabelHorizontalPadding))); - zoom_label_->SetBackground(std::make_unique<InMenuButtonBackground>( - InMenuButtonBackground::NO_BORDER)); + zoom_label->SetBackground(std::make_unique<InMenuButtonBackground>( + InMenuButtonBackground::ButtonType::kNoBorder)); // Need to set a font list for the zoom label width calculations. - zoom_label_->SetFontList(MenuConfig::instance().font_list); + zoom_label->SetFontList(MenuConfig::instance().font_list); // An accessibility role of kAlert will ensure that any updates to the zoom // level can be picked up by screen readers. - zoom_label_->GetViewAccessibility().OverrideRole(ax::mojom::Role::kAlert); + zoom_label->GetViewAccessibility().OverrideRole(ax::mojom::Role::kAlert); - AddChildView(zoom_label_.get()); + zoom_label_ = AddChildView(std::move(zoom_label)); + image_model = is_chrome_refresh ? ui::ImageModel::FromVectorIcon( + kZoomPlusMenuRefreshIcon, + ui::kColorMenuItemForeground) + : ui::ImageModel(); increment_button_ = CreateButtonWithAccessibleName( base::BindRepeating(activate, menu_model, increment_index), - IDS_ZOOM_PLUS2, InMenuButtonBackground::NO_BORDER, increment_index, - IDS_ACCNAME_ZOOM_PLUS2, /*add_accelerator_text=*/false, - /*use_accessible_name_as_tooltip_text=*/true); + IDS_ZOOM_PLUS2, InMenuButtonBackground::ButtonType::kNoBorder, + increment_index, IDS_ACCNAME_ZOOM_PLUS2, /*add_accelerator_text=*/false, + /*use_accessible_name_as_tooltip_text=*/true, + /*image_model=*/image_model); - fullscreen_button_ = new FullscreenButton( + auto fullscreen_button = std::make_unique<FullscreenButton>( base::BindRepeating( [](AppMenu* menu, ButtonMenuItemModel* menu_model, size_t index) { menu->CancelAndEvaluate(menu_model, index); @@ -530,25 +595,27 @@ menu, menu_model, fullscreen_index), menu_model, fullscreen_index, menu->browser_->window() && menu->browser_->window()->IsFullscreen()); - fullscreen_button_->SetImageModel( + const auto& fullscreen_icon = + is_chrome_refresh ? kFullscreenRefreshIcon : kFullscreenIcon; + fullscreen_button->SetImageModel( ImageButton::STATE_NORMAL, - ui::ImageModel::FromVectorIcon(kFullscreenIcon, + ui::ImageModel::FromVectorIcon(fullscreen_icon, ui::kColorMenuItemForeground)); auto hovered_fullscreen_image = ui::ImageModel::FromVectorIcon( - kFullscreenIcon, ui::kColorMenuItemForegroundSelected); - fullscreen_button_->SetImageModel(ImageButton::STATE_HOVERED, - hovered_fullscreen_image); - fullscreen_button_->SetImageModel(ImageButton::STATE_PRESSED, - hovered_fullscreen_image); + fullscreen_icon, ui::kColorMenuItemForegroundSelected); + fullscreen_button->SetImageModel(ImageButton::STATE_HOVERED, + hovered_fullscreen_image); + fullscreen_button->SetImageModel(ImageButton::STATE_PRESSED, + hovered_fullscreen_image); // all buttons on menu should must be a custom button in order for // the keyboard navigation to work. - DCHECK(Button::AsButton(fullscreen_button_)); - AddChildView(fullscreen_button_.get()); + DCHECK(views::IsViewClass<views::Button>(fullscreen_button.get())); + fullscreen_button_ = AddChildView(std::move(fullscreen_button)); // The max width for `zoom_label_` should not be valid until the calls into // UpdateZoomControls(). - DCHECK(!zoom_label_max_width_valid_); + DCHECK(!zoom_label_max_width_.has_value()); UpdateZoomControls(); } ZoomView(const ZoomView&) = delete; @@ -632,12 +699,12 @@ // An alert notification will ensure that the zoom label is always announced // even if is not focusable. zoom_label_->NotifyAccessibilityEvent(ax::mojom::Event::kAlert, true); - zoom_label_max_width_valid_ = false; + zoom_label_max_width_.reset(); } // Returns the max width the zoom string can be. int GetZoomLabelMaxWidth() const { - if (!zoom_label_max_width_valid_) { + if (!zoom_label_max_width_) { const gfx::FontList& font_list = zoom_label_->font_list(); const int border_width = zoom_label_->GetInsets().width(); @@ -661,34 +728,28 @@ max_w = gfx::GetStringWidth(base::FormatPercent(100), font_list); } zoom_label_max_width_ = max_w + border_width; - - zoom_label_max_width_valid_ = true; } - return zoom_label_max_width_; + return zoom_label_max_width_.value(); } base::CallbackListSubscription browser_zoom_subscription_; // Button for incrementing the zoom. - raw_ptr<LabelButton> increment_button_; + raw_ptr<Button> increment_button_ = nullptr; // Label showing zoom as a percent. - raw_ptr<Label> zoom_label_; + raw_ptr<Label> zoom_label_ = nullptr; // Button for decrementing the zoom. - raw_ptr<LabelButton> decrement_button_; + raw_ptr<Button> decrement_button_ = nullptr; - raw_ptr<ImageButton> fullscreen_button_; + raw_ptr<Button> fullscreen_button_ = nullptr; // Cached width of how wide the zoom label string can be. This is the width at // 100%. This should not be accessed directly, use GetZoomLabelMaxWidth() // instead. This value is cached because is depends on multiple calls to // gfx::GetStringWidth(...) which are expensive. - mutable int zoom_label_max_width_; - - // Flag tracking whether calls to GetZoomLabelMaxWidth() need to re-calculate - // the label width, because the cached value may no longer be correct. - mutable bool zoom_label_max_width_valid_; + mutable absl::optional<int> zoom_label_max_width_; }; BEGIN_METADATA(AppMenu, ZoomView, AppMenuView)
diff --git a/chrome/browser/ui/webui/about_ui_unittest.cc b/chrome/browser/ui/webui/about_ui_unittest.cc index 456ffa4..0b6bebb1 100644 --- a/chrome/browser/ui/webui/about_ui_unittest.cc +++ b/chrome/browser/ui/webui/about_ui_unittest.cc
@@ -27,7 +27,7 @@ #include "chromeos/ash/components/dbus/dbus_thread_manager.h" #include "chromeos/ash/components/system/fake_statistics_provider.h" #include "chromeos/ash/components/system/statistics_provider.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ui/webui/app_home/app_home_page_handler_browsertest.cc b/chrome/browser/ui/webui/app_home/app_home_page_handler_browsertest.cc index 8dda3eb..de61d7d 100644 --- a/chrome/browser/ui/webui/app_home/app_home_page_handler_browsertest.cc +++ b/chrome/browser/ui/webui/app_home/app_home_page_handler_browsertest.cc
@@ -21,7 +21,7 @@ #include "chrome/common/webui_url_constants.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/webapps/browser/installable/installable_metrics.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test.h" #include "content/public/test/test_web_ui.h"
diff --git a/chrome/browser/ui/webui/nearby_share/nearby_share_dialog_ui_browsertest.cc b/chrome/browser/ui/webui/nearby_share/nearby_share_dialog_ui_browsertest.cc index e186f37..a1b5d2f 100644 --- a/chrome/browser/ui/webui/nearby_share/nearby_share_dialog_ui_browsertest.cc +++ b/chrome/browser/ui/webui/nearby_share/nearby_share_dialog_ui_browsertest.cc
@@ -76,13 +76,9 @@ content::WebContents* web_contents = GetWebContentsForNearbyShareHost(); // Assert that we render the nearby-share-app component. - int num_nearby_share_app = -1; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt( - web_contents, - "domAutomationController.send(" - "document.getElementsByTagName('nearby-share-app').length)", - &num_nearby_share_app)); - EXPECT_EQ(1, num_nearby_share_app); + EXPECT_EQ(1, content::EvalJs( + web_contents, + "document.getElementsByTagName('nearby-share-app').length")); } IN_PROC_BROWSER_TEST_F(NearbyShareDialogUITest,
diff --git a/chrome/browser/ui/webui/webui_webview_browsertest.cc b/chrome/browser/ui/webui/webui_webview_browsertest.cc index 3ea4554..c64309b 100644 --- a/chrome/browser/ui/webui/webui_webview_browsertest.cc +++ b/chrome/browser/ui/webui/webui_webview_browsertest.cc
@@ -91,24 +91,20 @@ int ExecuteHostScriptAndExtractInt(content::WebContents* web_contents, const std::string& script) { - int result; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - web_contents, "window.domAutomationController.send(" + script + ");", - &result)); - return result; + return content::EvalJs(web_contents, script).ExtractInt(); } int ExecuteGuestScriptAndExtractInt(content::WebContents* web_contents, const std::string& web_view_id, const std::string& script) { - int result; - EXPECT_TRUE(content::ExecuteScriptAndExtractInt( - web_contents, - "document.getElementById('" + web_view_id + "').executeScript({ " - "code: '" + script + "' }, function (results) {" - " window.domAutomationController.send(results[0]);});", - &result)); - return result; + return content::EvalJs(web_contents, "document.getElementById('" + + web_view_id + + "').executeScript({ " + "code: '" + + script + + "' }, function (results) {" + " return results[0]);});") + .ExtractInt(); } } // namespace #endif
diff --git a/chrome/browser/webshare/safe_browsing_request.cc b/chrome/browser/webshare/safe_browsing_request.cc index 932cb81..803d035 100644 --- a/chrome/browser/webshare/safe_browsing_request.cc +++ b/chrome/browser/webshare/safe_browsing_request.cc
@@ -14,7 +14,7 @@ #include "base/timer/timer.h" #include "components/safe_browsing/core/browser/db/database_manager.h" #include "components/safe_browsing/core/common/features.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "url/gurl.h" namespace {
diff --git a/chrome/browser/webshare/share_service_browsertest.cc b/chrome/browser/webshare/share_service_browsertest.cc index 56526b3..08c5c2a 100644 --- a/chrome/browser/webshare/share_service_browsertest.cc +++ b/chrome/browser/webshare/share_service_browsertest.cc
@@ -14,7 +14,7 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "components/safe_browsing/core/browser/db/fake_database_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_utils.h"
diff --git a/chrome/browser/webshare/win/share_operation_unittest.cc b/chrome/browser/webshare/win/share_operation_unittest.cc index b4aaa46..3aa1356 100644 --- a/chrome/browser/webshare/win/share_operation_unittest.cc +++ b/chrome/browser/webshare/win/share_operation_unittest.cc
@@ -20,7 +20,7 @@ #include "chrome/browser/webshare/win/scoped_share_operation_fake_components.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "storage/browser/blob/blob_data_builder.h" #include "storage/browser/blob/blob_impl.h"
diff --git a/chrome/build/lacros64.pgo.txt b/chrome/build/lacros64.pgo.txt index 78fe6d2..c4b918d 100644 --- a/chrome/build/lacros64.pgo.txt +++ b/chrome/build/lacros64.pgo.txt
@@ -1 +1 @@ -chrome-chromeos-amd64-generic-main-1680753360-f70c64568413d268d4cfaf1f95f4cac0f0659ee7.profdata +chrome-chromeos-amd64-generic-main-1680782379-e279ba59bf5dede16e4c676c11c2e0235821a492.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index f80c073..180da92a 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1680760515-67c1e1bf853234e1db5d576450f1465d5c72f1fe.profdata +chrome-linux-main-1680782379-0f1c7841463881c4810c0d94f52519aa6f04cb7d.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 4060ade..6445674 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1680767924-5e8bf94578ddf8b134abacdc56ca7c36ef09c60c.profdata +chrome-mac-arm-main-1680796566-7bb274fcc61426b9700130c6d0d4087843b8995b.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 096abb57..0d3051e 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1680738841-8e94516a854c33be69cb4c9ffdd44a0f698114ee.profdata +chrome-mac-main-1680782379-7e36ccc6360c506799580257563b819bf6d38f4e.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 036fd552..f84b0c1 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1680748976-f82e9474efbd1916937fa1a986e135c0675fc123.profdata +chrome-win32-main-1680782379-5275434a892a34b6e46e766f1a8c0d9037b90f87.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 4b3ae74..bace5af 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1680760515-42ab429d46eae65dc0be09818575f00625df99ad.profdata +chrome-win64-main-1680782379-4c6fa3d1f2274e3cea00ce473d6d9e1ef695446d.profdata
diff --git a/chrome/common/extensions/api/side_panel.idl b/chrome/common/extensions/api/side_panel.idl index e3a08c6..ff330921 100644 --- a/chrome/common/extensions/api/side_panel.idl +++ b/chrome/common/extensions/api/side_panel.idl
@@ -27,6 +27,14 @@ boolean? enabled; }; + // A dictionary containing the extension's options for how its side panel + // behaves. + dictionary PanelBehavior { + // Whether clicking the extension's icon will toggle showing the extension's + // entry in the side panel. Defaults to false. + boolean? openPanelOnActionClick; + }; + dictionary GetPanelOptions { // If specified, the side panel options for the given tab will be returned. // Otherwise, returns the default side panel options (used for any tab that @@ -36,6 +44,7 @@ callback VoidCallback = void(); callback PanelOptionsCallback = void(PanelOptions options); + callback PanelBehaviorCallback = void(PanelBehavior behavior); interface Functions { // Configures the side panel. @@ -47,8 +56,20 @@ // Returns the active panel configuration. // |options|: Specifies the context to return the configuration for. // |callback|: Called with the active panel configuration. - [supportsPromises] static void getOptions( - GetPanelOptions options, - PanelOptionsCallback callback); + [supportsPromises] static void getOptions(GetPanelOptions options, + PanelOptionsCallback callback); + + // Configures the extension's side panel behavior. This is an upsert + // operation. + // |behavior|: The new behavior to be set. + // |callback|: Called when the new behavior has been set. + [nodoc, supportsPromises] static void setPanelBehavior( + PanelBehavior behavior, + optional VoidCallback callback); + + // Returns the extension's current side panel behavior. + // |callback|: Called with the extension's side panel behavior. + [nodoc, supportsPromises] static void getPanelBehavior( + PanelBehaviorCallback callback); }; };
diff --git a/chrome/renderer/DEPS b/chrome/renderer/DEPS index f80735d..205093d 100644 --- a/chrome/renderer/DEPS +++ b/chrome/renderer/DEPS
@@ -108,7 +108,7 @@ "+chrome/browser/profiles/profile_io_data.h", "+chrome/browser/ui", "+chrome/browser/ui/tabs", - "+content/public/browser/browser_task_traits.h", + "+content/public/browser/browser_thread.h", ], "commerce_hint_agent_browsertest\.cc" : [ "+chrome/browser/cart",
diff --git a/chrome/renderer/chrome_content_renderer_client_browsertest.cc b/chrome/renderer/chrome_content_renderer_client_browsertest.cc index 1f5ff5a..a0e95ec 100644 --- a/chrome/renderer/chrome_content_renderer_client_browsertest.cc +++ b/chrome/renderer/chrome_content_renderer_client_browsertest.cc
@@ -19,7 +19,7 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "components/network_session_configurator/common/network_switches.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/common/content_constants.h" #include "content/public/renderer/render_frame.h" #include "content/public/test/browser_test.h"
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 3b81ebd..098bbdd 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -9662,6 +9662,7 @@ "../browser/ui/views/extensions/extensions_menu_site_permissions_page_view_interactive_uitest.cc", "../browser/ui/views/extensions/extensions_menu_view_interactive_uitest.cc", "../browser/ui/views/page_info/page_info_bubble_view_interactive_uitest.cc", + "../browser/ui/views/permissions/permissions_flow_interactive_uitest.cc", "../browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_interactive_ui_test.cc", "../browser/ui/views/privacy_sandbox/privacy_sandbox_notice_bubble_interactive_ui_test.cc", "../browser/ui/views/side_panel/read_anything/read_anything_toolbar_view_browsertest.cc",
diff --git a/chrome/test/data/extensions/api_test/bindings/external_message_listener/background.js b/chrome/test/data/extensions/api_test/bindings/external_message_listener/background.js index eadbd5a..7e44f49f 100644 --- a/chrome/test/data/extensions/api_test/bindings/external_message_listener/background.js +++ b/chrome/test/data/extensions/api_test/bindings/external_message_listener/background.js
@@ -2,30 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +let resolve; +const completionPromise = new Promise((res) => { + resolve = res; +}); + var messagesReceived = []; -// Have we received the real message from the sender extension? -var receivedRealSenderMessage = false; - -// Has the c++ code in the browser test asked us for the total count of messages -// we've received? -var sendCountAfterSenderMessage = false; - function getMessageCountAfterReceivingRealSenderMessage() { - if (receivedRealSenderMessage) { - window.domAutomationController.send(messagesReceived.length); - } else { - sendCountAfterSenderMessage = true; - } + return completionPromise; } chrome.runtime.onMessageExternal.addListener(function(msg, sender, respond) { messagesReceived.push({msg:msg, sender:sender}); if (msg == 'from_sender') { - receivedRealSenderMessage = true; - if (sendCountAfterSenderMessage) { - window.domAutomationController.send(messagesReceived.length); - } + resolve(messagesReceived.length); } });
diff --git a/chrome/test/data/extensions/api_test/messaging/externally_connectable/sites/assertions.js b/chrome/test/data/extensions/api_test/messaging/externally_connectable/sites/assertions.js index 36faed1d..af79511d 100644 --- a/chrome/test/data/extensions/api_test/messaging/externally_connectable/sites/assertions.js +++ b/chrome/test/data/extensions/api_test/messaging/externally_connectable/sites/assertions.js
@@ -91,6 +91,13 @@ INCORRECT_RESPONSE_MESSAGE: 6, }; +class ResultError extends Error { + constructor(result) { + super('ResultError'); + this.result = result; + } +} + // Make the messages sent vaguely complex, but unambiguously JSON-ifiable. var kMessage = [{'a': {'b': 10}}, 20, 'c\x10\x11']; @@ -113,17 +120,15 @@ }); } -function checkLastError(reply) { +function checkLastError() { if (!chrome.runtime.lastError) - return true; + return; if (chrome.runtime.lastError.message == kCouldNotEstablishConnection) - reply(results.COULD_NOT_ESTABLISH_CONNECTION_ERROR); - else - reply(results.OTHER_ERROR); - return false; + throw new ResultError(results.COULD_NOT_ESTABLISH_CONNECTION_ERROR); + throw new ResultError(results.OTHER_ERROR); } -function checkResponse(response, reply, expectedMessage, isApp) { +function checkResponse(response, expectedMessage, isApp) { // The response will be an echo of both the original message *and* the // MessageSender (with the tab field stripped down). // @@ -151,18 +156,16 @@ incorrectSender = true; } if (incorrectSender) { - reply(results.INCORRECT_RESPONSE_SENDER); - return false; + throw new ResultError(results.INCORRECT_RESPONSE_SENDER); } // Check the correct content was echoed. var expectedJson = stringify(expectedMessage); var actualJson = stringify(response.message); if (actualJson == expectedJson) - return true; + return; console.warn('Expected message ' + expectedJson + ' got ' + actualJson); - reply(results.INCORRECT_RESPONSE_MESSAGE); - return false; + throw new ResultError(results.INCORRECT_RESPONSE_MESSAGE); } function sendToBrowser(msg) { @@ -177,24 +180,14 @@ sendToBrowser("" + result); } -function checkRuntime(reply) { - if (!reply) - reply = sendToBrowser; - +function checkRuntime() { if (!chrome.runtime) { - reply(results.NAMESPACE_NOT_DEFINED); - return false; + throw new ResultError(results.NAMESPACE_NOT_DEFINED); } if (!chrome.runtime.connect || !chrome.runtime.sendMessage) { - reply(results.FUNCTION_NOT_DEFINED); - return false; + throw new ResultError(results.FUNCTION_NOT_DEFINED); } - return true; -} - -function checkRuntimeForTlsChannelId() { - return checkRuntime(sendToBrowserForTlsChannelId); } function checkTlsChannelIdResponse(response) { @@ -228,47 +221,63 @@ }; window.assertions = { - canConnectAndSendMessages: function(extensionId, isApp, message) { - if (!checkRuntime()) - return; + canConnectAndSendMessages: async function(extensionId, isApp, message) { + try { + checkRuntime(); - if (!message) - message = kMessage; + if (!message) + message = kMessage; - function canSendMessage(reply) { - chrome.runtime.sendMessage(extensionId, message, function(response) { - if (checkLastError(reply) && - checkResponse(response, reply, message, isApp)) { - reply(results.OK); - } - }); + async function canSendMessage() { + const response = await new Promise((resolve) => { + chrome.runtime.sendMessage(extensionId, message, function(response) { + resolve(response); + }); + }); + checkLastError(); + checkResponse(response, message, isApp); + } + + async function canConnectAndSendMessages() { + var port = chrome.runtime.connect(extensionId); + return new Promise((resolve, reject) => { + port.postMessage(message, function() { + try { + checkLastError(); + } catch(err) { + reject(err); + } + }); + port.postMessage(message, function() { + try { + checkLastError(); + } catch(err) { + reject(err); + } + }); + var pendingResponses = 2; + port.onMessage.addListener(async function(response) { + pendingResponses--; + try { + checkLastError(); + checkResponse(response, message, isApp); + } catch (err) { + return reject(err); + } + if (pendingResponses == 0) + return resolve(results.OK); + }); + }); + } + + await canSendMessage(); + return await canConnectAndSendMessages(); + } catch (err) { + if (err instanceof ResultError) { + return err.result; + } + throw err; } - - function canConnectAndSendMessages(reply) { - var port = chrome.runtime.connect(extensionId); - port.postMessage(message, function() { - checkLastError(reply); - }); - port.postMessage(message, function() { - checkLastError(reply); - }); - var pendingResponses = 2; - var ok = true; - port.onMessage.addListener(function(response) { - pendingResponses--; - ok = ok && checkLastError(reply) && - checkResponse(response, reply, message, isApp); - if (pendingResponses == 0 && ok) - reply(results.OK); - }); - } - - canSendMessage(function(result) { - if (result != results.OK) - sendToBrowser(result); - else - canConnectAndSendMessages(sendToBrowser); - }); }, trySendMessage: function(extensionId) { @@ -332,8 +341,14 @@ getTlsChannelIdFromPortConnect: function(extensionId, includeTlsChannelId, message) { - if (!checkRuntimeForTlsChannelId()) - return; + try { + checkRuntime(); + } catch (err) { + if (err instanceof ResultError) { + return sendToBrowserForTlsChannelId(err.result); + } + throw err; + } if (!message) message = kMessage; @@ -346,8 +361,14 @@ getTlsChannelIdFromSendMessage: function(extensionId, includeTlsChannelId, message) { - if (!checkRuntimeForTlsChannelId()) - return; + try { + checkRuntime(); + } catch (err) { + if (err instanceof ResultError) { + return sendToBrowserForTlsChannelId(err.result); + } + throw err; + } if (!message) message = kMessage;
diff --git a/chrome/test/data/extensions/api_test/side_panel/panel_behavior/manifest.json b/chrome/test/data/extensions/api_test/side_panel/panel_behavior/manifest.json new file mode 100644 index 0000000..8532f43b --- /dev/null +++ b/chrome/test/data/extensions/api_test/side_panel/panel_behavior/manifest.json
@@ -0,0 +1,7 @@ +{ + "name": "Side Panel PanelBehavior extension", + "version": "1.0", + "manifest_version": 3, + "permissions": ["sidePanel"], + "background": {"service_worker": "service_worker.js"} +}
diff --git a/chrome/test/data/extensions/api_test/side_panel/panel_behavior/service_worker.js b/chrome/test/data/extensions/api_test/side_panel/panel_behavior/service_worker.js new file mode 100644 index 0000000..c8a5894 --- /dev/null +++ b/chrome/test/data/extensions/api_test/side_panel/panel_behavior/service_worker.js
@@ -0,0 +1,25 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +chrome.test.runTests([ + // Test the default values of fields for chrome.sidePanel.getPanelBehavior(). + async function defaultPanelBehavior() { + const behavior = await chrome.sidePanel.getPanelBehavior(); + chrome.test.assertFalse(behavior.openPanelOnActionClick); + chrome.test.succeed(); + }, + + // Test that chrome.sidePanel.setPanelBehavior is an upsert operation. + async function getAndSetPanelBehavior() { + await chrome.sidePanel.setPanelBehavior({openPanelOnActionClick: true}); + let behavior = await chrome.sidePanel.getPanelBehavior(); + chrome.test.assertTrue(behavior.openPanelOnActionClick); + + await chrome.sidePanel.setPanelBehavior({}); + behavior = await chrome.sidePanel.getPanelBehavior(); + chrome.test.assertTrue(behavior.openPanelOnActionClick); + + chrome.test.succeed(); + }, +]);
diff --git a/chrome/test/data/popup_blocker/post-message-popup.html b/chrome/test/data/popup_blocker/post-message-popup.html index 73e15d6..c5a8df979 100644 --- a/chrome/test/data/popup_blocker/post-message-popup.html +++ b/chrome/test/data/popup_blocker/post-message-popup.html
@@ -1,19 +1,21 @@ <!DOCTYPE html> <script> -var popups = 0; -window.addEventListener('message', function(a) { - if (a.data == 1) { - let popup = !!window.open(); - popups += popup ? 1 : 0; - } else { - window.domAutomationController.send(popups); - } -}); - // Tries to open two popups and reports how many successfully opened. function openPopupsAndReport() { - window.postMessage(1, document.location); - window.postMessage(1, document.location); - window.postMessage(2, document.location); + var popups = 0; + return new Promise(resolve => { + window.addEventListener('message', function(a) { + if (a.data == 1) { + let popup = !!window.open(); + popups += popup ? 1 : 0; + } else { + resolve(popups); + } + }); + + window.postMessage(1, document.location); + window.postMessage(1, document.location); + window.postMessage(2, document.location); + }); } </script>
diff --git a/chrome/test/data/webui/app_home/app_list_test.ts b/chrome/test/data/webui/app_home/app_list_test.ts index d13d3f5..1446567 100644 --- a/chrome/test/data/webui/app_home/app_list_test.ts +++ b/chrome/test/data/webui/app_home/app_list_test.ts
@@ -200,14 +200,14 @@ assertTrue(apps.appList.length >= 1); const appInfo = apps.appList[0]!; - const openInWindow = contextMenu.querySelector<HTMLElement>( - '#openInWindow') as CrCheckboxElement; + const openInWindow = + contextMenu.querySelector<CrCheckboxElement>('#openInWindow'); assertTrue(!!openInWindow); assertEquals(openInWindow.hidden, !appInfo.isLocallyInstalled); assertEquals(openInWindow.checked, appInfo.openInWindow); - const launchOnStartup = contextMenu.querySelector<HTMLElement>( - '#launchOnStartup') as CrCheckboxElement; + const launchOnStartup = + contextMenu.querySelector<CrCheckboxElement>('#launchOnStartup'); assertTrue(!!launchOnStartup); assertEquals(launchOnStartup.hidden, !appInfo.mayShowRunOnOsLoginMode); @@ -274,8 +274,8 @@ assertTrue(apps.appList.length >= 1); const contextMenu = appItem.shadowRoot!.querySelector('cr-action-menu'); assertTrue(!!contextMenu); - const openInWindow = contextMenu.querySelector<HTMLElement>( - '#openInWindow') as CrCheckboxElement; + const openInWindow = + contextMenu.querySelector<CrCheckboxElement>('#openInWindow'); assertTrue(!!openInWindow); assertFalse(openInWindow.checked); assertFalse(apps.appList[0]!.openInWindow); @@ -314,8 +314,8 @@ assertTrue(apps.appList.length >= 1); const contextMenu = appItem.shadowRoot!.querySelector('cr-action-menu'); assertTrue(!!contextMenu); - const launchOnStartup = contextMenu.querySelector<HTMLElement>( - '#launchOnStartup') as CrCheckboxElement; + const launchOnStartup = + contextMenu.querySelector<CrCheckboxElement>('#launchOnStartup'); assertTrue(!!launchOnStartup); assertFalse(launchOnStartup.checked); assertEquals(apps.appList[0]!.runOnOsLoginMode, RunOnOsLoginMode.kNotRun); @@ -355,8 +355,8 @@ const contextMenu = appItem.shadowRoot!.querySelector('cr-action-menu'); assertTrue(!!contextMenu); - const launchOnStartup = contextMenu.querySelector<HTMLElement>( - '#launchOnStartup') as CrCheckboxElement; + const launchOnStartup = + contextMenu.querySelector<CrCheckboxElement>('#launchOnStartup'); assertTrue(!!launchOnStartup); assertFalse(launchOnStartup.checked); assertEquals(apps.appList[1]!.runOnOsLoginMode, RunOnOsLoginMode.kNotRun);
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_browsertest.js b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_browsertest.js index 7f8f20b..4e4f2dd 100644 --- a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_browsertest.js +++ b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_browsertest.js
@@ -15,6 +15,8 @@ GEN('#include "ui/base/ui_base_features.h"'); GEN('#include "content/public/test/browser_test.h"'); +GEN('#include "ash/constants/ash_features.h"'); +GEN('#include "chromeos/constants/chromeos_features.h"'); var ShortcutCustomizationAppBrowserTest = class extends PolymerTest { get browsePreload() { @@ -25,7 +27,11 @@ return { enabled: [ 'features::kShortcutCustomizationApp', - 'features::kShortcutCustomization' + 'features::kShortcutCustomization', + // TODO(b/276493795): Remove jelly and + // shortcut-customization-jelly after the Jelly experiment is launched. + 'chromeos::features::kJelly', + 'ash::features::kShortcutCustomizationJelly', ] }; }
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test.ts index 3a0928a4c..e681f9c3 100644 --- a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test.ts +++ b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test.ts
@@ -55,6 +55,10 @@ let handler: FakeShortcutSearchHandler; + const jellyDisabledCssUrl = + 'chrome://resources/chromeos/colors/cros_styles.css'; + let linkEl: HTMLLinkElement|null = null; + setup(() => { manager = AcceleratorLookupManager.getInstance(); @@ -77,6 +81,11 @@ handler = new FakeShortcutSearchHandler(); handler.setFakeSearchResult(fakeSearchResults); setShortcutSearchHandlerForTesting(handler); + + // Setup link element for dynamic/jelly color tests. + linkEl = document.createElement('link'); + linkEl.href = jellyDisabledCssUrl; + document.head.appendChild(linkEl); }); teardown(() => { @@ -88,6 +97,10 @@ page.remove(); } page = null; + if (linkEl) { + document.head.removeChild(linkEl); + } + linkEl = null; }); function getManager(): AcceleratorLookupManager { @@ -115,6 +128,11 @@ return subPage!.shadowRoot!.querySelectorAll('accelerator-subsection'); } + function getLinkEl(): HTMLLinkElement { + assertTrue(!!linkEl); + return linkEl as HTMLLinkElement; + } + async function openDialogForAcceleratorInSubsection(subsectionIndex: number) { // The edit dialog should not be stamped and visible. const editDialog = getPage().shadowRoot!.querySelector('#editDialog'); @@ -615,4 +633,25 @@ `category-${AcceleratorCategory.kWindowsAndDesks}`, page.$.navigationPanel.selectedItem.id); }); + + test('IsJellyEnabledForShortcutCustomization_DisabledKeepsCSS', async () => { + loadTimeData.overrideValues({ + isJellyEnabledForShortcutCustomization: false, + }); + + page = initShortcutCustomizationAppElement(); + await flushTasks(); + + assertTrue(getLinkEl().href.includes(jellyDisabledCssUrl)); + }); + + test('IsJellyEnabledForShortcutCustomization_EnabledUpdatesCSS', async () => { + loadTimeData.overrideValues({ + isJellyEnabledForShortcutCustomization: true, + }); + page = initShortcutCustomizationAppElement(); + await flushTasks(); + + assertTrue(getLinkEl().href.includes('chrome://theme/colors.css')); + }); });
diff --git a/chrome/test/fuzzing/html_in_process_fuzz_test.cc b/chrome/test/fuzzing/html_in_process_fuzz_test.cc index 17105aa..33f0fa6 100644 --- a/chrome/test/fuzzing/html_in_process_fuzz_test.cc +++ b/chrome/test/fuzzing/html_in_process_fuzz_test.cc
@@ -4,7 +4,7 @@ #include "chrome/test/base/ui_test_utils.h" #include "chrome/test/fuzzing/in_process_fuzz_test.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/embedded_test_server.h"
diff --git a/chrome/test/media_router/media_router_integration_browsertest.cc b/chrome/test/media_router/media_router_integration_browsertest.cc index 1658e8cd..dd73e3cf 100644 --- a/chrome/test/media_router/media_router_integration_browsertest.cc +++ b/chrome/test/media_router/media_router_integration_browsertest.cc
@@ -332,14 +332,6 @@ return full_path; } -int MediaRouterIntegrationBrowserTest::ExecuteScriptAndExtractInt( - const content::ToRenderFrameHost& adapter, - const std::string& script) { - int result; - CHECK(content::ExecuteScriptAndExtractInt(adapter, script, &result)); - return result; -} - std::string MediaRouterIntegrationBrowserTest::ExecuteScriptAndExtractString( const content::ToRenderFrameHost& adapter, const std::string& script) {
diff --git a/chrome/test/media_router/media_router_integration_browsertest.h b/chrome/test/media_router/media_router_integration_browsertest.h index e4211f1..90478e1 100644 --- a/chrome/test/media_router/media_router_integration_browsertest.h +++ b/chrome/test/media_router/media_router_integration_browsertest.h
@@ -95,10 +95,6 @@ static void ExecuteJavaScriptAPI(content::WebContents* web_contents, const std::string& script); - static int ExecuteScriptAndExtractInt( - const content::ToRenderFrameHost& adapter, - const std::string& script); - static std::string ExecuteScriptAndExtractString( const content::ToRenderFrameHost& adapter, const std::string& script);
diff --git a/chrome/test/v8/wasm_trap_handler_browsertest.cc b/chrome/test/v8/wasm_trap_handler_browsertest.cc index f191d21..6a72d5b5 100644 --- a/chrome/test/v8/wasm_trap_handler_browsertest.cc +++ b/chrome/test/v8/wasm_trap_handler_browsertest.cc
@@ -56,16 +56,12 @@ void RunJSTestAndEnsureTrapHandlerRan(const std::string& js) const { if (IsTrapHandlerEnabled()) { - const auto* get_fault_count = - "domAutomationController.send(%GetWasmRecoveredTrapCount())"; - int original_count = 0; + const auto* get_fault_count = "%GetWasmRecoveredTrapCount()"; auto* const tab = browser()->tab_strip_model()->GetActiveWebContents(); - ASSERT_TRUE(content::ExecuteScriptAndExtractInt(tab, get_fault_count, - &original_count)); + int original_count = content::EvalJs(tab, get_fault_count).ExtractInt(); ASSERT_NO_FATAL_FAILURE(RunJSTest(js)); - int new_count = 0; - ASSERT_TRUE(content::ExecuteScriptAndExtractInt(tab, get_fault_count, - &new_count)); + int new_count = content::EvalJs(tab, get_fault_count).ExtractInt(); + ASSERT_NO_FATAL_FAILURE(RunJSTest(js)); ASSERT_GT(new_count, original_count); } else { ASSERT_NO_FATAL_FAILURE(RunJSTest(js));
diff --git a/chrome/updater/test/integration_test_commands.h b/chrome/updater/test/integration_test_commands.h index 2049c87..e3f27820 100644 --- a/chrome/updater/test/integration_test_commands.h +++ b/chrome/updater/test/integration_test_commands.h
@@ -64,6 +64,7 @@ virtual void ExpectVersionNotActive(const std::string& version) const = 0; virtual void Uninstall() const = 0; virtual void InstallApp(const std::string& app_id) const = 0; + virtual void ExpectNoCrashes() const = 0; virtual void CopyLog() const = 0; virtual void SetupFakeUpdaterHigherVersion() const = 0; virtual void SetupFakeUpdaterLowerVersion() const = 0;
diff --git a/chrome/updater/test/integration_test_commands_system.cc b/chrome/updater/test/integration_test_commands_system.cc index a5cca0e..dcc338a 100644 --- a/chrome/updater/test/integration_test_commands_system.cc +++ b/chrome/updater/test/integration_test_commands_system.cc
@@ -54,6 +54,10 @@ public: IntegrationTestCommandsSystem() = default; + void ExpectNoCrashes() const override { + updater::test::ExpectNoCrashes(updater_scope_); + } + void PrintLog() const override { RunCommand("print_log"); } void CopyLog() const override {
diff --git a/chrome/updater/test/integration_test_commands_user.cc b/chrome/updater/test/integration_test_commands_user.cc index 70a59de..020fbfd 100644 --- a/chrome/updater/test/integration_test_commands_user.cc +++ b/chrome/updater/test/integration_test_commands_user.cc
@@ -30,6 +30,10 @@ public: IntegrationTestCommandsUser() = default; + void ExpectNoCrashes() const override { + updater::test::ExpectNoCrashes(updater_scope_); + } + void PrintLog() const override { updater::test::PrintLog(updater_scope_); } void CopyLog() const override {
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc index 719c464..3254cdd 100644 --- a/chrome/updater/test/integration_tests.cc +++ b/chrome/updater/test/integration_tests.cc
@@ -125,6 +125,8 @@ if (!HasFailure()) { ExpectClean(); } + ExpectNoCrashes(); + PrintLog(); // TODO(crbug.com/1159189): Use a specific test output directory @@ -139,6 +141,8 @@ Clean(); } + void ExpectNoCrashes() { test_commands_->ExpectNoCrashes(); } + void CopyLog() { test_commands_->CopyLog(); } void PrintLog() { test_commands_->PrintLog(); } @@ -153,6 +157,7 @@ void Uninstall() { ASSERT_TRUE(WaitForUpdaterExit()); + ExpectNoCrashes(); PrintLog(); CopyLog(); test_commands_->Uninstall();
diff --git a/chrome/updater/test/integration_tests_impl.cc b/chrome/updater/test/integration_tests_impl.cc index b3b8abc0..2ff1fa3 100644 --- a/chrome/updater/test/integration_tests_impl.cc +++ b/chrome/updater/test/integration_tests_impl.cc
@@ -446,6 +446,29 @@ } } +void ExpectNoCrashes(UpdaterScope scope) { + absl::optional<base::FilePath> database_path(GetCrashDatabasePath(scope)); + if (!database_path || !base::PathExists(*database_path)) { + return; + } + + base::FilePath dest_dir = GetLogDestinationDir(); + dest_dir = dest_dir.AppendASCII(GetTestName()); + EXPECT_TRUE(base::CreateDirectory(dest_dir)); + + base::FileEnumerator it(*database_path, true, base::FileEnumerator::FILES, + FILE_PATH_LITERAL("*.dmp")); + int count = 0; + for (base::FilePath name = it.Next(); !name.empty(); name = it.Next()) { + VLOG(0) << __func__ << "Copying " << name << " to: " << dest_dir; + EXPECT_TRUE(base::CopyFile(name, dest_dir.Append(name.BaseName()))); + + ++count; + } + + EXPECT_EQ(count, 0) << ": " << count << " crashes found"; +} + void RunWake(UpdaterScope scope, int expected_exit_code) { RunUpdaterWithSwitch(base::Version(kUpdaterVersion), scope, kWakeSwitch, expected_exit_code);
diff --git a/chrome/updater/test/integration_tests_impl.h b/chrome/updater/test/integration_tests_impl.h index 237ce5c..f157d71 100644 --- a/chrome/updater/test/integration_tests_impl.h +++ b/chrome/updater/test/integration_tests_impl.h
@@ -75,6 +75,10 @@ // Sets the external constants for group policies. void SetGroupPolicies(const base::Value::Dict& values); +// Expects to find no crashes. If there are any crashes, causes the test to +// fail. Copies any crashes found to the isolate directory. +void ExpectNoCrashes(UpdaterScope scope); + // Copies the logs to a location where they can be retrieved by ResultDB. void CopyLog(const base::FilePath& src_dir);
diff --git a/chrome/updater/util/util.cc b/chrome/updater/util/util.cc index 0783af2..785794c2 100644 --- a/chrome/updater/util/util.cc +++ b/chrome/updater/util/util.cc
@@ -136,18 +136,18 @@ return path->Append(GetExecutableRelativePath()); } +absl::optional<base::FilePath> GetCrashDatabasePath(UpdaterScope scope) { + const absl::optional<base::FilePath> path( + GetVersionedInstallDirectory(scope)); + return path ? absl::optional<base::FilePath>(path->AppendASCII("Crashpad")) + : absl::nullopt; +} + absl::optional<base::FilePath> EnsureCrashDatabasePath(UpdaterScope scope) { - const absl::optional<base::FilePath> path = - GetVersionedInstallDirectory(scope); - if (!path) { - return absl::nullopt; - } - base::FilePath database_path = path->AppendASCII("Crashpad"); - if (!base::CreateDirectory(database_path)) { - LOG(ERROR) << "Failed to create path to Crashpad database."; - return absl::nullopt; - } - return database_path; + const absl::optional<base::FilePath> database_path( + GetCrashDatabasePath(scope)); + return database_path && base::CreateDirectory(*database_path) ? database_path + : absl::nullopt; } TagParsingResult::TagParsingResult() = default;
diff --git a/chrome/updater/util/util.h b/chrome/updater/util/util.h index 60ab4e6..5f4c03e 100644 --- a/chrome/updater/util/util.h +++ b/chrome/updater/util/util.h
@@ -79,6 +79,10 @@ // "updater.exe" on Win. base::FilePath GetExecutableRelativePath(); +// Returns the path to the crashpad database directory. The directory is not +// created if it does not exist. +absl::optional<base::FilePath> GetCrashDatabasePath(UpdaterScope scope); + // Returns the path to the crashpad database, creating it if it does not exist. absl::optional<base::FilePath> EnsureCrashDatabasePath(UpdaterScope scope);
diff --git a/chrome/updater/util/util_unittest.cc b/chrome/updater/util/util_unittest.cc index 92b44fdc..4236630 100644 --- a/chrome/updater/util/util_unittest.cc +++ b/chrome/updater/util/util_unittest.cc
@@ -19,6 +19,7 @@ #include "base/test/task_environment.h" #include "chrome/updater/constants.h" #include "chrome/updater/tag.h" +#include "chrome/updater/test_scope.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -85,4 +86,12 @@ "%7B%22homepage%22%3A%22http%3A%2F%2Fwww.google.com%"); } +TEST(Util, GetCrashDatabasePath) { + absl::optional<base::FilePath> crash_database_path( + GetCrashDatabasePath(GetTestScope())); + ASSERT_TRUE(crash_database_path); + EXPECT_EQ(crash_database_path->BaseName().value(), + FILE_PATH_LITERAL("Crashpad")); +} + } // namespace updater
diff --git a/chromecast/browser/cast_network_contexts.cc b/chromecast/browser/cast_network_contexts.cc index ec3c2e5d..fbbde7e 100644 --- a/chromecast/browser/cast_network_contexts.cc +++ b/chromecast/browser/cast_network_contexts.cc
@@ -20,7 +20,7 @@ #include "components/proxy_config/pref_proxy_config_tracker_impl.h" #include "components/variations/net/variations_http_headers.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
diff --git a/chromeos/ash/services/assistant/assistant_manager_service_impl_unittest.cc b/chromeos/ash/services/assistant/assistant_manager_service_impl_unittest.cc index b13a45df..2c5403b6 100644 --- a/chromeos/ash/services/assistant/assistant_manager_service_impl_unittest.cc +++ b/chromeos/ash/services/assistant/assistant_manager_service_impl_unittest.cc
@@ -188,10 +188,6 @@ FullyInitializedAssistantState& assistant_state() { return assistant_state_; } - void SetAssistantStateContext(bool enabled) { - assistant_state_.SetContextEnabled(enabled); - } - FakeServiceContext* fake_service_context() { return service_context_.get(); } base::test::TaskEnvironment& task_environment() { return task_environment_; } @@ -759,17 +755,4 @@ EXPECT_TRUE(mojom_service_controller().dark_mode_enabled().value()); } -TEST_F(AssistantManagerServiceImplTest, ShouldNotCrashRunningAfterStopped) { - Start(); - SetAssistantStateContext(/*enabled=*/false); - WaitForState(AssistantManagerService::STARTED); - - // http://crbug.com/1414264: calling Stop() before Running is set, should not - // crash. - assistant_manager_service()->Stop(); - mojom_service_controller().SetState(ServiceState::kRunning); - WaitForState(AssistantManagerService::RUNNING); - RunUntilIdle(); -} - } // namespace ash::assistant
diff --git a/chromeos/ash/services/assistant/media_host.cc b/chromeos/ash/services/assistant/media_host.cc index 8ad3168..f4e8310 100644 --- a/chromeos/ash/services/assistant/media_host.cc +++ b/chromeos/ash/services/assistant/media_host.cc
@@ -237,17 +237,11 @@ } void MediaHost::ResumeInternalMediaPlayer() { - if (!libassistant_media_controller_) { - return; - } - libassistant_media_controller_->ResumeInternalMediaPlayer(); + libassistant_media_controller().ResumeInternalMediaPlayer(); } void MediaHost::PauseInternalMediaPlayer() { - if (!libassistant_media_controller_) { - return; - } - libassistant_media_controller_->PauseInternalMediaPlayer(); + libassistant_media_controller().PauseInternalMediaPlayer(); } void MediaHost::SetRelatedInfoEnabled(bool enable) { @@ -259,6 +253,13 @@ } } +libassistant::mojom::MediaController& +MediaHost::libassistant_media_controller() { + // Initialize must be called first. + DCHECK(libassistant_media_controller_); + return *libassistant_media_controller_; +} + void MediaHost::UpdateMediaState( const base::UnguessableToken& media_session_id, libassistant::mojom::MediaStatePtr media_state) { @@ -270,18 +271,12 @@ return; } - if (!libassistant_media_controller_) { - return; - } - libassistant_media_controller_->SetExternalPlaybackState( + libassistant_media_controller().SetExternalPlaybackState( std::move(media_state)); } void MediaHost::ResetMediaState() { - if (!libassistant_media_controller_) { - return; - } - libassistant_media_controller_->SetExternalPlaybackState( + libassistant_media_controller().SetExternalPlaybackState( libassistant::mojom::MediaState::New()); }
diff --git a/chromeos/ash/services/assistant/media_host.h b/chromeos/ash/services/assistant/media_host.h index 7c84023..02faae02 100644 --- a/chromeos/ash/services/assistant/media_host.h +++ b/chromeos/ash/services/assistant/media_host.h
@@ -56,6 +56,8 @@ class LibassistantMediaDelegate; class ChromeosMediaStateObserver; + libassistant::mojom::MediaController& libassistant_media_controller(); + void UpdateMediaState(const base::UnguessableToken& media_session_id, libassistant::mojom::MediaStatePtr media_state); void ResetMediaState();
diff --git a/chromeos/ash/services/assistant/test_support/fully_initialized_assistant_state.cc b/chromeos/ash/services/assistant/test_support/fully_initialized_assistant_state.cc index 1df9168..04f2c30 100644 --- a/chromeos/ash/services/assistant/test_support/fully_initialized_assistant_state.cc +++ b/chromeos/ash/services/assistant/test_support/fully_initialized_assistant_state.cc
@@ -17,10 +17,6 @@ observer.OnAssistantSettingsEnabled(settings_enabled_.value()); } -void FullyInitializedAssistantState::SetContextEnabled(bool enabled) { - context_enabled_ = enabled; -} - void FullyInitializedAssistantState::InitializeAllValues() { settings_enabled_ = true; consent_status_ = prefs::ConsentStatus::kActivityControlAccepted;
diff --git a/chromeos/ash/services/assistant/test_support/fully_initialized_assistant_state.h b/chromeos/ash/services/assistant/test_support/fully_initialized_assistant_state.h index c14400e..0fb499bf 100644 --- a/chromeos/ash/services/assistant/test_support/fully_initialized_assistant_state.h +++ b/chromeos/ash/services/assistant/test_support/fully_initialized_assistant_state.h
@@ -24,8 +24,6 @@ void SetAssistantEnabled(bool enabled); - void SetContextEnabled(bool enabled); - private: void InitializeAllValues(); };
diff --git a/chromeos/lacros/lacros_service.cc b/chromeos/lacros/lacros_service.cc index be6627b..735bf152 100644 --- a/chromeos/lacros/lacros_service.cc +++ b/chromeos/lacros/lacros_service.cc
@@ -90,6 +90,7 @@ #include "chromeos/crosapi/mojom/speech_recognition.mojom.h" #include "chromeos/crosapi/mojom/sync.mojom.h" #include "chromeos/crosapi/mojom/task_manager.mojom.h" +#include "chromeos/crosapi/mojom/telemetry_event_service.mojom.h" #include "chromeos/crosapi/mojom/test_controller.mojom.h" #include "chromeos/crosapi/mojom/timezone.mojom.h" #include "chromeos/crosapi/mojom/tts.mojom.h" @@ -491,6 +492,10 @@ &crosapi::mojom::Crosapi::BindTaskManager, Crosapi::MethodMinVersions::kBindTaskManagerMinVersion>(); ConstructRemote< + crosapi::mojom::TelemetryEventService, + &Crosapi::BindTelemetryEventService, + Crosapi::MethodMinVersions::kBindTelemetryEventServiceMinVersion>(); + ConstructRemote< crosapi::mojom::TelemetryProbeService, &crosapi::mojom::Crosapi::BindTelemetryProbeService, Crosapi::MethodMinVersions::kBindTelemetryProbeServiceMinVersion>();
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb index f41b6a42..62936241 100644 --- a/chromeos/strings/chromeos_strings_fa.xtb +++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -396,7 +396,7 @@ <translation id="4521826082652183069">مطابقت نام جایگزین موضوع</translation> <translation id="4522570452068850558">جزئیات</translation> <translation id="4536864596629708641">پیکربندی IP</translation> -<translation id="4546131424594385779">ساخت ویدیوی تکرارشونده</translation> +<translation id="4546131424594385779">ساخت ویدیو تکرارشونده</translation> <translation id="4548483925627140043">سیگنال پیدا نشد</translation> <translation id="4556753742174065117">همه سفتافزار بهروز است</translation> <translation id="455835558791489930">باتری <ph name="CHARGE_VALUE" /> میلیآمپرساعت</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb index c0f56c3..d980b06 100644 --- a/chromeos/strings/chromeos_strings_lo.xtb +++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -140,6 +140,7 @@ <translation id="2056550196601855911">IPv4/IPv6</translation> <translation id="2080070583977670716">ການຕັ້ງຄ່າເພີ່ມເຕີມ</translation> <translation id="2085089206770112532">ຫຼຸດຄວາມສະຫວ່າງການສະແດງຜົນ</translation> +<translation id="209751264101900360">ຮຸ່ງອາລຸນຫາຄວາມມືດ - Cloud Flow</translation> <translation id="2102231663024125441">ການແກ້ໄຂຂໍ້ຄວາມ</translation> <translation id="2105810540595158374">ອຸປະກອນແມ່ນມືເກມ.</translation> <translation id="2119172414412204879"><ph name="BOARD_NAME" />, ເວີຊັນ <ph name="MILESTONE_VERSION" /></translation> @@ -370,6 +371,7 @@ <translation id="4275663329226226506">ມີເດຍ</translation> <translation id="4289540628985791613">ພາບລວມ</translation> <translation id="4289849978083912975">ສະໄລ້ໂຊ</translation> +<translation id="4293621540182258188">ຮຸ່ງອາລຸນຫາຄວາມມືດ - Earth Flow</translation> <translation id="4297501883039923494">ຢຸດພິມ, ບໍ່ຮູ້ຈັກຂໍ້ຜິດພາດ</translation> <translation id="4300073214558989"><ph name="IMAGE_COUNT" /> ຮູບ</translation> <translation id="4311195029067684288">ເຕັມ</translation> @@ -544,6 +546,7 @@ <translation id="576835345334454681">ເພີ່ມຄວາມສະຫວ່າງການສະແດງຜົນ</translation> <translation id="57838592816432529">ປິດສຽງ</translation> <translation id="5784136236926853061">ການຕອບສະໜອງ HTTP ສູງ</translation> +<translation id="5809090008577139505">ແສງອາລຸນ</translation> <translation id="5826644637650799838">ກ່ຽວກັບສິນລະປະ</translation> <translation id="5832805196449965646">ເພີ່ມບຸກຄົນ</translation> <translation id="583281660410589416">ບໍ່ຮູ້ຈັກ</translation> @@ -562,6 +565,7 @@ <translation id="5907649332524363701">ສີຂອງປຸ່ມ</translation> <translation id="5916084858004523819">ຫ້າມໃຊ້</translation> <translation id="5916664084637901428">ເປີດ</translation> +<translation id="5918201491776799918">ເລືອກໜ້າປົກ Chromebook Plus ສຸດພິເສດ</translation> <translation id="5921506667911082617">{COUNT,plural, =1{ສະແກນ ແລະ ບັນທຶກໄຟລ໌ຂອງທ່ານໄວ້ໃນ <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> ແລ້ວ.}other{ສະແກນ ແລະ ບັນທຶກໄຟລ໌ຂອງທ່ານໄວ້ໃນ <ph name="LINK_BEGIN" /><ph name="FOLDER_NAME" /><ph name="LINK_END" /> ແລ້ວ.}}</translation> <translation id="5931523347251946569">ບໍ່ພົບໄຟລ໌</translation> <translation id="5939518447894949180">ຕັ້ງຄ່າຄືນໃໝ່</translation> @@ -819,6 +823,7 @@ <translation id="8138405288920084977">LTEAdvanced</translation> <translation id="8143951647992294073">ເລືອກ <ph name="TOPIC_SOURCE" /> <ph name="TOPIC_SOURCE_DESC" /></translation> <translation id="8151185429379586178">ເຄື່ອງມືຜູ້ພັດທະນາ</translation> +<translation id="8153923300383192510">Chromebook Plus ສຸດພິເສດ</translation> <translation id="8179976553408161302">ປ້ອນເຂົ້າ</translation> <translation id="8183974620058026102">ແນບໄຟລ໌</translation> <translation id="8206859287963243715">ເຊວລູລາ</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb index 309af6e1..0e2ec66 100644 --- a/chromeos/strings/chromeos_strings_ru.xtb +++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -777,7 +777,7 @@ <translation id="7791543448312431591">Добавить</translation> <translation id="779591286616261875">Отправить новый отзыв</translation> <translation id="7799817062559422778">Светлая тема</translation> -<translation id="780301667611848630">Пропустить</translation> +<translation id="780301667611848630">Нет, спасибо</translation> <translation id="7805768142964895445">Состояние</translation> <translation id="7819857487979277519">PSK (WPA или RSN)</translation> <translation id="7841134249932030522">Использовать тёмную тему</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb index b2c98968..494f558 100644 --- a/chromeos/strings/chromeos_strings_tr.xtb +++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -870,7 +870,7 @@ <translation id="8675354002693747642">Önceden paylaşılan anahtar</translation> <translation id="8677859815076891398">Albüm yok. <ph name="LINK_BEGIN" />Google Fotoğraflar<ph name="LINK_END" />'da albüm oluşturun.</translation> <translation id="8709616837707653427"><ph name="DESC_TEXT" /> Bu özelliği yönetmek için sol veya sağ ok tuşlarını kullanın.</translation> -<translation id="8712637175834984815">Anlaşıldı</translation> +<translation id="8712637175834984815">Anladım</translation> <translation id="871560550817059752">İşlem başarısız - Mürekkep yok</translation> <translation id="8723108084122415655">Varsayılan olmayan ağ, gecikme eşiğini aştı</translation> <translation id="8725066075913043281">Yeniden dene</translation>
diff --git a/components/autofill/android/java/res/values/dimens.xml b/components/autofill/android/java/res/values/dimens.xml index e1181632..7101038 100644 --- a/components/autofill/android/java/res/values/dimens.xml +++ b/components/autofill/android/java/res/values/dimens.xml
@@ -61,4 +61,5 @@ <!-- Card art --> <dimen name="card_art_corner_radius">3dp</dimen> + <dimen name="keyboard_accessory_card_art_corner_radius">2dp</dimen> </resources>
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc index 3de0a8d..abe4533 100644 --- a/components/autofill/content/renderer/form_autofill_util.cc +++ b/components/autofill/content/renderer/form_autofill_util.cc
@@ -129,9 +129,11 @@ FILTER_NON_FOCUSABLE_ELEMENTS, }; -void TruncateString(std::u16string* str, size_t max_length) { - if (str->length() > max_length) - str->resize(max_length); +std::u16string TruncateString(std::u16string str, size_t max_length) { + if (str.length() > max_length) { + str.resize(max_length); + } + return str; } bool IsOptionElement(const WebElement& element) { @@ -414,10 +416,12 @@ ButtonTitleType button_type, ButtonTitleList* list) { title = base::CollapseWhitespace(std::move(title), false); - if (title.empty()) + if (title.empty()) { return; - TruncateString(&title, kMaxLengthForSingleButtonTitle); - list->push_back(std::make_pair(std::move(title), button_type)); + } + list->emplace_back( + TruncateString(std::move(title), kMaxLengthForSingleButtonTitle), + button_type); } // Returns true iff |attribute| contains one of |kButtonFeatures|. @@ -869,12 +873,13 @@ if (total_length > kMaxLengthForAllButtonTitles) { int new_length = title.first.length() - (total_length - kMaxLengthForAllButtonTitles); - TruncateString(&title.first, new_length); + title.first = TruncateString(std::move(title.first), new_length); } unique_titles.push_back(std::move(title)); - if (total_length >= kMaxLengthForAllButtonTitles) + if (total_length >= kMaxLengthForAllButtonTitles) { break; + } } *result = std::move(unique_titles); } @@ -991,8 +996,10 @@ for (const auto& option_element : option_elements) { if (IsOptionElement(option_element)) { const WebOptionElement option = option_element.To<WebOptionElement>(); - options->push_back({.value = option.Value().Utf16(), - .content = option.GetText().Utf16()}); + options->push_back( + {.value = TruncateString(option.Value().Utf16(), kMaxStringLength), + .content = + TruncateString(option.GetText().Utf16(), kMaxStringLength)}); } } } @@ -1262,7 +1269,7 @@ if (IsTextInput(input_element) || IsMonthInput(input_element)) { // If the maxlength attribute contains a negative value, maxLength() // returns the default maxlength value. - TruncateString(&value, input_element.MaxLength()); + value = TruncateString(std::move(value), input_element.MaxLength()); } field->SetAutofillValue(blink::WebString::FromUTF16(value), WebAutofillState::kAutofilled); @@ -1720,7 +1727,7 @@ // it is set to kUnknown. base::UmaHistogramEnumeration("Autofill.LabelInference.InferredLabelSource", field.label_source); - TruncateString(&field.label, kMaxStringLength); + field.label = TruncateString(std::move(field.label), kMaxStringLength); if (optional_field && *form_control_element == control_element) { *optional_field = field; @@ -2333,9 +2340,7 @@ // Constrain the maximum data length to prevent a malicious site from DOS'ing // the browser: http://crbug.com/49332 - TruncateString(&value, kMaxStringLength); - - field->value = value; + field->value = TruncateString(std::move(value), kMaxStringLength); // If the field was autofilled or the user typed into it, check the value // stored in |field_data_manager| against the value property of the DOM @@ -2352,7 +2357,7 @@ // The typed value is preserved for all passwords. It is also preserved for // potential usernames, as long as the |value| is not deemed acceptable. if (field->form_control_type == "password" || - !ScriptModifiedUsernameAcceptable(value, user_input, + !ScriptModifiedUsernameAcceptable(field->value, user_input, field_data_manager)) { field->user_input = user_input; }
diff --git a/components/autofill/content/renderer/form_autofill_util_browsertest.cc b/components/autofill/content/renderer/form_autofill_util_browsertest.cc index 6983516..2c05a9af 100644 --- a/components/autofill/content/renderer/form_autofill_util_browsertest.cc +++ b/components/autofill/content/renderer/form_autofill_util_browsertest.cc
@@ -11,6 +11,8 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" #include "components/autofill/content/renderer/test_utils.h" +#include "components/autofill/core/common/autofill_constants.h" +#include "components/autofill/core/common/autofill_data_validation.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/field_data_manager.h" #include "components/autofill/core/common/mojom/autofill_types.mojom-shared.h" @@ -112,6 +114,37 @@ base::test::ScopedFeatureList scoped_feature_list_; }; +// Tests that large option values/contents are truncated while building the +// FormData. +TEST_F(FormAutofillUtilsTest, TruncateLargeOptionValuesAndContents) { + std::string huge_option(kMaxStringLength + 10, 'a'); + std::u16string trimmed_option(kMaxStringLength, 'a'); + + LoadHTML(base::StringPrintf(R"( + <form id='form'> + <select name='form_select' id='form_select'> + <option value='%s'>%s</option> + </select> + </form> + )", + huge_option.c_str(), huge_option.c_str()) + .c_str()); + + WebDocument doc = GetMainFrame()->GetDocument(); + auto web_form = GetFormElementById(doc, "form"); + + FormData form_data; + ASSERT_TRUE(WebFormElementToFormData( + web_form, WebFormControlElement(), /*field_data_manager=*/nullptr, + EXTRACT_OPTIONS, &form_data, /*field=*/nullptr)); + + ASSERT_EQ(form_data.fields.size(), 1u); + ASSERT_EQ(form_data.fields[0].options.size(), 1u); + EXPECT_EQ(form_data.fields[0].options[0].value, trimmed_option); + EXPECT_EQ(form_data.fields[0].options[0].content, trimmed_option); + EXPECT_TRUE(IsValidOption(form_data.fields[0].options[0])); +} + TEST_F(FormAutofillUtilsTest, FindChildTextTest) { static const AutofillFieldUtilCase test_cases[] = { {"simple test", "<div id='target'>test</div>", u"test"},
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index 7a60dd8..6c30f486 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -1525,7 +1525,10 @@ // elements' SuggestedValue(), which Touch To Fill does not set. auto focused_input_element = autofill_agent_->focused_element().DynamicTo<WebInputElement>(); - CHECK(!focused_input_element.IsNull()); + if (focused_input_element.IsNull()) { + return; + } + WebInputElement username_element; WebInputElement password_element; PasswordInfo* password_info = nullptr;
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn index d967abfe..b95a6dfb 100644 --- a/components/autofill/core/browser/BUILD.gn +++ b/components/autofill/core/browser/BUILD.gn
@@ -261,6 +261,8 @@ "metrics/autofill_metrics.h", "metrics/autofill_metrics_utils.cc", "metrics/autofill_metrics_utils.h", + "metrics/converge_to_extreme_length_address_metrics.cc", + "metrics/converge_to_extreme_length_address_metrics.h", "metrics/form_events/address_form_event_logger.cc", "metrics/form_events/address_form_event_logger.h", "metrics/form_events/credit_card_form_event_logger.cc", @@ -914,6 +916,7 @@ "manual_testing_profile_import_unittest.cc", "merchant_promo_code_manager_unittest.cc", "metrics/autofill_metrics_unittest.cc", + "metrics/converge_to_extreme_length_address_metrics_unittest.cc", "metrics/form_events/address_form_event_logger_unittest.cc", "metrics/form_events/form_event_logger_base_unittest.cc", "metrics/payments/card_metadata_metrics_unittest.cc",
diff --git a/components/autofill/core/browser/browser_autofill_manager_unittest.cc b/components/autofill/core/browser/browser_autofill_manager_unittest.cc index 32e9d161..91aaf1e 100644 --- a/components/autofill/core/browser/browser_autofill_manager_unittest.cc +++ b/components/autofill/core/browser/browser_autofill_manager_unittest.cc
@@ -8587,39 +8587,6 @@ } } -// Tests that a form with <select> field is accepted if <option> value (not -// content) is quite long. Some websites use value to propagate long JSON to -// JS-backed logic. -TEST_F(BrowserAutofillManagerTest, FormWithLongOptionValuesIsAcceptable) { - FormData form; - form.name = u"MyForm"; - form.url = GURL("https://myform.com/form.html"); - form.action = GURL("https://myform.com/submit.html"); - - FormFieldData field; - test::CreateTestFormField("First name", "firstname", "", "text", &field); - form.fields.push_back(field); - test::CreateTestFormField("Last name", "lastname", "", "text", &field); - form.fields.push_back(field); - - // Prepare <select> field with long <option> values. - const size_t kOptionValueLength = 10240; - const std::string long_string(kOptionValueLength, 'a'); - const std::vector<const char*> values(3, long_string.c_str()); - const std::vector<const char*> contents{"A", "B", "C"}; - test::CreateTestSelectField("Country", "country", "", values, contents, - &field); - form.fields.push_back(field); - - FormsSeen({form}); - - // Suggestions should be displayed. - for (const FormFieldData& form_field : form.fields) { - GetAutofillSuggestions(form, form_field); - EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen()); - } -} - // Test that is_all_server_suggestions is true if there are only // full_server_card and masked_server_card on file. TEST_F(BrowserAutofillManagerTest,
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address.cc b/components/autofill/core/browser/data_model/autofill_structured_address.cc index 2c200806..9153e9c4 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address.cc
@@ -15,6 +15,7 @@ #include "components/autofill/core/browser/data_model/autofill_structured_address_utils.h" #include "components/autofill/core/browser/field_types.h" #include "components/autofill/core/browser/geo/alternative_state_name_map.h" +#include "components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics.h" #include "components/autofill/core/common/autofill_features.h" namespace autofill { @@ -117,12 +118,13 @@ } } -bool StreetAddressNode::HasNewerValuePrecendenceInMerging( +bool StreetAddressNode::HasNewerValuePrecedenceInMerging( const AddressComponent& newer_component) const { // If the newer component has a better verification status, use the newer one. if (IsLessSignificantVerificationStatus( - GetVerificationStatus(), newer_component.GetVerificationStatus())) + GetVerificationStatus(), newer_component.GetVerificationStatus())) { return true; + } // If the verification statuses are the same, do not use the newer component // if the older one has new lines but the newer one doesn't. @@ -131,7 +133,28 @@ newer_component.GetValue().find('\n') == std::u16string::npos) { return false; } - return true; + const int old_length = GetValue().size(); + const int new_length = newer_component.GetValue().size(); + // By default, we prefer the newer street address over the old one in case + // of a tie between verification statuses. + if (!base::FeatureList::IsEnabled( + features::kAutofillConvergeToExtremeLengthStreetAddress)) { + return true; + } + // If street lengths are equal, prefer the old value. This is to avoid + // constantly asking the user to update his profile just for formatting + // purposes, which can negatively impact the Autofill experience. + if (old_length == new_length) { + return false; + } + // Otherwise, prefer the longer or shorter street address depending on the + // feature `kAutofillConvergeToExtremeLengthStreetAddress` parameterization. + const bool has_newer_value_precedence = + features::kAutofillConvergeToLonger.Get() ? old_length < new_length + : old_length > new_length; + autofill_metrics::LogAddressUpdateLengthConvergenceStatus( + has_newer_value_precedence); + return has_newer_value_precedence; } return false; }
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address.h b/components/autofill/core/browser/data_model/autofill_structured_address.h index 3802324..35caff3 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address.h
@@ -115,7 +115,7 @@ // Gives the component with the higher verification status precedence. // If the statuses are the same, the older component gets precedence if it // contains newlines but the newer one does not. - bool HasNewerValuePrecendenceInMerging( + bool HasNewerValuePrecedenceInMerging( const AddressComponent& newer_component) const override; std::vector<const re2::RE2*> GetParseRegularExpressionsByRelevance()
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_component.cc b/components/autofill/core/browser/data_model/autofill_structured_address_component.cc index db8bfc3..ebca70921 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_component.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_component.cc
@@ -790,7 +790,7 @@ void AddressComponent::MergeVerificationStatuses( const AddressComponent& newer_component) { if (IsValueAssigned() && (GetValue() == newer_component.GetValue()) && - HasNewerValuePrecendenceInMerging(newer_component)) { + HasNewerValuePrecedenceInMerging(newer_component)) { value_verification_status_ = newer_component.GetVerificationStatus(); } @@ -957,7 +957,7 @@ // If the normalized values are the same, optimize the verification status. if ((merge_mode_ & kUseBetterOrNewerForSameValue) && (value == value_newer)) { - if (HasNewerValuePrecendenceInMerging(newer_component)) { + if (HasNewerValuePrecedenceInMerging(newer_component)) { CopyFrom(newer_component); } return true; @@ -1071,9 +1071,9 @@ if (this_has_canonical_value != newer_has_canonical_value && (comparison_values_are_substrings_of_each_other || token_comparison_result.ContainEachOther())) { - // Copy the new component if it has a canoniscalized name and a status - // that is not worse of it if has a better status even if it is not - // canoniscalized. + // Copy the new component if it has a canonicalized name and a status + // that is not worse or if it has a better status even if it is not + // canonicalized. if ((!this_has_canonical_value && newer_component_has_better_or_equal_status) || (this_has_canonical_value && newer_component_has_better_status)) { @@ -1094,7 +1094,7 @@ } if (merge_mode_ & kUseBetterOrMostRecentIfDifferent) { - if (HasNewerValuePrecendenceInMerging(newer_component)) { + if (HasNewerValuePrecedenceInMerging(newer_component)) { SetValue(newer_component.GetValue(), newer_component.GetVerificationStatus()); } @@ -1115,7 +1115,7 @@ // component with the better verification status, or if both are the same, // use the newer one. if (token_comparison_result.TokensMatch()) { - if (HasNewerValuePrecendenceInMerging(newer_component)) { + if (HasNewerValuePrecedenceInMerging(newer_component)) { SetValue(newer_component.GetValue(), newer_component.GetVerificationStatus()); } @@ -1145,8 +1145,10 @@ return false; } -bool AddressComponent::HasNewerValuePrecendenceInMerging( +bool AddressComponent::HasNewerValuePrecedenceInMerging( const AddressComponent& newer_component) const { + // In case of equality of verification statuses, the newer component gets + // precedence over the old one. return !IsLessSignificantVerificationStatus( newer_component.GetVerificationStatus(), GetVerificationStatus()); } @@ -1162,7 +1164,7 @@ // Assumption: // The values of both components are a permutation of the same tokens. // The componentization of the components can be different in terms of - // how the tokens are divided between the subomponents. The valdiation + // how the tokens are divided between the subcomponents. The validation // status of the component and its subcomponent can be different. // // Merge Strategy: @@ -1180,7 +1182,7 @@ newer_component.Subcomponents(); DCHECK(subcomponents_.size() == other_subcomponents.size()); - if (HasNewerValuePrecendenceInMerging(newer_component)) { + if (HasNewerValuePrecedenceInMerging(newer_component)) { SetValue(newer_component.GetValue(), newer_component.GetVerificationStatus()); } @@ -1234,7 +1236,7 @@ DCHECK(subcomponents_[i]->GetStorageType() == other_subcomponents.at(i)->GetStorageType()); - // If the components can't be merged directly, store the ungermed index and + // If the components can't be merged directly, store the unmerged index and // sum the verification scores to decide which component's substructure to // use. if (!subcomponents_[i]->MergeTokenEquivalentComponent(
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_component.h b/components/autofill/core/browser/data_model/autofill_structured_address_component.h index 8946a343..b96c9a6 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_component.h +++ b/components/autofill/core/browser/data_model/autofill_structured_address_component.h
@@ -522,9 +522,8 @@ const AddressComponent& other) const; // Returns true if the merging of two token identical values should give - // precedence to the newer value. By default, the newer component gets - // precedence if it has the same or better verification status. - virtual bool HasNewerValuePrecendenceInMerging( + // precedence to the newer value. + virtual bool HasNewerValuePrecedenceInMerging( const AddressComponent& newer_component) const; // Parses |value| by using |parse_expressions| and assigns the values.
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_unittest.cc b/components/autofill/core/browser/data_model/autofill_structured_address_unittest.cc index 5697d36d..1cb554a3 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_unittest.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_unittest.cc
@@ -6,6 +6,7 @@ #include <stddef.h> #include <map> +#include <memory> #include <ostream> #include <string> #include <vector> @@ -13,6 +14,7 @@ #include "base/feature_list.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" +#include "components/autofill/core/browser/data_model/autofill_structured_address_component.h" #include "components/autofill/core/browser/data_model/autofill_structured_address_test_utils.h" #include "components/autofill/core/browser/data_model/autofill_structured_address_utils.h" #include "components/autofill/core/browser/geo/alternative_state_name_map.h" @@ -641,6 +643,157 @@ EXPECT_EQ(country2.GetCommonCountryForMerge(country1), u""); } +struct HasNewerStreetAddressPrecedenceInMergingTestCase { + // State and parameterization of feature + // `kAutofillConvergeToExtremeLengthStreetAddress`. + enum class FeatureState { + kDisabled = 0, + kShorter = 1, + kLonger = 2 + } feature_state; + std::u16string old_street_address_name, new_street_address_name; + VerificationStatus old_street_address_status, new_street_address_status; + bool expect_newer_precedence; +}; + +class HasNewerStreetAddressPrecedenceInMergingTest + : public testing::TestWithParam< + HasNewerStreetAddressPrecedenceInMergingTestCase> { + public: + HasNewerStreetAddressPrecedenceInMergingTest() { + using TestFeatureState = + HasNewerStreetAddressPrecedenceInMergingTestCase::FeatureState; + HasNewerStreetAddressPrecedenceInMergingTestCase test_case = GetParam(); + if (test_case.feature_state != TestFeatureState::kDisabled) { + scoped_feature_list_.InitAndEnableFeatureWithParameters( + features::kAutofillConvergeToExtremeLengthStreetAddress, + {{features::kAutofillConvergeToLonger.name, + test_case.feature_state == TestFeatureState::kLonger ? "true" + : "false"}}); + } else { + scoped_feature_list_.InitAndDisableFeature( + features::kAutofillConvergeToExtremeLengthStreetAddress); + } + country_code_ = std::make_unique<CountryCodeNode>(nullptr); + country_code_->SetValue(u"US", VerificationStatus::kParsed); + } + + protected: + base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr<CountryCodeNode> country_code_; +}; + +// Tests the logging of which street name (old or new) was chosen during merging +// when the feature `kAutofillConvergeToExtremeLengthStreetAddress` is enabled. +TEST_P(HasNewerStreetAddressPrecedenceInMergingTest, + HasNewerStreetAddressPrecedenceInMergingTestCase) { + HasNewerStreetAddressPrecedenceInMergingTestCase test_case = GetParam(); + StreetAddressNode old_street(country_code_.get()); + StreetAddressNode new_street(country_code_.get()); + old_street.SetValue(test_case.old_street_address_name, + test_case.old_street_address_status); + new_street.SetValue(test_case.new_street_address_name, + test_case.new_street_address_status); + + old_street.MergeWithComponent(new_street); + EXPECT_EQ(old_street.GetValue() == new_street.GetValue(), + test_case.expect_newer_precedence); +} + +INSTANTIATE_TEST_SUITE_P( + StreetAddressConvergenceTest, + HasNewerStreetAddressPrecedenceInMergingTest, + testing::Values( + // When the feature is disabled, always prefer the newer value. + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kDisabled, + .old_street_address_name = u"205 Main Street", + .new_street_address_name = u"205 Main St", + .old_street_address_status = VerificationStatus::kParsed, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = true}, + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kDisabled, + .old_street_address_name = u"205 Main St", + .new_street_address_name = u"205 Main Street", + .old_street_address_status = VerificationStatus::kParsed, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = true}, + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kDisabled, + .old_street_address_name = u"205 Main St", + .new_street_address_name = u"205 Main Street", + .old_street_address_status = VerificationStatus::kUserVerified, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = false}, + // Converge to longer --> prefer the new one. + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kLonger, + .old_street_address_name = u"205 Main St", + .new_street_address_name = u"205 Main Street", + .old_street_address_status = VerificationStatus::kParsed, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = true}, + // Converge to longer --> prefer the old one. + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kLonger, + .old_street_address_name = u"205 Main Street", + .new_street_address_name = u"205 Main St", + .old_street_address_status = VerificationStatus::kParsed, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = false}, + // Converge to longer, but prefer the new one, having better status. + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kLonger, + .old_street_address_name = u"205 Main Street", + .new_street_address_name = u"205 Main St", + .old_street_address_status = VerificationStatus::kParsed, + .new_street_address_status = VerificationStatus::kUserVerified, + .expect_newer_precedence = true}, + // Converge to shorter --> prefer the new one. + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kShorter, + .old_street_address_name = u"205 Main Street", + .new_street_address_name = u"205 Main St", + .old_street_address_status = VerificationStatus::kParsed, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = true}, + // Converge to shorter --> prefer the old one. + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kShorter, + .old_street_address_name = u"205 Main St", + .new_street_address_name = u"205 Main Street", + .old_street_address_status = VerificationStatus::kParsed, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = false}, + // Converge to shorter, but prefer the old one, having better status. + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kShorter, + .old_street_address_name = u"205 Main Street", + .new_street_address_name = u"205 Main St", + .old_street_address_status = VerificationStatus::kUserVerified, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = false}, + // Equivalent post rewriting, same status, same length --> prefer the + // old one. + HasNewerStreetAddressPrecedenceInMergingTestCase{ + .feature_state = HasNewerStreetAddressPrecedenceInMergingTestCase:: + FeatureState::kShorter, + .old_street_address_name = u"205 Main Street Av", + .new_street_address_name = u"205 Main St Avenue", + .old_street_address_status = VerificationStatus::kParsed, + .new_street_address_status = VerificationStatus::kParsed, + .expect_newer_precedence = false})); + struct MergeStatesWithCanonicalNamesTestCase { std::string older_state; VerificationStatus older_status;
diff --git a/components/autofill/core/browser/manual_testing_profile_import.cc b/components/autofill/core/browser/manual_testing_profile_import.cc index 06b724ed..bbab26ec 100644 --- a/components/autofill/core/browser/manual_testing_profile_import.cc +++ b/components/autofill/core/browser/manual_testing_profile_import.cc
@@ -67,8 +67,8 @@ // Extracts the `kKeySource` value of the `dict` and translates it into an // AutofillProfile::Source. If no source is present, Source::kLocalOrSyncable is // returned. If a source with invalid value is specified, an error message is -// returned. -base::expected<AutofillProfile::Source, std::string> GetProfileSourceFromDict( +// logged and absl::nullopt is returned. +absl::optional<AutofillProfile::Source> GetProfileSourceFromDict( const base::Value::Dict& dict) { if (!dict.contains(kKeySource)) { return AutofillProfile::Source::kLocalOrSyncable; @@ -79,7 +79,8 @@ return it->second; } } - return base::unexpected(base::StrCat({"Invalid ", kKeySource, " value"})); + LOG(ERROR) << "Invalid " << kKeySource << " value."; + return absl::nullopt; } // Given a `dict` of "field-type" : "value" mappings, constructs an @@ -87,14 +88,14 @@ // "field-type"s are converted to ServerFieldTypes using the `lookup_table`. // All verification statuses are set to `kUserVerified`. // If a field type cannot be mapped, or if the resulting profile is not -// `IsFullyStructuredProfile()`, nullopt is returned. -base::expected<AutofillProfile, std::string> MakeProfile( +// `IsFullyStructuredProfile()`, absl::nullopt is returned. +absl::optional<AutofillProfile> MakeProfile( const base::Value::Dict& dict, const FieldTypeLookupTable& lookup_table) { - base::expected<AutofillProfile::Source, std::string> source = + absl::optional<AutofillProfile::Source> source = GetProfileSourceFromDict(dict); if (!source.has_value()) { - return base::unexpected(source.error()); + return absl::nullopt; } AutofillProfile profile(*source); // `dict` is a dictionary of std::string -> base::Value. @@ -103,38 +104,41 @@ continue; } if (!lookup_table.contains(key)) { - return base::unexpected("Unknown type " + key); + LOG(ERROR) << "Unknown type " << key << "."; + return absl::nullopt; } profile.SetRawInfoWithVerificationStatus( lookup_table.at(key), base::UTF8ToUTF16(value.GetString()), VerificationStatus::kUserVerified); } if (!IsFullyStructuredProfile(profile)) { - return base::unexpected("Not a fully structured profile"); + LOG(ERROR) << "Some profile is not fully structured."; + return absl::nullopt; } return profile; } // Reads the contents of `file`, parses it as a JSON file and converts its // content into AutofillProfiles. -// If any step fails, an error message is returned. -base::expected<std::vector<AutofillProfile>, std::string> LoadProfilesFromFile( +// If any step fails, an error message is logged and absl::nullopt is returned. +absl::optional<std::vector<AutofillProfile>> LoadProfilesFromFile( base::FilePath file) { std::string file_content; if (!base::ReadFileToString(file, &file_content)) { - return base::unexpected("Failed to read file " + file.MaybeAsASCII()); + LOG(ERROR) << "Failed to read file " << file.MaybeAsASCII() << "."; + return absl::nullopt; } if (absl::optional<base::Value> json = base::JSONReader::Read(file_content)) { return AutofillProfilesFromJSON(*json); } - return base::unexpected("Failed to parse JSON"); + LOG(ERROR) << "Failed to parse JSON file."; + return absl::nullopt; } // Sets all of the `pdm`'s profiles to `profiles`, if the `pdm` still exists. -void SetProfiles( - base::WeakPtr<PersonalDataManager> pdm, - base::expected<std::vector<AutofillProfile>, std::string> profiles) { - CHECK(profiles.has_value()) << profiles.error(); +void SetProfiles(base::WeakPtr<PersonalDataManager> pdm, + absl::optional<std::vector<AutofillProfile>> profiles) { + CHECK(profiles.has_value()); if (pdm) { pdm->SetProfilesForAllSources(&*profiles); } @@ -142,27 +146,30 @@ } // namespace -base::expected<std::vector<AutofillProfile>, std::string> -AutofillProfilesFromJSON(const base::Value& json) { +absl::optional<std::vector<AutofillProfile>> AutofillProfilesFromJSON( + const base::Value& json) { if (!json.is_dict()) { - return base::unexpected("JSON is not a dictionary at it's top level"); + LOG(ERROR) << "JSON is not a dictionary at it's top level."; + return absl::nullopt; } const base::Value::List* profiles_json = json.GetDict().FindList(kKeyProfiles); if (!profiles_json) { - return base::unexpected(base::StrCat({"No ", kKeyProfiles, " key"})); + LOG(ERROR) << "No " << kKeyProfiles << " key."; + return absl::nullopt; } const auto kLookupTable = MakeFieldTypeLookupTable(); std::vector<AutofillProfile> profiles_to_import; for (const base::Value& profile_json : *profiles_json) { if (!profile_json.is_dict()) { - return base::unexpected("Profile description to not a dictionary"); + LOG(ERROR) << "Profile description is not a dictionary."; + return absl::nullopt; } - base::expected<AutofillProfile, std::string> profile = + absl::optional<AutofillProfile> profile = MakeProfile(profile_json.GetDict(), kLookupTable); if (!profile.has_value()) { - return base::unexpected(profile.error()); + return absl::nullopt; } profiles_to_import.push_back(*profile); }
diff --git a/components/autofill/core/browser/manual_testing_profile_import.h b/components/autofill/core/browser/manual_testing_profile_import.h index d8b7c25..ab953039 100644 --- a/components/autofill/core/browser/manual_testing_profile_import.h +++ b/components/autofill/core/browser/manual_testing_profile_import.h
@@ -9,10 +9,10 @@ #include <vector> #include "base/memory/weak_ptr.h" -#include "base/types/expected.h" #include "base/values.h" #include "components/autofill/core/browser/data_model/autofill_profile.h" #include "components/autofill/core/browser/personal_data_manager.h" +#include "third_party/abseil-cpp/absl/types/optional.h" namespace autofill { @@ -42,20 +42,21 @@ // Given a description of fully structured profiles in the aforementioned JSON // format, converts it to a vector of AutofillProfiles. // If the JSON doesn't adhere to the above format, or if any of the profiles is -// not fully structured, an error message is returned. +// not fully structured, an error is logged and absl::nullopt is returned. // A profile is considered "fully structured" if `FinalizeAfterImport()` doesn't // change it. This condition exists to prevent profiles from silently changing, // since `FinalizeAfterImport()` is called when retrieving a profile from the // database. For example, if the structure is invalid because the last name is // not part of the full name, the routine will clear this information. -base::expected<std::vector<AutofillProfile>, std::string> -AutofillProfilesFromJSON(const base::Value& json); +absl::optional<std::vector<AutofillProfile>> AutofillProfilesFromJSON( + const base::Value& json); // Checks if the `kManualProfileImportForTestingFlag` flag is present. If so, // reads the specified file, parses the profile description and imports the // profiles into the `pdm`. -// In case the import fails, the browser intentionally exist ungracefully. -// This is to prevent manual testing with incorrect data. +// In case the import fails, an error message is logged and the browser +// intentionally exist ungracefully. This is to prevent manual testing with +// incorrect data. // Since importing is done in a separate thread, the `pdm` is passed as a weak // ptr. It is updated once the import has finished. void MaybeImportProfilesForManualTesting(
diff --git a/components/autofill/core/browser/manual_testing_profile_import_unittest.cc b/components/autofill/core/browser/manual_testing_profile_import_unittest.cc index 9b18873f..b08d6c2 100644 --- a/components/autofill/core/browser/manual_testing_profile_import_unittest.cc +++ b/components/autofill/core/browser/manual_testing_profile_import_unittest.cc
@@ -62,12 +62,10 @@ expected_profile2.SetRawInfoWithVerificationStatus( ADDRESS_HOME_HOUSE_NUMBER, u"123", VerificationStatus::kUserVerified); - base::expected<std::vector<AutofillProfile>, std::string> profiles = - AutofillProfilesFromJSON(*json); - ASSERT_TRUE(profiles.has_value()) << profiles.error(); - EXPECT_THAT(*profiles, - testing::Pointwise(ProfilesCompareEqual(), - {expected_profile1, expected_profile2})); + EXPECT_THAT( + AutofillProfilesFromJSON(*json), + testing::Optional(testing::Pointwise( + ProfilesCompareEqual(), {expected_profile1, expected_profile2}))); } // Tests that the conversion fails when an unrecognized field type is present.
diff --git a/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics.cc b/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics.cc new file mode 100644 index 0000000..d394b2fc --- /dev/null +++ b/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics.cc
@@ -0,0 +1,16 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics.h" + +#include "base/metrics/histogram_functions.h" + +namespace autofill::autofill_metrics { + +void LogAddressUpdateLengthConvergenceStatus(bool convergence_status) { + base::UmaHistogramBoolean("Autofill.NewerStreetAddressWithSameStatusIsChosen", + convergence_status); +} + +} // namespace autofill::autofill_metrics
diff --git a/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics.h b/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics.h new file mode 100644 index 0000000..fc32c5cb --- /dev/null +++ b/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics.h
@@ -0,0 +1,17 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_METRICS_CONVERGE_TO_EXTREME_LENGTH_ADDRESS_METRICS_H_ +#define COMPONENTS_AUTOFILL_CORE_BROWSER_METRICS_CONVERGE_TO_EXTREME_LENGTH_ADDRESS_METRICS_H_ + +namespace autofill::autofill_metrics { + +// Records the result of trying to merge two token-equivalent addresses with +// equal verification statuses but different string-lengths, whenever the +// feature `kAutofillConvergeToExtremeLengthStreetAddress` is enabled. +void LogAddressUpdateLengthConvergenceStatus(bool convergence_status); + +} // namespace autofill::autofill_metrics + +#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_METRICS_CONVERGE_TO_EXTREME_LENGTH_ADDRESS_METRICS_H_
diff --git a/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics_unittest.cc b/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics_unittest.cc new file mode 100644 index 0000000..e2934850 --- /dev/null +++ b/components/autofill/core/browser/metrics/converge_to_extreme_length_address_metrics_unittest.cc
@@ -0,0 +1,69 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <memory> +#include <string> + +#include "base/test/metrics/histogram_tester.h" +#include "base/test/scoped_feature_list.h" +#include "components/autofill/core/browser/data_model/autofill_structured_address.h" +#include "components/autofill/core/browser/data_model/autofill_structured_address_component.h" +#include "components/autofill/core/browser/metrics/autofill_metrics_test_base.h" +#include "components/autofill/core/common/autofill_features.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::base::Bucket; +using ::base::BucketsAre; + +namespace autofill::autofill_metrics { + +class ConvergeToExtremeLengthAddressMetricsTest + : public autofill_metrics::AutofillMetricsBaseTest, + public testing::Test { + public: + void SetUp() override { + SetUpHelper(); + scoped_feature_list_.InitAndEnableFeatureWithParameters( + features::kAutofillConvergeToExtremeLengthStreetAddress, + {{features::kAutofillConvergeToLonger.name, "true" /*longer*/}}); + country_code_ = std::make_unique<CountryCodeNode>(nullptr); + old_street_ = std::make_unique<StreetAddressNode>(country_code_.get()); + new_street_ = std::make_unique<StreetAddressNode>(country_code_.get()); + } + void TearDown() override { TearDownHelper(); } + + protected: + base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr<CountryCodeNode> country_code_; + std::unique_ptr<StreetAddressNode> old_street_; + std::unique_ptr<StreetAddressNode> new_street_; +}; + +// Tests the logging of preferring old street address value during merging, when +// the feature `kAutofillConvergeToExtremeLengthStreetAddress` is enabled. +TEST_F(ConvergeToExtremeLengthAddressMetricsTest, LogPreferringOldValue) { + old_street_->SetValue(u"Wall Street", VerificationStatus::kParsed); + new_street_->SetValue(u"Wall St", VerificationStatus::kParsed); + + base::HistogramTester histogram_tester; + old_street_->MergeWithComponent(*new_street_); + + histogram_tester.ExpectUniqueSample( + "Autofill.NewerStreetAddressWithSameStatusIsChosen", false, 1); +} + +// Tests the logging of preferring new street address value during merging, when +// the feature `kAutofillConvergeToExtremeLengthStreetAddress` is enabled. +TEST_F(ConvergeToExtremeLengthAddressMetricsTest, LogPreferringNewValue) { + old_street_->SetValue(u"Wall St", VerificationStatus::kParsed); + new_street_->SetValue(u"Wall Street", VerificationStatus::kParsed); + + base::HistogramTester histogram_tester; + old_street_->MergeWithComponent(*new_street_); + + histogram_tester.ExpectUniqueSample( + "Autofill.NewerStreetAddressWithSameStatusIsChosen", true, 1); +} + +} // namespace autofill::autofill_metrics
diff --git a/components/autofill/core/browser/personal_data_manager_cleaner.cc b/components/autofill/core/browser/personal_data_manager_cleaner.cc index 86672f6..aa29ff2 100644 --- a/components/autofill/core/browser/personal_data_manager_cleaner.cc +++ b/components/autofill/core/browser/personal_data_manager_cleaner.cc
@@ -5,6 +5,7 @@ #include "components/autofill/core/browser/personal_data_manager_cleaner.h" #include "base/logging.h" +#include "base/ranges/algorithm.h" #include "components/autofill/core/browser/data_model/autofill_profile_comparator.h" #include "components/autofill/core/browser/metrics/autofill_metrics.h" #include "components/autofill/core/browser/personal_data_manager.h" @@ -193,17 +194,15 @@ DVLOG(1) << "Starting autofill profile de-duplication."; std::unordered_set<std::string> profiles_to_delete; profiles_to_delete.reserve(profiles.size()); - - // Create the map used to update credit card's billing addresses after the - // dedupe. + // Used to update credit card's billing addresses after the dedupe. std::unordered_map<std::string, std::string> guids_merge_map; - // The changes can't happen directly on the profiles, but need to be - // updated in the database at first, and then updated on the profiles. - // Therefore, we need a copy of profiles to keep track of the changes. + // `profiles` contains pointers to the PDM's state. Modifying them directly + // won't update them in the database and calling `PDM:UpdateProfile()` + // would discard them as a duplicate. std::vector<std::unique_ptr<AutofillProfile>> new_profiles; - for (auto* it : profiles) { - new_profiles.push_back(std::make_unique<AutofillProfile>(*it)); + for (AutofillProfile* profile : profiles) { + new_profiles.push_back(std::make_unique<AutofillProfile>(*profile)); } DedupeProfiles(&new_profiles, &profiles_to_delete, &guids_merge_map); @@ -212,10 +211,10 @@ for (const auto& profile : new_profiles) { // If the profile was set to be deleted, remove it from the database, // otherwise update it. - if (profiles_to_delete.count(profile->guid())) { + if (profiles_to_delete.contains(profile->guid())) { personal_data_manager_->RemoveProfileFromDB(profile->guid()); } else { - personal_data_manager_->UpdateProfileInDB(*(profile.get())); + personal_data_manager_->UpdateProfileInDB(*profile); } } @@ -244,69 +243,57 @@ // they need to be in the vector because an unverified profile trying to merge // into a similar verified profile will be discarded. // TODO(crbug.com/1411114): Remove code duplication for sorting profiles. - const base::Time comparison_time = AutofillClock::Now(); - if (existing_profiles->size() > 1) { - std::sort(existing_profiles->begin(), existing_profiles->end(), - [comparison_time](const std::unique_ptr<AutofillProfile>& a, - const std::unique_ptr<AutofillProfile>& b) { - if (a->IsVerified() != b->IsVerified()) { - return !a->IsVerified(); - } - return a->HasGreaterRankingThan(b.get(), comparison_time); - }); - } + base::ranges::sort( + *existing_profiles, [comparison_time = AutofillClock::Now()]( + const std::unique_ptr<AutofillProfile>& a, + const std::unique_ptr<AutofillProfile>& b) { + return a->HasGreaterRankingThan(b.get(), comparison_time); + }); + auto first_verified_profile = base::ranges::stable_partition( + *existing_profiles, [](const std::unique_ptr<AutofillProfile>& profile) { + return !profile->IsVerified(); + }); AutofillProfileComparator comparator(personal_data_manager_->app_locale()); + for (auto i = existing_profiles->begin(); i != first_verified_profile; i++) { + AutofillProfile* profile_to_merge = i->get(); - for (size_t i = 0; i < existing_profiles->size(); ++i) { - AutofillProfile* profile_to_merge = (*existing_profiles)[i].get(); - - // If the profile was set to be deleted, skip it. It has already been - // merged into another profile. - if (profiles_to_delete->count(profile_to_merge->guid())) + // If the profile was set to be deleted, skip it. This can happen because + // the loop below reassigns `profile_to_merge` to (effectively) `j->get()`. + if (profiles_to_delete->contains(profile_to_merge->guid())) { continue; + } - // If we have reached the verified profiles, stop trying to merge. Verified - // profiles do not get merged. - if (profile_to_merge->IsVerified()) - break; + // Try to merge `profile_to_merge` with a less relevant `existing_profiles`. + for (auto j = i + 1; j < existing_profiles->end(); j++) { + AutofillProfile& existing_profile = **j; - // If we have not reached the last profile, try to merge |profile_to_merge| - // with all the less relevant |existing_profiles|. - for (size_t j = i + 1; j < existing_profiles->size(); ++j) { - AutofillProfile* existing_profile = (*existing_profiles)[j].get(); - - // Don't try to merge a profile that was already set for deletion. - if (profiles_to_delete->count(existing_profile->guid())) + // Don't try to merge a profile that was already set for deletion or that + // cannot be merged. + if (profiles_to_delete->contains(existing_profile.guid()) || + !comparator.AreMergeable(existing_profile, *profile_to_merge)) { continue; - - // Move on if the profiles are not mergeable. - if (!comparator.AreMergeable(*existing_profile, *profile_to_merge)) - continue; + } // The profiles are found to be mergeable. Attempt to update the existing // profile. This returns true if the merge was successful, or if the // merge would have been successful but the existing profile IsVerified() - // and will not accept updates from profile_to_merge. - if (existing_profile->SaveAdditionalInfo( + // and will not accept updates from `profile_to_merge`. + if (existing_profile.SaveAdditionalInfo( *profile_to_merge, personal_data_manager_->app_locale())) { - // Keep track that a credit card using |profile_to_merge|'s GUID as its - // billing address id should replace it by |existing_profile|'s GUID. guids_merge_map->emplace(profile_to_merge->guid(), - existing_profile->guid()); - - // Since |profile_to_merge| was a duplicate of |existing_profile| - // and was merged successfully, it can now be deleted. + existing_profile.guid()); profiles_to_delete->insert(profile_to_merge->guid()); // Now try to merge the new resulting profile with the rest of the // existing profiles. - profile_to_merge = existing_profile; - + profile_to_merge = &existing_profile; // Verified profiles do not get merged. Save some time by not - // trying. - if (profile_to_merge->IsVerified()) + // trying. Note that the `existing_profile` (now `profile_to_merge`) + // might be verified. + if (profile_to_merge->IsVerified()) { break; + } } } }
diff --git a/components/autofill/core/browser/personal_data_manager_cleaner_unittest.cc b/components/autofill/core/browser/personal_data_manager_cleaner_unittest.cc index c2adf87..a3e7da6 100644 --- a/components/autofill/core/browser/personal_data_manager_cleaner_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_cleaner_unittest.cc
@@ -95,8 +95,10 @@ }; // Tests that DedupeProfiles sets the correct profile guids to -// delete after merging similar profiles. -TEST_F(PersonalDataManagerCleanerTest, DedupeProfiles_ProfilesToDelete) { +// delete after merging similar profiles, and correct merge mappings for billing +// address id references. +TEST_F(PersonalDataManagerCleanerTest, + DedupeProfiles_ProfilesToDelete_GuidsMergeMap) { // Create the profile for which to find duplicates. It has the highest // ranking score. AutofillProfile* profile1 = @@ -161,94 +163,23 @@ histogram_tester.ExpectUniqueSample( "Autofill.NumberOfProfilesRemovedDuringDedupe", 2, 1); + // Profile 1 was merged into profile 3 and profile 3 into profile 5. + std::unordered_map<std::string, std::string> expected_guids_to_merge = { + {profile1->guid(), profile3->guid()}, + {profile3->guid(), profile5->guid()}}; + EXPECT_EQ(guids_merge_map, expected_guids_to_merge); + // Profile1 should be deleted because it was sent as the profile to merge and // thus was merged into profile3 and then into profile5. - EXPECT_TRUE(profiles_to_delete.count(profile1->guid())); - // Profile3 should be deleted because profile1 was merged into it and the // resulting profile was then merged into profile5. - EXPECT_TRUE(profiles_to_delete.count(profile3->guid())); - - // Only these two profiles should be deleted. - EXPECT_EQ(2U, profiles_to_delete.size()); + EXPECT_THAT(profiles_to_delete, testing::UnorderedElementsAre( + profile1->guid(), profile3->guid())); // All profiles should still be present in |existing_profiles|. EXPECT_EQ(5U, existing_profiles.size()); } -// Tests that DedupeProfiles sets the correct merge mapping for billing address -// id references. -TEST_F(PersonalDataManagerCleanerTest, DedupeProfiles_GuidsMergeMap) { - // Create the profile for which to find duplicates. It has the highest - // ranking score. - AutofillProfile* profile1 = - new AutofillProfile(base::GenerateUuid(), test::kEmptyOrigin); - test::SetProfileInfo(profile1, "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "", "742. Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", "12345678910"); - profile1->set_use_count(9); - - // Create a different profile that should not be deduped (different address). - AutofillProfile* profile2 = - new AutofillProfile(base::GenerateUuid(), test::kEmptyOrigin); - test::SetProfileInfo(profile2, "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "Fox", "1234 Other Street", "", - "Springfield", "IL", "91601", "US", "12345678910"); - profile2->set_use_count(7); - - // Create a profile similar to profile1 which should be deduped. - AutofillProfile* profile3 = - new AutofillProfile(base::GenerateUuid(), test::kEmptyOrigin); - test::SetProfileInfo(profile3, "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "", "742 Evergreen Terrace", "", - "Springfield", "IL", "91601", "US", "12345678910"); - profile3->set_use_count(5); - - // Create another different profile that should not be deduped (different - // name). - AutofillProfile* profile4 = - new AutofillProfile(base::GenerateUuid(), test::kEmptyOrigin); - test::SetProfileInfo(profile4, "Marjorie", "Jacqueline", "Simpson", - "homer.simpson@abc.com", "Fox", "742 Evergreen Terrace", - "", "Springfield", "IL", "91601", "US", "12345678910"); - profile4->set_use_count(3); - - // Create another profile similar to profile1. Since that one has the lowest - // ranking score, the result of the merge should be in this profile at the end - // of the test. - AutofillProfile* profile5 = - new AutofillProfile(base::GenerateUuid(), test::kEmptyOrigin); - test::SetProfileInfo(profile5, "Homer", "Jay", "Simpson", - "homer.simpson@abc.com", "Fox", "742 Evergreen Terrace.", - "", "Springfield", "IL", "91601", "US", "12345678910"); - profile5->set_use_count(1); - - // Add the profiles. - std::vector<std::unique_ptr<AutofillProfile>> existing_profiles; - existing_profiles.push_back(std::unique_ptr<AutofillProfile>(profile1)); - existing_profiles.push_back(std::unique_ptr<AutofillProfile>(profile2)); - existing_profiles.push_back(std::unique_ptr<AutofillProfile>(profile3)); - existing_profiles.push_back(std::unique_ptr<AutofillProfile>(profile4)); - existing_profiles.push_back(std::unique_ptr<AutofillProfile>(profile5)); - - std::unordered_map<std::string, std::string> guids_merge_map; - std::unordered_set<std::string> profiles_to_delete; - - personal_data_manager_cleaner_->DedupeProfilesForTesting( - &existing_profiles, &profiles_to_delete, &guids_merge_map); - - // The two profile merges should be recorded in the map. - EXPECT_EQ(2U, guids_merge_map.size()); - - // Profile 1 was merged into profile 3. - ASSERT_TRUE(guids_merge_map.count(profile1->guid())); - EXPECT_TRUE(guids_merge_map.at(profile1->guid()) == profile3->guid()); - - // Profile 3 was merged into profile 5. - ASSERT_TRUE(guids_merge_map.count(profile3->guid())); - EXPECT_TRUE(guids_merge_map.at(profile3->guid()) == profile5->guid()); -} - // Tests that UpdateCardsBillingAddressReference sets the correct billing // address id as specified in the map. TEST_F(PersonalDataManagerCleanerTest, UpdateCardsBillingAddressReference) {
diff --git a/components/autofill/core/common/autofill_data_validation.cc b/components/autofill/core/common/autofill_data_validation.cc index 7039180a..b13fa41 100644 --- a/components/autofill/core/common/autofill_data_validation.cc +++ b/components/autofill/core/common/autofill_data_validation.cc
@@ -25,6 +25,10 @@ return url.is_empty() || url.is_valid(); } +bool IsValidOption(const SelectOption& option) { + return IsValidString16(option.content) && IsValidString16(option.value); +} + bool IsValidFormFieldData(const FormFieldData& field) { return IsValidString16(field.label) && IsValidString16(field.name) && IsValidString16(field.value) && @@ -51,18 +55,19 @@ }); } -bool IsValidOptionVector(const std::vector<SelectOption>& options) { +bool IsValidOptionVector(const base::span<const SelectOption>& options) { return options.size() <= kMaxListSize && - base::ranges::all_of(options, &IsValidString16, - &SelectOption::content); + base::ranges::all_of(options, &IsValidOption); } -bool IsValidString16Vector(const std::vector<std::u16string>& v) { - return v.size() <= kMaxListSize && base::ranges::all_of(v, &IsValidString16); +bool IsValidString16Vector(const base::span<const std::u16string>& strings) { + return strings.size() <= kMaxListSize && + base::ranges::all_of(strings, &IsValidString16); } -bool IsValidFormDataVector(const std::vector<FormData>& v) { - return v.size() <= kMaxListSize && base::ranges::all_of(v, &IsValidFormData); +bool IsValidFormDataVector(const base::span<const FormData>& forms) { + return forms.size() <= kMaxListSize && + base::ranges::all_of(forms, &IsValidFormData); } } // namespace autofill
diff --git a/components/autofill/core/common/autofill_data_validation.h b/components/autofill/core/common/autofill_data_validation.h index 11692ed3..aa4ce4b 100644 --- a/components/autofill/core/common/autofill_data_validation.h +++ b/components/autofill/core/common/autofill_data_validation.h
@@ -5,11 +5,9 @@ #ifndef COMPONENTS_AUTOFILL_CORE_COMMON_AUTOFILL_DATA_VALIDATION_H_ #define COMPONENTS_AUTOFILL_CORE_COMMON_AUTOFILL_DATA_VALIDATION_H_ -#include <stddef.h> - #include <string> -#include <vector> +#include "base/containers/span.h" class GURL; @@ -26,12 +24,13 @@ bool IsValidString(const std::string& str); bool IsValidString16(const std::u16string& str); bool IsValidGURL(const GURL& url); +bool IsValidOption(const SelectOption& option); bool IsValidFormFieldData(const FormFieldData& field); bool IsValidFormData(const FormData& form); bool IsValidPasswordFormFillData(const PasswordFormFillData& form); -bool IsValidOptionVector(const std::vector<SelectOption>& v); -bool IsValidString16Vector(const std::vector<std::u16string>& v); -bool IsValidFormDataVector(const std::vector<FormData>& v); +bool IsValidOptionVector(const base::span<const SelectOption>& options); +bool IsValidString16Vector(const base::span<const std::u16string>& strings); +bool IsValidFormDataVector(const base::span<const FormData>& forms); } // namespace autofill
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc index 24aaebbc..6e348837 100644 --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc
@@ -313,6 +313,15 @@ "AutofillOnlyCacheIsAutofilledOnFill", base::FEATURE_DISABLED_BY_DEFAULT); +// Enables converging towards the longer or shorter street address in profile +// merging. +BASE_FEATURE(kAutofillConvergeToExtremeLengthStreetAddress, + "AutofillConvergeToExtremeLengthStreetAddress", + base::FEATURE_DISABLED_BY_DEFAULT); + +const base::FeatureParam<bool> kAutofillConvergeToLonger{ + &kAutofillConvergeToExtremeLengthStreetAddress, "converge_to_longer", true}; + BASE_FEATURE(kAutofillStreetNameOrHouseNumberPrecedenceOverAutocomplete, "AutofillStreetNameOrHouseNumberPrecedenceOverAutocomplete", base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h index e69cc51..055cce91 100644 --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h
@@ -114,6 +114,10 @@ COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillOnlyCacheIsAutofilledOnFill); COMPONENT_EXPORT(AUTOFILL) +BASE_DECLARE_FEATURE(kAutofillConvergeToExtremeLengthStreetAddress); +COMPONENT_EXPORT(AUTOFILL) +extern const base::FeatureParam<bool> kAutofillConvergeToLonger; +COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE( kAutofillStreetNameOrHouseNumberPrecedenceOverAutocomplete); // Records the values of HtmlFieldType that the server or heuristic predictions @@ -129,7 +133,6 @@ COMPONENT_EXPORT(AUTOFILL) extern const base::FeatureParam<PrecedenceOverAutocompleteScope> kAutofillHeuristicPrecedenceScopeOverAutocomplete; - COMPONENT_EXPORT(AUTOFILL) extern const base::FeatureParam<PrecedenceOverAutocompleteScope> kAutofillServerPrecedenceScopeOverAutocomplete;
diff --git a/components/autofill/ios/form_util/resources/fill.js b/components/autofill/ios/form_util/resources/fill.js index d6d7174..1eda1636 100644 --- a/components/autofill/ios/form_util/resources/fill.js +++ b/components/autofill/ios/form_util/resources/fill.js
@@ -65,6 +65,16 @@ __gCrWeb.fill.MAX_DATA_LENGTH = 1024; /** + * The maximum string length supported by Autofill. + * + * This variable is from kMaxStringLength in + * chromium/src/components/autofill/core/common/autofill_constant.h + * + * @const {number} + */ +__gCrWeb.fill.MAX_STRING_LENGTH = 1024; + +/** * The maximum number of form fields we are willing to parse, due to * computational costs. Several examples of forms with lots of fields that are * not relevant to Autofill: (1) the Netflix queue; (2) the Amazon wishlist; @@ -700,7 +710,7 @@ * field_element.isFormControlElement(). * * This also uses (|controlElements|, |elementArray|) because there is no - * guaranteeded Map support on iOS yet. + * guaranteed Map support on iOS yet. * TODO(crbug.com/1030490): Make |elementArray| a Map. * * @param {NodeList} labels The labels to match. @@ -791,7 +801,7 @@ * * @param {HTMLFormElement} formElement The form element that will be processed. * @param {FormControlElement} formControlElement A control element in - * formElment, the FormField of which will be returned in field. + * formElement, the FormField of which will be returned in field. * @param {Array<Element>} fieldsets The fieldsets to look through if * formElement and formControlElement are not specified. * @param {Array<FormControlElement>} controlElements The control elements that @@ -815,8 +825,9 @@ // The extracted FormFields. const formFields = []; - // A vector of bools that indicate whether each element in |controlElements| - // meets the requirements and thus will be in the resulting |form|. + // A vector of booleans that indicate whether each element in + // |controlElements| meets the requirements and thus will be in the resulting + // |form|. const fieldsExtracted = []; if (!extractFieldsFromControlElements_( @@ -898,7 +909,7 @@ * formElement is in. * @param {HTMLFormElement} formElement The form element that will be processed. * @param {FormControlElement} formControlElement A control element in - * formElment, the FormField of which will be returned in field. + * formElement, the FormField of which will be returned in field. * @param {number} extractMask Mask controls what data is extracted from * formElement. * @param {Object} form Form to fill in the AutofillFormData @@ -1848,8 +1859,10 @@ const options = selectElement.options; for (let i = 0; i < options.length; ++i) { const option = options[i]; - field['option_values'].push(option['value']); - field['option_contents'].push(option['text']); + field['option_values'].push( + option['value'].substring(0, __gCrWeb.fill.MAX_STRING_LENGTH)); + field['option_contents'].push( + option['text'].substring(0, __gCrWeb.fill.MAX_STRING_LENGTH)); } };
diff --git a/components/blocked_content/safe_browsing_triggered_popup_blocker_unittest.cc b/components/blocked_content/safe_browsing_triggered_popup_blocker_unittest.cc index b466b57..6e539f7f 100644 --- a/components/blocked_content/safe_browsing_triggered_popup_blocker_unittest.cc +++ b/components/blocked_content/safe_browsing_triggered_popup_blocker_unittest.cc
@@ -30,7 +30,7 @@ #include "components/user_prefs/user_prefs.h" #include "components/variations/scoped_variations_ids_provider.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_throttle.h" #include "content/public/browser/render_process_host.h"
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 3f29ab41..267e7fd 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
@@ -198,7 +198,7 @@ <translation id="4534723447064627427">Untuk mengizinkan <ph name="APP_NAME" /> mengakses mikrofon, aktifkan juga mikrofon di <ph name="BEGIN_LINK" />Setelan Android<ph name="END_LINK" />.</translation> <translation id="4566417217121906555">Nonaktifkan mikrofon</translation> <translation id="4570913071927164677">Detail</translation> -<translation id="4598549027014564149">Selama dalam mode Samaran, situs tidak dapat menggunakan cookie Anda untuk melihat aktivitas penjelajahan Anda di seluruh situs, bahkan situs yang terkait. Aktivitas penjelajahan Anda tidak digunakan untuk hal-hal seperti mempersonalisasi iklan. Fitur tertentu di beberapa situs mungkin tidak berfungsi.</translation> +<translation id="4598549027014564149">Selama dalam mode Samaran, situs tidak dapat menggunakan cookie Anda untuk melihat aktivitas penjelajahan Anda di berbagai situs, bahkan situs yang terkait. Aktivitas penjelajahan Anda tidak digunakan untuk hal-hal seperti mempersonalisasi iklan. Fitur tertentu di beberapa situs mungkin tidak berfungsi.</translation> <translation id="4645575059429386691">Dikelola oleh orang tua Anda</translation> <translation id="4670064810192446073">Virtual reality</translation> <translation id="4751476147751820511">Sensor gerakan atau cahaya</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 0218758..5ff0b80 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
@@ -248,7 +248,7 @@ <translation id="5505264765875738116">I siti non possono chiedere di inviare notifiche</translation> <translation id="5516455585884385570">Apri le impostazioni di notifica</translation> <translation id="5527111080432883924">Chiedi conferma prima di consentire ai siti di leggere testo e immagini negli appunti (opzione consigliata)</translation> -<translation id="5545693483061321551">I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti web, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili.</translation> +<translation id="5545693483061321551">I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili.</translation> <translation id="5553374991681107062">Più recenti</translation> <translation id="5556459405103347317">Ricarica</translation> <translation id="5596627076506792578">Altre opzioni</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 91e42a0..349f22674 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
@@ -122,7 +122,7 @@ <translation id="3115898365077584848">Показать информацию</translation> <translation id="3123473560110926937">Заблокировано на некоторых сайтах</translation> <translation id="3143754809889689516">Воспроизвести с начала</translation> -<translation id="3162899666601560689">Сайты могут использовать файлы cookie, чтобы сделать работу в браузере более удобной, например запоминая товары в корзине или информацию о том, что вы уже вошли в аккаунт</translation> +<translation id="3162899666601560689">Сайты могут использовать файлы cookie для вашего удобства, например, чтобы сохранять информацию о товарах в корзине или о том, что вы вошли в аккаунт.</translation> <translation id="3165022941318558018">Разрешите сайту использовать сторонние файлы cookie.</translation> <translation id="3198916472715691905">В памяти занято: <ph name="STORAGE_AMOUNT" /></translation> <translation id="3203366800380907218">Из интернета</translation> @@ -198,7 +198,7 @@ <translation id="4534723447064627427">Чтобы у приложения "<ph name="APP_NAME" />" был доступ к микрофону, предоставьте разрешение в <ph name="BEGIN_LINK" />настройках Android<ph name="END_LINK" />.</translation> <translation id="4566417217121906555">Отключить микрофон</translation> <translation id="4570913071927164677">Подробнее…</translation> -<translation id="4598549027014564149">В режиме инкогнито сайты не могут отслеживать ваши действия с помощью файлов cookie, даже на связанных сайтах. Информация о действиях в браузере не используется, например, для показа персонализированной рекламы. Из-за этого функции некоторых сайтов могут стать недоступными.</translation> +<translation id="4598549027014564149">В режиме инкогнито сайты не могут использовать файлы cookie, чтобы отслеживать ваши действия на других сайтах, даже связанных. Информация о действиях в браузере не используется для таких целей, как показ персонализированной рекламы. Функции некоторых сайтов могут быть недоступны.</translation> <translation id="4645575059429386691">Управляется вашими родителями</translation> <translation id="4670064810192446073">Виртуальная реальность</translation> <translation id="4751476147751820511">Датчики движения и освещенности</translation> @@ -364,7 +364,7 @@ <translation id="7719367874908701697">Масштабирование страницы</translation> <translation id="7781829728241885113">Вчера</translation> <translation id="7791543448312431591">Добавить</translation> -<translation id="780301667611848630">Пропустить</translation> +<translation id="780301667611848630">Нет, спасибо</translation> <translation id="7804248752222191302">Сайт использует вашу камеру</translation> <translation id="7807060072011926525">Данные от Google</translation> <translation id="7835852323729233924">Воспроизведение медиаконтента</translation> @@ -386,7 +386,7 @@ <translation id="8116925261070264013">Сайты с отключенным звуком</translation> <translation id="813082847718468539">Сведения о сайте</translation> <translation id="8131740175452115882">Подтвердить</translation> -<translation id="8154912474061769055">Функции многих сайтов могут стать недоступными</translation> +<translation id="8154912474061769055">Функции многих сайтов могут быть недоступны.</translation> <translation id="8168435359814927499">Контент</translation> <translation id="8197286292360124385"><ph name="PERMISSION_1" />: разрешено</translation> <translation id="8200772114523450471">Возобновить</translation> @@ -431,7 +431,7 @@ <translation id="8737217482364735741">Будут удалены все данные и файлы cookie, которые сохранены сайтом <ph name="ORIGIN" />.</translation> <translation id="8751914237388039244">Выберите фото</translation> <translation id="8801436777607969138">Блокировать код JavaScript на определенном сайте</translation> -<translation id="8803526663383843427">Функция включена</translation> +<translation id="8803526663383843427">Если функция включена</translation> <translation id="8805385115381080995">Сайты реже запрашивают проверку личности, поэтому вы меньше отвлекаетесь от работы в браузере.</translation> <translation id="8816026460808729765">Закрыть сайтам доступ к датчикам</translation> <translation id="8823559166155093873">Блокировать файлы cookie</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 5f5a218..762b920 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
@@ -424,7 +424,7 @@ <translation id="8676374126336081632">Girişi temizle</translation> <translation id="8681886425883659911">Araya giren veya yanıltıcı reklamlar gösterdiği bilinen sitelerdeki reklamlar engellenir</translation> <translation id="868929229000858085">Kişilerinizde arama yapın</translation> -<translation id="8712637175834984815">Anlaşıldı</translation> +<translation id="8712637175834984815">Anladım</translation> <translation id="8719283222052720129"><ph name="BEGIN_LINK" />Android Ayarları<ph name="END_LINK" />'ında <ph name="APP_NAME" /> için izni açın.</translation> <translation id="8725066075913043281">Yeniden dene</translation> <translation id="8730621377337864115">Bitti</translation>
diff --git a/components/browsing_topics/browsing_topics_calculator.cc b/components/browsing_topics/browsing_topics_calculator.cc index a51f1d0..e14fea3 100644 --- a/components/browsing_topics/browsing_topics_calculator.cc +++ b/components/browsing_topics/browsing_topics_calculator.cc
@@ -460,7 +460,7 @@ host_context_domains_map_); // Calculate descendant topics + their observing context domains - std::set<Topic> descendant_topics = + std::vector<Topic> descendant_topics = semantic_tree.GetDescendantTopics(topic); for (const Topic& descendant_topic : descendant_topics) { std::set<HashedDomain> descendant_topic_observation_domains =
diff --git a/components/browsing_topics/common/semantic_tree.cc b/components/browsing_topics/common/semantic_tree.cc index e242b1f..7e45978 100644 --- a/components/browsing_topics/common/semantic_tree.cc +++ b/components/browsing_topics/common/semantic_tree.cc
@@ -4,1862 +4,444 @@ #include "components/browsing_topics/common/semantic_tree.h" -#include <vector> - -#include "base/containers/fixed_flat_map.h" -#include "base/no_destructor.h" #include "components/strings/grit/components_strings.h" namespace browsing_topics { namespace { -// Stores a taxonomy version and a localized name message id for a topic -struct SemanticTreeTaxonomyInformation { - SemanticTreeTaxonomyInformation(int taxonomy_version, - int localized_name_message_id) - : taxonomy_version(taxonomy_version), - localized_name_message_id(localized_name_message_id) {} - SemanticTreeTaxonomyInformation( - const SemanticTreeTaxonomyInformation& other) = default; - ~SemanticTreeTaxonomyInformation() = default; - const int taxonomy_version; - const int localized_name_message_id; +const uint16_t kChildToParent[] = { + 0, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 1, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 33, 33, 33, 23, 23, 23, 23, 40, 1, 1, 1, 1, + 45, 45, 45, 48, 45, 45, 45, 1, 53, 53, 53, 0, 57, 57, 57, + 57, 57, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 76, 62, 57, 57, 57, 57, 57, 83, 57, 0, 86, 86, 88, 88, + 88, 88, 88, 88, 88, 86, 86, 97, 86, 0, 100, 100, 0, 103, 104, + 103, 106, 103, 103, 103, 110, 110, 103, 103, 114, 103, 103, 117, 103, 103, + 103, 103, 103, 103, 103, 0, 126, 126, 126, 129, 129, 129, 129, 126, 126, + 126, 126, 137, 126, 126, 140, 140, 140, 140, 140, 140, 140, 140, 0, 149, + 150, 149, 149, 153, 149, 155, 149, 149, 158, 158, 158, 158, 158, 149, 164, + 164, 164, 164, 164, 149, 149, 0, 172, 173, 173, 175, 176, 173, 172, 0, + 180, 180, 180, 183, 183, 183, 183, 183, 183, 183, 183, 183, 180, 180, 180, + 0, 196, 196, 196, 196, 196, 201, 201, 196, 196, 196, 0, 207, 207, 207, + 207, 207, 207, 207, 0, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 0, 226, 227, 227, 227, 227, 231, 227, 227, 227, 226, 236, 236, 0, 239, + 239, 241, 0, 243, 243, 243, 243, 243, 243, 0, 250, 250, 250, 0, 254, + 255, 255, 255, 258, 258, 258, 254, 0, 263, 263, 265, 265, 265, 265, 265, + 263, 0, 272, 272, 0, 275, 275, 275, 0, 279, 279, 281, 279, 279, 279, + 279, 279, 279, 0, 289, 289, 289, 292, 289, 289, 289, 289, 289, 0, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 312, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 0, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 344, + 344, 344, 344, 332, }; -// Stores information for a topic's node in the semantic tree: -// the topic's parent and taxonomy information (version(s) and name(s)) -struct SemanticTreeNodeInformation { - SemanticTreeNodeInformation( - const absl::optional<Topic>& parent_topic, - const std::vector<SemanticTreeTaxonomyInformation>& taxonomy_information) - : parent_topic(parent_topic), - taxonomy_information(taxonomy_information) {} - SemanticTreeNodeInformation(const SemanticTreeNodeInformation& other) = - default; - ~SemanticTreeNodeInformation() = default; - const absl::optional<Topic> parent_topic; - const std::vector<SemanticTreeTaxonomyInformation> taxonomy_information; -}; +constexpr size_t kNumTopics = std::size(kChildToParent); +constexpr Topic kNullTopic = Topic(0); -constexpr size_t kSemanticTreeSize = 349; +static_assert(kNumTopics == 349); +static_assert(IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_349 - + IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_1 + 1 == + kNumTopics); +// These asserts also have a side-effect of preventing unused resource +// removal from removing them. +#define ASSERT_RESOURCE_ID(num) \ + static_assert(IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_##num - \ + IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_1 + 1 == \ + num) +ASSERT_RESOURCE_ID(2); +ASSERT_RESOURCE_ID(3); +ASSERT_RESOURCE_ID(4); +ASSERT_RESOURCE_ID(5); +ASSERT_RESOURCE_ID(6); +ASSERT_RESOURCE_ID(7); +ASSERT_RESOURCE_ID(8); +ASSERT_RESOURCE_ID(9); +ASSERT_RESOURCE_ID(10); +ASSERT_RESOURCE_ID(11); +ASSERT_RESOURCE_ID(12); +ASSERT_RESOURCE_ID(13); +ASSERT_RESOURCE_ID(14); +ASSERT_RESOURCE_ID(15); +ASSERT_RESOURCE_ID(16); +ASSERT_RESOURCE_ID(17); +ASSERT_RESOURCE_ID(18); +ASSERT_RESOURCE_ID(19); +ASSERT_RESOURCE_ID(20); +ASSERT_RESOURCE_ID(21); +ASSERT_RESOURCE_ID(22); +ASSERT_RESOURCE_ID(23); +ASSERT_RESOURCE_ID(24); +ASSERT_RESOURCE_ID(25); +ASSERT_RESOURCE_ID(26); +ASSERT_RESOURCE_ID(27); +ASSERT_RESOURCE_ID(28); +ASSERT_RESOURCE_ID(29); +ASSERT_RESOURCE_ID(30); +ASSERT_RESOURCE_ID(31); +ASSERT_RESOURCE_ID(32); +ASSERT_RESOURCE_ID(33); +ASSERT_RESOURCE_ID(34); +ASSERT_RESOURCE_ID(35); +ASSERT_RESOURCE_ID(36); +ASSERT_RESOURCE_ID(37); +ASSERT_RESOURCE_ID(38); +ASSERT_RESOURCE_ID(39); +ASSERT_RESOURCE_ID(40); +ASSERT_RESOURCE_ID(41); +ASSERT_RESOURCE_ID(42); +ASSERT_RESOURCE_ID(43); +ASSERT_RESOURCE_ID(44); +ASSERT_RESOURCE_ID(45); +ASSERT_RESOURCE_ID(46); +ASSERT_RESOURCE_ID(47); +ASSERT_RESOURCE_ID(48); +ASSERT_RESOURCE_ID(49); +ASSERT_RESOURCE_ID(50); +ASSERT_RESOURCE_ID(51); +ASSERT_RESOURCE_ID(52); +ASSERT_RESOURCE_ID(53); +ASSERT_RESOURCE_ID(54); +ASSERT_RESOURCE_ID(55); +ASSERT_RESOURCE_ID(56); +ASSERT_RESOURCE_ID(57); +ASSERT_RESOURCE_ID(58); +ASSERT_RESOURCE_ID(59); +ASSERT_RESOURCE_ID(60); +ASSERT_RESOURCE_ID(61); +ASSERT_RESOURCE_ID(62); +ASSERT_RESOURCE_ID(63); +ASSERT_RESOURCE_ID(64); +ASSERT_RESOURCE_ID(65); +ASSERT_RESOURCE_ID(66); +ASSERT_RESOURCE_ID(67); +ASSERT_RESOURCE_ID(68); +ASSERT_RESOURCE_ID(69); +ASSERT_RESOURCE_ID(70); +ASSERT_RESOURCE_ID(71); +ASSERT_RESOURCE_ID(72); +ASSERT_RESOURCE_ID(73); +ASSERT_RESOURCE_ID(74); +ASSERT_RESOURCE_ID(75); +ASSERT_RESOURCE_ID(76); +ASSERT_RESOURCE_ID(77); +ASSERT_RESOURCE_ID(78); +ASSERT_RESOURCE_ID(79); +ASSERT_RESOURCE_ID(80); +ASSERT_RESOURCE_ID(81); +ASSERT_RESOURCE_ID(82); +ASSERT_RESOURCE_ID(83); +ASSERT_RESOURCE_ID(84); +ASSERT_RESOURCE_ID(85); +ASSERT_RESOURCE_ID(86); +ASSERT_RESOURCE_ID(87); +ASSERT_RESOURCE_ID(88); +ASSERT_RESOURCE_ID(89); +ASSERT_RESOURCE_ID(90); +ASSERT_RESOURCE_ID(91); +ASSERT_RESOURCE_ID(92); +ASSERT_RESOURCE_ID(93); +ASSERT_RESOURCE_ID(94); +ASSERT_RESOURCE_ID(95); +ASSERT_RESOURCE_ID(96); +ASSERT_RESOURCE_ID(97); +ASSERT_RESOURCE_ID(98); +ASSERT_RESOURCE_ID(99); +ASSERT_RESOURCE_ID(100); +ASSERT_RESOURCE_ID(101); +ASSERT_RESOURCE_ID(102); +ASSERT_RESOURCE_ID(103); +ASSERT_RESOURCE_ID(104); +ASSERT_RESOURCE_ID(105); +ASSERT_RESOURCE_ID(106); +ASSERT_RESOURCE_ID(107); +ASSERT_RESOURCE_ID(108); +ASSERT_RESOURCE_ID(109); +ASSERT_RESOURCE_ID(110); +ASSERT_RESOURCE_ID(111); +ASSERT_RESOURCE_ID(112); +ASSERT_RESOURCE_ID(113); +ASSERT_RESOURCE_ID(114); +ASSERT_RESOURCE_ID(115); +ASSERT_RESOURCE_ID(116); +ASSERT_RESOURCE_ID(117); +ASSERT_RESOURCE_ID(118); +ASSERT_RESOURCE_ID(119); +ASSERT_RESOURCE_ID(120); +ASSERT_RESOURCE_ID(121); +ASSERT_RESOURCE_ID(122); +ASSERT_RESOURCE_ID(123); +ASSERT_RESOURCE_ID(124); +ASSERT_RESOURCE_ID(125); +ASSERT_RESOURCE_ID(126); +ASSERT_RESOURCE_ID(127); +ASSERT_RESOURCE_ID(128); +ASSERT_RESOURCE_ID(129); +ASSERT_RESOURCE_ID(130); +ASSERT_RESOURCE_ID(131); +ASSERT_RESOURCE_ID(132); +ASSERT_RESOURCE_ID(133); +ASSERT_RESOURCE_ID(134); +ASSERT_RESOURCE_ID(135); +ASSERT_RESOURCE_ID(136); +ASSERT_RESOURCE_ID(137); +ASSERT_RESOURCE_ID(138); +ASSERT_RESOURCE_ID(139); +ASSERT_RESOURCE_ID(140); +ASSERT_RESOURCE_ID(141); +ASSERT_RESOURCE_ID(142); +ASSERT_RESOURCE_ID(143); +ASSERT_RESOURCE_ID(144); +ASSERT_RESOURCE_ID(145); +ASSERT_RESOURCE_ID(146); +ASSERT_RESOURCE_ID(147); +ASSERT_RESOURCE_ID(148); +ASSERT_RESOURCE_ID(149); +ASSERT_RESOURCE_ID(150); +ASSERT_RESOURCE_ID(151); +ASSERT_RESOURCE_ID(152); +ASSERT_RESOURCE_ID(153); +ASSERT_RESOURCE_ID(154); +ASSERT_RESOURCE_ID(155); +ASSERT_RESOURCE_ID(156); +ASSERT_RESOURCE_ID(157); +ASSERT_RESOURCE_ID(158); +ASSERT_RESOURCE_ID(159); +ASSERT_RESOURCE_ID(160); +ASSERT_RESOURCE_ID(161); +ASSERT_RESOURCE_ID(162); +ASSERT_RESOURCE_ID(163); +ASSERT_RESOURCE_ID(164); +ASSERT_RESOURCE_ID(165); +ASSERT_RESOURCE_ID(166); +ASSERT_RESOURCE_ID(167); +ASSERT_RESOURCE_ID(168); +ASSERT_RESOURCE_ID(169); +ASSERT_RESOURCE_ID(170); +ASSERT_RESOURCE_ID(171); +ASSERT_RESOURCE_ID(172); +ASSERT_RESOURCE_ID(173); +ASSERT_RESOURCE_ID(174); +ASSERT_RESOURCE_ID(175); +ASSERT_RESOURCE_ID(176); +ASSERT_RESOURCE_ID(177); +ASSERT_RESOURCE_ID(178); +ASSERT_RESOURCE_ID(179); +ASSERT_RESOURCE_ID(180); +ASSERT_RESOURCE_ID(181); +ASSERT_RESOURCE_ID(182); +ASSERT_RESOURCE_ID(183); +ASSERT_RESOURCE_ID(184); +ASSERT_RESOURCE_ID(185); +ASSERT_RESOURCE_ID(186); +ASSERT_RESOURCE_ID(187); +ASSERT_RESOURCE_ID(188); +ASSERT_RESOURCE_ID(189); +ASSERT_RESOURCE_ID(190); +ASSERT_RESOURCE_ID(191); +ASSERT_RESOURCE_ID(192); +ASSERT_RESOURCE_ID(193); +ASSERT_RESOURCE_ID(194); +ASSERT_RESOURCE_ID(195); +ASSERT_RESOURCE_ID(196); +ASSERT_RESOURCE_ID(197); +ASSERT_RESOURCE_ID(198); +ASSERT_RESOURCE_ID(199); +ASSERT_RESOURCE_ID(200); +ASSERT_RESOURCE_ID(201); +ASSERT_RESOURCE_ID(202); +ASSERT_RESOURCE_ID(203); +ASSERT_RESOURCE_ID(204); +ASSERT_RESOURCE_ID(205); +ASSERT_RESOURCE_ID(206); +ASSERT_RESOURCE_ID(207); +ASSERT_RESOURCE_ID(208); +ASSERT_RESOURCE_ID(209); +ASSERT_RESOURCE_ID(210); +ASSERT_RESOURCE_ID(211); +ASSERT_RESOURCE_ID(212); +ASSERT_RESOURCE_ID(213); +ASSERT_RESOURCE_ID(214); +ASSERT_RESOURCE_ID(215); +ASSERT_RESOURCE_ID(216); +ASSERT_RESOURCE_ID(217); +ASSERT_RESOURCE_ID(218); +ASSERT_RESOURCE_ID(219); +ASSERT_RESOURCE_ID(220); +ASSERT_RESOURCE_ID(221); +ASSERT_RESOURCE_ID(222); +ASSERT_RESOURCE_ID(223); +ASSERT_RESOURCE_ID(224); +ASSERT_RESOURCE_ID(225); +ASSERT_RESOURCE_ID(226); +ASSERT_RESOURCE_ID(227); +ASSERT_RESOURCE_ID(228); +ASSERT_RESOURCE_ID(229); +ASSERT_RESOURCE_ID(230); +ASSERT_RESOURCE_ID(231); +ASSERT_RESOURCE_ID(232); +ASSERT_RESOURCE_ID(233); +ASSERT_RESOURCE_ID(234); +ASSERT_RESOURCE_ID(235); +ASSERT_RESOURCE_ID(236); +ASSERT_RESOURCE_ID(237); +ASSERT_RESOURCE_ID(238); +ASSERT_RESOURCE_ID(239); +ASSERT_RESOURCE_ID(240); +ASSERT_RESOURCE_ID(241); +ASSERT_RESOURCE_ID(242); +ASSERT_RESOURCE_ID(243); +ASSERT_RESOURCE_ID(244); +ASSERT_RESOURCE_ID(245); +ASSERT_RESOURCE_ID(246); +ASSERT_RESOURCE_ID(247); +ASSERT_RESOURCE_ID(248); +ASSERT_RESOURCE_ID(249); +ASSERT_RESOURCE_ID(250); +ASSERT_RESOURCE_ID(251); +ASSERT_RESOURCE_ID(252); +ASSERT_RESOURCE_ID(253); +ASSERT_RESOURCE_ID(254); +ASSERT_RESOURCE_ID(255); +ASSERT_RESOURCE_ID(256); +ASSERT_RESOURCE_ID(257); +ASSERT_RESOURCE_ID(258); +ASSERT_RESOURCE_ID(259); +ASSERT_RESOURCE_ID(260); +ASSERT_RESOURCE_ID(261); +ASSERT_RESOURCE_ID(262); +ASSERT_RESOURCE_ID(263); +ASSERT_RESOURCE_ID(264); +ASSERT_RESOURCE_ID(265); +ASSERT_RESOURCE_ID(266); +ASSERT_RESOURCE_ID(267); +ASSERT_RESOURCE_ID(268); +ASSERT_RESOURCE_ID(269); +ASSERT_RESOURCE_ID(270); +ASSERT_RESOURCE_ID(271); +ASSERT_RESOURCE_ID(272); +ASSERT_RESOURCE_ID(273); +ASSERT_RESOURCE_ID(274); +ASSERT_RESOURCE_ID(275); +ASSERT_RESOURCE_ID(276); +ASSERT_RESOURCE_ID(277); +ASSERT_RESOURCE_ID(278); +ASSERT_RESOURCE_ID(279); +ASSERT_RESOURCE_ID(280); +ASSERT_RESOURCE_ID(281); +ASSERT_RESOURCE_ID(282); +ASSERT_RESOURCE_ID(283); +ASSERT_RESOURCE_ID(284); +ASSERT_RESOURCE_ID(285); +ASSERT_RESOURCE_ID(286); +ASSERT_RESOURCE_ID(287); +ASSERT_RESOURCE_ID(288); +ASSERT_RESOURCE_ID(289); +ASSERT_RESOURCE_ID(290); +ASSERT_RESOURCE_ID(291); +ASSERT_RESOURCE_ID(292); +ASSERT_RESOURCE_ID(293); +ASSERT_RESOURCE_ID(294); +ASSERT_RESOURCE_ID(295); +ASSERT_RESOURCE_ID(296); +ASSERT_RESOURCE_ID(297); +ASSERT_RESOURCE_ID(298); +ASSERT_RESOURCE_ID(299); +ASSERT_RESOURCE_ID(300); +ASSERT_RESOURCE_ID(301); +ASSERT_RESOURCE_ID(302); +ASSERT_RESOURCE_ID(303); +ASSERT_RESOURCE_ID(304); +ASSERT_RESOURCE_ID(305); +ASSERT_RESOURCE_ID(306); +ASSERT_RESOURCE_ID(307); +ASSERT_RESOURCE_ID(308); +ASSERT_RESOURCE_ID(309); +ASSERT_RESOURCE_ID(310); +ASSERT_RESOURCE_ID(311); +ASSERT_RESOURCE_ID(312); +ASSERT_RESOURCE_ID(313); +ASSERT_RESOURCE_ID(314); +ASSERT_RESOURCE_ID(315); +ASSERT_RESOURCE_ID(316); +ASSERT_RESOURCE_ID(317); +ASSERT_RESOURCE_ID(318); +ASSERT_RESOURCE_ID(319); +ASSERT_RESOURCE_ID(320); +ASSERT_RESOURCE_ID(321); +ASSERT_RESOURCE_ID(322); +ASSERT_RESOURCE_ID(323); +ASSERT_RESOURCE_ID(324); +ASSERT_RESOURCE_ID(325); +ASSERT_RESOURCE_ID(326); +ASSERT_RESOURCE_ID(327); +ASSERT_RESOURCE_ID(328); +ASSERT_RESOURCE_ID(329); +ASSERT_RESOURCE_ID(330); +ASSERT_RESOURCE_ID(331); +ASSERT_RESOURCE_ID(332); +ASSERT_RESOURCE_ID(333); +ASSERT_RESOURCE_ID(334); +ASSERT_RESOURCE_ID(335); +ASSERT_RESOURCE_ID(336); +ASSERT_RESOURCE_ID(337); +ASSERT_RESOURCE_ID(338); +ASSERT_RESOURCE_ID(339); +ASSERT_RESOURCE_ID(340); +ASSERT_RESOURCE_ID(341); +ASSERT_RESOURCE_ID(342); +ASSERT_RESOURCE_ID(343); +ASSERT_RESOURCE_ID(344); +ASSERT_RESOURCE_ID(345); +ASSERT_RESOURCE_ID(346); +ASSERT_RESOURCE_ID(347); +ASSERT_RESOURCE_ID(348); +ASSERT_RESOURCE_ID(349); -// Get the mapping of topic to information such as its parent topic, -// valid taxonomy, and message id for its localized name string -const base:: - fixed_flat_map<Topic, SemanticTreeNodeInformation, kSemanticTreeSize>& - GetSemanticTreeInternal() { - static const base::NoDestructor<base::fixed_flat_map< - Topic, SemanticTreeNodeInformation, kSemanticTreeSize>> - kSemanticTreeMap(base::MakeFixedFlatMapSorted< - Topic, SemanticTreeNodeInformation>( - {{Topic(1), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_1)})}, - {Topic(2), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_2)})}, - {Topic(3), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_3)})}, - {Topic(4), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_4)})}, - {Topic(5), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_5)})}, - {Topic(6), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_6)})}, - {Topic(7), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_7)})}, - {Topic(8), - SemanticTreeNodeInformation( - Topic(7), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_8)})}, - {Topic(9), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_9)})}, - {Topic(10), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_10)})}, - {Topic(11), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_11)})}, - {Topic(12), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_12)})}, - {Topic(13), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_13)})}, - {Topic(14), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_14)})}, - {Topic(15), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_15)})}, - {Topic(16), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_16)})}, - {Topic(17), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_17)})}, - {Topic(18), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_18)})}, - {Topic(19), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_19)})}, - {Topic(20), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_20)})}, - {Topic(21), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_21)})}, - {Topic(22), - SemanticTreeNodeInformation( - Topic(12), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_22)})}, - {Topic(23), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_23)})}, - {Topic(24), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_24)})}, - {Topic(25), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_25)})}, - {Topic(26), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_26)})}, - {Topic(27), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_27)})}, - {Topic(28), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_28)})}, - {Topic(29), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_29)})}, - {Topic(30), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_30)})}, - {Topic(31), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_31)})}, - {Topic(32), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_32)})}, - {Topic(33), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_33)})}, - {Topic(34), - SemanticTreeNodeInformation( - Topic(33), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_34)})}, - {Topic(35), - SemanticTreeNodeInformation( - Topic(33), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_35)})}, - {Topic(36), - SemanticTreeNodeInformation( - Topic(33), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_36)})}, - {Topic(37), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_37)})}, - {Topic(38), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_38)})}, - {Topic(39), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_39)})}, - {Topic(40), - SemanticTreeNodeInformation( - Topic(23), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_40)})}, - {Topic(41), - SemanticTreeNodeInformation( - Topic(40), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_41)})}, - {Topic(42), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_42)})}, - {Topic(43), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_43)})}, - {Topic(44), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_44)})}, - {Topic(45), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_45)})}, - {Topic(46), - SemanticTreeNodeInformation( - Topic(45), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_46)})}, - {Topic(47), - SemanticTreeNodeInformation( - Topic(45), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_47)})}, - {Topic(48), - SemanticTreeNodeInformation( - Topic(45), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_48)})}, - {Topic(49), - SemanticTreeNodeInformation( - Topic(48), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_49)})}, - {Topic(50), - SemanticTreeNodeInformation( - Topic(45), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_50)})}, - {Topic(51), - SemanticTreeNodeInformation( - Topic(45), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_51)})}, - {Topic(52), - SemanticTreeNodeInformation( - Topic(45), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_52)})}, - {Topic(53), - SemanticTreeNodeInformation( - Topic(1), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_53)})}, - {Topic(54), - SemanticTreeNodeInformation( - Topic(53), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_54)})}, - {Topic(55), - SemanticTreeNodeInformation( - Topic(53), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_55)})}, - {Topic(56), - SemanticTreeNodeInformation( - Topic(53), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_56)})}, - {Topic(57), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_57)})}, - {Topic(58), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_58)})}, - {Topic(59), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_59)})}, - {Topic(60), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_60)})}, - {Topic(61), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_61)})}, - {Topic(62), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_62)})}, - {Topic(63), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_63)})}, - {Topic(64), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_64)})}, - {Topic(65), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_65)})}, - {Topic(66), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_66)})}, - {Topic(67), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_67)})}, - {Topic(68), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_68)})}, - {Topic(69), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_69)})}, - {Topic(70), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_70)})}, - {Topic(71), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_71)})}, - {Topic(72), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_72)})}, - {Topic(73), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_73)})}, - {Topic(74), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_74)})}, - {Topic(75), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_75)})}, - {Topic(76), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_76)})}, - {Topic(77), - SemanticTreeNodeInformation( - Topic(76), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_77)})}, - {Topic(78), - SemanticTreeNodeInformation( - Topic(62), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_78)})}, - {Topic(79), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_79)})}, - {Topic(80), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_80)})}, - {Topic(81), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_81)})}, - {Topic(82), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_82)})}, - {Topic(83), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_83)})}, - {Topic(84), - SemanticTreeNodeInformation( - Topic(83), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_84)})}, - {Topic(85), - SemanticTreeNodeInformation( - Topic(57), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_85)})}, - {Topic(86), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_86)})}, - {Topic(87), - SemanticTreeNodeInformation( - Topic(86), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_87)})}, - {Topic(88), - SemanticTreeNodeInformation( - Topic(86), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_88)})}, - {Topic(89), - SemanticTreeNodeInformation( - Topic(88), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_89)})}, - {Topic(90), - SemanticTreeNodeInformation( - Topic(88), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_90)})}, - {Topic(91), - SemanticTreeNodeInformation( - Topic(88), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_91)})}, - {Topic(92), - SemanticTreeNodeInformation( - Topic(88), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_92)})}, - {Topic(93), - SemanticTreeNodeInformation( - Topic(88), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_93)})}, - {Topic(94), - SemanticTreeNodeInformation( - Topic(88), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_94)})}, - {Topic(95), - SemanticTreeNodeInformation( - Topic(88), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_95)})}, - {Topic(96), - SemanticTreeNodeInformation( - Topic(86), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_96)})}, - {Topic(97), - SemanticTreeNodeInformation( - Topic(86), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_97)})}, - {Topic(98), - SemanticTreeNodeInformation( - Topic(97), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_98)})}, - {Topic(99), - SemanticTreeNodeInformation( - Topic(86), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_99)})}, - {Topic(100), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_100)})}, - {Topic(101), - SemanticTreeNodeInformation( - Topic(100), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_101)})}, - {Topic(102), - SemanticTreeNodeInformation( - Topic(100), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_102)})}, - {Topic(103), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_103)})}, - {Topic(104), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_104)})}, - {Topic(105), - SemanticTreeNodeInformation( - Topic(104), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_105)})}, - {Topic(106), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_106)})}, - {Topic(107), - SemanticTreeNodeInformation( - Topic(106), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_107)})}, - {Topic(108), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_108)})}, - {Topic(109), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_109)})}, - {Topic(110), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_110)})}, - {Topic(111), - SemanticTreeNodeInformation( - Topic(110), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_111)})}, - {Topic(112), - SemanticTreeNodeInformation( - Topic(110), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_112)})}, - {Topic(113), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_113)})}, - {Topic(114), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_114)})}, - {Topic(115), - SemanticTreeNodeInformation( - Topic(114), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_115)})}, - {Topic(116), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_116)})}, - {Topic(117), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_117)})}, - {Topic(118), - SemanticTreeNodeInformation( - Topic(117), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_118)})}, - {Topic(119), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_119)})}, - {Topic(120), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_120)})}, - {Topic(121), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_121)})}, - {Topic(122), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_122)})}, - {Topic(123), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_123)})}, - {Topic(124), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_124)})}, - {Topic(125), - SemanticTreeNodeInformation( - Topic(103), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_125)})}, - {Topic(126), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_126)})}, - {Topic(127), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_127)})}, - {Topic(128), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_128)})}, - {Topic(129), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_129)})}, - {Topic(130), - SemanticTreeNodeInformation( - Topic(129), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_130)})}, - {Topic(131), - SemanticTreeNodeInformation( - Topic(129), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_131)})}, - {Topic(132), - SemanticTreeNodeInformation( - Topic(129), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_132)})}, - {Topic(133), - SemanticTreeNodeInformation( - Topic(129), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_133)})}, - {Topic(134), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_134)})}, - {Topic(135), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_135)})}, - {Topic(136), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_136)})}, - {Topic(137), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_137)})}, - {Topic(138), - SemanticTreeNodeInformation( - Topic(137), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_138)})}, - {Topic(139), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_139)})}, - {Topic(140), - SemanticTreeNodeInformation( - Topic(126), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_140)})}, - {Topic(141), - SemanticTreeNodeInformation( - Topic(140), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_141)})}, - {Topic(142), - SemanticTreeNodeInformation( - Topic(140), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_142)})}, - {Topic(143), - SemanticTreeNodeInformation( - Topic(140), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_143)})}, - {Topic(144), - SemanticTreeNodeInformation( - Topic(140), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_144)})}, - {Topic(145), - SemanticTreeNodeInformation( - Topic(140), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_145)})}, - {Topic(146), - SemanticTreeNodeInformation( - Topic(140), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_146)})}, - {Topic(147), - SemanticTreeNodeInformation( - Topic(140), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_147)})}, - {Topic(148), - SemanticTreeNodeInformation( - Topic(140), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_148)})}, - {Topic(149), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_149)})}, - {Topic(150), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_150)})}, - {Topic(151), - SemanticTreeNodeInformation( - Topic(150), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_151)})}, - {Topic(152), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_152)})}, - {Topic(153), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_153)})}, - {Topic(154), - SemanticTreeNodeInformation( - Topic(153), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_154)})}, - {Topic(155), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_155)})}, - {Topic(156), - SemanticTreeNodeInformation( - Topic(155), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_156)})}, - {Topic(157), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_157)})}, - {Topic(158), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_158)})}, - {Topic(159), - SemanticTreeNodeInformation( - Topic(158), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_159)})}, - {Topic(160), - SemanticTreeNodeInformation( - Topic(158), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_160)})}, - {Topic(161), - SemanticTreeNodeInformation( - Topic(158), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_161)})}, - {Topic(162), - SemanticTreeNodeInformation( - Topic(158), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_162)})}, - {Topic(163), - SemanticTreeNodeInformation( - Topic(158), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_163)})}, - {Topic(164), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_164)})}, - {Topic(165), - SemanticTreeNodeInformation( - Topic(164), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_165)})}, - {Topic(166), - SemanticTreeNodeInformation( - Topic(164), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_166)})}, - {Topic(167), - SemanticTreeNodeInformation( - Topic(164), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_167)})}, - {Topic(168), - SemanticTreeNodeInformation( - Topic(164), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_168)})}, - {Topic(169), - SemanticTreeNodeInformation( - Topic(164), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_169)})}, - {Topic(170), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_170)})}, - {Topic(171), - SemanticTreeNodeInformation( - Topic(149), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_171)})}, - {Topic(172), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_172)})}, - {Topic(173), - SemanticTreeNodeInformation( - Topic(172), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_173)})}, - {Topic(174), - SemanticTreeNodeInformation( - Topic(173), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_174)})}, - {Topic(175), - SemanticTreeNodeInformation( - Topic(173), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_175)})}, - {Topic(176), - SemanticTreeNodeInformation( - Topic(175), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_176)})}, - {Topic(177), - SemanticTreeNodeInformation( - Topic(176), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_177)})}, - {Topic(178), - SemanticTreeNodeInformation( - Topic(173), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_178)})}, - {Topic(179), - SemanticTreeNodeInformation( - Topic(172), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_179)})}, - {Topic(180), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_180)})}, - {Topic(181), - SemanticTreeNodeInformation( - Topic(180), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_181)})}, - {Topic(182), - SemanticTreeNodeInformation( - Topic(180), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_182)})}, - {Topic(183), - SemanticTreeNodeInformation( - Topic(180), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_183)})}, - {Topic(184), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_184)})}, - {Topic(185), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_185)})}, - {Topic(186), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_186)})}, - {Topic(187), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_187)})}, - {Topic(188), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_188)})}, - {Topic(189), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_189)})}, - {Topic(190), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_190)})}, - {Topic(191), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_191)})}, - {Topic(192), - SemanticTreeNodeInformation( - Topic(183), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_192)})}, - {Topic(193), - SemanticTreeNodeInformation( - Topic(180), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_193)})}, - {Topic(194), - SemanticTreeNodeInformation( - Topic(180), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_194)})}, - {Topic(195), - SemanticTreeNodeInformation( - Topic(180), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_195)})}, - {Topic(196), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_196)})}, - {Topic(197), - SemanticTreeNodeInformation( - Topic(196), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_197)})}, - {Topic(198), - SemanticTreeNodeInformation( - Topic(196), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_198)})}, - {Topic(199), - SemanticTreeNodeInformation( - Topic(196), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_199)})}, - {Topic(200), - SemanticTreeNodeInformation( - Topic(196), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_200)})}, - {Topic(201), - SemanticTreeNodeInformation( - Topic(196), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_201)})}, - {Topic(202), - SemanticTreeNodeInformation( - Topic(201), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_202)})}, - {Topic(203), - SemanticTreeNodeInformation( - Topic(201), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_203)})}, - {Topic(204), - SemanticTreeNodeInformation( - Topic(196), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_204)})}, - {Topic(205), - SemanticTreeNodeInformation( - Topic(196), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_205)})}, - {Topic(206), - SemanticTreeNodeInformation( - Topic(196), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_206)})}, - {Topic(207), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_207)})}, - {Topic(208), - SemanticTreeNodeInformation( - Topic(207), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_208)})}, - {Topic(209), - SemanticTreeNodeInformation( - Topic(207), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_209)})}, - {Topic(210), - SemanticTreeNodeInformation( - Topic(207), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_210)})}, - {Topic(211), - SemanticTreeNodeInformation( - Topic(207), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_211)})}, - {Topic(212), - SemanticTreeNodeInformation( - Topic(207), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_212)})}, - {Topic(213), - SemanticTreeNodeInformation( - Topic(207), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_213)})}, - {Topic(214), - SemanticTreeNodeInformation( - Topic(207), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_214)})}, - {Topic(215), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_215)})}, - {Topic(216), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_216)})}, - {Topic(217), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_217)})}, - {Topic(218), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_218)})}, - {Topic(219), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_219)})}, - {Topic(220), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_220)})}, - {Topic(221), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_221)})}, - {Topic(222), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_222)})}, - {Topic(223), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_223)})}, - {Topic(224), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_224)})}, - {Topic(225), - SemanticTreeNodeInformation( - Topic(215), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_225)})}, - {Topic(226), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_226)})}, - {Topic(227), - SemanticTreeNodeInformation( - Topic(226), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_227)})}, - {Topic(228), - SemanticTreeNodeInformation( - Topic(227), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_228)})}, - {Topic(229), - SemanticTreeNodeInformation( - Topic(227), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_229)})}, - {Topic(230), - SemanticTreeNodeInformation( - Topic(227), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_230)})}, - {Topic(231), - SemanticTreeNodeInformation( - Topic(227), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_231)})}, - {Topic(232), - SemanticTreeNodeInformation( - Topic(231), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_232)})}, - {Topic(233), - SemanticTreeNodeInformation( - Topic(227), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_233)})}, - {Topic(234), - SemanticTreeNodeInformation( - Topic(227), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_234)})}, - {Topic(235), - SemanticTreeNodeInformation( - Topic(227), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_235)})}, - {Topic(236), - SemanticTreeNodeInformation( - Topic(226), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_236)})}, - {Topic(237), - SemanticTreeNodeInformation( - Topic(236), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_237)})}, - {Topic(238), - SemanticTreeNodeInformation( - Topic(236), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_238)})}, - {Topic(239), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_239)})}, - {Topic(240), - SemanticTreeNodeInformation( - Topic(239), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_240)})}, - {Topic(241), - SemanticTreeNodeInformation( - Topic(239), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_241)})}, - {Topic(242), - SemanticTreeNodeInformation( - Topic(241), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_242)})}, - {Topic(243), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_243)})}, - {Topic(244), - SemanticTreeNodeInformation( - Topic(243), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_244)})}, - {Topic(245), - SemanticTreeNodeInformation( - Topic(243), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_245)})}, - {Topic(246), - SemanticTreeNodeInformation( - Topic(243), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_246)})}, - {Topic(247), - SemanticTreeNodeInformation( - Topic(243), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_247)})}, - {Topic(248), - SemanticTreeNodeInformation( - Topic(243), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_248)})}, - {Topic(249), - SemanticTreeNodeInformation( - Topic(243), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_249)})}, - {Topic(250), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_250)})}, - {Topic(251), - SemanticTreeNodeInformation( - Topic(250), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_251)})}, - {Topic(252), - SemanticTreeNodeInformation( - Topic(250), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_252)})}, - {Topic(253), - SemanticTreeNodeInformation( - Topic(250), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_253)})}, - {Topic(254), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_254)})}, - {Topic(255), - SemanticTreeNodeInformation( - Topic(254), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_255)})}, - {Topic(256), - SemanticTreeNodeInformation( - Topic(255), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_256)})}, - {Topic(257), - SemanticTreeNodeInformation( - Topic(255), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_257)})}, - {Topic(258), - SemanticTreeNodeInformation( - Topic(255), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_258)})}, - {Topic(259), - SemanticTreeNodeInformation( - Topic(258), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_259)})}, - {Topic(260), - SemanticTreeNodeInformation( - Topic(258), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_260)})}, - {Topic(261), - SemanticTreeNodeInformation( - Topic(258), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_261)})}, - {Topic(262), - SemanticTreeNodeInformation( - Topic(254), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_262)})}, - {Topic(263), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_263)})}, - {Topic(264), - SemanticTreeNodeInformation( - Topic(263), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_264)})}, - {Topic(265), - SemanticTreeNodeInformation( - Topic(263), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_265)})}, - {Topic(266), - SemanticTreeNodeInformation( - Topic(265), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_266)})}, - {Topic(267), - SemanticTreeNodeInformation( - Topic(265), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_267)})}, - {Topic(268), - SemanticTreeNodeInformation( - Topic(265), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_268)})}, - {Topic(269), - SemanticTreeNodeInformation( - Topic(265), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_269)})}, - {Topic(270), - SemanticTreeNodeInformation( - Topic(265), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_270)})}, - {Topic(271), - SemanticTreeNodeInformation( - Topic(263), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_271)})}, - {Topic(272), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_272)})}, - {Topic(273), - SemanticTreeNodeInformation( - Topic(272), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_273)})}, - {Topic(274), - SemanticTreeNodeInformation( - Topic(272), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_274)})}, - {Topic(275), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_275)})}, - {Topic(276), - SemanticTreeNodeInformation( - Topic(275), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_276)})}, - {Topic(277), - SemanticTreeNodeInformation( - Topic(275), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_277)})}, - {Topic(278), - SemanticTreeNodeInformation( - Topic(275), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_278)})}, - {Topic(279), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_279)})}, - {Topic(280), - SemanticTreeNodeInformation( - Topic(279), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_280)})}, - {Topic(281), - SemanticTreeNodeInformation( - Topic(279), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_281)})}, - {Topic(282), - SemanticTreeNodeInformation( - Topic(281), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_282)})}, - {Topic(283), - SemanticTreeNodeInformation( - Topic(279), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_283)})}, - {Topic(284), - SemanticTreeNodeInformation( - Topic(279), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_284)})}, - {Topic(285), - SemanticTreeNodeInformation( - Topic(279), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_285)})}, - {Topic(286), - SemanticTreeNodeInformation( - Topic(279), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_286)})}, - {Topic(287), - SemanticTreeNodeInformation( - Topic(279), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_287)})}, - {Topic(288), - SemanticTreeNodeInformation( - Topic(279), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_288)})}, - {Topic(289), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_289)})}, - {Topic(290), - SemanticTreeNodeInformation( - Topic(289), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_290)})}, - {Topic(291), - SemanticTreeNodeInformation( - Topic(289), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_291)})}, - {Topic(292), - SemanticTreeNodeInformation( - Topic(289), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_292)})}, - {Topic(293), - SemanticTreeNodeInformation( - Topic(292), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_293)})}, - {Topic(294), - SemanticTreeNodeInformation( - Topic(289), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_294)})}, - {Topic(295), - SemanticTreeNodeInformation( - Topic(289), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_295)})}, - {Topic(296), - SemanticTreeNodeInformation( - Topic(289), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_296)})}, - {Topic(297), - SemanticTreeNodeInformation( - Topic(289), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_297)})}, - {Topic(298), - SemanticTreeNodeInformation( - Topic(289), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_298)})}, - {Topic(299), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_299)})}, - {Topic(300), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_300)})}, - {Topic(301), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_301)})}, - {Topic(302), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_302)})}, - {Topic(303), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_303)})}, - {Topic(304), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_304)})}, - {Topic(305), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_305)})}, - {Topic(306), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_306)})}, - {Topic(307), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_307)})}, - {Topic(308), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_308)})}, - {Topic(309), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_309)})}, - {Topic(310), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_310)})}, - {Topic(311), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_311)})}, - {Topic(312), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_312)})}, - {Topic(313), - SemanticTreeNodeInformation( - Topic(312), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_313)})}, - {Topic(314), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_314)})}, - {Topic(315), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_315)})}, - {Topic(316), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_316)})}, - {Topic(317), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_317)})}, - {Topic(318), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_318)})}, - {Topic(319), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_319)})}, - {Topic(320), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_320)})}, - {Topic(321), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_321)})}, - {Topic(322), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_322)})}, - {Topic(323), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_323)})}, - {Topic(324), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_324)})}, - {Topic(325), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_325)})}, - {Topic(326), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_326)})}, - {Topic(327), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_327)})}, - {Topic(328), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_328)})}, - {Topic(329), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_329)})}, - {Topic(330), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_330)})}, - {Topic(331), - SemanticTreeNodeInformation( - Topic(299), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_331)})}, - {Topic(332), - SemanticTreeNodeInformation( - absl::nullopt, - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_332)})}, - {Topic(333), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_333)})}, - {Topic(334), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_334)})}, - {Topic(335), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_335)})}, - {Topic(336), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_336)})}, - {Topic(337), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_337)})}, - {Topic(338), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_338)})}, - {Topic(339), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_339)})}, - {Topic(340), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_340)})}, - {Topic(341), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_341)})}, - {Topic(342), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_342)})}, - {Topic(343), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_343)})}, - {Topic(344), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_344)})}, - {Topic(345), - SemanticTreeNodeInformation( - Topic(344), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_345)})}, - {Topic(346), - SemanticTreeNodeInformation( - Topic(344), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_346)})}, - {Topic(347), - SemanticTreeNodeInformation( - Topic(344), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_347)})}, - {Topic(348), - SemanticTreeNodeInformation( - Topic(344), - {SemanticTreeTaxonomyInformation( - 1, IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_348)})}, - {Topic(349), - SemanticTreeNodeInformation( - Topic(332), - {SemanticTreeTaxonomyInformation( - 1, - IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_349)})}})); - - return *kSemanticTreeMap; +bool IsTopicValid(Topic topic) { + int i = static_cast<int>(topic); + return i > 0 && i <= static_cast<int>(kNumTopics); } -void GetDescendantTopicsHelper( - const Topic& topic, - const std::map<Topic, std::vector<Topic>>& parent_child_map, - std::set<Topic>& result) { - auto parent_child_it = parent_child_map.find(topic); - if (parent_child_it == parent_child_map.end()) { - return; - } +Topic GetParentTopic(Topic topic) { + return Topic(kChildToParent[static_cast<int>(topic) - 1]); +} - const std::vector<Topic>& child_topics = parent_child_it->second; - for (const Topic& child_topic : child_topics) { - if (result.contains(child_topic)) { - continue; +bool IsAncestorTopic(Topic src, Topic target) { + while (src != kNullTopic) { + src = GetParentTopic(src); + if (src == target) { + return true; } - result.insert(child_topic); - GetDescendantTopicsHelper(child_topic, parent_child_map, result); } + return false; } } // namespace SemanticTree::SemanticTree() = default; SemanticTree::~SemanticTree() = default; -void SemanticTree::InitializeParentToChildTopicMap() { - std::map<Topic, std::vector<Topic>> parent_to_child_topic_map; - for (const auto& [child, node_info] : GetSemanticTreeInternal()) { - if (node_info.parent_topic.has_value()) { - parent_to_child_topic_map[node_info.parent_topic.value()].emplace_back( - child); +std::vector<Topic> SemanticTree::GetDescendantTopics(const Topic& topic) { + std::vector<Topic> ret; + for (size_t i = 0; i < kNumTopics; ++i) { + Topic cur_topic = Topic(i + 1); + if (IsAncestorTopic(cur_topic, topic)) { + ret.push_back(cur_topic); } } - parent_to_child_topic_map_.emplace(std::move(parent_to_child_topic_map)); -} - -std::set<Topic> SemanticTree::GetDescendantTopics(const Topic& topic) { - if (!parent_to_child_topic_map_.has_value()) { - InitializeParentToChildTopicMap(); - } - std::set<Topic> descendant_topics; - GetDescendantTopicsHelper(topic, parent_to_child_topic_map_.value(), - descendant_topics); - return descendant_topics; + return ret; } std::vector<Topic> SemanticTree::GetAncestorTopics(const Topic& topic) { std::vector<Topic> ancestor_topics; - base::fixed_flat_map<Topic, SemanticTreeNodeInformation, - kSemanticTreeSize>::const_iterator tree_node_it = - GetSemanticTreeInternal().find(topic); - while (tree_node_it != GetSemanticTreeInternal().end()) { - const SemanticTreeNodeInformation& node_info = tree_node_it->second; - if (!node_info.parent_topic.has_value()) { - break; + + if (IsTopicValid(topic)) { + Topic cur_topic = GetParentTopic(topic); + while (cur_topic != kNullTopic) { + ancestor_topics.push_back(cur_topic); + cur_topic = GetParentTopic(cur_topic); } - ancestor_topics.emplace_back(node_info.parent_topic.value()); - tree_node_it = - GetSemanticTreeInternal().find(node_info.parent_topic.value()); } return ancestor_topics; } @@ -1867,18 +449,11 @@ absl::optional<int> SemanticTree::GetLocalizedNameMessageId( const Topic& topic, int taxonomy_version) { - base::fixed_flat_map<Topic, SemanticTreeNodeInformation, - kSemanticTreeSize>::const_iterator tree_node_it = - GetSemanticTreeInternal().find(topic); - if (tree_node_it == GetSemanticTreeInternal().end()) { + if (!IsTopicValid(topic) || taxonomy_version != 1) { return absl::nullopt; } - for (const SemanticTreeTaxonomyInformation& taxonomy_info : - tree_node_it->second.taxonomy_information) { - if (taxonomy_info.taxonomy_version == taxonomy_version) { - return taxonomy_info.localized_name_message_id; - } - } - return absl::nullopt; + return IDS_PRIVACY_SANDBOX_TOPICS_TAXONOMY_V1_TOPIC_ID_1 + + static_cast<int>(topic) - 1; } -} // namespace browsing_topics \ No newline at end of file + +} // namespace browsing_topics
diff --git a/components/browsing_topics/common/semantic_tree.h b/components/browsing_topics/common/semantic_tree.h index 00b7ef7..36b336bf 100644 --- a/components/browsing_topics/common/semantic_tree.h +++ b/components/browsing_topics/common/semantic_tree.h
@@ -5,8 +5,6 @@ #ifndef COMPONENTS_BROWSING_TOPICS_COMMON_SEMANTIC_TREE_H_ #define COMPONENTS_BROWSING_TOPICS_COMMON_SEMANTIC_TREE_H_ -#include <map> -#include <set> #include <vector> #include "base/component_export.h" @@ -23,18 +21,10 @@ SemanticTree(); SemanticTree(const SemanticTree& other) = delete; ~SemanticTree(); - std::set<Topic> GetDescendantTopics(const Topic& topic); + std::vector<Topic> GetDescendantTopics(const Topic& topic); std::vector<Topic> GetAncestorTopics(const Topic& topic); absl::optional<int> GetLocalizedNameMessageId(const Topic& topic, int taxonomy_version); - - private: - void InitializeParentToChildTopicMap(); - - // `parent_to_child_topic_map_` is lazy initialized when GetDescendantTopics - // is first used - absl::optional<std::map<Topic, std::vector<Topic>>> - parent_to_child_topic_map_; }; } // namespace browsing_topics
diff --git a/components/browsing_topics/common/semantic_tree_unittest.cc b/components/browsing_topics/common/semantic_tree_unittest.cc index 0039d99..0b84e89 100644 --- a/components/browsing_topics/common/semantic_tree_unittest.cc +++ b/components/browsing_topics/common/semantic_tree_unittest.cc
@@ -16,33 +16,31 @@ }; TEST_F(SemanticTreeUnittest, GetDescendantTopicsTopicNotInMap) { - std::set<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(10000)); + std::vector<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(10000)); EXPECT_TRUE(topics.empty()); } TEST_F(SemanticTreeUnittest, GetDescendantTopicsNoChildren) { - std::set<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(8)); + std::vector<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(8)); EXPECT_TRUE(topics.empty()); } TEST_F(SemanticTreeUnittest, GetDescendantTopicsOneChild) { - std::set<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(7)); - EXPECT_FALSE(topics.empty()); - std::set<Topic> expected_descendants = {Topic(8)}; + std::vector<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(7)); + std::vector<Topic> expected_descendants = {Topic(8)}; EXPECT_EQ(topics, expected_descendants); } TEST_F(SemanticTreeUnittest, GetDescendantTopicsMultipleChildren) { - std::set<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(250)); - EXPECT_FALSE(topics.empty()); - std::set<Topic> expected_descendants = {Topic(251), Topic(252), Topic(253)}; + std::vector<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(250)); + std::vector<Topic> expected_descendants = {Topic(251), Topic(252), + Topic(253)}; EXPECT_EQ(topics, expected_descendants); } TEST_F(SemanticTreeUnittest, GetDescendantTopicsMultipleLevelsOfDescendants) { - std::set<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(255)); - EXPECT_FALSE(topics.empty()); - std::set<Topic> expected_descendants = { + std::vector<Topic> topics = semantic_tree_.GetDescendantTopics(Topic(255)); + std::vector<Topic> expected_descendants = { Topic(256), Topic(257), Topic(258), Topic(259), Topic(260), Topic(261), }; EXPECT_EQ(topics, expected_descendants);
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 6edf9c84..8bd5e5f2 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "20.30", - "log_list_timestamp": "2023-04-05T12:54:41Z", + "version": "20.31", + "log_list_timestamp": "2023-04-06T12:53:54Z", "operators": [ { "name": "Google",
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java index 230803c4..999401e 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/impl/CronetLoggerTest.java
@@ -281,7 +281,7 @@ builder.enableNetworkQualityEstimator(isNetworkQualityEstimatorEnabled); builder.setThreadPriority(threadPriority); - CronetEngine engine = builder.build(); + CronetEngine engine = mTestFramework.startEngine(); final CronetEngineBuilderInfo builderInfo = mTestLogger.getLastCronetEngineBuilderInfo(); final CronetVersion version = mTestLogger.getLastCronetVersion(); final CronetSource source = mTestLogger.getLastCronetSource(); @@ -388,6 +388,9 @@ assertEquals(2, mTestLogger.callsToLogCronetEngineCreation()); assertEquals(2, mTestLogger.callsToLogCronetTrafficInfo()); + + engine1.shutdown(); + engine2.shutdown(); } @Test
diff --git a/components/custom_handlers/protocol_handler_registry_unittest.cc b/components/custom_handlers/protocol_handler_registry_unittest.cc index ed82390..028f21de 100644 --- a/components/custom_handlers/protocol_handler_registry_unittest.cc +++ b/components/custom_handlers/protocol_handler_registry_unittest.cc
@@ -23,7 +23,7 @@ #include "components/sync_preferences/pref_service_syncable.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/user_prefs/user_prefs.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h" #include "content/public/test/test_renderer_host.h"
diff --git a/components/devtools/simple_devtools_protocol_client/simple_devtools_protocol_client.cc b/components/devtools/simple_devtools_protocol_client/simple_devtools_protocol_client.cc index e74bfcf..0c38ac9 100644 --- a/components/devtools/simple_devtools_protocol_client/simple_devtools_protocol_client.cc +++ b/components/devtools/simple_devtools_protocol_client/simple_devtools_protocol_client.cc
@@ -14,7 +14,6 @@ #include "base/memory/ptr_util.h" #include "base/strings/strcat.h" #include "base/strings/string_split.h" -#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" @@ -258,4 +257,4 @@ return weak_ptr_factory_.GetWeakPtr(); } -} // namespace simple_devtools_protocol_client \ No newline at end of file +} // namespace simple_devtools_protocol_client
diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedder_support/user_agent_utils.cc index 65a7477d..86e97af 100644 --- a/components/embedder_support/user_agent_utils.cc +++ b/components/embedder_support/user_agent_utils.cc
@@ -390,16 +390,25 @@ : content::BuildUserAgentFromProduct(product); } -std::string GetUserAgent( - ForceMajorVersionToMinorPosition force_major_to_minor, - UserAgentReductionEnterprisePolicyState user_agent_reduction) { +absl::optional<std::string> GetUserAgentFromCommandLine() { base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); if (command_line->HasSwitch(kUserAgent)) { std::string ua = command_line->GetSwitchValueASCII(kUserAgent); - if (net::HttpUtil::IsValidHeaderValue(ua)) + if (net::HttpUtil::IsValidHeaderValue(ua)) { return ua; + } LOG(WARNING) << "Ignored invalid value for flag --" << kUserAgent; } + return absl::nullopt; +} + +std::string GetUserAgent( + ForceMajorVersionToMinorPosition force_major_to_minor, + UserAgentReductionEnterprisePolicyState user_agent_reduction) { + absl::optional<std::string> custom_ua = GetUserAgentFromCommandLine(); + if (custom_ua.has_value()) { + return custom_ua.value(); + } if (base::FeatureList::IsEnabled(blink::features::kFullUserAgent)) return GetFullUserAgent(force_major_to_minor); @@ -412,14 +421,11 @@ std::string GetReducedUserAgent( ForceMajorVersionToMinorPosition force_major_to_minor) { - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(kUserAgent)) { - std::string ua = command_line->GetSwitchValueASCII(kUserAgent); - if (net::HttpUtil::IsValidHeaderValue(ua)) { - return ua; - } - LOG(WARNING) << "Ignored invalid value for flag --" << kUserAgent; + absl::optional<std::string> custom_ua = GetUserAgentFromCommandLine(); + if (custom_ua.has_value()) { + return custom_ua.value(); } + return content::GetReducedUserAgent( base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kUseMobileUserAgent), @@ -428,14 +434,11 @@ std::string GetFullUserAgent( ForceMajorVersionToMinorPosition force_major_to_minor) { - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(kUserAgent)) { - std::string ua = command_line->GetSwitchValueASCII(kUserAgent); - if (net::HttpUtil::IsValidHeaderValue(ua)) { - return ua; - } - LOG(WARNING) << "Ignored invalid value for flag --" << kUserAgent; + absl::optional<std::string> custom_ua = GetUserAgentFromCommandLine(); + if (custom_ua.has_value()) { + return custom_ua.value(); } + return GetUserAgentInternal( force_major_to_minor, UserAgentReductionEnterprisePolicyState::kForceDisabled); @@ -591,6 +594,13 @@ blink::UserAgentMetadata GetUserAgentMetadata(const PrefService* pref_service) { blink::UserAgentMetadata metadata; + // If users provide valid user-agent in the command line, return an default + // blank UserAgentMetadata values. + absl::optional<std::string> custom_ua = GetUserAgentFromCommandLine(); + if (custom_ua.has_value()) { + return metadata; + } + bool enable_updated_grease_by_policy = true; UserAgentOptions ua_options; if (pref_service) {
diff --git a/components/embedder_support/user_agent_utils_unittest.cc b/components/embedder_support/user_agent_utils_unittest.cc index 714f41e..a36d3ea 100644 --- a/components/embedder_support/user_agent_utils_unittest.cc +++ b/components/embedder_support/user_agent_utils_unittest.cc
@@ -442,6 +442,8 @@ EXPECT_EQ(GetReducedUserAgent(), custom_user_agent); EXPECT_EQ(GetFullUserAgent(), custom_user_agent); EXPECT_EQ(GetUserAgent(), custom_user_agent); + // Make sure return blank values for GetUserAgentMetadata(). + EXPECT_EQ(blink::UserAgentMetadata(), GetUserAgentMetadata()); } TEST_F(UserAgentUtilsTest, InvalidCustomUserAgent) {
diff --git a/components/history/core/browser/download_database.cc b/components/history/core/browser/download_database.cc index 42bf4a9..8c3c29e 100644 --- a/components/history/core/browser/download_database.cc +++ b/components/history/core/browser/download_database.cc
@@ -255,13 +255,13 @@ // // This GUID generation scheme is only used for migrated download rows and // assumes that the likelihood of a collision with a GUID generated via - // base::GenerateGUID() will be vanishingly small. + // base::GenerateUuid() will be vanishingly small. // // A previous version of this code generated GUIDs that used random bits for // all but the first 32-bits. I.e. the scheme didn't respect the 6 fixed bits // as prescribed for type 4 GUIDs. The resulting GUIDs are not believed to // have an elevated risk of collision with GUIDs generated via - // base::GenerateGUID() and are considered valid by all known consumers. Hence + // base::GenerateUuid() and are considered valid by all known consumers. Hence // no additional migration logic is being introduced to fix those GUIDs. sql::Statement select(GetDB().GetUniqueStatement( base::StringPrintf("SELECT id FROM %s", kDownloadsTable).c_str()));
diff --git a/components/history/core/browser/history_backend_db_unittest.cc b/components/history/core/browser/history_backend_db_unittest.cc index 77509fc..2f3c9ad1 100644 --- a/components/history/core/browser/history_backend_db_unittest.cc +++ b/components/history/core/browser/history_backend_db_unittest.cc
@@ -27,13 +27,13 @@ #include "base/format_macros.h" #include "base/functional/bind.h" #include "base/functional/callback_helpers.h" -#include "base/guid.h" #include "base/i18n/case_conversion.h" #include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" +#include "base/uuid.h" #include "components/history/core/browser/download_constants.h" #include "components/history/core/browser/download_row.h" #include "components/history/core/browser/history_constants.h" @@ -531,8 +531,8 @@ } bool IsValidRFC4122Ver4GUID(const std::string& guid) { - // base::IsValidGUID() doesn't restrict its validation to version (or subtype) - // 4 GUIDs as described in RFC 4122. So we check if base::IsValidGUID() thinks + // base::IsValidUuid() doesn't restrict its validation to version (or subtype) + // 4 GUIDs as described in RFC 4122. So we check if base::IsValidUuid() thinks // it's a valid GUID first, and then check the additional constraints. // // * Bits 4-7 of time_hi_and_version should be set to 0b0100 == 4 @@ -543,7 +543,7 @@ // // * All other bits should be random or pseudo random. // => http://dilbert.com/strip/2001-10-25 - return base::IsValidGUID(guid) && guid[14] == '4' && + return base::IsValidUuid(guid) && guid[14] == '4' && (guid[19] == '8' || guid[19] == '9' || guid[19] == 'A' || guid[19] == 'B' || guid[19] == 'a' || guid[19] == 'b'); }
diff --git a/components/invalidation/impl/per_user_topic_subscription_manager.cc b/components/invalidation/impl/per_user_topic_subscription_manager.cc index acd9497..8506b9a 100644 --- a/components/invalidation/impl/per_user_topic_subscription_manager.cc +++ b/components/invalidation/impl/per_user_topic_subscription_manager.cc
@@ -103,24 +103,6 @@ raw_ptr<base::Value::Dict> per_sender_pref_; }; -// Added in M76. -void MigratePrefs(PrefService* prefs, const std::string& project_id) { - if (!prefs->HasPrefPath(kActiveRegistrationTokenDeprecated)) { - return; - } - { - ScopedDictPrefUpdate token_update(prefs, kActiveRegistrationTokens); - token_update->Set(project_id, - prefs->GetString(kActiveRegistrationTokenDeprecated)); - } - - const auto& old_subscriptions = - prefs->GetDict(kTypeSubscribedForInvalidationsDeprecated); - prefs->SetDict(project_id, old_subscriptions.Clone()); - prefs->ClearPref(kActiveRegistrationTokenDeprecated); - prefs->ClearPref(kTypeSubscribedForInvalidationsDeprecated); -} - } // namespace // static @@ -211,7 +193,6 @@ identity_provider_(identity_provider), url_loader_factory_(url_loader_factory), project_id_(project_id), - migrate_prefs_(migrate_prefs), request_access_token_backoff_(&kBackoffPolicy) {} PerUserTopicSubscriptionManager::~PerUserTopicSubscriptionManager() = default; @@ -231,9 +212,6 @@ void PerUserTopicSubscriptionManager::Init() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (migrate_prefs_) { - MigratePrefs(pref_service_, project_id_); - } PerProjectDictionaryPrefUpdate update(pref_service_, project_id_); if (update->empty()) { return;
diff --git a/components/invalidation/impl/per_user_topic_subscription_manager.h b/components/invalidation/impl/per_user_topic_subscription_manager.h index faf8f2f..1401120 100644 --- a/components/invalidation/impl/per_user_topic_subscription_manager.h +++ b/components/invalidation/impl/per_user_topic_subscription_manager.h
@@ -145,8 +145,6 @@ const std::string project_id_; - const bool migrate_prefs_; - // Subscription or unsubscription requests that are either scheduled or // started, but not finished yet. std::map<Topic, std::unique_ptr<SubscriptionEntry>> pending_subscriptions_;
diff --git a/components/media_router/browser/mirroring_to_flinging_switcher.cc b/components/media_router/browser/mirroring_to_flinging_switcher.cc index 667d7b6e..4dc1ff1 100644 --- a/components/media_router/browser/mirroring_to_flinging_switcher.cc +++ b/components/media_router/browser/mirroring_to_flinging_switcher.cc
@@ -8,7 +8,7 @@ #include "components/media_router/browser/media_router_factory.h" #include "components/media_router/browser/presentation/web_contents_presentation_manager.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/presentation_request.h" #include "content/public/browser/web_contents.h"
diff --git a/components/page_info/core/about_this_site_service.cc b/components/page_info/core/about_this_site_service.cc index 50862bcb..88473d0 100644 --- a/components/page_info/core/about_this_site_service.cc +++ b/components/page_info/core/about_this_site_service.cc
@@ -35,12 +35,10 @@ AboutThisSiteService::AboutThisSiteService( std::unique_ptr<Client> client, TemplateURLService* template_url_service, - bool allow_missing_description, - bool allow_non_msbb_users) + bool allow_missing_description) : client_(std::move(client)), template_url_service_(template_url_service), - allow_missing_description_(allow_missing_description), - allow_non_msbb_users_(allow_non_msbb_users) {} + allow_missing_description_(allow_missing_description) {} absl::optional<proto::SiteInfo> AboutThisSiteService::GetAboutThisSiteInfo( const GURL& url, @@ -58,21 +56,12 @@ return absl::nullopt; } - if (!client_->IsOptimizationGuideAllowed() && !allow_non_msbb_users_) { + if (!client_->IsOptimizationGuideAllowed()) { RecordAboutThisSiteInteraction( AboutThisSiteInteraction::kNotShownOptimizationGuideNotAllowed); return absl::nullopt; } - if (!client_->IsOptimizationGuideAllowed() && allow_non_msbb_users_) { - RecordAboutThisSiteInteraction(AboutThisSiteInteraction::kShownWithoutMsbb); - - proto::SiteInfo site_info; - proto::MoreAbout* more_about = site_info.mutable_more_about(); - more_about->set_url(CreateMoreAboutUrl(url).spec()); - return site_info; - } - optimization_guide::OptimizationMetadata metadata; auto decision = client_->CanApplyOptimization(url, &metadata); absl::optional<proto::AboutThisSiteMetadata> about_this_site_metadata = @@ -144,12 +133,20 @@ } // static -GURL AboutThisSiteService::CreateMoreAboutUrl(const GURL& url) { +GURL AboutThisSiteService::CreateMoreAboutUrlForNavigation(const GURL& url) { GURL more_about_url = GURL("https://www.google.com/search"); + + // Strip paths of invalid urls + const std::string url_spec = + optimization_guide::IsValidURLForURLKeyedHint(url) + ? url.spec() + : url.GetWithEmptyPath().spec(); + more_about_url = - net::AppendQueryParameter(more_about_url, "q", "About " + url.spec()); + net::AppendQueryParameter(more_about_url, "q", "About " + url_spec); more_about_url = net::AppendQueryParameter(more_about_url, "tbm", "ilp"); - more_about_url = net::AppendQueryParameter(more_about_url, "ctx", "chrome"); + more_about_url = + net::AppendQueryParameter(more_about_url, "ctx", "chrome_nav"); return more_about_url; }
diff --git a/components/page_info/core/about_this_site_service.h b/components/page_info/core/about_this_site_service.h index 60dc952..c201432 100644 --- a/components/page_info/core/about_this_site_service.h +++ b/components/page_info/core/about_this_site_service.h
@@ -57,16 +57,15 @@ kNotShownNonGoogleDSE = 6, kNotShownLocalHost = 7, kNotShownOptimizationGuideNotAllowed = 8, - kShownWithoutMsbb = 9, + // kShownWithoutMsbb = 9 deprecated kSameTabNavigation = 10, - kMaxValue = kSameTabNavigation, + kMaxValue = kSameTabNavigation }; explicit AboutThisSiteService(std::unique_ptr<Client> client, TemplateURLService* template_url_service, - bool allow_missing_description, - bool allow_non_msbb_users); + bool allow_missing_description); ~AboutThisSiteService() override; AboutThisSiteService(const AboutThisSiteService&) = delete; @@ -77,7 +76,7 @@ const GURL& url, ukm::SourceId source_id) const; - static GURL CreateMoreAboutUrl(const GURL& url); + static GURL CreateMoreAboutUrlForNavigation(const GURL& url); static void OnAboutThisSiteRowClicked(bool with_description); static void OnOpenedDirectlyFromSidePanel(); static void OnSameTabNavigation(); @@ -88,7 +87,6 @@ std::unique_ptr<Client> client_; raw_ptr<TemplateURLService> template_url_service_; const bool allow_missing_description_; - const bool allow_non_msbb_users_; base::WeakPtrFactory<AboutThisSiteService> weak_ptr_factory_{this}; };
diff --git a/components/page_info/core/about_this_site_service_unittest.cc b/components/page_info/core/about_this_site_service_unittest.cc index 536dd17c..c1f526a 100644 --- a/components/page_info/core/about_this_site_service_unittest.cc +++ b/components/page_info/core/about_this_site_service_unittest.cc
@@ -85,7 +85,7 @@ return OptimizationGuideDecision::kUnknown; } -class AboutThisSiteServiceTest : public testing::TestWithParam<bool> { +class AboutThisSiteServiceTest : public testing::Test { public: void SetUp() override { auto client_mock = @@ -98,8 +98,7 @@ service_ = std::make_unique<AboutThisSiteService>( std::move(client_mock), template_url_service_.get(), - /*allow_missing_description*/ false, - /*allow_non_msbb_users*/ GetParam()); + /*allow_missing_description*/ false); } void SetOptimizationGuideAllowed(bool allowed) { @@ -117,12 +116,8 @@ std::unique_ptr<TemplateURLService> template_url_service_; }; -INSTANTIATE_TEST_SUITE_P(AllowNonMsbbUsers, - AboutThisSiteServiceTest, - testing::Bool()); - // Tests that correct proto messages are accepted. -TEST_P(AboutThisSiteServiceTest, ValidResponse) { +TEST_F(AboutThisSiteServiceTest, ValidResponse) { base::HistogramTester t; EXPECT_CALL(*client(), CanApplyOptimization(_, _)) .WillOnce(Invoke(&ReturnDescription)); @@ -139,7 +134,7 @@ } // Tests the language specific feature check. -TEST_P(AboutThisSiteServiceTest, FeatureCheck) { +TEST_F(AboutThisSiteServiceTest, FeatureCheck) { const char* enabled[]{"en-US", "en-UK", "en"}; const char* disabled[]{"da", "id", "zh-TW", "ja"}; const char* enabled_on_android[]{"pt", "pt-BR", "pt-PT", "fr", "fr-CA", "it", @@ -162,7 +157,7 @@ } // Tests that incorrect proto messages are discarded. -TEST_P(AboutThisSiteServiceTest, InvalidResponse) { +TEST_F(AboutThisSiteServiceTest, InvalidResponse) { base::HistogramTester t; EXPECT_CALL(*client(), CanApplyOptimization(_, _)) .WillOnce(Invoke(&ReturnInvalidDescription)); @@ -177,7 +172,7 @@ } // Tests that no response is handled. -TEST_P(AboutThisSiteServiceTest, NoResponse) { +TEST_F(AboutThisSiteServiceTest, NoResponse) { base::HistogramTester t; EXPECT_CALL(*client(), CanApplyOptimization(_, _)) .WillOnce(Invoke(&ReturnNoResult)); @@ -192,7 +187,7 @@ } // Tests that unknown response is handled. -TEST_P(AboutThisSiteServiceTest, Unknown) { +TEST_F(AboutThisSiteServiceTest, Unknown) { base::HistogramTester t; EXPECT_CALL(*client(), CanApplyOptimization(_, _)) .WillOnce(Invoke(&ReturnUnknown)); @@ -207,7 +202,7 @@ } // Tests that ATP not shown when Google is not set as DSE -TEST_P(AboutThisSiteServiceTest, NotShownWhenNoGoogleDSE) { +TEST_F(AboutThisSiteServiceTest, NotShownWhenNoGoogleDSE) { base::HistogramTester t; // Changing default provider to other than Google @@ -233,7 +228,7 @@ } // Tests that IP addresses and localhost are handled. -TEST_P(AboutThisSiteServiceTest, LocalHosts) { +TEST_F(AboutThisSiteServiceTest, LocalHosts) { base::HistogramTester t; auto info = service()->GetAboutThisSiteInfo( @@ -251,72 +246,65 @@ AboutThisSiteInteraction::kNotShownLocalHost, 3); } -class AboutThisSiteNonMsbbUsersNotAllowedServiceTest - : public AboutThisSiteServiceTest {}; - -INSTANTIATE_TEST_SUITE_P(AllowNonMsbbUsers, - AboutThisSiteNonMsbbUsersNotAllowedServiceTest, - testing::Values(false)); - -// Tests that disabled optimization guide is handled when non-MSBB users are not -// supported. -TEST_P(AboutThisSiteNonMsbbUsersNotAllowedServiceTest, MssbUsersNotAllowed) { - base::HistogramTester t; - SetOptimizationGuideAllowed(false); - - auto info = service()->GetAboutThisSiteInfo( - GURL("https://foo.com"), ukm::UkmRecorder::GetNewSourceID()); - EXPECT_FALSE(info.has_value()); - t.ExpectTotalCount("Security.PageInfo.AboutThisSiteStatus", 0); - t.ExpectUniqueSample( - "Security.PageInfo.AboutThisSiteInteraction", - AboutThisSiteInteraction::kNotShownOptimizationGuideNotAllowed, 1); -} - -class AboutThisSiteNonMsbbUsersAllowedServiceTest - : public AboutThisSiteServiceTest {}; - -INSTANTIATE_TEST_SUITE_P(AllowNonMsbbUsers, - AboutThisSiteNonMsbbUsersAllowedServiceTest, - testing::Values(true)); - -// Tests the local creation of the Diner URL when non-MSBB users are supported. -TEST_P(AboutThisSiteNonMsbbUsersAllowedServiceTest, - OptimizationNotAllowedAndNonMsbbUsersAllowed) { - base::HistogramTester t; - SetOptimizationGuideAllowed(false); - - auto info = service()->GetAboutThisSiteInfo( - GURL("https://foo.com"), ukm::UkmRecorder::GetNewSourceID()); - EXPECT_TRUE(info.has_value()); - EXPECT_EQ(info->more_about().url(), +// Tests the local creation of the Diner URL for navigation. +TEST_F(AboutThisSiteServiceTest, CreateMoreAboutUrlForNavigation) { + auto url = + service()->CreateMoreAboutUrlForNavigation(GURL("https://foo.com")); + EXPECT_EQ(url, "https://www.google.com/search?" "q=About+https%3A%2F%2Ffoo.com%2F" - "&tbm=ilp&ctx=chrome"); - - t.ExpectTotalCount("Security.PageInfo.AboutThisSiteStatus", 0); - t.ExpectUniqueSample("Security.PageInfo.AboutThisSiteInteraction", - AboutThisSiteInteraction::kShownWithoutMsbb, 1); + "&tbm=ilp&ctx=chrome_nav"); } -// Tests the local creation of the Diner URL with an anchor when when non-MSBB -// users are supported. -TEST_P(AboutThisSiteNonMsbbUsersAllowedServiceTest, - OptimizationNotAllowedAndNonMsbbUsersAllowedWithAnchor) { - base::HistogramTester t; - SetOptimizationGuideAllowed(false); - - auto info = service()->GetAboutThisSiteInfo( - GURL("https://foo.com#anchor"), ukm::UkmRecorder::GetNewSourceID()); - EXPECT_TRUE(info.has_value()); - EXPECT_EQ(info->more_about().url(), +// Tests the local creation of the Diner URL for navigation with anchor. +TEST_F(AboutThisSiteServiceTest, CreateMoreAboutUrlForNavigationWithAnchor) { + auto url = service()->CreateMoreAboutUrlForNavigation( + GURL("https://foo.com#anchor")); + EXPECT_EQ(url, "https://www.google.com/search?" "q=About+https%3A%2F%2Ffoo.com%2F%23anchor" - "&tbm=ilp&ctx=chrome"); - - t.ExpectTotalCount("Security.PageInfo.AboutThisSiteStatus", 0); - t.ExpectUniqueSample("Security.PageInfo.AboutThisSiteInteraction", - AboutThisSiteInteraction::kShownWithoutMsbb, 1); + "&tbm=ilp&ctx=chrome_nav"); } +// Tests the local creation of the Diner URL for navigation from an origin with +// path. +TEST_F(AboutThisSiteServiceTest, CreateMoreAboutUrlForNavigationWithPath) { + auto url = service()->CreateMoreAboutUrlForNavigation( + GURL("https://foo.com/index.html")); + EXPECT_EQ(url, + "https://www.google.com/search?" + "q=About+https%3A%2F%2Ffoo.com%2Findex.html" + "&tbm=ilp&ctx=chrome_nav"); +} + +// Tests the local creation of the Diner URL for navigation from an invalid +// origin. +TEST_F(AboutThisSiteServiceTest, CreateMoreAboutUrlForNavigationInvalid) { + auto url = service()->CreateMoreAboutUrlForNavigation( + GURL("https://127.0.0.1/index.html")); + EXPECT_EQ(url, + "https://www.google.com/search?" + "q=About+https%3A%2F%2F127.0.0.1%2F" + "&tbm=ilp&ctx=chrome_nav"); +} + +// Tests the local creation of the Diner URL for navigation from an invalid +// origin (blank). +TEST_F(AboutThisSiteServiceTest, CreateMoreAboutUrlForNavigationInvalidBlank) { + auto url = service()->CreateMoreAboutUrlForNavigation(GURL("about:blank")); + EXPECT_EQ(url, + "https://www.google.com/search?" + "q=About+" + "&tbm=ilp&ctx=chrome_nav"); +} + +// Tests the local creation of the Diner URL for navigation from an invalid +// origin (file). +TEST_F(AboutThisSiteServiceTest, CreateMoreAboutUrlForNavigationInvalidFile) { + auto url = service()->CreateMoreAboutUrlForNavigation(GURL("file:///a/b/c")); + EXPECT_EQ(url, + "https://www.google.com/search?" + "q=About+file%3A%2F%2F%2F" + "&tbm=ilp&ctx=chrome_nav"); +} } // namespace page_info
diff --git a/components/page_info/core/features.cc b/components/page_info/core/features.cc index 0cf329d..e19bc1a 100644 --- a/components/page_info/core/features.cc +++ b/components/page_info/core/features.cc
@@ -47,9 +47,6 @@ BASE_FEATURE(kPageInfoAboutThisSiteNonEn, "PageInfoAboutThisSiteNonEn", base::FEATURE_DISABLED_BY_DEFAULT); -BASE_FEATURE(kPageInfoAboutThisSiteNonMsbb, - "PageInfoAboutThisSiteNonMsbb", - base::FEATURE_DISABLED_BY_DEFAULT); const base::FeatureParam<bool> kShowSampleContent{&kPageInfoAboutThisSiteEn, "ShowSampleContent", false};
diff --git a/components/page_info/core/features.h b/components/page_info/core/features.h index 4a4f08e7..87f0fd8 100644 --- a/components/page_info/core/features.h +++ b/components/page_info/core/features.h
@@ -33,9 +33,6 @@ // Controls the feature for languages that are not enabled by default yet. BASE_DECLARE_FEATURE(kPageInfoAboutThisSiteNonEn); -// Enables the "About this site" section for non-MSBB users. -BASE_DECLARE_FEATURE(kPageInfoAboutThisSiteNonMsbb); - // Whether we show hard-coded content for some sites like https://example.com. extern const base::FeatureParam<bool> kShowSampleContent;
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index cffe85af..a67980e 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc
@@ -113,7 +113,7 @@ // Enables password saving and filling in cross-origin iframes on IOS. BASE_FEATURE(kIOSPasswordManagerCrossOriginIframeSupport, "IOSPasswordManagerCrossOriginIframeSupport", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); // Enables displaying and managing compromised, weak and reused credentials in // the Password Manager. @@ -267,6 +267,11 @@ "UnifiedPasswordManagerErrorMessages", base::FEATURE_ENABLED_BY_DEFAULT); +// Enables showing the warning about UPM migrating local passwords. +BASE_FEATURE(kUnifiedPasswordManagerLocalPasswordsMigrationWarning, + "UnifiedPasswordManagerLocalPasswordsMigrationWarning", + base::FEATURE_DISABLED_BY_DEFAULT); + // If enabled, the built-in sync functionality in PasswordSyncBridge becomes // unused, meaning that SyncService/SyncEngine will no longer download or // upload changes to/from the Sync server. Instead, an external Android-specific
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h index 8699899b..1b338990 100644 --- a/components/password_manager/core/common/password_manager_features.h +++ b/components/password_manager/core/common/password_manager_features.h
@@ -88,6 +88,7 @@ BASE_DECLARE_FEATURE(kUnifiedCredentialManagerDryRun); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerAndroid); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerErrorMessages); +BASE_DECLARE_FEATURE(kUnifiedPasswordManagerLocalPasswordsMigrationWarning); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerSyncUsingAndroidBackendOnly); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerReenrollment); BASE_DECLARE_FEATURE(kUnifiedPasswordManagerAndroidBranding);
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 766f75d..c7ad02c 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -100,6 +100,7 @@ <translation id="1079425471279127373">Si se establece la política, se permitirá que algunos orígenes de aplicaciones web de instalación forzada obtengan atributos de dispositivo (por ejemplo, el número de serie o el nombre de host) usando la API Device Attributes. La API Device Attributes es una lista de APIs web. Consulta https://wicg.github.io/WebApiDevice/device_attributes. Solo están disponibles para los orígenes que se correspondan con aplicaciones web de instalación forzada mediante <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> o la política que esté configurada en la sesión de kiosco.</translation> +<translation id="1079498696402787191">Usar el valor predeterminado para los hashes permitidos en los handshakes de TLS</translation> <translation id="1079801999187584280">No permitir el uso de herramientas para desarrolladores</translation> <translation id="1082802595100075771">Permitir a los usuarios elegir usar un servicio de Google anónimo para proporcionar descripciones automáticas para las imágenes no etiquetadas</translation> <translation id="1087057100912843460">Permitir las actualizaciones</translation> @@ -3230,6 +3231,7 @@ <translation id="3973371701361892765">No ocultar automáticamente los archivos</translation> <translation id="3977304360459208438">Utilizar el valor predeterminado para los paquetes de cifrado 3DES en TLS</translation> <translation id="3979738908158213640">Direcciones URL a las que se otorgará acceso para realizar la atestación del dispositivo durante la autenticación de SAML</translation> +<translation id="3982322576186033243">No permitir hashes no seguros en handshakes de TLS</translation> <translation id="3983162212222338509">La resolución de DNS del sistema puede ejecutarse dentro o fuera del proceso de red, o bien parcialmente dentro y fuera de él, en función de la configuración del sistema y las marcas de funciones.</translation> <translation id="3986700049001404598">Permitir que los usuarios finalicen procesos con el administrador de tareas de Chrome</translation> <translation id="398884292557092447">Si se asigna el valor "True" a esta política o no se le asigna ninguno, los usuarios podrán controlar las sugerencias de Autocompletar para la información de tarjetas de crédito en la interfaz. @@ -4635,6 +4637,7 @@ <translation id="5328965694451556034">Informar de inicio o cierre de sesión</translation> <translation id="5329018127554115226">El modo Alta eficiencia se inhabilitará.</translation> <translation id="5330684698007383292">Permitir que <ph name="PRODUCT_FRAME_NAME" /> procese los tipos de contenido que se indican a continuación</translation> +<translation id="5331342092479819688">Permitir hashes no seguros en handshakes de TLS</translation> <translation id="5331746669335642668">La política relativa a la nube de <ph name="PRODUCT_NAME" /> anula la política de la plataforma.</translation> <translation id="5334501839642146593">Nunca enviar métricas a Google</translation> <translation id="5340008866815063393">Habilitar informes de datos sobre políticas</translation> @@ -4943,6 +4946,9 @@ Si inhabilitas esta opción, no se podrán ver las contraseñas almacenadas sin cifrar en la ventana del gestor de contraseñas. Si habilitas esta opción o si no asignas un valor a esta política, los usuarios podrán ver sus contraseñas sin cifrar en el gestor de contraseñas.</translation> +<translation id="5618908165853580022">Esta política permite que <ph name="PRODUCT_NAME" /> use hashes antiguos no seguros durante el proceso de handshake de TLS. + + Si esta política no se configura, <ph name="PRODUCT_NAME" /> seguirá el proceso de lanzamiento predeterminado para bloquear los hashes no seguros. Si se habilita, <ph name="PRODUCT_NAME" /> permitirá que un servidor use hashes no seguros al negociar un handshake de TLS. Si se inhabilita, <ph name="PRODUCT_NAME" /> no permitirá que un servidor use hashes no seguros al negociar un handshake de TLS. Esta política se eliminará en la versión 119.</translation> <translation id="5619498195290770056">Si asignas un valor a esta política, podrás crear una lista de patrones de URL donde se especifique qué sitios no podrán establecer cookies. Si no se le asigna ningún valor, se utilizará <ph name="DEFAULT_COOKIES_SETTINGS_POLICY_NAME" /> en todos los sitios, si se ha definido previamente. Si no se ha definido, se aplicará la configuración personal del usuario. @@ -7552,6 +7558,13 @@ <translation id="7999336306414770162">Inhabilitar los informes sobre VPD del dispositivo</translation> <translation id="7999818120028621358">Habilitar informes de eventos de prevención de filtración de datos</translation> <translation id="8001701200415781021">Restringir las cuentas de Google que se pueden establecer como cuentas principales de navegador en <ph name="PRODUCT_NAME" /></translation> +<translation id="8005143535239983809">Esta política controla la capacidad del navegador de recordar automáticamente contraseñas en sitios web y de guardarlas en el gestor de contraseñas integrado. No restringe el acceso ni cambia el contenido de las contraseñas que se han guardado en el gestor de contraseñas y que posiblemente se hayan sincronizado con el perfil de la cuenta de Google y con <ph name="ANDROID_NAME" />. + +Si se habilita esta política, los usuarios podrán hacer que <ph name="PRODUCT_NAME" /> recuerde las contraseñas y se las proporcione la próxima vez que inicien sesión en un sitio. + +Si se inhabilita, los usuarios no podrán guardar las nuevas contraseñas, pero las contraseñas guardadas anteriormente seguirán funcionando. + +Si se define esta política, los usuarios no podrán modificarla en <ph name="PRODUCT_NAME" />. Si no se define, los usuarios podrán desactivar el guardado de contraseñas.</translation> <translation id="800595420827930383">Usar el verificador de certificados de la plataforma antigua</translation> <translation id="8006219716745491366">Si <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> está activada y se asigna un valor a <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" />, se especificará una lista con URL alternativas para extraer términos de búsqueda del buscador. Las URL deben incluir la cadena <ph name="SEARCH_TERM_MARKER" />. @@ -8330,6 +8343,11 @@ <translation id="8687958770985542440">Volver a habilitar la API v0 de componentes web hasta M84.</translation> <translation id="8693243869659262736">Utilizar cliente DNS integrado</translation> <translation id="8695006038397632296">Crear y subir solicitudes de instalación de extensiones a la consola de administración</translation> +<translation id="8695108198606654558">Esta política solo controla el comportamiento de importación al ejecutar el navegador por primera vez después de instalarlo. Permite una transición más fluida a <ph name="PRODUCT_NAME" /> en entornos donde se ha usado mucho otro navegador antes de instalarlo. Esta política no afecta a las funciones del gestor de contraseñas en las cuentas de Google. + +Si se habilita esta política, se importarán las contraseñas guardadas del navegador predeterminado anterior al ejecutar el nuevo navegador por primera vez. También se podrán importar manualmente desde la página de configuración. +Si se inhabilita esta política, no se importará ninguna contraseña guardada al ejecutar el nuevo navegador por primera vez y no se podrán importar manualmente desde la página de configuración. +Si la política no se define, no se importará ninguna contraseña guardada al ejecutar el nuevo navegador por primera vez, pero el usuario podrá hacerlo desde la página de configuración.</translation> <translation id="8698286761337647563">Número de días de antelación para notificar a los usuarios de SAML que su contraseña está a punto de caducar</translation> <translation id="8699392919012430269">Envía información sobre las conexiones Bluetooth del dispositivo. @@ -8368,6 +8386,7 @@ "http://notexample.com/", "http://example.com.invalid.com/" y "http://example.comabc/" solo serían coincidencias si se usa el modo Default. "http://acme.com/ABC" solo sería coincidencia en IESiteListMode.</translation> +<translation id="8728854710675158426">Hashes no seguros habilitados en handshakes de TLS</translation> <translation id="8734543507835977857">Iniciar los retrasos de gestión de energía y los límites de duración de sesión al comenzar la sesión</translation> <translation id="8736538322216687231">Aplicar el modo restringido en YouTube como mínimo</translation> <translation id="8744844164152340112">Controla el tema utilizado para renderizar la interfaz de usuario la primera vez que se usa el dispositivo y durante la sesión (oscuro/claro/automático).
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 7d1ce15..6a28a5a 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -100,6 +100,7 @@ <translation id="1079425471279127373">La configurazione di questo criterio consente di stabilire se consentire o meno ad alcune origini delle applicazioni web con installazione forzata di ricevere gli attributi dei dispositivi (ad esempio, numero di serie, nome host) usando l'API Device Attributes. L'API Device Attributes è un elenco di API web; visita la pagina https://wicg.github.io/WebApiDevice/device_attributes. Sono disponibili soltanto per le origini che corrispondono ad applicazioni web con installazione forzata tramite <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> o per quella configurata nella sessione kiosk.</translation> +<translation id="1079498696402787191">Usa il valore predefinito per gli hash consentiti in handshake TLS.</translation> <translation id="1079801999187584280">Non consentire l'utilizzo degli Strumenti per sviluppatori</translation> <translation id="1082802595100075771">Consenti agli utenti di scegliere un servizio Google anonimo per fornire descrizioni automatiche alle immagini senza etichetta</translation> <translation id="1087057100912843460">Consenti aggiornamenti</translation> @@ -3223,6 +3224,7 @@ <translation id="3973371701361892765">Non nascondere mai automaticamente la barra delle app</translation> <translation id="3977304360459208438">Utilizza l'impostazione predefinita per le suite di crittografia 3DES in TLS</translation> <translation id="3979738908158213640">URL a cui verrà concesso l'accesso per eseguire l'attestazione del dispositivo durante l'autenticazione SAML</translation> +<translation id="3982322576186033243">Non consentire hash non sicuri in handshake TLS</translation> <translation id="3983162212222338509">La risoluzione DNS di sistema può essere essere eseguita nel processo di rete, all'esterno del processo di rete o parzialmente all'interno e all'esterno, a seconda della configurazione del sistema e dei flag funzionalità.</translation> <translation id="3986700049001404598">Consenti agli utenti di terminare i processi con il Task Manager di Chrome</translation> <translation id="398884292557092447">Se il criterio viene impostato su true o se non viene configurato, gli utenti possono controllare i suggerimenti di compilazione automatica per le carte di credito nella UI. @@ -4628,6 +4630,7 @@ <translation id="5328965694451556034">Segnala accesso/uscita</translation> <translation id="5329018127554115226">La modalità ad alta efficienza verrà disattivata.</translation> <translation id="5330684698007383292">Consenti a <ph name="PRODUCT_FRAME_NAME" /> di gestire i seguenti tipi di contenuti</translation> +<translation id="5331342092479819688">Consenti hash non sicuri in handshake TLS</translation> <translation id="5331746669335642668">La norma relativa al cloud <ph name="PRODUCT_NAME" /> esegue l'override della norma relativa alla piattaforma.</translation> <translation id="5334501839642146593">Non inviare mai le metriche a Google</translation> <translation id="5340008866815063393">Attiva la generazione di report sui dati dei criteri</translation> @@ -4935,6 +4938,9 @@ Se disattivi questa impostazione, Gestione password impedisce la visualizzazione delle password memorizzate in testo non criptato nella finestra Gestione password. Se attivi questa norma o non la imposti, gli utenti potranno visualizzare le loro password in testo non criptato in Gestione password.</translation> +<translation id="5618908165853580022">Questo criterio consente a <ph name="PRODUCT_NAME" /> di usare hash non sicuri precedenti durante la procedura di handshake TLS. + + Se questo criterio non viene configurato, <ph name="PRODUCT_NAME" /> seguirà la procedura di implementazione predefinita per non consentire gli hash non sicuri. Se il criterio viene attivato, <ph name="PRODUCT_NAME" /> consentirà l'uso di hash non sicuri da parte di un server durante la negoziazione di un handshake TLS. Se viene disattivato, <ph name="PRODUCT_NAME" /> non consentirà l'uso di hash non sicuri da parte di un server durante la negoziazione di un handshake TLS. Questo criterio verrà rimosso nella versione 119.</translation> <translation id="5619498195290770056">Se il criterio viene configurato, puoi creare un elenco di pattern URL che specificano i siti che non possono impostare i cookie. Se il criterio non viene configurato, viene usato <ph name="DEFAULT_COOKIES_SETTINGS_POLICY_NAME" /> per tutti i siti, se impostato. In caso contrario, viene applicata l'impostazione personale dell'utente. @@ -7505,6 +7511,13 @@ <translation id="7999336306414770162">Disattiva i report sulle informazioni VPD del dispositivo</translation> <translation id="7999818120028621358">Attiva la generazione di rapporti sugli eventi di prevenzione di fughe di dati</translation> <translation id="8001701200415781021">Limita gli Account Google che è possibile impostare come account principali del browser in <ph name="PRODUCT_NAME" /></translation> +<translation id="8005143535239983809">Questo criterio consente di stabilire se il browser può o meno memorizzare automaticamente le password sui siti web e salvarle nel gestore delle password integrato. Non consente di limitare l'accesso o di modificare i contenuti delle password salvate nel gestore delle password e potenzialmente sincronizzate nel profilo dell'Account Google e su <ph name="ANDROID_NAME" />. + +Se il criterio viene attivato, gli utenti possono impostare <ph name="PRODUCT_NAME" /> in modo che memorizzi le password e le fornisca all'accesso successivo a un sito. + +Se il criterio viene disattivato, gli utenti non possono salvare nuove password, ma quelle salvate in precedenza restano attive. + +Se il criterio viene configurato, gli utenti non possono modificarlo in <ph name="PRODUCT_NAME" />. Se non viene configurato, gli utenti possono disattivare il salvataggio delle password.</translation> <translation id="800595420827930383">Utilizza lo strumento di verifica dei certificati della piattaforma precedente</translation> <translation id="8006219716745491366">Se il criterio <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> è attivo, l'assegnazione di un valore al criterio <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> consente di specificare un elenco di URL alternativi per l'estrazione dei termini di ricerca dal motore di ricerca. Gli URL devono includere la stringa <ph name="SEARCH_TERM_MARKER" />. @@ -8272,6 +8285,11 @@ <translation id="8687958770985542440">Riattiva l'API Web Components v0 fino alla versione M84</translation> <translation id="8693243869659262736">Utilizza client DNS integrato</translation> <translation id="8695006038397632296">Crea o carica richieste di installazione di estensioni nella Console di amministrazione</translation> +<translation id="8695108198606654558">Questo criterio consente di controllare soltanto il comportamento di importazione alla prima esecuzione dopo l'installazione. Consente una transizione più semplice a <ph name="PRODUCT_NAME" /> negli ambienti in cui è stato ampiamente utilizzato un browser diverso prima dell'installazione del browser. Questo criterio non influisce sulle funzionalità del gestore delle password per gli Account Google. + +Se il criterio viene attivato, alla prima esecuzione vengono importate le password salvate dal browser predefinito precedente ed è possibile anche l'importazione manuale dalla pagina Impostazioni. +Se il criterio viene disattivato, alla prima esecuzione non vengono importate le password salvate e l'importazione manuale dalla pagina Impostazioni viene bloccata. +Se il criterio non viene configurato, alla prima esecuzione non vengono importate le password salvate, ma l'utente può scegliere di farlo dalla pagina Impostazioni.</translation> <translation id="8698286761337647563">Numero di giorni di anticipo con cui avvisare gli utenti SAML quando la loro password sta per scadere</translation> <translation id="8699392919012430269">Segnala informazioni sul Bluetooth di un dispositivo. @@ -8310,6 +8328,7 @@ "http://notexample.com/", "http://example.com.invalid.com/" e "http://example.comabc/" corrispondono soltanto in modalità "Default". "http://acme.com/ABC" corrisponde soltanto in "IESiteListMode".</translation> +<translation id="8728854710675158426">Hash non sicuri in handshake TLS attivi</translation> <translation id="8734543507835977857">Avvia i ritardi di gestione dell'alimentazione e i limiti di durata delle sessioni all'inizio della sessione</translation> <translation id="8736538322216687231">Imponi livello minimo della Modalità con restrizioni di YouTube</translation> <translation id="8744844164152340112">Consente di stabilire il tema (scuro/chiaro/automatico) usato per eseguire il rendering dell'UI durante l'OOBE e nella sessione.
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 2e2204e..503a450 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -100,6 +100,7 @@ <translation id="1079425471279127373">정책을 설정하면 강제 설치된 웹 애플리케이션의 일부 원본이 Device Attributes API를 사용하여 기기 속성(예: 일련번호, 호스트 이름)을 가져올 수 있습니다. Device Attributes API는 웹 API 목록입니다. https://wicg.github.io/WebApiDevice/device_attributes 페이지를 참고하세요. <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> 정책을 통해 강제 설치되었거나 키오스크 세션에서 구성된 웹 애플리케이션에 해당하는 원본에만 사용 가능합니다.</translation> +<translation id="1079498696402787191">TLS 핸드셰이크에서 허용되는 해시에 기본값을 사용합니다.</translation> <translation id="1079801999187584280">Developer Tools 사용 금지</translation> <translation id="1082802595100075771">사용자가 익명의 Google 서비스를 통해 라벨이 지정되지 않은 이미지에 관해 자동으로 생성된 설명을 들을지 선택하도록 허용</translation> <translation id="1087057100912843460">업데이트 허용</translation> @@ -3225,6 +3226,7 @@ <translation id="3973371701361892765">실행기를 자동으로 숨기지 않음</translation> <translation id="3977304360459208438">TLS에서 3DES 암호화 스위트의 기본 설정 사용</translation> <translation id="3979738908158213640">SAML 인증을 하는 동안 기기 증명을 실행할 권한이 부여되는 URL입니다.</translation> +<translation id="3982322576186033243">TLS 핸드셰이크에서 안전하지 않은 해시 허용 안 함</translation> <translation id="3983162212222338509">시스템 DNS 변환은 시스템 구성 및 기능 플래그에 따라 네트워크 프로세스 내부 또는 외부에서 실행되거나 부분적으로 내부 및 외부에서 실행될 수 있습니다.</translation> <translation id="3986700049001404598">사용자가 Chrome 작업 관리자에서 프로세스를 종료하도록 허용</translation> <translation id="398884292557092447">정책을 True로 설정하거나 설정하지 않으면 사용자가 UI에서 신용카드의 자동 완성 추천을 제어할 수 있습니다. @@ -4629,6 +4631,7 @@ <translation id="5328965694451556034">로그인/로그아웃 보고</translation> <translation id="5329018127554115226">고효율 모드가 사용 중지됩니다.</translation> <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME" />이(가) 다음 콘텐츠 유형을 다루도록 허용</translation> +<translation id="5331342092479819688">TLS 핸드셰이크에서 안전하지 않은 해시 허용</translation> <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> 클라우드 정책이 플랫폼 정책에 우선합니다.</translation> <translation id="5334501839642146593">측정항목을 Google에 보내지 않음</translation> <translation id="5340008866815063393">정책 데이터 보고 사용</translation> @@ -4936,6 +4939,9 @@ 이 설정을 사용 중지하면 비밀번호 관리자에 저장된 비밀번호를 비밀번호 관리자 창에서 일반 텍스트로 표시할 수 없습니다. 이 설정을 사용하거나 이 정책을 설정하지 않으면 사용자가 비밀번호 관리자에서 일반 텍스트로 비밀번호를 볼 수 있습니다.</translation> +<translation id="5618908165853580022">이 정책은 <ph name="PRODUCT_NAME" />이 TLS 핸드셰이크 프로세스 중에 기존의 안전하지 않은 해시를 사용하도록 허용합니다. + + 정책을 구성하지 않으면 <ph name="PRODUCT_NAME" />에서 안전하지 않은 해시를 허용하지 않는 기본 출시 프로세스를 따릅니다. 사용 설정하면 <ph name="PRODUCT_NAME" />에서 TLS 핸드셰이크를 협상할 때 서버에서 안전하지 않은 해시를 사용하도록 허용합니다. 사용 중지하면 <ph name="PRODUCT_NAME" />에서 TLS 핸드셰이크를 협상할 때 서버에서 안전하지 않은 해시를 사용하도록 허용하지 않습니다. 이 정책은 버전 119에서 삭제됩니다.</translation> <translation id="5619498195290770056">정책을 설정하면 쿠키 설정이 불가한 사이트를 지정하는 URL 패턴 목록을 만들 수 있습니다. 정책을 설정하지 않았을 때 <ph name="DEFAULT_COOKIES_SETTINGS_POLICY_NAME" />이 설정되어 있으면 모든 사이트에 사용되며 설정되어 있지 않다면 사용자의 개인 설정이 적용됩니다. @@ -7527,6 +7533,13 @@ <translation id="7999336306414770162">기기 VPD 정보 보고 사용 중지</translation> <translation id="7999818120028621358">데이터 유출 방지 이벤트 보고 사용</translation> <translation id="8001701200415781021"><ph name="PRODUCT_NAME" />에서 어떤 Google 계정이 브라우저 기본 계정으로 설정될 수 있는지 제한합니다.</translation> +<translation id="8005143535239983809">이 정책은 브라우저에서 자동으로 웹사이트의 비밀번호를 기억하고 기본 제공 비밀번호 관리자에 저장하는 기능을 제어합니다. 비밀번호 관리자에 저장되어 Google 계정 프로필 및 <ph name="ANDROID_NAME" />와 동기화될 수 있는 비밀번호의 액세스를 제한하거나 비밀번호 콘텐츠를 변경하지 않습니다. + +정책을 사용 설정하면 사용자가 다음에 사이트에 로그인할 때 비밀번호를 제공하도록 <ph name="PRODUCT_NAME" />에서 비밀번호를 기억합니다. + +정책을 사용 중지하면 사용자가 새 비밀번호를 저장할 수 없지만 이전에 저장된 비밀번호는 계속 작동합니다. + +정책을 설정하면 사용자가 <ph name="PRODUCT_NAME" />에서 이를 변경할 수 없습니다. 정책을 설정하지 않으면 사용자가 비밀번호 저장을 사용 중지할 수 있습니다.</translation> <translation id="800595420827930383">기존 플랫폼 인증서 확인 기능 사용</translation> <translation id="8006219716745491366"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />가 사용 설정되어 있으면 <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> 설정은 검색엔진에서 검색어를 추출하기 위한 대체 URL 목록을 지정합니다. URL은 <ph name="SEARCH_TERM_MARKER" /> 문자열을 포함해야 합니다. @@ -8303,6 +8316,11 @@ <translation id="8687958770985542440">M84까지 Web Components v0 API를 다시 사용 설정합니다.</translation> <translation id="8693243869659262736">내장 DNS 클라이언트 사용</translation> <translation id="8695006038397632296">확장 프로그램 설치 요청을 만들고 관리 콘솔에 업로드</translation> +<translation id="8695108198606654558">이 정책은 설치 후 최초 실행 가져오기 동작만 제어합니다. 브라우저를 설치하기 전에 다른 브라우저를 광범위하게 사용하던 환경에서 <ph name="PRODUCT_NAME" />으로 더 원활하게 전환하도록 지원합니다. 이 정책은 Google 계정의 비밀번호 관리자 기능에는 영향을 미치지 않습니다. + +정책을 사용 설정하면 최초 실행 시 이전 기본 브라우저에서 저장된 비밀번호를 가져오며 설정 페이지에서 수동 가져오기를 수행할 수도 있습니다. +정책을 사용 중지하면 최초 실행 시 저장된 비밀번호를 가져오지 않으며 설정 페이지에서 수동 가져오기도 차단됩니다. +정책을 설정하지 않으면 최초 실행 시 저장된 비밀번호를 가져오지 않으나 사용자가 설정 페이지에서 가져올 수 있습니다.</translation> <translation id="8698286761337647563">SAML 사용자의 비밀번호가 만료되기 며칠 전에 알림을 표시할지 설정합니다.</translation> <translation id="8699392919012430269">기기의 블루투스 정보를 보고합니다. @@ -8339,6 +8357,7 @@ 'http://notexample.com/', 'http://example.com.invalid.com/', 'http://example.comabc/'는 'Default' 모드에서만 매칭됩니다. 'http://acme.com/ABC'는 'IESiteListMode'에서만 매칭됩니다.</translation> +<translation id="8728854710675158426">TLS 핸드셰이크에서 안전하지 않은 해시 사용 설정됨</translation> <translation id="8734543507835977857">세션 시작 시 전원 관리 지연 및 세션 길이 제한 시작</translation> <translation id="8736538322216687231">최소 YouTube 제한 모드 강제 사용</translation> <translation id="8744844164152340112">OOBE에서, 세션 중에 UI 렌더링에 사용할 테마를 관리합니다(어두운 테마/밝은 테마/자동).
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 8b1521c..fe177403 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -100,6 +100,7 @@ <translation id="1079425471279127373">Правило позволяет разрешать некоторым источникам принудительно установленных веб-приложений получать атрибуты устройств (например, серийный номер, имя хоста) с помощью Device Attributes API. Device Attributes API – это список Web API, который указан на странице https://wicg.github.io/WebApiDevice/device_attributes. Они доступны только для источников, которые соответствуют принудительно установленным веб-приложениям, указанным в списке <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> или настроенным в сеансе киоска.</translation> +<translation id="1079498696402787191">Использовать значение по умолчанию для хешей, разрешенных при установке соединения по TSL</translation> <translation id="1079801999187584280">Запретить использование Инструментов разработчика</translation> <translation id="1082802595100075771">Разрешить пользователям автоматически получать описания для изображений с помощью сервиса Google</translation> <translation id="1087057100912843460">Разрешить обновления</translation> @@ -3219,6 +3220,7 @@ <translation id="3973371701361892765">Отображение панели загрузок</translation> <translation id="3977304360459208438">Использовать для наборов шифров 3DES в TLS настройку по умолчанию</translation> <translation id="3979738908158213640">Список URL, которым будет разрешено проводить проверку устройства во время аутентификации SAML</translation> +<translation id="3982322576186033243">Запретить небезопасные хеши при установке соединения по TLS</translation> <translation id="3983162212222338509">DNS-преобразование может выполняться как в сетевом процессе, так и вне его или частично в нем и частично вне этого процесса – в зависимости от конфигурации системы и флагов функций</translation> <translation id="3986700049001404598">Разрешить пользователям завершать процессы с помощью диспетчера задач Chrome</translation> <translation id="398884292557092447">Если правило не настроено или задано значение True, пользователи смогут сами управлять вариантами автозаполнения для банковских карт через интерфейс. @@ -4609,6 +4611,7 @@ <translation id="5328965694451556034">Сообщать о событиях входа и выхода</translation> <translation id="5329018127554115226">Режим высокой эффективности будет отключен</translation> <translation id="5330684698007383292">Типы содержания, которые <ph name="PRODUCT_FRAME_NAME" /> может обрабатывать</translation> +<translation id="5331342092479819688">Разрешить небезопасные хеши при установке соединения по TLS</translation> <translation id="5331746669335642668">Разрешить переопределять правило платформы при помощи облачного правила <ph name="PRODUCT_NAME" /></translation> <translation id="5334501839642146593">Никогда не отправлять статистику в Google</translation> <translation id="5340008866815063393">Сообщать данные о правилах</translation> @@ -4915,6 +4918,9 @@ Если этот параметр отключен, просматривать пароли в диспетчере нельзя. Если параметр включен или не настроен, пользователи могут просматривать пароли в незашифрованном виде в диспетчере.</translation> +<translation id="5618908165853580022">Это правило разрешает <ph name="PRODUCT_NAME" /> использовать устаревшие небезопасные хеши при установке соединения по TLS. + + Если правило не настроено, <ph name="PRODUCT_NAME" /> будет следовать процессу выпуска по умолчанию для запрета небезопасных хешей. Если правило включено, <ph name="PRODUCT_NAME" /> разрешит использование сервером небезопасных хешей при установке соединения по TLS. Если правило отключено, <ph name="PRODUCT_NAME" /> запретит использование сервером небезопасных хешей при установке соединения по TLS. Это правило будет удалено в версии 119.</translation> <translation id="5619498195290770056">Позволяет задать список шаблонов URL для указания сайтов, которым запрещено сохранять файлы cookie. Если это правило не настроено, то для всех сайтов действует правило <ph name="DEFAULT_COOKIES_SETTINGS_POLICY_NAME" /> при условии, что оно задано. В противном случае применяются персональные настройки пользователя. @@ -7499,6 +7505,13 @@ <translation id="7999336306414770162">Отключить отправку данных о VPD</translation> <translation id="7999818120028621358">Показывать события, связанные с предотвращением утечки данных</translation> <translation id="8001701200415781021">Определяет, какой аккаунт Google можно назначить основным в <ph name="PRODUCT_NAME" /></translation> +<translation id="8005143535239983809">Это правило определяет, может ли браузер автоматически запоминать пароли сайтов и сохранять их во встроенном менеджере паролей. С его помощью нельзя изменить пароли, которые сохранены в менеджере, в том числе синхронизированные с аккаунтом Google и <ph name="ANDROID_NAME" />, или ограничить доступ к ним. + +Если правило включено, <ph name="PRODUCT_NAME" /> будет запоминать введенные пароли и предлагать их при следующих входах. + +Если отключить правило, пользователям будут доступны только ранее сохраненные пароли, а сохранить новые будет нельзя. + +Если правило настроено, пользователи не смогут изменить его в <ph name="PRODUCT_NAME" />. В противном случае пользователи при желании смогут отключить функцию сохранения паролей.</translation> <translation id="800595420827930383">Использовать устаревший инструмент верификации, предоставляемый платформой</translation> <translation id="8006219716745491366">Если правило <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> включено, то параметр <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> содержит список альтернативных URL, которые используются для извлечения запросов из поисковой системы. Для выполнения этой функции URL должен содержать строку <ph name="SEARCH_TERM_MARKER" />. @@ -8291,6 +8304,11 @@ <translation id="8687958770985542440">Повторное включение Web Components v0 API (правило будет недоступно после версии M84)</translation> <translation id="8693243869659262736">Встроенный клиент DNS</translation> <translation id="8695006038397632296">Создавать запросы на установку расширений и загружать такие запросы в консоль администратора</translation> +<translation id="8695108198606654558">Это правило управляет импортом только при первом запуске после установки. Оно обеспечивает более плавный переход к <ph name="PRODUCT_NAME" /> в системах, где до этого в основном использовался другой браузер. Это правило не влияет на возможности менеджера паролей для аккаунта Google. + +Если оно включено, пароли, сохраненные в браузере, который ранее использовался по умолчанию, будут импортированы при первом запуске. Их также можно будет перенести вручную на странице настроек браузера. +Если правило отключено, пароли не будут импортированы при первом запуске, а перенос вручную будет запрещен. +Если правило не настроено, пароли не будут импортированы при первом запуске. Пользователи смогут сделать это позже в настройках браузера.</translation> <translation id="8698286761337647563">За сколько дней предупреждать пользователей SAML об истечении срока действия пароля</translation> <translation id="8699392919012430269">Передача информации о Bluetooth на устройстве. @@ -8329,6 +8347,7 @@ Адреса http://notexample.com/, http://example.com.invalid.com/ и http://example.comabc/ считаются подходящими только в режиме Default. Адрес http://acme.com/ABC считается подходящим только в режиме IESiteListMode.</translation> +<translation id="8728854710675158426">Небезопасные хеши разрешены при установке соединения по TLS</translation> <translation id="8734543507835977857">Начинать отсчет для времени задержки управления питанием и продолжительности сеанса сразу после начала сеанса</translation> <translation id="8736538322216687231">Выбор минимального обязательного уровня Безопасного режима для YouTube</translation> <translation id="8744844164152340112">Определяет, какая тема будет использоваться при первичной настройке и во время сеанса: тёмная, светлая или с автоматическим переключением.
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index c3f456f..0283070c 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -100,6 +100,7 @@ <translation id="1079425471279127373">Zorunlu yüklenmiş web uygulamalarıyla ilgili bazı kaynakların Device Attributes API'yi kullanarak cihaz özelliklerini (ör. seri numarası, ana makine adı) almasına izin vermek için politikayı ayarlar. Device Attributes API, web API'leri içeren bir listedir. Lütfen https://wicg.github.io/WebApiDevice/device_attributes adresini ziyaret edin. Bu API'ler, yalnızca <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> veya Kiosk oturumunda yapılandırılan politika aracılığıyla zorunlu yüklenmiş web uygulamalarına karşılık gelen kaynaklar için kullanılabilir.</translation> +<translation id="1079498696402787191">TLS El Sıkışmalarında İzin Verilen Karmalarda Varsayılan Değeri Kullan</translation> <translation id="1079801999187584280">Geliştirici Araçları'nın kullanımına izin verme</translation> <translation id="1082802595100075771">Kullanıcıların, etiketlenmemiş resimlerin otomatik açıklamalarını sağlayan anonim bir Google hizmeti kullanmayı seçmelerine olanak tanı</translation> <translation id="1087057100912843460">Güncellemelere izin ver</translation> @@ -3239,6 +3240,7 @@ <translation id="3973371701361892765">Rafı hiçbir zaman otomatik olarak gizleme</translation> <translation id="3977304360459208438">TLS'de 3DES şifre paketleri için varsayılan ayarı kullan</translation> <translation id="3979738908158213640">SAML kimlik doğrulaması sırasında cihaz onayı gerçekleştirmek için erişim izni verilecek URL'ler</translation> +<translation id="3982322576186033243">TLS El Sıkışmalarında Güvenli Olmayan Karmalara İzin Verme</translation> <translation id="3983162212222338509">Sistem DNS çözümlemesi, sistem yapılandırmasına ve özellik bayraklarına bağlı olarak ağ işleminin içinde veya dışında ya da kısmen içinde kısmen dışında çalıştırılabilir.</translation> <translation id="3986700049001404598">Kullanıcıların, Chrome görev yöneticisini kullanarak işlemleri sona erdirmesine izin ver</translation> <translation id="398884292557092447">Politika True (Doğru) değerine ayarlanır veya ayarlanmadan bırakılırsa kullanıcılar, kullanıcı arayüzünde kredi kartları için otomatik doldurma önerilerini kontrol edebilirler. @@ -4654,6 +4656,7 @@ <translation id="5328965694451556034">Girişi/çıkışı raporla</translation> <translation id="5329018127554115226">Yüksek Verimlilik Modu devre dışı bırakılır.</translation> <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME" /> için aşağıdaki içerik türlerini işlemeye izin ver</translation> +<translation id="5331342092479819688">TLS El Sıkışmalarında Güvenli Olmayan Karmalara İzin Ver</translation> <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> bulut politikası, Platform politikasını geçersiz kılar.</translation> <translation id="5334501839642146593">Metrikleri hiçbir zaman Google'a gönderme</translation> <translation id="5340008866815063393">Politika verilerinin raporlanmasını etkinleştir</translation> @@ -4961,6 +4964,9 @@ Bu ayarı devre dışı bırakırsanız, şifre yöneticisi saklanmış olan şifreleri şifre yöneticisi penceresinde açık metin olarak göstermeye izin vermez. Bu ayarı etkinleştirirseniz veya yapılandırmazsanız kullanıcılar şifrelerini şifre yöneticisi penceresinde açık metin olarak görüntüleyebilirler.</translation> +<translation id="5618908165853580022">Bu politika, <ph name="PRODUCT_NAME" /> ürününün, TLS el sıkışma işlemi sırasında güvenli olmayan eski karmaları kullanmasına izin verir. + + Politika yapılandırılmazsa <ph name="PRODUCT_NAME" />, güvenli olmayan karmalara izin verilmediği varsayılan kullanıma sunma işlemini uygular. Politika etkinleştirilirse <ph name="PRODUCT_NAME" />, TLS el sıkışması pazarlık sürecinde güvenli olmayan karmaların bir sunucu tarafından kullanılmasına izin verir. Politika devre dışı bırakılırsa <ph name="PRODUCT_NAME" />, TLS el sıkışması pazarlık sürecinde güvenli olmayan karmaların bir sunucu tarafından kullanılmasına izin vermez. Bu politika 119 sürümünde kaldırılacaktır.</translation> <translation id="5619498195290770056">Politikayı ayarlayarak çerez ayarlayamayan siteleri belirten URL kalıpları listesi oluşturabilirsiniz. Politika ayarlanmadan bırakılırsa tüm siteler için (etkinse) <ph name="DEFAULT_COOKIES_SETTINGS_POLICY_NAME" /> kullanılır. Aksi takdirde kullanıcının kişisel ayarları geçerlidir. @@ -7555,6 +7561,13 @@ <translation id="7999336306414770162">Cihazın VPD bilgileri raporlamasını devre dışı bırak</translation> <translation id="7999818120028621358">Veri sızıntısı önleme etkinliklerinin raporlanmasını etkinleştir</translation> <translation id="8001701200415781021"><ph name="PRODUCT_NAME" /> dahilinde hangi Google hesaplarının tarayıcı birincil hesapları olarak ayarlanmasına izin verileceğini kısıtlama</translation> +<translation id="8005143535239983809">Bu politika, tarayıcının web sitelerindeki şifreleri otomatik olarak hatırlama ve yerleşik şifre yöneticisine kaydetme özelliğini kontrol eder. Şifre yöneticisine kaydedilen, muhtemelen de Google Hesabı profili ve <ph name="ANDROID_NAME" /> ile senkronize edilen şifrelere erişimi kısıtlamaz veya bunların içeriğini değiştirmez. + +Politika, Etkin değerine ayarlanırsa kullanıcılar, <ph name="PRODUCT_NAME" /> ürününün, şifreleri hatırlayıp bir sitede tekrar oturum açtıklarında şifreleri sunmasını sağlayabilirler. + +Politika, Devre Dışı değerine ayarlanırsa kullanıcılar yeni şifreleri kaydedemez, ancak önceden kaydedilmiş şifreler çalışmaya devam eder. + +Politika ayarlanırsa kullanıcılar bunu <ph name="PRODUCT_NAME" /> ürününde değiştiremezler. Politika ayarlanmadan bırakılırsa kullanıcı şifre kaydetmeyi devre dışı bırakabilir.</translation> <translation id="800595420827930383">Eski platform sertifikası doğrulayıcıyı kullan</translation> <translation id="8006219716745491366"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> açıksa <ph name="DEFAULT_SEARCH_PROVIDER_ALTERNATE_URLS_POLICY_NAME" /> protokolünün ayarlanması, arama motorundan arama terimlerini çıkartmak için alternatif URL'lerin bir listesini belirtir. Bu URL'ler, <ph name="SEARCH_TERM_MARKER" /> dizesini içermelidir. @@ -8338,6 +8351,11 @@ <translation id="8687958770985542440">Web Bileşenleri v0 API'sini M84'e kadar yeniden etkinleştirin.</translation> <translation id="8693243869659262736">Dahili DNS istemcisini kullan</translation> <translation id="8695006038397632296">Uzantı yükleme isteklerini Yönetici Konsolu'nda oluştur ve oraya yükle</translation> +<translation id="8695108198606654558">Bu politika, yalnızca yüklemeden sonra ilk çalıştırma sırasındaki içe aktarma davranışını kontrol eder. Tarayıcı yüklenmeden önce genellikle farklı bir tarayıcının kullanıldığı ortamlarda <ph name="PRODUCT_NAME" /> geçişinin daha sorunsuz bir şekilde yapılmasını sağlar. Bu politika, Google Hesaplarındaki şifre yöneticisi özelliklerini etkilemez. + +Politika, Etkin değerine ayarlanırsa önceki varsayılan tarayıcıda kayıtlı olan şifreler ilk çalıştırma sırasında içe aktarılır ve ayarlar sayfasından manuel içe aktarma da gerçekleştirilebilir. +Politika, Devre Dışı değerine ayarlanırsa kayıtlı şifreler ilk çalıştırma sırasında içe aktarılmaz ve ayarlar sayfasından manuel içe aktarma engellenir. +Politika ayarlanmadan bırakılırsa kayıtlı şifreler ilk çalıştırma sırasında içe aktarılmaz ancak kullanıcılar dilerse bu işlemi ayarlar sayfasından yapabilir.</translation> <translation id="8698286761337647563">SAML kullanıcılarına şifrelerinin son kullanma tarihinin önceden bildirileceği gün sayısı</translation> <translation id="8699392919012430269">Cihazın Bluetooth bilgilerini raporlar. @@ -8376,6 +8394,7 @@ "http://notexample.com/", "http://example.com.invalid.com/" ve "http://example.comabc/" yalnızca "Varsayılan" modda eşleşir. "http://acme.com/ABC" yalnızca "IESiteListMode" modunda eşleşir.</translation> +<translation id="8728854710675158426">TLS El Sıkışmalarında Güvenli Olmayan Karmalar Etkinleştirildi</translation> <translation id="8734543507835977857">Oturum başlangıcında güç yönetimi gecikmelerini ve oturum süresi sınırlarını başlat</translation> <translation id="8736538322216687231">Minimum YouTube Kısıtlı Modu'nu zorla</translation> <translation id="8744844164152340112">OOBE ve oturum sırasında kullanıcı arayüzü oluşturmak için kullanılan temayı kontrol eder (koyu/açık/otomatik).
diff --git a/components/policy/resources/templates/policy_definitions/Miscellaneous/HttpsOnlyMode.yaml b/components/policy/resources/templates/policy_definitions/Miscellaneous/HttpsOnlyMode.yaml index 0bb9b92..7a53c1c 100644 --- a/components/policy/resources/templates/policy_definitions/Miscellaneous/HttpsOnlyMode.yaml +++ b/components/policy/resources/templates/policy_definitions/Miscellaneous/HttpsOnlyMode.yaml
@@ -1,11 +1,16 @@ caption: Allow HTTPS-Only Mode to be enabled default: allowed desc: |- - This policy controls whether users can enable HTTPS-Only Mode in Settings. HTTPS-Only Mode upgrades all navigations to HTTPS. + This policy controls whether users can enable HTTPS-Only Mode (Always Use Secure Connections) in Settings. HTTPS-Only Mode upgrades all navigations to HTTPS. If this setting is not set or set to allowed, users will be allowed to enable HTTPS-Only Mode. If this setting is set to disallowed, users will not be allowed to enable HTTPS-Only Mode. If this setting is set to force_enabled, HTTPS-Only Mode will be enabled and users will not be able to disable it. Force enabling HTTPS-Only Mode is supported from M112 onwards. + + The separate <ph name="HTTP_ALLOWLIST_POLICY_NAME">HttpAllowlist</ph> policy + can be used to exempt specific hostnames or hostname patterns from being + upgraded to HTTPS by this feature. + example_value: disallowed features: dynamic_refresh: true
diff --git a/components/safe_browsing/content/browser/browser_url_loader_throttle.cc b/components/safe_browsing/content/browser/browser_url_loader_throttle.cc index 6b72a70..c52e0e9 100644 --- a/components/safe_browsing/content/browser/browser_url_loader_throttle.cc +++ b/components/safe_browsing/content/browser/browser_url_loader_throttle.cc
@@ -22,7 +22,7 @@ #include "components/safe_browsing/core/common/safebrowsing_constants.h" #include "components/safe_browsing/core/common/utils.h" #include "components/safe_browsing/core/common/web_ui_constants.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "content/public/common/url_constants.h" #include "net/base/load_flags.h"
diff --git a/components/safe_browsing/content/browser/threat_details.cc b/components/safe_browsing/content/browser/threat_details.cc index 43db7c5..497b8b5e 100644 --- a/components/safe_browsing/content/browser/threat_details.cc +++ b/components/safe_browsing/content/browser/threat_details.cc
@@ -34,6 +34,7 @@ #include "components/safe_browsing/core/browser/db/hit_report.h" #include "components/safe_browsing/core/browser/referrer_chain_provider.h" #include "components/safe_browsing/core/common/features.h" +#include "components/safe_browsing/core/common/proto/csd.pb.h" #include "components/security_interstitials/content/unsafe_resource_util.h" #include "content/public/browser/back_forward_cache.h" #include "content/public/browser/browser_task_traits.h" @@ -44,6 +45,7 @@ #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" #include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/mojom/fetch_api.mojom.h" #include "services/service_manager/public/cpp/interface_provider.h" using content::BrowserThread; @@ -137,6 +139,63 @@ } } +// Helper function that converts mojom::RequestDestination to +// ClientSafeBrowsingReportRequest::UrlRequestDestination. +ClientSafeBrowsingReportRequest::UrlRequestDestination +GetUrlRequestDestinationFromMojomRequestDestination( + network::mojom::RequestDestination request_destination) { + switch (request_destination) { + case network::mojom::RequestDestination::kEmpty: + return ClientSafeBrowsingReportRequest::EMPTY; + case network::mojom::RequestDestination::kAudio: + return ClientSafeBrowsingReportRequest::AUDIO; + case network::mojom::RequestDestination::kAudioWorklet: + return ClientSafeBrowsingReportRequest::AUDIO_WORKLET; + case network::mojom::RequestDestination::kDocument: + return ClientSafeBrowsingReportRequest::DOCUMENT; + case network::mojom::RequestDestination::kEmbed: + return ClientSafeBrowsingReportRequest::EMBED; + case network::mojom::RequestDestination::kFont: + return ClientSafeBrowsingReportRequest::FONT; + case network::mojom::RequestDestination::kFrame: + return ClientSafeBrowsingReportRequest::FRAME; + case network::mojom::RequestDestination::kIframe: + return ClientSafeBrowsingReportRequest::IFRAME; + case network::mojom::RequestDestination::kImage: + return ClientSafeBrowsingReportRequest::IMAGE; + case network::mojom::RequestDestination::kManifest: + return ClientSafeBrowsingReportRequest::MANIFEST; + case network::mojom::RequestDestination::kObject: + return ClientSafeBrowsingReportRequest::OBJECT; + case network::mojom::RequestDestination::kPaintWorklet: + return ClientSafeBrowsingReportRequest::PAINT_WORKLET; + case network::mojom::RequestDestination::kReport: + return ClientSafeBrowsingReportRequest::REPORT; + case network::mojom::RequestDestination::kScript: + return ClientSafeBrowsingReportRequest::SCRIPT; + case network::mojom::RequestDestination::kServiceWorker: + return ClientSafeBrowsingReportRequest::SERVICE_WORKER; + case network::mojom::RequestDestination::kSharedWorker: + return ClientSafeBrowsingReportRequest::SHARED_WORKER; + case network::mojom::RequestDestination::kStyle: + return ClientSafeBrowsingReportRequest::STYLE; + case network::mojom::RequestDestination::kTrack: + return ClientSafeBrowsingReportRequest::TRACK; + case network::mojom::RequestDestination::kVideo: + return ClientSafeBrowsingReportRequest::VIDEO; + case network::mojom::RequestDestination::kWebBundle: + return ClientSafeBrowsingReportRequest::WEB_BUNDLE; + case network::mojom::RequestDestination::kWorker: + return ClientSafeBrowsingReportRequest::WORKER; + case network::mojom::RequestDestination::kXslt: + return ClientSafeBrowsingReportRequest::XSLT; + case network::mojom::RequestDestination::kFencedframe: + return ClientSafeBrowsingReportRequest::FENCED_FRAME; + case network::mojom::RequestDestination::kWebIdentity: + return ClientSafeBrowsingReportRequest::WEB_IDENTITY; + } +} + // Clears the specified HTTPS resource of any sensitive data, only retaining // data that is allowlisted for collection. void ClearHttpsResource(ClientSafeBrowsingReportRequest::Resource* resource) { @@ -574,6 +633,9 @@ if (IsReportableUrl(resource_.url)) { report_->set_url(resource_.url.spec()); report_->set_type(GetReportTypeFromSBThreatType(resource_.threat_type)); + report_->set_url_request_destination( + GetUrlRequestDestinationFromMojomRequestDestination( + resource_.request_destination)); } GURL referrer_url;
diff --git a/components/safe_browsing/content/browser/web_ui/safe_browsing_ui.cc b/components/safe_browsing/content/browser/web_ui/safe_browsing_ui.cc index a0fd2861..b736e18 100644 --- a/components/safe_browsing/content/browser/web_ui/safe_browsing_ui.cc +++ b/components/safe_browsing/content/browser/web_ui/safe_browsing_ui.cc
@@ -1325,6 +1325,63 @@ return dict; } +std::string UrlRequestDestinationToString( + const ClientSafeBrowsingReportRequest::UrlRequestDestination& + request_destination) { + switch (request_destination) { + case ClientSafeBrowsingReportRequest::REQUEST_DESTINATION_UNSPECIFIED: + return "REQUEST_DESTINATION_UNSPECIFIED"; + case ClientSafeBrowsingReportRequest::EMPTY: + return "EMPTY"; + case ClientSafeBrowsingReportRequest::AUDIO: + return "AUDIO"; + case ClientSafeBrowsingReportRequest::AUDIO_WORKLET: + return "AUDIO_WORKLET"; + case ClientSafeBrowsingReportRequest::DOCUMENT: + return "DOCUMENT"; + case ClientSafeBrowsingReportRequest::EMBED: + return "EMBED"; + case ClientSafeBrowsingReportRequest::FONT: + return "FONT"; + case ClientSafeBrowsingReportRequest::FRAME: + return "FRAME"; + case ClientSafeBrowsingReportRequest::IFRAME: + return "IFRAME"; + case ClientSafeBrowsingReportRequest::IMAGE: + return "IMAGE"; + case ClientSafeBrowsingReportRequest::MANIFEST: + return "MANIFEST"; + case ClientSafeBrowsingReportRequest::OBJECT: + return "OBJECT"; + case ClientSafeBrowsingReportRequest::PAINT_WORKLET: + return "PAINT_WORKLET"; + case ClientSafeBrowsingReportRequest::REPORT: + return "REPORT"; + case ClientSafeBrowsingReportRequest::SCRIPT: + return "SCRIPT"; + case ClientSafeBrowsingReportRequest::SERVICE_WORKER: + return "SERVICE_WORKER"; + case ClientSafeBrowsingReportRequest::SHARED_WORKER: + return "SHARED_WORKER"; + case ClientSafeBrowsingReportRequest::STYLE: + return "STYLE"; + case ClientSafeBrowsingReportRequest::TRACK: + return "TRACK"; + case ClientSafeBrowsingReportRequest::VIDEO: + return "VIDEO"; + case ClientSafeBrowsingReportRequest::WEB_BUNDLE: + return "WEB_BUNDLE"; + case ClientSafeBrowsingReportRequest::WORKER: + return "WORKER"; + case ClientSafeBrowsingReportRequest::XSLT: + return "XSLT"; + case ClientSafeBrowsingReportRequest::FENCED_FRAME: + return "FENCED_FRAME"; + case ClientSafeBrowsingReportRequest::WEB_IDENTITY: + return "WEB_IDENTITY"; + } +} + base::Value::Dict SerializeDownloadWarningAction( const ClientSafeBrowsingReportRequest::DownloadWarningAction& download_warning_action) { @@ -1518,6 +1575,11 @@ SerializeHashRealTimeExperimentDetails( report.hash_real_time_experiment_details())); } + if (report.has_url_request_destination()) { + report_request.Set( + "url_request_destination", + UrlRequestDestinationToString(report.url_request_destination())); + } std::string serialized; if (report.SerializeToString(&serialized)) { std::string base64_encoded;
diff --git a/components/safe_browsing/core/common/proto/csd.proto b/components/safe_browsing/core/common/proto/csd.proto index faf7ed6..1a376c14 100644 --- a/components/safe_browsing/core/common/proto/csd.proto +++ b/components/safe_browsing/core/common/proto/csd.proto
@@ -41,7 +41,7 @@ // The finch active groups this user belongs to (if any). Active group is // defined by finch trial name and group name. Trial name and group name are - // concatenated with separator "|", e.g. "PingOnlyTrial|DefaultGroup". + // concatenated with separator ".", e.g. "PingOnlyTrial.DefaultGroup". repeated string finch_active_groups = 4; // Whether and how the current Chrome profile is being managed. @@ -1463,7 +1463,7 @@ // A Detailed Safebrowsing Report from clients. Chrome safebrowsing reports are // only sent by Chrome users who have opted into extended Safe Browsing. // This proto is replacing ClientMalwareReportRequest. -// Next tag: 29 +// Next tag: 30 message ClientSafeBrowsingReportRequest { // Note: A lot of the "optional" fields would make sense to be // "required" instead. However, having them as optional allows the @@ -1735,6 +1735,68 @@ // Only populated for type = HASH_PREFIX_REAL_TIME_EXPERIMENT. // TODO(crbug.com/1410253): Deprecate this once the experiment is complete. optional HashRealTimeExperimentDetails hash_real_time_experiment_details = 28; + + // The request destination of the |url| fetched. Added to better understand + // the protection of cross-site warnings (i.e. warnings triggered when url and + // page_url are different). See + // https://fetch.spec.whatwg.org/#concept-request-destination for the + // definition of each field. + // go/skip-sb-images-css-font for details. + enum UrlRequestDestination { + REQUEST_DESTINATION_UNSPECIFIED = 0; + // The destination is unknown or unset. + EMPTY = 1; + // <audio> + AUDIO = 2; + // audioWorklet.addModule() + AUDIO_WORKLET = 3; + // Mainframe URL. |url| and |page_url| should be the same in this case. + DOCUMENT = 4; + // <embed> + EMBED = 5; + // CSS' @font-face + FONT = 6; + // <frame> + FRAME = 7; + // <iframe> + IFRAME = 8; + // <img src> + IMAGE = 9; + // <link rel=manifest> + MANIFEST = 10; + // <object> + OBJECT = 11; + // CSS.paintWorklet.addModule() + PAINT_WORKLET = 12; + // CSP, NEL reports. + REPORT = 13; + // <script>, importScripts() + SCRIPT = 14; + // navigator.serviceWorker.register() + SERVICE_WORKER = 15; + // SharedWorker() + SHARED_WORKER = 16; + // <link rel=stylesheet>, CSS @import + STYLE = 17; + // <track> + TRACK = 18; + // <video> + VIDEO = 19; + // <script type=webbundle> + WEB_BUNDLE = 20; + // Worker() + WORKER = 21; + // <?xml-stylesheet> + XSLT = 22; + // <fencedframe src="example.com"> + FENCED_FRAME = 23; + // Federated Credential Management requests + WEB_IDENTITY = 24; + } + + // Only populated for interstitial reports (URL_PHISHING, URL_MALWARE, + // URL_UNWANTED and BILLING). + optional UrlRequestDestination url_request_destination = 29; } // An HTML Element on the page (eg: iframe, div, script, etc).
diff --git a/components/security_interstitials/content/captive_portal_helper_android.cc b/components/security_interstitials/content/captive_portal_helper_android.cc index 2afae0f..aefb5f5c 100644 --- a/components/security_interstitials/content/captive_portal_helper_android.cc +++ b/components/security_interstitials/content/captive_portal_helper_android.cc
@@ -4,7 +4,7 @@ #include "components/security_interstitials/content/captive_portal_helper_android.h" #include "components/security_interstitials/content/captive_portal_helper.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include <stddef.h>
diff --git a/components/services/screen_ai/public/cpp/screen_ai_service_router.cc b/components/services/screen_ai/public/cpp/screen_ai_service_router.cc index eb3667d3..9e3669f 100644 --- a/components/services/screen_ai/public/cpp/screen_ai_service_router.cc +++ b/components/services/screen_ai/public/cpp/screen_ai_service_router.cc
@@ -12,7 +12,7 @@ #include "base/location.h" #include "base/task/thread_pool.h" #include "components/services/screen_ai/public/cpp/screen_ai_install_state.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/service_process_host.h" namespace {
diff --git a/components/storage_monitor/transient_device_ids.cc b/components/storage_monitor/transient_device_ids.cc index e446ffe..835f7ec 100644 --- a/components/storage_monitor/transient_device_ids.cc +++ b/components/storage_monitor/transient_device_ids.cc
@@ -8,7 +8,7 @@ #include "base/check.h" #include "base/containers/contains.h" -#include "base/guid.h" +#include "base/uuid.h" #include "components/storage_monitor/storage_info.h" namespace storage_monitor { @@ -24,7 +24,7 @@ if (!base::Contains(device_id_map_, device_id)) { std::string transient_id; do { - transient_id = base::GenerateGUID(); + transient_id = base::Uuid::GenerateRandomV4().AsLowercaseString(); } while (base::Contains(transient_id_map_, transient_id)); device_id_map_[device_id] = transient_id;
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index ee674476..2a00df38 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -1336,6 +1336,7 @@ <translation id="4274173425554582601">কম্পিউটাৰ আৰু ইলেক্ট্ৰনিক্স</translation> <translation id="4275830172053184480">আপোনাৰ ডিভাইচটো ৰিষ্টাৰ্ট কৰক</translation> <translation id="4277028893293644418">পাছৱৰ্ড ৰিছেট কৰক</translation> +<translation id="4277937682389409325">স্থানীয় ঠিকনা</translation> <translation id="4278390842282768270">অনুমতি দিয়া হৈছে</translation> <translation id="4281998142035485137">{0,plural, =1{গোপনীয় ফাইল খুলিবনে?}one{গোপনীয় ফাইলসমূহ খুলিবনে?}other{গোপনীয় ফাইলসমূহ খুলিবনে?}}</translation> <translation id="4282346679996504092">এই প্ৰ’ডাক্টটোৰ বাবে সতৰ্কবাৰ্তা অফ কৰা হৈছে আৰু বুকমাৰ্কটো আঁতৰোৱা হৈছে</translation>
diff --git a/components/strings/components_strings_az.xtb b/components/strings/components_strings_az.xtb index b17e151..2676db5f 100644 --- a/components/strings/components_strings_az.xtb +++ b/components/strings/components_strings_az.xtb
@@ -1336,6 +1336,7 @@ <translation id="4274173425554582601">Kompüter ve elektronika</translation> <translation id="4275830172053184480">Cihazınızı yenidən başladın</translation> <translation id="4277028893293644418">Parolu sıfırlayın</translation> +<translation id="4277937682389409325">Yerli ünvan</translation> <translation id="4278390842282768270">İcazə verilib</translation> <translation id="4281998142035485137">{0,plural, =1{Məxfi fayl açılsın?}other{Məxfi fayllar açılsın?}}</translation> <translation id="4282346679996504092">Bu məhsul üçün xəbərdarlıqlar deaktiv edilib və əlfəcin silinib</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb index 9516ce7..9d90825c 100644 --- a/components/strings/components_strings_be.xtb +++ b/components/strings/components_strings_be.xtb
@@ -1339,6 +1339,7 @@ <translation id="4274173425554582601">Камп'ютары і электроніка</translation> <translation id="4275830172053184480">Перазапусціце прыладу</translation> <translation id="4277028893293644418">Скінуць пароль</translation> +<translation id="4277937682389409325">Мясцовы адрас</translation> <translation id="4278390842282768270">Дазволена</translation> <translation id="4281998142035485137">{0,plural, =1{Адкрыць канфідэнцыяльны файл?}one{Адкрыць канфідэнцыяльныя файлы?}few{Адкрыць канфідэнцыяльныя файлы?}many{Адкрыць канфідэнцыяльныя файлы?}other{Адкрыць канфідэнцыяльныя файлы?}}</translation> <translation id="4282346679996504092">Абвесткі пра гэты прадукт выключаны, а закладка выдалена</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 70ef35b0..6ff2a39 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Компютри и електроника</translation> <translation id="4275830172053184480">Рестартиране на устройството ви</translation> <translation id="4277028893293644418">Повторно задаване на паролата</translation> +<translation id="4277937682389409325">Местен адрес</translation> <translation id="4278390842282768270">Разрешено</translation> <translation id="4281998142035485137">{0,plural, =1{Да се отвори ли поверителният файл?}other{Да се отворят ли поверителните файлове?}}</translation> <translation id="4282346679996504092">Сигналите за този продукт са изключени и отметката е премахната</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index fb5da78..6fbd011 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -1336,6 +1336,7 @@ <translation id="4274173425554582601">Počítače a elektronika</translation> <translation id="4275830172053184480">Restartovat zařízení</translation> <translation id="4277028893293644418">Resetovat heslo</translation> +<translation id="4277937682389409325">Místní adresa</translation> <translation id="4278390842282768270">Povoleno</translation> <translation id="4281998142035485137">{0,plural, =1{Otevřít důvěrný soubor?}few{Otevřít důvěrné soubory?}many{Otevřít důvěrné soubory?}other{Otevřít důvěrné soubory?}}</translation> <translation id="4282346679996504092">Upozornění pro tento produkt byla vypnuta a záložka byla odstraněna</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb index 116cdd0..2fe94f8 100644 --- a/components/strings/components_strings_cy.xtb +++ b/components/strings/components_strings_cy.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Cyfrifiaduron ac electroneg</translation> <translation id="4275830172053184480">Ailgychwynnwch eich dyfais</translation> <translation id="4277028893293644418">Ailosod cyfrinair</translation> +<translation id="4277937682389409325">Cyfeiriad lleol</translation> <translation id="4278390842282768270">Caniateir</translation> <translation id="4281998142035485137">{0,plural, =1{Agor ffeil gyfrinachol?}zero{Agor ffeiliau cyfrinachol?}two{Agor ffeiliau cyfrinachol?}few{Agor ffeiliau cyfrinachol?}many{Agor ffeiliau cyfrinachol?}other{Agor ffeiliau cyfrinachol?}}</translation> <translation id="4282346679996504092">Mae hysbysiadau ar gyfer y cynnyrch hwn wedi'u diffodd a'r nod tudalen wedi'i ddileu</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 5f378fb..6fde44a 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Computere og elektronik</translation> <translation id="4275830172053184480">Genstart din enhed</translation> <translation id="4277028893293644418">Nulstil adgangskoden</translation> +<translation id="4277937682389409325">Lokal adresse</translation> <translation id="4278390842282768270">Tilladt</translation> <translation id="4281998142035485137">{0,plural, =1{Vil du åbne den fortrolige fil?}one{Vil du åbne den fortrolige fil?}other{Vil du åbne de fortrolige filer?}}</translation> <translation id="4282346679996504092">Underretninger for dette produkt er deaktiveret, og bogmærket er fjernet</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index d9bcde79..07a8254e 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -843,7 +843,7 @@ <translation id="306573536155379004">Juego iniciado.</translation> <translation id="3068991664510324412">Juegos de ordenador y videojuegos</translation> <translation id="3080254622891793721">Gráfico</translation> -<translation id="3081538120861307764">Para medir el rendimiento de un anuncio, se comparten algunos tipos de datos entre sitios, como la hora del día en la que se te mostró un anuncio.</translation> +<translation id="3081538120861307764">Para medir el rendimiento de un anuncio, se comparten algunos tipos de datos limitados entre sitios, como la hora del día en la que se te mostró un anuncio.</translation> <translation id="3082007635241601060">Permite que Google use tus carritos para encontrar descuentos personalizados cuando estén disponibles</translation> <translation id="3086579638707268289">Se está vigilando tu actividad en la Web</translation> <translation id="3087734570205094154">Inferior</translation> @@ -1223,7 +1223,7 @@ <translation id="4023431997072828269">Se está usando una conexión no segura para enviar este formulario, por lo que otros usuarios podrán ver tu información.</translation> <translation id="4025913568718019429">Botón Gestionar configuración de privacidad de cuenta de Google: pulsa Intro para ir a la configuración de privacidad de tu cuenta de Google</translation> <translation id="4030383055268325496">&Deshacer acción de añadir</translation> -<translation id="4030545038933060179">Cuando la opción está activada, una lista de temas basada en tu historial de navegación reciente se muestra aquí.</translation> +<translation id="4030545038933060179">Cuando la opción está activada, aquí se muestra una lista de temas basada en tu historial de navegación reciente.</translation> <translation id="4031179711345676612">Micrófono permitido</translation> <translation id="4040350669425716613">Universidades</translation> <translation id="4047351652147966654">18x24 pulgadas</translation> @@ -1233,7 +1233,7 @@ <translation id="4063924980214801036">Usa el desbloqueo del dispositivo para confirmar las tarjetas más rápido</translation> <translation id="4067098466788473230">Subvenciones y becas para estudiantes</translation> <translation id="4067947977115446013">Añade una dirección válida</translation> -<translation id="4070790659619547722">Con la medición de anuncios, se comparten algunos tipos de datos entre sitios para medir el rendimiento de sus anuncios, como la hora del día en la que se te mostró un anuncio.</translation> +<translation id="4070790659619547722">Con la medición de anuncios, se comparten algunos tipos de datos limitados entre sitios para medir el rendimiento de sus anuncios, como la hora del día en la que se te mostró un anuncio.</translation> <translation id="4072193657607981494">Cargando políticas</translation> <translation id="4072486802667267160">Se ha producido un error al procesar el pedido. Vuelve a intentarlo.</translation> <translation id="4073376909608563327">No se ha podido usar el desbloqueo del dispositivo</translation> @@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Informática y electrónica</translation> <translation id="4275830172053184480">Reiniciar tu dispositivo</translation> <translation id="4277028893293644418">Cambiar contraseña</translation> +<translation id="4277937682389409325">Dirección local</translation> <translation id="4278390842282768270">Permitido</translation> <translation id="4281998142035485137">{0,plural, =1{¿Abrir archivo confidencial?}other{¿Abrir archivos confidenciales?}}</translation> <translation id="4282346679996504092">Las alertas de este producto se han desactivado y se ha quitado el marcador</translation> @@ -2781,7 +2782,7 @@ <translation id="7773005668374414287">Mismo orden boca arriba</translation> <translation id="7785790577395078482">este tablet</translation> <translation id="7786368602962652765">Un campo obligatorio está vacío. Rellénalo antes de guardar.</translation> -<translation id="7790488044432570133">Los sitios que visites pueden solicitar a Chrome información que les ayude a medir el rendimiento de sus anuncios. Chrome permite que los sitios recojan algunos tipos de datos, como la hora del día en la que se te mostró un anuncio.</translation> +<translation id="7790488044432570133">Los sitios que visites pueden solicitar a Chrome información que les ayude a medir el rendimiento de sus anuncios. Chrome permite que los sitios recojan algunos tipos de datos limitados, como la hora del día en la que se te mostró un anuncio.</translation> <translation id="7791011319128895129">Sin publicar</translation> <translation id="7791196057686275387">Envolver</translation> <translation id="7791543448312431591">Añadir</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index c1034a7..4a139122 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -1336,6 +1336,7 @@ <translation id="4274173425554582601">Informatika eta elektronika</translation> <translation id="4275830172053184480">Berrabiarazi gailua</translation> <translation id="4277028893293644418">Berrezarri pasahitza</translation> +<translation id="4277937682389409325">Tokiko helbidea</translation> <translation id="4278390842282768270">Baimenduta</translation> <translation id="4281998142035485137">{0,plural, =1{Isilpeko fitxategia ireki nahi duzu?}other{Isilpeko fitxategiak ireki nahi dituzu?}}</translation> <translation id="4282346679996504092">Desaktibatu dira produktuari buruzko alertak, eta kendu da haren laster-marka</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 4b5a260..62ff07c 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -503,7 +503,7 @@ <translation id="2149968176347646218">اتصال امن نیست</translation> <translation id="2153609454945889823">«خدمات Google Play ویژه واقعیت افزوده» نصب شود؟</translation> <translation id="2154484045852737596">ویرایش کارت</translation> -<translation id="2154739667870063220">راهاندازی مجدد</translation> +<translation id="2154739667870063220">بازراهاندازی</translation> <translation id="2155260325161282517">۷ × ۵ اینچ</translation> <translation id="2157640075051554492">اعلانهای ردیابی قیمت</translation> <translation id="2161656808144014275">نوشتار</translation> @@ -1623,7 +1623,7 @@ <translation id="4964505745997821360">بیمه درمانی</translation> <translation id="4968522289500246572">این برنامه برای تلفن همراه طراحی شده است و ممکن است با تغییر اندازه سازگار نباشد. برنامه ممکن است با مشکلاتی روبرو شود یا بازراهاندازی شود.</translation> <translation id="4968665849807487749">میتواند درخواست کند پنجرههای همه نمایشگرهایتان را مدیریت کند</translation> -<translation id="4969341057194253438">حذف ویدیوی ضبطشده</translation> +<translation id="4969341057194253438">حذف ویدیو ضبطشده</translation> <translation id="4973922308112707173">دو سوراخ در بالا</translation> <translation id="4976702386844183910">آخرین بازدید: <ph name="DATE" /></translation> <translation id="498323057460789381">خطا در اعتبارسنجی طرح: <ph name="ERROR" /></translation> @@ -2270,7 +2270,7 @@ <translation id="6597665340361269064">۹۰ درجه</translation> <translation id="6599642189720630047">محصولات پیگیریشده</translation> <translation id="6611723696964473273">اخبار اقتصادی</translation> -<translation id="6612010098632894193">ویدیوی آنلاین</translation> +<translation id="6612010098632894193">ویدیو آنلاین</translation> <translation id="6615297766614333076">پشتهساز ۲</translation> <translation id="6624427990725312378">اطلاعات تماس</translation> <translation id="6627727261837091711">نمایش جزئیات شخصیسازی آگهی</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index cff2cbb..c5fa7e8 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -1341,6 +1341,7 @@ <translation id="4274173425554582601">Tietokoneet ja elektroniikka</translation> <translation id="4275830172053184480">Käynnistä laite uudelleen</translation> <translation id="4277028893293644418">Pyydä uusi salasana</translation> +<translation id="4277937682389409325">Paikallinen osoite</translation> <translation id="4278390842282768270">Sallittu</translation> <translation id="4281998142035485137">{0,plural, =1{Avataanko luottamuksellinen tiedosto?}other{Avataanko luottamukselliset tiedostot?}}</translation> <translation id="4282346679996504092">Tämän tuotteen ilmoitukset on laitettu pois päältä ja kirjanmerkki poistettu</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index b8788a7..a20a9c2 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Ordinateurs et électronique</translation> <translation id="4275830172053184480">Redémarrer l'appareil</translation> <translation id="4277028893293644418">Réinitialiser le mot de passe</translation> +<translation id="4277937682389409325">Adresse locale</translation> <translation id="4278390842282768270">Autorisé</translation> <translation id="4281998142035485137">{0,plural, =1{Ouvrir un fichier confidentiel?}one{Ouvrir un fichier confidentiel?}other{Ouvrir des fichiers confidentiels?}}</translation> <translation id="4282346679996504092">Les alertes pour ce produit ont été désactivées, et le favori a été supprimé</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index e740258..1c48ecc 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -273,7 +273,7 @@ <translation id="1572765991610098222"><ph name="WIDTH" /> x <ph name="HEIGHT" /> pouces</translation> <translation id="1581080074034554886">Code CVC :</translation> <translation id="1583429793053364125">Une erreur s'est produite lors de l'affichage de la page Web.</translation> -<translation id="1584492003828271317">Lorsque vous naviguez, la personnalisation des annonces dépend de ce paramètre, des thèmes publicitaires, des paramètres des cookies et de si le site que vous consultez personnalise les annonces</translation> +<translation id="1584492003828271317">Lorsque vous naviguez, la personnalisation des annonces dépend de ce paramètre, des thèmes publicitaires, des paramètres des cookies et du fait que le site que vous consultez personnalise ou non les annonces</translation> <translation id="1586541204584340881">Les extensions que vous avez installées</translation> <translation id="1588438908519853928">Standard</translation> <translation id="1592005682883173041">Accès aux données locales</translation> @@ -881,7 +881,7 @@ <translation id="317878711435188021">Savoir si vous utilisez activement cet appareil</translation> <translation id="3180358318770512945">Éducation des enfants</translation> <translation id="3187306450550410410">Aménagement du temps de travail</translation> -<translation id="3187472288455401631">Performances des annonces</translation> +<translation id="3187472288455401631">Mesure des annonces</translation> <translation id="3190736958609431397">Ne plus suivre</translation> <translation id="319282854780294203">Réseaux sociaux</translation> <translation id="3194737229810486521"><ph name="URL" /> souhaite stocker des données de façon permanente sur votre appareil</translation> @@ -1233,7 +1233,7 @@ <translation id="4063924980214801036">Utiliser le déverrouillage de l'appareil pour confirmer les cartes plus rapidement</translation> <translation id="4067098466788473230">Bourses d'études</translation> <translation id="4067947977115446013">Ajouter une adresse valide</translation> -<translation id="4070790659619547722">Avec la mesure des performances des annonces, seuls quelques types de données sont partagés entre les sites, comme l'heure à laquelle une annonce vous a été présentée.</translation> +<translation id="4070790659619547722">Avec la mesure des annonces, seuls quelques types de données sont partagés entre les sites, comme l'heure à laquelle une annonce vous a été présentée.</translation> <translation id="4072193657607981494">Chargement des règles…</translation> <translation id="4072486802667267160">Une erreur s'est produite lors du traitement de votre commande. Veuillez réessayer.</translation> <translation id="4073376909608563327">Impossible d'utiliser le déverrouillage</translation> @@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Informatique et électronique</translation> <translation id="4275830172053184480">Redémarrer l'appareil</translation> <translation id="4277028893293644418">Réinitialiser le mot de passe</translation> +<translation id="4277937682389409325">Adresse locale</translation> <translation id="4278390842282768270">Autorisé</translation> <translation id="4281998142035485137">{0,plural, =1{Ouvrir le fichier confidentiel ?}one{Ouvrir le fichier confidentiel ?}other{Ouvrir les fichiers confidentiels ?}}</translation> <translation id="4282346679996504092">Les alertes pour ce produit ont été désactivées et le favori supprimé</translation> @@ -3317,7 +3318,7 @@ <translation id="9157595877708044936">Configuration en cours...</translation> <translation id="9164742147345933553">os://flags</translation> <translation id="9165305804774426672">Les sites que vous consultez peuvent aussi déterminer vos centres d'intérêt en fonction de votre activité sur ces sites. Par exemple, si vous consultez un site qui vend des chaussures de running pour les longues distances, le site peut déterminer que le marathon fait partie de vos centres d'intérêt.</translation> -<translation id="9166851138617700776">En savoir plus sur les annonces suggérées par les sites et la mesure des performances des annonces</translation> +<translation id="9166851138617700776">En savoir plus sur les annonces suggérées par les sites et la mesure des annonces</translation> <translation id="9168814207360376865">Autorisez les sites à vérifier si vous avez enregistré des modes de paiement</translation> <translation id="9169664750068251925">Toujours bloquer sur ce site</translation> <translation id="9169931577761441333">Ajouter <ph name="APP_NAME" /> à l'écran d'accueil</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 4b37433..e5faa86 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -1339,6 +1339,7 @@ <translation id="4274173425554582601">Računala i elektronika</translation> <translation id="4275830172053184480">Ponovo pokrenite svoj uređaj</translation> <translation id="4277028893293644418">Poništi zaporku</translation> +<translation id="4277937682389409325">Lokalna adresa</translation> <translation id="4278390842282768270">Dopušteno</translation> <translation id="4281998142035485137">{0,plural, =1{Želite li otvoriti povjerljivu datoteku?}one{Želite li otvoriti povjerljive datoteke?}few{Želite li otvoriti povjerljive datoteke?}other{Želite li otvoriti povjerljive datoteke?}}</translation> <translation id="4282346679996504092">Upozorenja za ovaj proizvod isključena su, a oznaka je uklonjena</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index 17e2cbd7..24573c11 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Համակարգիչներ և էլեկտրոնիկա</translation> <translation id="4275830172053184480">Սարքի վերագործարկում:</translation> <translation id="4277028893293644418">Փոխել գաղտնաբառը</translation> +<translation id="4277937682389409325">Տեղական հասցե</translation> <translation id="4278390842282768270">Թույլատրված է</translation> <translation id="4281998142035485137">{0,plural, =1{Բացե՞լ կոնֆիդենցիալ ֆայլը}one{Բացե՞լ կոնֆիդենցիալ ֆայլը}other{Բացե՞լ կոնֆիդենցիալ ֆայլերը}}</translation> <translation id="4282346679996504092">Այս ապրանքի մասին ծանուցումներն անջատված են, իսկ էջանիշը հեռացվել է</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index 54ac34c..625b89d4 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -2778,7 +2778,7 @@ <translation id="7773005668374414287">Stesso ordine a faccia in su</translation> <translation id="7785790577395078482">questo tablet</translation> <translation id="7786368602962652765">C'è un campo obbligatorio vuoto. Compilalo prima di salvare.</translation> -<translation id="7790488044432570133">I siti che visiti possono chiedere a Chrome informazioni utili a valutare il rendimento dei loro annunci. Chrome consente ai siti di raccogliere tipi di dati limitati, come l'ora del giorno in cui ti è stato mostrato un annuncio.</translation> +<translation id="7790488044432570133">I siti che visiti possono chiedere a Chrome informazioni utili a misurare il rendimento dei loro annunci. Chrome consente ai siti di raccogliere tipi di dati limitati, come l'ora del giorno in cui ti è stato mostrato un annuncio.</translation> <translation id="7791011319128895129">Non pubblicata</translation> <translation id="7791196057686275387">Rilegatura</translation> <translation id="7791543448312431591">Aggiungi</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb index 28c780a..c9263de 100644 --- a/components/strings/components_strings_lo.xtb +++ b/components/strings/components_strings_lo.xtb
@@ -730,6 +730,7 @@ <translation id="2718207025093645426">ຜູ້ໃຊ້ ຫຼື ອຸປະກອນທີ່ມີການຈັດການນັ້ນບໍ່ໄດ້ໂຫຼດນະໂຍບາຍໄວ້.</translation> <translation id="2721148159707890343">ການຮ້ອງຂໍສໍາເລັດ</translation> <translation id="2723669454293168317">ເປີດໃຊ້ການກວດສອບຄວາມປອດໄພໃນການຕັ້ງຄ່າ Chrome</translation> +<translation id="2725492561136085792">ກົດ Enter ເພື່ອເປີດໃຊ້ຄຳສັ່ງນີ້.</translation> <translation id="2726001110728089263">ຖາດຂ້າງ</translation> <translation id="2728127805433021124">ໃບຢັ້ງຢືນຂອງເຊີບເວີໄດ້ຮັບການລົງລາຍເຊັນດ້ວຍການໃຊ້ຂັ້ນຕອນການລົງລາຍເຊັນອ່ອນແອ</translation> <translation id="2730326759066348565"><ph name="BEGIN_LINK" />ກຳລັງເປີດໃຊ້ Connectivity Diagnostics<ph name="END_LINK" /></translation> @@ -826,6 +827,7 @@ <translation id="299990983510665749">ລົດຫ້າປະຕູ</translation> <translation id="3002501248619246229">ກວດສອບສື່ຂອງຖາດເຈ້ຍເຂົ້າ</translation> <translation id="3005723025932146533">ສະແດງສໍາເນົາທີ່ບັນທຶກໄວ້</translation> +<translation id="3009036448238594149"><ph name="ACTION_IN_SUGGEST_FOCUSED_FRIENDLY_MATCH_TEXT" />, ກົດ Tab ເພື່ອເລືອກເບິ່ງຄຳສັ່ງທີ່ມີໃຫ້, ຈາກນັ້ນກົດ Enter ເພື່ອເປີດໃຊ້ຄຳສັ່ງທີ່ເລືອກ.</translation> <translation id="3013291976881901233">ການບໍລິການ MIDI</translation> <translation id="301521992641321250">ບລັອກອັດຕະໂນມັດແລ້ວ</translation> <translation id="3016780570757425217">ຮູ້ຈັກສະຖານທີ່ຂອງທ່ານ</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index fce524a..048350c 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -1339,6 +1339,7 @@ <translation id="4274173425554582601">Datori un elektronika</translation> <translation id="4275830172053184480">Ierīces restartēšana</translation> <translation id="4277028893293644418">Atiestatīt paroli</translation> +<translation id="4277937682389409325">Vietējā adrese</translation> <translation id="4278390842282768270">Atļauts</translation> <translation id="4281998142035485137">{0,plural, =1{Vai atvērt konfidenciālu failu?}zero{Vai atvērt konfidenciālus failus?}one{Vai atvērt konfidenciālus failus?}other{Vai atvērt konfidenciālus failus?}}</translation> <translation id="4282346679996504092">Paziņojumi par šo produktu ir izslēgti, un grāmatzīme ir noņemta.</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index 209ee90..bdcb0a3e 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Компјутери и електронски уреди</translation> <translation id="4275830172053184480">Рестартирај го уредот</translation> <translation id="4277028893293644418">Ресетирај ја лозинката</translation> +<translation id="4277937682389409325">Локална адреса</translation> <translation id="4278390842282768270">Дозволено</translation> <translation id="4281998142035485137">{0,plural, =1{Да се отвори доверливата датотека?}one{Да се отворат доверливите датотеки?}other{Да се отворат доверливите датотеки?}}</translation> <translation id="4282346679996504092">Известувањата за овој производ се исклучени, а обележувачот е отстранет</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 0dba43f..36849a72 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -1339,6 +1339,7 @@ <translation id="4274173425554582601">കമ്പ്യൂട്ടറുകളും ഇലക്ട്രോണിക്സും</translation> <translation id="4275830172053184480">നിങ്ങളുടെ ഉപകരണം പുനരാരംഭിക്കുക</translation> <translation id="4277028893293644418">പാസ്വേഡ് റീസെറ്റ് ചെയ്യുക</translation> +<translation id="4277937682389409325">പ്രാദേശിക വിലാസം</translation> <translation id="4278390842282768270">അനുവദനീയം</translation> <translation id="4281998142035485137">{0,plural, =1{രഹസ്യാത്മക ഫയൽ തുറക്കണോ?}other{രഹസ്യാത്മക ഫയലുകൾ തുറക്കണോ?}}</translation> <translation id="4282346679996504092">ഈ ഉൽപ്പന്നത്തിനായുള്ള അറിയിപ്പുകൾ ഓഫാക്കി, ബുക്ക്മാർക്ക് നീക്കം ചെയ്തു</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index 960f4e58..3d7da43 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -1337,6 +1337,7 @@ <translation id="4274173425554582601">କମ୍ପ୍ୟୁଟର ଏବଂ ଇଲେକ୍ଟ୍ରୋନିକ୍ସ</translation> <translation id="4275830172053184480">ଆପଣଙ୍କର ଡିଭାଇସ୍ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ</translation> <translation id="4277028893293644418">ପାସ୍ୱର୍ଡ ରିସେଟ୍ କରନ୍ତୁ</translation> +<translation id="4277937682389409325">ସ୍ଥାନୀୟ ଠିକଣା</translation> <translation id="4278390842282768270">ଅନୁମୋଦିତ</translation> <translation id="4281998142035485137">{0,plural, =1{ଗୋପନୀୟ ଫାଇଲ ଖୋଲିବେ?}other{ଗୋପନୀୟ ଫାଇଲଗୁଡ଼ିକୁ ଖୋଲିବେ?}}</translation> <translation id="4282346679996504092">ଏହି ପ୍ରଡକ୍ଟ ପାଇଁ ଆଲର୍ଟଗୁଡ଼ିକୁ ବନ୍ଦ କରିଦିଆଯାଇଛି ଏବଂ ବୁକମାର୍କକୁ କାଢ଼ି ଦିଆଯାଇଛି</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 20baeea..7a63fe0 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Computadores e aparelhos eletrônicos</translation> <translation id="4275830172053184480">Reiniciar seu dispositivo</translation> <translation id="4277028893293644418">Redefinir senha</translation> +<translation id="4277937682389409325">Endereço local</translation> <translation id="4278390842282768270">Permitido</translation> <translation id="4281998142035485137">{0,plural, =1{Abrir arquivo confidencial?}one{Abrir arquivo confidencial?}other{Abrir arquivos confidenciais?}}</translation> <translation id="4282346679996504092">Os alertas para este produto foram desativados e o favorito foi removido</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 415d8ee8..e0a9d5f 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -2628,7 +2628,7 @@ <translation id="7463075493919226237">Австралийский футбол</translation> <translation id="7465963048299965912">10 x 13 дюймов</translation> <translation id="7469935732330206581">Форма не защищена</translation> -<translation id="7473891865547856676">Пропустить</translation> +<translation id="7473891865547856676">Нет, спасибо</translation> <translation id="7481312909269577407">Вперед</translation> <translation id="7481603210197454575">Конверт Italian</translation> <translation id="7485870689360869515">Данные не найдены.</translation> @@ -2790,7 +2790,7 @@ <translation id="7800977246388195491">Chrome определяет интересующие вас темы на основе недавней истории браузера. Сайты, которые вы посещаете, также могут определять, что вам нравится. Сайты, на которые вы зайдете в дальнейшем, смогут запрашивать эти сведения, чтобы показывать персонализированную рекламу. Вы можете выбирать, какие темы и данные каких сайтов будут использоваться для показа рекламы.</translation> <translation id="7802523362929240268">Сайт безопасен</translation> <translation id="7802989406998618639">Введите <ph name="NUMBER_OF_DIGITS" />-значный защитный код (его можно найти <ph name="SIDE_OF_CARD" />), чтобы банк подтвердил вашу личность.</translation> -<translation id="780301667611848630">Пропустить</translation> +<translation id="780301667611848630">Нет, спасибо</translation> <translation id="7805768142964895445">Состояние</translation> <translation id="7812922009395017822">Мир</translation> <translation id="7813600968533626083">Удалить подсказку из Chrome?</translation> @@ -3093,9 +3093,9 @@ <translation id="8589998999637048520">Лучшее качество</translation> <translation id="8600271352425265729">Только в этот раз</translation> <translation id="860043288473659153">Имя владельца карты</translation> -<translation id="8601027005147870853"><ph name="BEGIN_BOLD" />Какие данные используются.<ph name="END_BOLD" /> Ваши действия на сайте, открытом в Chrome на этом устройстве.</translation> +<translation id="8601027005147870853"><ph name="BEGIN_BOLD" />Какие данные используются.<ph name="END_BOLD" /> Ваши действия на сайте, который вы посетили в Chrome на этом устройстве.</translation> <translation id="8606726445206553943">использование MIDI-устройств</translation> -<translation id="8606988009912891950">Темы рекламы помогают сайтам показывать вам подходящие объявления – и при этом защищать ваши личные данные и историю браузера. Chrome может определять интересующие вас темы на основе недавней истории браузера. Сайты, на которые вы будете заходить в дальнейшем, смогут запрашивать у Chrome сведения об этих темах, чтобы персонализировать рекламу для вас.</translation> +<translation id="8606988009912891950">Темы рекламы помогают сайтам показывать вам подходящие объявления – и при этом защищают ваши личные данные и историю браузера. Chrome может определять интересующие вас темы на основе недавней истории браузера. Сайты, на которые вы будете заходить в дальнейшем, смогут запрашивать у Chrome сведения об этих темах, чтобы персонализировать рекламу для вас.</translation> <translation id="8617269623452051934">использование устройства</translation> <translation id="861775596732816396">Размер: 4</translation> <translation id="8620276786115098679">Конверт Kaku 7</translation> @@ -3315,7 +3315,7 @@ <translation id="9155211586651734179">Какие периферийные аудиоустройства подключены.</translation> <translation id="9157595877708044936">Настройка...</translation> <translation id="9164742147345933553">os://flags</translation> -<translation id="9165305804774426672">Посещаемые вами сайты также могут определять ваши интересы, исходя из ваших действий. Например, если вы посетите сайт, на котором продаются кроссовки для бега на длинные дистанции, он может определить, что вам интересны марафоны.</translation> +<translation id="9165305804774426672">Посещаемые вами сайты также могут определять ваши интересы исходя из ваших действий. Например, если вы посетите сайт, на котором продаются кроссовки для бега на длинные дистанции, он может определить, что вам интересны марафоны.</translation> <translation id="9166851138617700776">Подробнее о рекламе, предлагаемой сайтами, и оценке ее эффективности</translation> <translation id="9168814207360376865">Разрешить сайтам проверять наличие сохраненных способов оплаты</translation> <translation id="9169664750068251925">Всегда блокировать на этом сайте</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb index 317d97fa..8a8ef35 100644 --- a/components/strings/components_strings_si.xtb +++ b/components/strings/components_strings_si.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">පරිගණක සහ විද්යුත් උපකරණ</translation> <translation id="4275830172053184480">ඔබේ උපාංගය නැවත අරඹන්න</translation> <translation id="4277028893293644418">මුරපදය යළි සකසන්න</translation> +<translation id="4277937682389409325">දේශීය ලිපිනය</translation> <translation id="4278390842282768270">ඉඩ දුන්</translation> <translation id="4281998142035485137">{0,plural, =1{රහස්ය ගොනුව විවෘත කරන්න ද?}one{රහස්ය ගොනු විවෘත කරන්න ද?}other{රහස්ය ගොනු විවෘත කරන්න ද?}}</translation> <translation id="4282346679996504092">මෙම නිෂ්පාදනය සඳහා ඇඟවීම් අක්රිය කර ඇති අතර පිටුසන ඉවත් කර ඇත</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index 7736c34..dab4584 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Kompjuterët dhe elektronika</translation> <translation id="4275830172053184480">Rinise pajisjen</translation> <translation id="4277028893293644418">Rivendos fjalëkalimin</translation> +<translation id="4277937682389409325">Adresë lokale</translation> <translation id="4278390842282768270">Të lejuara</translation> <translation id="4281998142035485137">{0,plural, =1{Të hapet skedari konfidencial?}other{Të hapen skedarët konfidencialë?}}</translation> <translation id="4282346679996504092">Sinjalizimet për këtë produkt janë çaktivizuar dhe faqeshënuesi është hequr</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index c3cf470..245fe4d 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Kompyuta na vifaa vya kielektroniki</translation> <translation id="4275830172053184480">Washa upya kifaa chako</translation> <translation id="4277028893293644418">Badilisha nenosiri</translation> +<translation id="4277937682389409325">Anwani ya eneo husika</translation> <translation id="4278390842282768270">Imeruhusiwa</translation> <translation id="4281998142035485137">{0,plural, =1{Ungependa kufungua faili ya siri?}other{Ungependa kufungua faili za siri?}}</translation> <translation id="4282346679996504092">Arifa za bidhaa hii zimezimwa na alamisho imeondolewa</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 4869a1a..ce8e6e2 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -1340,6 +1340,7 @@ <translation id="4274173425554582601">Bilgisayar ve elektronik</translation> <translation id="4275830172053184480">Cihazınızı yeniden başlatın</translation> <translation id="4277028893293644418">Şifreyi sıfırla</translation> +<translation id="4277937682389409325">Yerel adres</translation> <translation id="4278390842282768270">İzin veriliyor</translation> <translation id="4281998142035485137">{0,plural, =1{Gizli dosya açılsın mı?}other{Gizli dosyalar açılsın mı?}}</translation> <translation id="4282346679996504092">Bu ürünle ilgili uyarılar devre dışı bırakıldı ve yer işareti kaldırıldı</translation> @@ -3126,7 +3127,7 @@ <translation id="8705331520020532516">Seri Numarası</translation> <translation id="8708134712139312373">Bluetooth cihazlarına bağlanmak isteyebilir</translation> <translation id="8710842507289500830">Yazı tipi stili</translation> -<translation id="8712637175834984815">Anlaşıldı</translation> +<translation id="8712637175834984815">Anladım</translation> <translation id="8713438021996895321">Şiir</translation> <translation id="8715502133575042727">Çocuk edebiyatı</translation> <translation id="8718314106902482036">Ödeme işlemi tamamlanmadı</translation>
diff --git a/components/subresource_filter/content/browser/subresource_filter_test_harness.cc b/components/subresource_filter/content/browser/subresource_filter_test_harness.cc index b3e0613..c73e50b6 100644 --- a/components/subresource_filter/content/browser/subresource_filter_test_harness.cc +++ b/components/subresource_filter/content/browser/subresource_filter_test_harness.cc
@@ -28,7 +28,7 @@ #include "components/subresource_filter/core/mojom/subresource_filter.mojom.h" #include "components/user_prefs/user_prefs.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_throttle.h" #include "content/public/test/navigation_simulator.h"
diff --git a/components/supervised_user/core/common/features.h b/components/supervised_user/core/common/features.h index 1a66c876..b2f61c88 100644 --- a/components/supervised_user/core/common/features.h +++ b/components/supervised_user/core/common/features.h
@@ -27,6 +27,8 @@ BASE_DECLARE_FEATURE(kRetireStaticDenyList); +BASE_DECLARE_FEATURE(kEnableProtoApiForClassifyUrl); + // Returns whether refreshed version of the website filter interstitial is // enabled. bool IsWebFilterInterstitialRefreshEnabled();
diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc index 4e9d29a..c8ede572 100644 --- a/components/sync/driver/data_type_manager_impl.cc +++ b/components/sync/driver/data_type_manager_impl.cc
@@ -138,6 +138,8 @@ ModelTypeSet allowed_types = ControlTypes(); // Add types with controllers. + // TODO(crbug.com/1430450): `preferred_types` should already only contain + // types with controllers. Can we CHECK() this instead? for (const auto& [type, controller] : *controllers_) { allowed_types.Put(type); @@ -217,10 +219,6 @@ DCHECK_EQ(context.cache_guid, last_requested_context_.cache_guid); } - // TODO(zea): consider not performing a full configuration once there's a - // reliable way to determine if the requested set of enabled types matches the - // current set. - preferred_types_ = preferred_types; last_requested_context_ = context; @@ -388,7 +386,7 @@ preferred_types_without_errors_ = GetEnabledTypes(); configuration_types_queue_ = PrioritizeTypes(preferred_types_without_errors_); - model_load_manager_.Initialize( + model_load_manager_.Configure( /*preferred_types_without_errors=*/preferred_types_without_errors_, /*preferred_types=*/preferred_types_, last_requested_context_); } @@ -650,22 +648,15 @@ } void DataTypeManagerImpl::Stop(SyncStopMetadataFate metadata_fate) { - if (state_ == STOPPED) + if (state_ == STOPPED) { return; + } bool need_to_notify = state_ == CONFIGURING; - StopImpl(metadata_fate); - if (need_to_notify) { - ConfigureResult result(ABORTED, preferred_types_); - NotifyDone(result); - } -} - -void DataTypeManagerImpl::StopImpl(SyncStopMetadataFate metadata_fate) { state_ = STOPPING; - // Invalidate weak pointer to drop configuration callbacks. + // Invalidate weak pointers to drop configuration callbacks. weak_ptr_factory_.InvalidateWeakPtrs(); // Stop all data types. @@ -677,6 +668,11 @@ // TODO(mastiz): Reconsider waiting in STOPPING state until all datatypes have // stopped. state_ = STOPPED; + + if (need_to_notify) { + ConfigureResult result(ABORTED, preferred_types_); + NotifyDone(result); + } } void DataTypeManagerImpl::NotifyStart() {
diff --git a/components/sync/driver/data_type_manager_impl.h b/components/sync/driver/data_type_manager_impl.h index a566de9..8444958 100644 --- a/components/sync/driver/data_type_manager_impl.h +++ b/components/sync/driver/data_type_manager_impl.h
@@ -51,7 +51,7 @@ State state() const override; ModelTypeSet GetTypesWithPendingDownloadForInitialSync() const override; - // |ModelLoadManagerDelegate| implementation. + // `ModelLoadManagerDelegate` implementation. void OnAllDataTypesReadyForConfigure() override; // No-op if the type is not connected or has already failed. void OnSingleDataTypeWillStop(ModelType type, @@ -76,12 +76,12 @@ }; using DataTypeConfigStateMap = std::map<ModelType, DataTypeConfigState>; - // Return model types in |state_map| that match |state|. + // Return model types in `state_map` that match `state`. static ModelTypeSet GetDataTypesInState( DataTypeConfigState state, const DataTypeConfigStateMap& state_map); - // Set state of |types| in |state_map| to |state|. + // Set state of `types` in `state_map` to `state`. static void SetDataTypesState(DataTypeConfigState state, ModelTypeSet types, DataTypeConfigStateMap* state_map); @@ -93,7 +93,7 @@ // value of DataTypeController::GetPreconditionState(). void UpdatePreconditionErrors(); - // Update precondition state for |type|, such that data_type_status_table_ + // Update precondition state for `type`, such that `data_type_status_table_` // matches DataTypeController::GetPreconditionState(). Returns true if there // was an actual change. bool UpdatePreconditionError(ModelType type); @@ -118,14 +118,12 @@ DataTypeConfigStateMap BuildDataTypeConfigStateMap( const ModelTypeSet& types_being_configured) const; - // Start configuration of next set of types in |configuration_types_queue_| + // Start configuration of next set of types in `configuration_types_queue_` // (if any exist, does nothing otherwise). void StartNextConfiguration(); void ConfigurationCompleted(ModelTypeSet succeeded_configuration_types, ModelTypeSet failed_configuration_types); - void StopImpl(SyncStopMetadataFate metadata_fate); - ModelTypeSet GetEnabledTypes() const; const raw_ptr<ModelTypeConfigurer> configurer_; @@ -138,9 +136,9 @@ // The set of types whose initial download of sync data has completed. // Note: This class mostly doesn't handle control types (i.e. NIGORI) - - // |controllers_| doesn't contain an entry for NIGORI, and by the time this + // `controllers_` doesn't contain an entry for NIGORI, and by the time this // class gets instantiated, NIGORI is already up and running. It still has to - // be maintained as part of |downloaded_types_|, however, since in some edge + // be maintained as part of `downloaded_types_`, however, since in some edge // cases (notably PurgeForMigration()), this class might have to trigger a // re-download of NIGORI data. // TODO(crbug.com/1422901): Consider removing this; see bug for details. @@ -164,7 +162,7 @@ ModelTypeSet force_redownload_types_; // Whether an attempt to reconfigure was made while we were busy configuring. - // The |preferred_types_| will reflect the newest set of requested types. + // The `preferred_types_` will reflect the newest set of requested types. bool needs_reconfigure_ = false; // The last time Restart() was called.
diff --git a/components/sync/driver/model_load_manager.cc b/components/sync/driver/model_load_manager.cc index 7fb00f0..0d37fb5d 100644 --- a/components/sync/driver/model_load_manager.cc +++ b/components/sync/driver/model_load_manager.cc
@@ -27,9 +27,9 @@ ModelLoadManager::~ModelLoadManager() = default; -void ModelLoadManager::Initialize(ModelTypeSet preferred_types_without_errors, - ModelTypeSet preferred_types, - const ConfigureContext& context) { +void ModelLoadManager::Configure(ModelTypeSet preferred_types_without_errors, + ModelTypeSet preferred_types, + const ConfigureContext& context) { // |preferred_types_without_errors| must be a subset of |preferred_types|. DCHECK(preferred_types.HasAll(preferred_types_without_errors)) << " desired: " @@ -60,9 +60,9 @@ DVLOG(1) << "ModelLoadManager: Stopping disabled types."; for (const auto& [type, dtc] : *controllers_) { - // We generally stop all data types which are not desired. When the storage - // option changes, we need to restart all data types so that they can - // re-wire to the correct storage. + // Stop all data types which are not preferred anymore. When the sync mode + // changes (between full-sync and transport mode), restart all data types so + // that they can re-wire to the correct storage. bool should_stop = !preferred_types_without_errors_.Has(dtc->type()) || sync_mode_changed; if (should_stop && dtc->state() != DataTypeController::NOT_RUNNING) { @@ -176,7 +176,7 @@ (dtc->state() != DataTypeController::NOT_RUNNING && dtc->state() != DataTypeController::STOPPING)) { // We don't really wait until all datatypes have been fully stopped, which - // is only required (and in fact waited for) when Initialize() is called. + // is only required (and in fact waited for) when Configure() is called. StopDatatypeImpl(SyncError(), metadata_fate, dtc.get(), base::DoNothing()); DVLOG(1) << "ModelLoadManager: Stopped " << dtc->name(); @@ -222,8 +222,8 @@ return; } - // It may be possible that `load_models_elapsed_timer_` was never set. For eg. - // if StopDatatype() was called before Initialize(). + // It may be possible that `load_models_elapsed_timer_` was never set, e.g. + // if StopDatatype() was called before Configure(). if (load_models_elapsed_timer_) { base::UmaHistogramMediumTimes("Sync.ModelLoadManager.LoadModelsElapsedTime", load_models_elapsed_timer_->Elapsed());
diff --git a/components/sync/driver/model_load_manager.h b/components/sync/driver/model_load_manager.h index 49cb6d5a..4b64f77 100644 --- a/components/sync/driver/model_load_manager.h +++ b/components/sync/driver/model_load_manager.h
@@ -21,8 +21,6 @@ namespace syncer { -struct ConfigureContext; - // Interface for ModelLoadManager to pass the results of async operations // back to DataTypeManager. class ModelLoadManagerDelegate { @@ -31,10 +29,10 @@ // with ModelTypeConfigurer. A data type is ready when its progress marker is // available, which is the case once the local model has been loaded. // This function is called at most once after each call to - // ModelLoadManager::Initialize(). + // ModelLoadManager::Configure(). virtual void OnAllDataTypesReadyForConfigure() = 0; - // Called when the ModelLoadManager has decided it must stop |type|, likely + // Called when the ModelLoadManager has decided it must stop `type`, likely // because it is no longer a desired data type, sync is shutting down, or some // error occurred during loading. Can be called for types that are not // connected or have already failed. @@ -44,7 +42,7 @@ virtual ~ModelLoadManagerDelegate() = default; }; -// |ModelLoadManager| instructs DataTypeControllers to load models and to stop +// `ModelLoadManager` instructs DataTypeControllers to load models and to stop // (DataTypeManager is responsible for activating/deactivating data types). // Since the operations are async it uses an interface to inform DataTypeManager // of the results of the operations. @@ -57,20 +55,21 @@ ModelLoadManager(const ModelLoadManager&) = delete; ModelLoadManager& operator=(const ModelLoadManager&) = delete; - virtual ~ModelLoadManager(); + ~ModelLoadManager(); - // Stops any data types that are *not* in |preferred_types_without_errors|, - // then kicks off loading of all |preferred_types_without_errors|. - // |preferred_types_without_errors| must be a subset of |preferred_types|. - // |preferred_types| contains all types selected by the user. - void Initialize(ModelTypeSet preferred_types_without_errors, - ModelTypeSet preferred_types, - const ConfigureContext& context); + // (Re)configures the ModelLoadManager with a new set of data types. + // Stops any data types that are *not* in `preferred_types_without_errors`, + // then kicks off loading of all `preferred_types_without_errors`. + // `preferred_types_without_errors` must be a subset of `preferred_types`. + // `preferred_types` contains all types selected by the user. + void Configure(ModelTypeSet preferred_types_without_errors, + ModelTypeSet preferred_types, + const ConfigureContext& context); // Can be called at any time. Synchronously stops all datatypes. void Stop(SyncStopMetadataFate metadata_fate); - // Stops an individual datatype |type|. |error| must be an actual error (i.e. + // Stops an individual datatype `type`. `error` must be an actual error (i.e. // not UNSET). void StopDatatype(ModelType type, SyncStopMetadataFate metadata_fate, @@ -78,11 +77,11 @@ private: // Start loading non-running types that are in - // |preferred_types_without_errors_|. + // `preferred_types_without_errors_`. void LoadDesiredTypes(); - // Callback that will be invoked when the model for |type| finishes loading. - // This callback is passed to the controller's |LoadModels| method. + // Callback that will be invoked when the model for `type` finishes loading. + // This callback is passed to the controller's `LoadModels` method. void ModelLoadCallback(ModelType type, const SyncError& error); // A helper to stop an individual datatype. @@ -91,10 +90,10 @@ DataTypeController* dtc, DataTypeController::StopCallback callback); - // Calls delegate's OnAllDataTypesReadyForConfigure if all datatypes from - // |preferred_types_without_errors_| are loaded. Ensures that - // OnAllDataTypesReadyForConfigure is called at most once for every call to - // Initialize(). + // Calls delegate's OnAllDataTypesReadyForConfigure() if all datatypes from + // `preferred_types_without_errors_` are loaded. Ensures that + // OnAllDataTypesReadyForConfigure() is called at most once for every call to + // Configure(). void NotifyDelegateIfReadyForConfigure(); // Called by `load_models_timeout_timer_`. Issues stop signal (with
diff --git a/components/sync/driver/model_load_manager_unittest.cc b/components/sync/driver/model_load_manager_unittest.cc index 4a09775..3fcd584c 100644 --- a/components/sync/driver/model_load_manager_unittest.cc +++ b/components/sync/driver/model_load_manager_unittest.cc
@@ -74,10 +74,10 @@ EXPECT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::NOT_RUNNING); EXPECT_EQ(GetController(APPS)->state(), DataTypeController::NOT_RUNNING); - // Initialize() kicks off model loading. - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + // Configure() kicks off model loading. + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); EXPECT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -92,9 +92,9 @@ types.Put(BOOKMARKS); EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -114,9 +114,9 @@ types.Put(BOOKMARKS); EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); EXPECT_EQ(DataTypeController::FAILED, GetController(BOOKMARKS)->state()); } @@ -128,9 +128,9 @@ ModelTypeSet types; types.Put(BOOKMARKS); - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -156,9 +156,9 @@ // loaded yet. EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); EXPECT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_STARTING); @@ -178,7 +178,7 @@ DataTypeController::MODEL_LOADED); EXPECT_EQ(GetController(APPS)->state(), DataTypeController::MODEL_LOADED); - // Call ModelLoadManager::Initialize with reduced set of datatypes. + // Call ModelLoadManager::Configure with reduced set of datatypes. // All datatypes in reduced set are already loaded. // OnAllDataTypesReadyForConfigure() should be called. testing::Mock::VerifyAndClearExpectations(&delegate_); @@ -186,7 +186,7 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); ModelTypeSet reduced_types(APPS); - model_load_manager.Initialize( + model_load_manager.Configure( /*preferred_types_without_errors=*/reduced_types, /*preferred_types=*/reduced_types, BuildConfigureContext()); @@ -208,9 +208,9 @@ // loaded yet. EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); EXPECT_EQ(GetController(APPS)->state(), DataTypeController::MODEL_STARTING); @@ -242,9 +242,9 @@ // OnAllDataTypesReadyForConfigure shouldn't be called. EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()).Times(0); - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); GetController(APPS)->model()->SimulateModelStartFinished(); @@ -280,10 +280,10 @@ ModelTypeSet types(BOOKMARKS); - // Initialize() kicks off model loading. - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + // Configure() kicks off model loading. + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -301,8 +301,8 @@ ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::NOT_RUNNING); - // Initialize() kicks off model loading. - model_load_manager.Initialize( + // Configure() kicks off model loading. + model_load_manager.Configure( /*preferred_types_without_errors=*/ModelTypeSet(BOOKMARKS), /*preferred_types=*/ModelTypeSet(BOOKMARKS), BuildConfigureContext()); @@ -334,10 +334,10 @@ EXPECT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::NOT_RUNNING); } -// Test that Initialize stops controllers with KEEP_METADATA for preferred +// Test that Configure stops controllers with KEEP_METADATA for preferred // types. TEST_F(SyncModelLoadManagerTest, KeepsMetadataForPreferredDataType) { - // Initialize the manager with two data types. + // Configure the manager with two data types. controllers_[BOOKMARKS] = std::make_unique<FakeDataTypeController>(BOOKMARKS); controllers_[APPS] = std::make_unique<FakeDataTypeController>(APPS); ModelLoadManager model_load_manager(&controllers_, &delegate_); @@ -346,8 +346,8 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - model_load_manager.Initialize(desired_types, preferred_types, - BuildConfigureContext()); + model_load_manager.Configure(desired_types, preferred_types, + BuildConfigureContext()); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -360,8 +360,8 @@ EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(APPS, _)); EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - model_load_manager.Initialize(desired_types, preferred_types, - BuildConfigureContext()); + model_load_manager.Configure(desired_types, preferred_types, + BuildConfigureContext()); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -369,10 +369,10 @@ EXPECT_EQ(0, GetController(APPS)->model()->clear_metadata_call_count()); } -// Test that Initialize stops controllers with CLEAR_METADATA for +// Test that Configure stops controllers with CLEAR_METADATA for // no-longer-preferred types. TEST_F(SyncModelLoadManagerTest, ClearsMetadataForNotPreferredDataType) { - // Initialize the manager with two data types. + // Configure the manager with two data types. controllers_[BOOKMARKS] = std::make_unique<FakeDataTypeController>(BOOKMARKS); controllers_[APPS] = std::make_unique<FakeDataTypeController>(APPS); ModelLoadManager model_load_manager(&controllers_, &delegate_); @@ -381,8 +381,8 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - model_load_manager.Initialize(desired_types, preferred_types, - BuildConfigureContext()); + model_load_manager.Configure(desired_types, preferred_types, + BuildConfigureContext()); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -396,8 +396,8 @@ EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(APPS, _)); EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - model_load_manager.Initialize(desired_types, preferred_types, - BuildConfigureContext()); + model_load_manager.Configure(desired_types, preferred_types, + BuildConfigureContext()); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -407,7 +407,7 @@ TEST_F(SyncModelLoadManagerTest, SwitchFromFullSyncToTransportModeRestartsTypes) { - // Initialize the manager with two data types. + // Configure the manager with two data types. controllers_[BOOKMARKS] = std::make_unique<FakeDataTypeController>( BOOKMARKS, /*enable_transport_only_model=*/true); controllers_[APPS] = std::make_unique<FakeDataTypeController>( @@ -422,8 +422,8 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - model_load_manager.Initialize(preferred_types, preferred_types, - configure_context); + model_load_manager.Configure(preferred_types, preferred_types, + configure_context); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -441,8 +441,8 @@ EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - model_load_manager.Initialize(preferred_types, preferred_types, - configure_context); + model_load_manager.Configure(preferred_types, preferred_types, + configure_context); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -453,7 +453,7 @@ TEST_F(SyncModelLoadManagerTest, SwitchFromTransportOnlyToFullSyncRestartsTypes) { - // Initialize the manager with two data types. + // Configure the manager with two data types. controllers_[BOOKMARKS] = std::make_unique<FakeDataTypeController>( BOOKMARKS, /*enable_transport_only_model=*/true); controllers_[APPS] = std::make_unique<FakeDataTypeController>( @@ -469,8 +469,8 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - model_load_manager.Initialize(desired_types, preferred_types, - configure_context); + model_load_manager.Configure(desired_types, preferred_types, + configure_context); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -487,8 +487,8 @@ EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - model_load_manager.Initialize(desired_types, preferred_types, - configure_context); + model_load_manager.Configure(desired_types, preferred_types, + configure_context); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::MODEL_LOADED); @@ -508,9 +508,9 @@ types.Put(BOOKMARKS); // Bring the type to a stopped state. - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); model_load_manager.Stop(SyncStopMetadataFate::KEEP_METADATA); ASSERT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::NOT_RUNNING); @@ -549,9 +549,9 @@ ModelTypeSet types; types.Put(BOOKMARKS); - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); ASSERT_EQ(DataTypeController::FAILED, GetController(BOOKMARKS)->state()); EXPECT_EQ(0, GetController(BOOKMARKS)->model()->clear_metadata_call_count()); @@ -560,7 +560,7 @@ EXPECT_EQ(1, GetController(BOOKMARKS)->model()->clear_metadata_call_count()); } -// Test that Initialize waits for desired types in STOPPING state to stop and +// Test that Configure waits for desired types in STOPPING state to stop and // reload before notifying data type manager. TEST_F(SyncModelLoadManagerTest, ShouldWaitForStoppingDesiredTypesBeforeLoading) { @@ -572,7 +572,7 @@ ModelLoadManager model_load_manager(&controllers_, &delegate_); ModelTypeSet preferred_types(APPS, BOOKMARKS); - model_load_manager.Initialize( + model_load_manager.Configure( /*preferred_types_without_errors=*/preferred_types, preferred_types, BuildConfigureContext()); @@ -586,7 +586,7 @@ // type manager. EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure).Times(0); - model_load_manager.Initialize( + model_load_manager.Configure( /*preferred_types_without_errors=*/preferred_types, preferred_types, BuildConfigureContext()); @@ -611,7 +611,7 @@ DataTypeController::MODEL_LOADED); } -// Test that Initialize will not wait for no-longer-desired types in STOPPING +// Test that Configure will not wait for no-longer-desired types in STOPPING // state to stop before loading. TEST_F(SyncModelLoadManagerTest, ShouldNotWaitForStoppingUndesiredTypesBeforeLoading) { @@ -624,8 +624,8 @@ ModelTypeSet preferred_types(APPS, BOOKMARKS); ModelTypeSet preferred_types_without_errors = preferred_types; - model_load_manager.Initialize(preferred_types_without_errors, preferred_types, - BuildConfigureContext()); + model_load_manager.Configure(preferred_types_without_errors, preferred_types, + BuildConfigureContext()); // Bring BOOKMARKS to a STOPPING state. model_load_manager.Stop(SyncStopMetadataFate::KEEP_METADATA); @@ -638,8 +638,8 @@ preferred_types_without_errors.Remove(BOOKMARKS); EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure); - model_load_manager.Initialize(preferred_types_without_errors, preferred_types, - BuildConfigureContext()); + model_load_manager.Configure(preferred_types_without_errors, preferred_types, + BuildConfigureContext()); // APPS is started and DataTypeManager informed. EXPECT_EQ(GetController(APPS)->state(), DataTypeController::MODEL_LOADED); @@ -663,9 +663,9 @@ ModelLoadManager model_load_manager(&controllers_, &delegate_); ModelTypeSet types(BOOKMARKS, APPS); - model_load_manager.Initialize(/*preferred_types_without_errors=*/types, - /*preferred_types=*/types, - BuildConfigureContext()); + model_load_manager.Configure(/*preferred_types_without_errors=*/types, + /*preferred_types=*/types, + BuildConfigureContext()); // Simulate successful loading of APPS only. GetController(APPS)->model()->SimulateModelStartFinished();
diff --git a/components/viz/service/display/direct_renderer.cc b/components/viz/service/display/direct_renderer.cc index f68c2242..aa4e8dc 100644 --- a/components/viz/service/display/direct_renderer.cc +++ b/components/viz/service/display/direct_renderer.cc
@@ -776,7 +776,8 @@ requirements.size = surface_size_for_swap_buffers(); requirements.generate_mipmap = false; requirements.color_space = reshape_color_space(); - requirements.format = GetResourceFormat(reshape_buffer_format()); + requirements.format = SharedImageFormat::SinglePlane( + GetResourceFormat(reshape_buffer_format())); // All root render pass backings allocated by the renderer needs to // eventually go into some composition tree. Other things that own/allocate @@ -791,20 +792,21 @@ // processing promoting a quad as an underlay. If the format we picked does // not have alpha bits, we ned to change to one that does. if (render_pass->has_transparent_background && - AlphaBits(requirements.format) == 0) { + requirements.format.HasAlpha() == 0) { requirements.format = - GetColorSpaceResourceFormat(requirements.color_space); + GetColorSpaceSharedImageFormat(requirements.color_space); } #endif } else { requirements.size = CalculateTextureSizeForRenderPass(render_pass); requirements.generate_mipmap = render_pass->generate_mipmap; requirements.color_space = RenderPassColorSpace(render_pass); - requirements.format = GetColorSpaceResourceFormat(requirements.color_space); + requirements.format = + GetColorSpaceSharedImageFormat(requirements.color_space); } if (render_pass->has_transparent_background) { - DCHECK_GT(AlphaBits(requirements.format), 0); + DCHECK(requirements.format.HasAlpha()); } return requirements; @@ -1118,7 +1120,7 @@ return RenderPassColorSpace(current_frame()->current_render_pass); } -ResourceFormat DirectRenderer::GetColorSpaceResourceFormat( +SharedImageFormat DirectRenderer::GetColorSpaceSharedImageFormat( gfx::ColorSpace color_space) const { // TODO(penghuang): check supported format correctly. gpu::Capabilities caps; @@ -1127,12 +1129,12 @@ #if BUILDFLAG(IS_CHROMEOS_LACROS) // TODO(crbug.com/1317015): add support RGBA_F16 in LaCrOS. auto format = color_space.IsHDR() - ? RGBA_1010102 - : PlatformColor::BestSupportedTextureResourceFormat(caps); + ? SinglePlaneFormat::kRGBA_1010102 + : PlatformColor::BestSupportedTextureFormat(caps); #else auto format = color_space.IsHDR() - ? RGBA_F16 - : PlatformColor::BestSupportedTextureResourceFormat(caps); + ? SinglePlaneFormat::kRGBA_F16 + : PlatformColor::BestSupportedTextureFormat(caps); #endif return format; }
diff --git a/components/viz/service/display/direct_renderer.h b/components/viz/service/display/direct_renderer.h index e5171fbf3..3546717a 100644 --- a/components/viz/service/display/direct_renderer.h +++ b/components/viz/service/display/direct_renderer.h
@@ -205,7 +205,7 @@ struct RenderPassRequirements { gfx::Size size; bool generate_mipmap = false; - ResourceFormat format; + SharedImageFormat format; gfx::ColorSpace color_space; // Render pass wants scanout bool is_scanout = false; @@ -324,7 +324,8 @@ gfx::ColorSpace CurrentRenderPassColorSpace() const; gfx::ColorSpace RenderPassColorSpace( const AggregatedRenderPass* render_pass) const; - ResourceFormat GetColorSpaceResourceFormat(gfx::ColorSpace color_space) const; + SharedImageFormat GetColorSpaceSharedImageFormat( + gfx::ColorSpace color_space) const; // Return the SkColorSpace for rendering to the current render pass. Unlike // CurrentRenderPassColorSpace, this color space has the value of // CurrentFrameSDRWhiteLevel incorporated into it.
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index 1f08563..3191a7e 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -1126,8 +1126,7 @@ // should be backing ready. RenderPassBacking& backing = iter->second; current_canvas_ = skia_output_surface_->BeginPaintRenderPass( - render_pass_id, backing.size, - SharedImageFormat::SinglePlane(backing.format), backing.generate_mipmap, + render_pass_id, backing.size, backing.format, backing.generate_mipmap, backing.scanout_dcomp_surface, RenderPassBackingSkColorSpace(backing), /*is_overlay=*/is_root, backing.mailbox); @@ -2989,8 +2988,7 @@ sk_sp<SkImage> content_image = skia_output_surface_->MakePromiseSkImageFromRenderPass( - quad->render_pass_id, backing.size, - SharedImageFormat::SinglePlane(backing.format), + quad->render_pass_id, backing.size, backing.format, backing.generate_mipmap, RenderPassBackingSkColorSpace(backing), backing.mailbox); DLOG_IF(ERROR, !content_image) @@ -3207,7 +3205,7 @@ // TODO(tangm): We should clean this up by either avoiding HDR or using // RGBAF16 surfaces in this case. const bool dcomp_surface_unsupported_format = - requirements.format == ResourceFormat::RGBA_1010102; + requirements.format == SinglePlaneFormat::kRGBA_1010102; if (requirements.scanout_dcomp_surface && !dcomp_surface_unsupported_format) { @@ -3224,8 +3222,8 @@ } auto mailbox = skia_output_surface_->CreateSharedImage( - SharedImageFormat::SinglePlane(requirements.format), requirements.size, - requirements.color_space, usage, gpu::kNullSurfaceHandle); + requirements.format, requirements.size, requirements.color_space, usage, + gpu::kNullSurfaceHandle); render_pass_backings_.emplace( render_pass_id, RenderPassBacking({requirements.size, requirements.generate_mipmap, @@ -3328,7 +3326,7 @@ SkiaRenderer::GetOrCreateRenderPassOverlayBacking( AggregatedRenderPassId render_pass_id, const AggregatedRenderPassDrawQuad* rpdq, - ResourceFormat buffer_format, + SharedImageFormat buffer_format, gfx::ColorSpace color_space, const gfx::Size& buffer_size) { RenderPassOverlayParams overlay_params; @@ -3347,8 +3345,8 @@ gpu::SHARED_IMAGE_USAGE_SCANOUT | gpu::SHARED_IMAGE_USAGE_DISPLAY_READ | gpu::SHARED_IMAGE_USAGE_DISPLAY_WRITE | gpu::SHARED_IMAGE_USAGE_RASTER; auto mailbox = skia_output_surface_->CreateSharedImage( - SharedImageFormat::SinglePlane(buffer_format), buffer_size, color_space, - kOverlayUsage, gpu::kNullSurfaceHandle); + buffer_format, buffer_size, color_space, kOverlayUsage, + gpu::kNullSurfaceHandle); overlay_params.render_pass_backing = {buffer_size, /*generate_mipmap=*/false, color_space, @@ -3475,7 +3473,7 @@ if (filter_bounds.IsEmpty()) return; - ResourceFormat buffer_format{}; + SharedImageFormat buffer_format; gfx::ColorSpace color_space; RenderPassBacking* src_quad_backing = nullptr; @@ -3489,7 +3487,8 @@ // For bypassed render pass, we use the same format and color space for the // framebuffer. - buffer_format = GetResourceFormat(reshape_buffer_format()); + buffer_format = SharedImageFormat::SinglePlane( + GetResourceFormat(reshape_buffer_format())); color_space = reshape_color_space(); } else { // A real render pass that was turned into an image @@ -3533,7 +3532,7 @@ } else { current_canvas_ = skia_output_surface_->BeginPaintRenderPass( quad->render_pass_id, dst_overlay_backing.size, - SharedImageFormat::SinglePlane(dst_overlay_backing.format), + dst_overlay_backing.format, /*mipmap=*/false, /*scanout_dcomp_surface=*/false, RenderPassBackingSkColorSpace(dst_overlay_backing), @@ -3571,8 +3570,7 @@ auto content_image = skia_output_surface_->MakePromiseSkImageFromRenderPass( quad->render_pass_id, src_quad_backing->size, - SharedImageFormat::SinglePlane(src_quad_backing->format), - src_quad_backing->generate_mipmap, + src_quad_backing->format, src_quad_backing->generate_mipmap, RenderPassBackingSkColorSpace(*src_quad_backing), src_quad_backing->mailbox); if (!content_image) { @@ -3634,7 +3632,7 @@ overlay->damage_rect = gfx::RectF(filter_bounds); // Fill in |format| and |color_space| information based on selected backing. overlay->color_space = color_space; - overlay->format = BufferFormat(buffer_format); + overlay->format = BufferFormat(buffer_format.resource_format()); #endif // BUILDFLAG(IS_APPLE) } #endif // BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_OZONE)
diff --git a/components/viz/service/display/skia_renderer.h b/components/viz/service/display/skia_renderer.h index 61e49d8..0dca47f 100644 --- a/components/viz/service/display/skia_renderer.h +++ b/components/viz/service/display/skia_renderer.h
@@ -278,7 +278,7 @@ gfx::Size size; bool generate_mipmap = false; gfx::ColorSpace color_space; - ResourceFormat format; + SharedImageFormat format; gpu::Mailbox mailbox; bool is_root = false; bool is_scanout = false; @@ -294,7 +294,7 @@ RenderPassOverlayParams* GetOrCreateRenderPassOverlayBacking( AggregatedRenderPassId render_pass_id, const AggregatedRenderPassDrawQuad* rpdq, - ResourceFormat buffer_format, + SharedImageFormat buffer_format, gfx::ColorSpace color_space, const gfx::Size& buffer_size);
diff --git a/components/viz/test/test_raster_interface.h b/components/viz/test/test_raster_interface.h index c806e3f..2bfa58b 100644 --- a/components/viz/test/test_raster_interface.h +++ b/components/viz/test/test_raster_interface.h
@@ -87,9 +87,7 @@ int dst_y_offset, int dst_plane_index, GLenum texture_target, - GLuint src_row_bytes, - const SkImageInfo& src_info, - const void* src_pixels) override {} + const SkPixmap& src_sk_pixmap) override {} void ConvertYUVAMailboxesToRGB( const gpu::Mailbox& dest_mailbox, SkYUVColorSpace planes_yuv_color_space,
diff --git a/components/webapps/browser/android/app_banner_manager_android.cc b/components/webapps/browser/android/app_banner_manager_android.cc index b7218b8..b9c23d2 100644 --- a/components/webapps/browser/android/app_banner_manager_android.cc +++ b/components/webapps/browser/android/app_banner_manager_android.cc
@@ -163,10 +163,6 @@ } void AppBannerManagerAndroid::PerformInstallableWebAppCheck() { - if (!manifest_url_.SchemeIsHTTPOrHTTPS()) { - Stop(MANIFEST_URL_SCHEME_NOT_SUPPORTED_FOR_WEBAPK); - return; - } if (!webapps::WebappsUtils::AreWebManifestUrlsWebApkCompatible(manifest())) { Stop(URL_NOT_SUPPORTED_FOR_WEBAPK); return;
diff --git a/components/webapps/browser/installable/installable_logging.cc b/components/webapps/browser/installable/installable_logging.cc index fbd38640..c389814 100644 --- a/components/webapps/browser/installable/installable_logging.cc +++ b/components/webapps/browser/installable/installable_logging.cc
@@ -74,8 +74,6 @@ "https://goo.gle/improved-pwa-offline-detection for more information."; static const char kPipelineRestarted[] = "Web app uninstalled so that it stops any running pipeline"; -static const char kManifestUrlSchemeNotSupportedForWebApkMessage[] = - "The Manifest URL scheme is not supported on Android."; static const char kNotFromSecureOriginId[] = "not-from-secure-origin"; static const char kNoManifestId[] = "no-manifest"; @@ -111,8 +109,6 @@ "manifest-display-override-not-supported"; static const char kWarnNotOfflineCapableId[] = "warn-not-offline-capable"; static const char kPipelineRestartedId[] = "pipeline-restarted"; -static const char kManifestUrlSchemeNotSupportedForWebApkId[] = - "scheme-not-supported-for-webapk"; const std::string& GetMessagePrefix() { static base::NoDestructor<std::string> message_prefix( @@ -226,9 +222,6 @@ case PIPELINE_RESTARTED: message = kPipelineRestarted; break; - case MANIFEST_URL_SCHEME_NOT_SUPPORTED_FOR_WEBAPK: - message = kManifestUrlSchemeNotSupportedForWebApkMessage; - break; } return message; @@ -343,9 +336,6 @@ case PIPELINE_RESTARTED: error_id = kPipelineRestartedId; break; - case MANIFEST_URL_SCHEME_NOT_SUPPORTED_FOR_WEBAPK: - error_id = kManifestUrlSchemeNotSupportedForWebApkId; - break; } error.error_id = error_id; error.installability_error_arguments = error_arguments;
diff --git a/components/webapps/browser/installable/installable_logging.h b/components/webapps/browser/installable/installable_logging.h index fb380dbf..146efed8 100644 --- a/components/webapps/browser/installable/installable_logging.h +++ b/components/webapps/browser/installable/installable_logging.h
@@ -66,7 +66,7 @@ PIPELINE_RESTARTED = 41, DATA_TIMED_OUT = 42, WEBAPK_INSTALL_FAILED = 43, - MANIFEST_URL_SCHEME_NOT_SUPPORTED_FOR_WEBAPK = 44, + // MANIFEST_URL_SCHEME_NOT_SUPPORTED_FOR_WEBAPK = 44 (DEPRECATED), SERVICE_WORKER_NOT_REQUIRED = 45, MAX_ERROR_CODE, };
diff --git a/content/app/android/library_loader_hooks.cc b/content/app/android/library_loader_hooks.cc index 566e2005..cf50a3af 100644 --- a/content/app/android/library_loader_hooks.cc +++ b/content/app/android/library_loader_hooks.cc
@@ -11,7 +11,7 @@ #include "base/trace_event/trace_event.h" #include "content/common/content_constants_internal.h" #include "content/common/url_schemes.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "services/tracing/public/cpp/trace_startup.h" namespace content {
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc index 2d5ceb0eb..4fec328c 100644 --- a/content/browser/accessibility/browser_accessibility_manager.cc +++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -578,6 +578,10 @@ } if (received_load_complete_event) { + // Clearing the focused node first ensures that the focus event isn't + // suppressed in the case where focus was on the same node as in a previous + // update. + SetLastFocusedNode(nullptr); // Fire a focus event after the document has finished loading, but after all // the platform independent events have already fired, e.g. kLayoutComplete. // Some screen readers need a focus event in order to work properly.
diff --git a/content/browser/android/background_sync_network_observer_android.cc b/content/browser/android/background_sync_network_observer_android.cc index 1aeb716..9fa5d48 100644 --- a/content/browser/android/background_sync_network_observer_android.cc +++ b/content/browser/android/background_sync_network_observer_android.cc
@@ -7,7 +7,7 @@ #include "base/functional/bind.h" #include "base/trace_event/trace_event.h" #include "content/public/android/content_jni_headers/BackgroundSyncNetworkObserver_jni.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/service_worker_context.h" using base::android::JavaParamRef;
diff --git a/content/browser/background_fetch/background_fetch_context.cc b/content/browser/background_fetch/background_fetch_context.cc index b428ced..656c40c 100644 --- a/content/browser/background_fetch/background_fetch_context.cc +++ b/content/browser/background_fetch/background_fetch_context.cc
@@ -23,7 +23,7 @@ #include "content/common/background_fetch/background_fetch_types.h" #include "content/public/browser/background_fetch_delegate.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "storage/browser/blob/blob_data_handle.h" #include "storage/browser/quota/quota_manager_proxy.h"
diff --git a/content/browser/background_fetch/background_fetch_delegate_proxy.cc b/content/browser/background_fetch/background_fetch_delegate_proxy.cc index 6eaf8b22..e0b35994d 100644 --- a/content/browser/background_fetch/background_fetch_delegate_proxy.cc +++ b/content/browser/background_fetch/background_fetch_delegate_proxy.cc
@@ -15,7 +15,7 @@ #include "content/public/browser/background_fetch_description.h" #include "content/public/browser/background_fetch_response.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/download_manager.h" #include "content/public/browser/download_manager_delegate.h" #include "content/public/browser/permission_controller.h"
diff --git a/content/browser/background_sync/background_sync_base_browsertest.cc b/content/browser/background_sync/background_sync_base_browsertest.cc index a6f7637..219abf5 100644 --- a/content/browser/background_sync/background_sync_base_browsertest.cc +++ b/content/browser/background_sync/background_sync_base_browsertest.cc
@@ -13,7 +13,7 @@ #include "content/browser/background_sync/background_sync_manager.h" #include "content/browser/storage_partition_impl.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/service_worker_context.h" #include "content/public/test/background_sync_test_util.h" #include "content/public/test/content_browser_test_utils.h"
diff --git a/content/browser/background_sync/background_sync_proxy.cc b/content/browser/background_sync/background_sync_proxy.cc index b2615a8..a5403493 100644 --- a/content/browser/background_sync/background_sync_proxy.cc +++ b/content/browser/background_sync/background_sync_proxy.cc
@@ -15,7 +15,7 @@ #include "content/public/browser/background_sync_context.h" #include "content/public/browser/background_sync_controller.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" namespace content {
diff --git a/content/browser/blob_storage/blob_registry_wrapper.cc b/content/browser/blob_storage/blob_registry_wrapper.cc index ee9f7ae..10f05c6 100644 --- a/content/browser/blob_storage/blob_registry_wrapper.cc +++ b/content/browser/blob_storage/blob_registry_wrapper.cc
@@ -9,7 +9,7 @@ #include "base/functional/callback_helpers.h" #include "content/browser/blob_storage/chrome_blob_storage_context.h" #include "content/browser/child_process_security_policy_impl.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/common/content_features.h" #include "net/base/features.h" #include "storage/browser/blob/blob_registry_impl.h"
diff --git a/content/browser/browser_context_impl.h b/content/browser/browser_context_impl.h index 3dd274cf..4f422e46 100644 --- a/content/browser/browser_context_impl.h +++ b/content/browser/browser_context_impl.h
@@ -47,7 +47,7 @@ // // TODO(https://crbug.com/1179776): Make BrowserContextImpl to implement // BrowserContext, instead of being a member. -class BrowserContextImpl { +class CONTENT_EXPORT BrowserContextImpl { public: static BrowserContextImpl* From(BrowserContext* self); ~BrowserContextImpl();
diff --git a/content/browser/browser_task_traits_unittest.nc b/content/browser/browser_task_traits_unittest.nc index 611e731..337cfb6 100644 --- a/content/browser/browser_task_traits_unittest.nc +++ b/content/browser/browser_task_traits_unittest.nc
@@ -5,17 +5,12 @@ // This is a "No Compile Test" suite. // http://dev.chromium.org/developers/testing/no-compile-tests -#include "base/task/task_traits.h" #include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/browser_thread.h" namespace content { -#if defined(NCTEST_BROWSER_TASK_TRAITS_MULTIPLE_THREADS) // [r"The traits bag contains multiple traits of the same type."] -constexpr base::TaskTraits traits = {BrowserThread::UI, - BrowserThread::IO}; -#elif defined(NCTEST_BROWSER_TASK_TRAITS_MULTIPLE_TASK_TYPES) // [r"The traits bag contains multiple traits of the same type."] -constexpr base::TaskTraits traits = {BrowserTaskType::kNavigationNetworkResponse, BrowserTaskType::kUserInput}; +#if defined(NCTEST_BROWSER_TASK_TRAITS_MULTIPLE_TASK_TYPES) // [r"The traits bag contains multiple traits of the same type."] +constexpr BrowserTaskTraits traits = {BrowserTaskType::kNavigationNetworkResponse, BrowserTaskType::kUserInput}; #endif
diff --git a/content/browser/browser_thread_impl.cc b/content/browser/browser_thread_impl.cc index 6eebb16c..a733592 100644 --- a/content/browser/browser_thread_impl.cc +++ b/content/browser/browser_thread_impl.cc
@@ -21,7 +21,6 @@ #include "base/time/time.h" #include "build/build_config.h" #include "content/browser/scheduler/browser_task_executor.h" -#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/content_browser_client.h" namespace content {
diff --git a/content/browser/browser_thread_unittest.cc b/content/browser/browser_thread_unittest.cc index 722cb5ee..b4acab98 100644 --- a/content/browser/browser_thread_unittest.cc +++ b/content/browser/browser_thread_unittest.cc
@@ -29,7 +29,6 @@ #include "content/browser/scheduler/browser_task_executor.h" #include "content/browser/scheduler/browser_task_priority.h" #include "content/browser/scheduler/browser_ui_thread_scheduler.h" -#include "content/public/browser/browser_task_traits.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h"
diff --git a/content/browser/browsing_data/browsing_data_browsertest_utils.cc b/content/browser/browsing_data/browsing_data_browsertest_utils.cc index 8daeebe..4004bae 100644 --- a/content/browser/browsing_data/browsing_data_browsertest_utils.cc +++ b/content/browser/browsing_data/browsing_data_browsertest_utils.cc
@@ -14,7 +14,7 @@ #include "base/run_loop.h" #include "components/network_session_configurator/common/network_switches.h" #include "content/browser/browsing_data/browsing_data_test_utils.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/service_worker_context.h" #include "content/public/browser/storage_partition.h"
diff --git a/content/browser/cache_storage/cache_storage_cache_entry_handler.cc b/content/browser/cache_storage/cache_storage_cache_entry_handler.cc index db89833c..b4c4352 100644 --- a/content/browser/cache_storage/cache_storage_cache_entry_handler.cc +++ b/content/browser/cache_storage/cache_storage_cache_entry_handler.cc
@@ -10,7 +10,7 @@ #include "content/browser/cache_storage/background_fetch_cache_entry_handler_impl.h" #include "content/browser/cache_storage/cache_storage.h" #include "content/browser/cache_storage/cache_storage_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "net/filter/source_stream.h" #include "services/network/public/cpp/source_stream_to_data_pipe.h"
diff --git a/content/browser/child_process_launcher_helper.cc b/content/browser/child_process_launcher_helper.cc index edc045f..9ed2507 100644 --- a/content/browser/child_process_launcher_helper.cc +++ b/content/browser/child_process_launcher_helper.cc
@@ -18,7 +18,7 @@ #include "base/task/task_traits.h" #include "build/build_config.h" #include "content/browser/child_process_launcher.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_launcher_utils.h" #include "content/public/common/content_switches.h" #include "content/public/common/sandboxed_process_launcher_delegate.h"
diff --git a/content/browser/devtools/devtools_url_loader_interceptor.cc b/content/browser/devtools/devtools_url_loader_interceptor.cc index 89b6e0d3..06f46ec 100644 --- a/content/browser/devtools/devtools_url_loader_interceptor.cc +++ b/content/browser/devtools/devtools_url_loader_interceptor.cc
@@ -19,7 +19,7 @@ #include "content/browser/devtools/protocol/network.h" #include "content/browser/devtools/protocol/network_handler.h" #include "content/browser/loader/download_utils_impl.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/content_client.h"
diff --git a/content/browser/devtools/protocol/system_info_handler.cc b/content/browser/devtools/protocol/system_info_handler.cc index 8104b19..70b87e4 100644 --- a/content/browser/devtools/protocol/system_info_handler.cc +++ b/content/browser/devtools/protocol/system_info_handler.cc
@@ -18,7 +18,7 @@ #include "content/browser/gpu/gpu_process_host.h" #include "content/public/browser/browser_child_process_host.h" #include "content/public/browser/browser_child_process_host_iterator.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_data.h" #include "content/public/browser/render_process_host.h" #include "content/public/common/content_features.h"
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc index 6d077266..d3dfe52 100644 --- a/content/browser/download/download_manager_impl.cc +++ b/content/browser/download/download_manager_impl.cc
@@ -54,7 +54,7 @@ #include "content/browser/storage_partition_impl.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/device_service.h" #include "content/public/browser/disallow_activation_reason.h"
diff --git a/content/browser/fenced_frame/fenced_frame.cc b/content/browser/fenced_frame/fenced_frame.cc index ac07d6d..4aa294c 100644 --- a/content/browser/fenced_frame/fenced_frame.cc +++ b/content/browser/fenced_frame/fenced_frame.cc
@@ -320,6 +320,11 @@ FrameTreeNode* inner_root = frame_tree_->root(); const blink::FramePolicy& current_frame_policy = inner_root->pending_frame_policy(); + // Observe that the sandbox flags sent from the renderer are currently + // ignored. The `sandbox` attribute on `HTMLFencedFrameElement` may only + // cause embedder-initiated navigations to fail for now---in the renderer. + // TODO(crbug.com/1347953): Handle sandbox flags for fenced frames properly + // in the browser, allowing us to use non-fixed sets of sandbox flags. inner_root->SetPendingFramePolicy(blink::FramePolicy( current_frame_policy.sandbox_flags, frame_policy.container_policy, current_frame_policy.required_document_policy));
diff --git a/content/browser/gpu/gpu_ipc_browsertests.cc b/content/browser/gpu/gpu_ipc_browsertests.cc index ce9a1694..cb830a2 100644 --- a/content/browser/gpu/gpu_ipc_browsertests.cc +++ b/content/browser/gpu/gpu_ipc_browsertests.cc
@@ -11,7 +11,7 @@ #include "content/browser/browser_main_loop.h" #include "content/browser/compositor/image_transport_factory.h" #include "content/browser/gpu/gpu_process_host.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/gpu_data_manager.h" #include "content/public/browser/gpu_utils.h" #include "content/public/common/content_switches.h"
diff --git a/content/browser/loader/cors_origin_pattern_setter_browsertest.cc b/content/browser/loader/cors_origin_pattern_setter_browsertest.cc index f2c0bcc..c38a98a 100644 --- a/content/browser/loader/cors_origin_pattern_setter_browsertest.cc +++ b/content/browser/loader/cors_origin_pattern_setter_browsertest.cc
@@ -13,7 +13,7 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/cors_origin_pattern_setter.h" #include "content/public/test/browser_test.h" #include "content/public/test/browser_test_utils.h"
diff --git a/content/browser/media/capture/frame_sink_video_capture_device.cc b/content/browser/media/capture/frame_sink_video_capture_device.cc index 0d5029f..17e3b97d 100644 --- a/content/browser/media/capture/frame_sink_video_capture_device.cc +++ b/content/browser/media/capture/frame_sink_video_capture_device.cc
@@ -23,7 +23,7 @@ #include "components/viz/host/host_frame_sink_manager.h" #include "content/browser/compositor/surface_utils.h" #include "content/browser/gpu/gpu_data_manager_impl.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/device_service.h" #include "gpu/command_buffer/common/capabilities.h" #include "media/base/video_types.h"
diff --git a/content/browser/media/capture/video_capture_device_proxy_lacros.h b/content/browser/media/capture/video_capture_device_proxy_lacros.h index f30e1b6..cfff640 100644 --- a/content/browser/media/capture/video_capture_device_proxy_lacros.h +++ b/content/browser/media/capture/video_capture_device_proxy_lacros.h
@@ -14,7 +14,7 @@ #include "chromeos/crosapi/mojom/video_capture.mojom.h" #include "content/browser/media/capture/receiver_media_to_crosapi_adapter.h" #include "content/common/content_export.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/desktop_media_id.h" #include "content/public/browser/device_service.h" #include "media/capture/mojom/video_capture_types.mojom.h"
diff --git a/content/browser/media/capture/web_contents_frame_tracker.cc b/content/browser/media/capture/web_contents_frame_tracker.cc index 353f47f..948ec072 100644 --- a/content/browser/media/capture/web_contents_frame_tracker.cc +++ b/content/browser/media/capture/web_contents_frame_tracker.cc
@@ -21,7 +21,7 @@ #include "content/browser/media/capture/web_contents_video_capture_device.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" #include "content/browser/web_contents/web_contents_impl.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_media_capture_id.h"
diff --git a/content/browser/media/capture/web_contents_video_capture_device.cc b/content/browser/media/capture/web_contents_video_capture_device.cc index b4ad9c5..c75a97dc 100644 --- a/content/browser/media/capture/web_contents_video_capture_device.cc +++ b/content/browser/media/capture/web_contents_video_capture_device.cc
@@ -14,7 +14,7 @@ #include "build/build_config.h" #include "content/browser/media/capture/mouse_cursor_overlay_controller.h" #include "content/browser/renderer_host/render_widget_host_view_base.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h"
diff --git a/content/browser/payments/payment_app_context_impl.cc b/content/browser/payments/payment_app_context_impl.cc index 51ea8c82..f91b310 100644 --- a/content/browser/payments/payment_app_context_impl.cc +++ b/content/browser/payments/payment_app_context_impl.cc
@@ -9,7 +9,7 @@ #include "base/containers/contains.h" #include "base/functional/bind.h" #include "content/browser/payments/payment_manager.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" namespace content {
diff --git a/content/browser/push_messaging/push_messaging_manager.cc b/content/browser/push_messaging/push_messaging_manager.cc index ae729ef..670b40d 100644 --- a/content/browser/push_messaging/push_messaging_manager.cc +++ b/content/browser/push_messaging/push_messaging_manager.cc
@@ -23,7 +23,7 @@ #include "content/browser/service_worker/service_worker_context_core.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_host.h" #include "content/public/browser/permission_controller.h" #include "content/public/browser/render_process_host.h"
diff --git a/content/browser/renderer_host/data_transfer_util.cc b/content/browser/renderer_host/data_transfer_util.cc index 1e264013..78f2f64 100644 --- a/content/browser/renderer_host/data_transfer_util.cc +++ b/content/browser/renderer_host/data_transfer_util.cc
@@ -16,7 +16,7 @@ #include "build/chromeos_buildflags.h" #include "content/browser/blob_storage/chrome_blob_storage_context.h" #include "content/browser/file_system_access/file_system_access_manager_impl.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "net/base/mime_util.h" #include "services/network/public/mojom/referrer_policy.mojom-shared.h"
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index 9a0295aa..50fad344 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc
@@ -2078,6 +2078,27 @@ TRACE_EVENT_NESTABLE_ASYNC_END0("navigation", "NavigationRequest", navigation_id_); + // IMPORTANT NOTE: DO NOT return early from the destructor before this line. + // Otherwise, a queued navigation might get stuck in a queueing state forever. + // This navigation has finished. See if there is another NavigationRequest + // that lives in the associated FrameTreeNode that satisfies these conditions: + // - Is currently queued to wait for a pending commit navigation to finish + // - Is not the NavigationRequest that is currently being destructed itself + // - Is not a failed Back/Forward Cache restore that is waiting to be + // restarted as a new navigation (as that navigation is basically inactive). + if (NavigationRequest* request = frame_tree_node_->navigation_request()) { + if (request->IsQueued() && request != this && + !request->restarting_back_forward_cached_navigation_) { + // It might be possible for the pending commit RFH to still exist, e.g. if + // the navigation being destructed is an unrelated navigation + // (same-document navigation etc). In that case, don't continue the queued + // navigation just yet. + if (!request->ShouldQueueDueToExistingPendingCommitRFH()) { + request->PostResumeCommitTask(); + } + } + } + if (loading_mem_tracker_) loading_mem_tracker_->Cancel(); ResetExpectedProcess(); @@ -2164,25 +2185,6 @@ } } } - - // This navigation has finished. See if there is another NavigationRequest - // that lives in the associated FrameTreeNode that satisfies these conditions: - // - Is currently queued to wait for a pending commit navigation to finish - // - Is not the NavigationRequest that is currently being destructed itself - // - Is not a failed Back/Forward Cache restore that is waiting to be - // restarted as a new navigation (as that navigation is basically inactive). - if (NavigationRequest* request = frame_tree_node_->navigation_request()) { - if (request->IsQueued() && request != this && - !request->restarting_back_forward_cached_navigation_) { - // It might be possible for the pending commit RFH to still exist, e.g. if - // the navigation being destructed is an unrelated navigation - // (same-document navigation etc). In that case, don't continue the queued - // navigation just yet. - if (!request->ShouldQueueDueToExistingPendingCommitRFH()) { - request->ResumeCommit(); - } - } - } } void NavigationRequest::RegisterCommitDeferringConditionForTesting( @@ -3721,9 +3723,6 @@ UrlInfo::OriginIsolationRequest::kRequiresOriginKeyedProcess; } - if (ShouldRequestSiteIsolationForCOOP()) - isolation_flags |= UrlInfo::OriginIsolationRequest::kCOOP; - auto isolation_request = static_cast<UrlInfo::OriginIsolationRequest>(isolation_flags); @@ -3732,6 +3731,7 @@ UrlInfoInit url_info_init(GetURL()); url_info_init.WithOriginIsolationRequest(isolation_request) + .WithCOOPSiteIsolation(ShouldRequestSiteIsolationForCOOP()) .WithWebExposedIsolationInfo(web_exposed_isolation_info) .WithIsPdf(is_pdf_); @@ -9263,7 +9263,7 @@ return false; } -void NavigationRequest::ResumeCommit() { +void NavigationRequest::PostResumeCommitTask() { DCHECK(ShouldAvoidRedundantNavigationCancellations()); DCHECK(!ShouldQueueDueToExistingPendingCommitRFH()); // TODO(crbug.com/1220337): Add some metrics for how often:
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h index 706334b..df3c6b5 100644 --- a/content/browser/renderer_host/navigation_request.h +++ b/content/browser/renderer_host/navigation_request.h
@@ -1837,8 +1837,9 @@ // Called on FrameTreeNode's queued NavigationRequest (if any) when another // NavigationRequest associated with the same FrameTreeNode is destroyed and - // the queued NavigationRequest can be resumed. - void ResumeCommit(); + // the queued NavigationRequest can be resumed. Will post a task to run the + // `resume_commit_closure_` asynchronously. + void PostResumeCommitTask(); // Used to detect if the page being navigated to is participating in the // related deprecation trial and recording that in NavigationControllerImpl.
diff --git a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot.h b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot.h index c61f0d5..bc3e812 100644 --- a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot.h +++ b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot.h
@@ -23,7 +23,7 @@ // The screenshot is captured for the leaving page when the navigation is about // to commit (see `CommitDeferringCondition`), subsequently stashed into the // `NavigationEntry` that this screenshot is captured for. The capture is done -// on the browser thread. The pixel data includes sensitive cross-origin data, +// in the browser process. The pixel data includes sensitive cross-origin data, // so it must never be leaked to a renderer process. // // The screenshot is taken out of the `NavigationEntry` when it will be used for
diff --git a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.cc b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.cc index 030b8e8..7672431b 100644 --- a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.cc +++ b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.cc
@@ -4,16 +4,13 @@ #include "content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.h" -#include "base/location.h" #include "base/memory/ptr_util.h" -#include "base/system/sys_info.h" #include "content/browser/renderer_host/navigation_controller_impl.h" #include "content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot.h" #include "content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_manager.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_entry.h" #include "content/public/common/content_features.h" -#include "ui/display/screen.h" namespace content { @@ -42,16 +39,19 @@ base::SafeRef<NavigationEntryScreenshotManager> manager, NavigationControllerImpl* nav_controller) : manager_(manager), nav_controller_(nav_controller) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); CHECK(AreBackForwardTransitionsEnabled()); } NavigationEntryScreenshotCache::~NavigationEntryScreenshotCache() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); Purge(); } void NavigationEntryScreenshotCache::SetScreenshot( NavigationEntry* entry, std::unique_ptr<NavigationEntryScreenshot> screenshot) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // We must be caching screenshot for a valid entry. CHECK(entry); // A navigation entry without a screenshot will be removed from the cache @@ -71,6 +71,7 @@ std::unique_ptr<NavigationEntryScreenshot> NavigationEntryScreenshotCache::RemoveScreenshot( NavigationEntry* navigation_entry) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); CHECK(navigation_entry); const int navigation_entry_id = navigation_entry->GetUniqueID(); auto it = cached_screenshots_.find(navigation_entry_id); @@ -87,6 +88,7 @@ void NavigationEntryScreenshotCache::OnNavigationEntryGone( int navigation_entry_id, size_t size) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); auto it = cached_screenshots_.find(navigation_entry_id); CHECK(it != cached_screenshots_.end()); cached_screenshots_.erase(it); @@ -94,6 +96,8 @@ } void NavigationEntryScreenshotCache::EvictScreenshotsUntilUnderBudgetOrEmpty() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + CHECK(!IsEmpty()); CHECK_GT(manager_->GetCurrentCacheSize(), manager_->GetMaxCacheSize()); @@ -158,6 +162,7 @@ } void NavigationEntryScreenshotCache::Purge() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); auto it = cached_screenshots_.begin(); while (!IsEmpty()) { auto* evicted_entry = nav_controller_->GetEntryWithUniqueID(*it);
diff --git a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.h b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.h index c7a67e7..0d0b2ae 100644 --- a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.h +++ b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache.h
@@ -5,12 +5,8 @@ #ifndef CONTENT_BROWSER_RENDERER_HOST_NAVIGATION_TRANSITIONS_NAVIGATION_ENTRY_SCREENSHOT_CACHE_H_ #define CONTENT_BROWSER_RENDERER_HOST_NAVIGATION_TRANSITIONS_NAVIGATION_ENTRY_SCREENSHOT_CACHE_H_ -#include <memory> - #include "base/containers/flat_set.h" -#include "base/memory/memory_pressure_listener.h" #include "base/memory/safe_ref.h" -#include "base/no_destructor.h" #include "content/browser/renderer_host/navigation_controller_impl.h" #include "content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_manager.h" #include "content/common/content_export.h" @@ -92,16 +88,6 @@ void Purge() override; bool IsEmpty() const override; - // `NavigationEntryScreenshotManager` is owned by `BrowserContextImpl` which - // is not content-exported. The manager is exposed through the cache only for - // testing. - // - // TODO(liuwilliam): Add CONTENT_EXPORT to `BrowserContextImpl`. It is fine - // because `BrowserContextImpl` is not exposed as a content-public API. - base::SafeRef<NavigationEntryScreenshotManager> GetManagerForTesting() { - return manager_->GetSafeRef(); - } - private: // Tracks the unique IDs of the navigation entries, for which we have captured // screenshots.
diff --git a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache_unittest.cc b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache_unittest.cc index 3263a1e2..bd0837e 100644 --- a/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache_unittest.cc +++ b/content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot_cache_unittest.cc
@@ -6,6 +6,7 @@ #include "base/test/scoped_feature_list.h" #include "cc/resources/ui_resource_bitmap.h" +#include "content/browser/browser_context_impl.h" #include "content/browser/renderer_host/navigation_controller_impl.h" #include "content/browser/renderer_host/navigation_entry_impl.h" #include "content/browser/renderer_host/navigation_transitions/navigation_entry_screenshot.h" @@ -165,8 +166,9 @@ WebContents* tab2() { return tabs_[1].get(); } WebContents* tab3() { return tabs_[2].get(); } - base::SafeRef<NavigationEntryScreenshotManager> GetManager() { - return GetCacheForTab(tabs_[0].get())->GetManagerForTesting(); + NavigationEntryScreenshotManager* GetManager() { + return BrowserContextImpl::From(browser_context()) + ->GetNavigationEntryScreenshotManager(); } private: @@ -490,9 +492,7 @@ ASSERT_EQ(GetManager()->GetCurrentCacheSize(), 64U * 2); RemoveTab(tab1()); - // TODO(liuwilliam): We can't call `GetManager()->IsEmpty()` because all tabs - // are gone, and the manager is only exposed to the test through the - // `NavigationEntryScreenshotCache`. + ASSERT_TRUE(GetManager()->IsEmpty()); } // `base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL` signals the
diff --git a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc index 58c754c..b550150 100644 --- a/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc +++ b/content/browser/renderer_host/pepper/pepper_file_system_browser_host.cc
@@ -12,7 +12,7 @@ #include "content/browser/renderer_host/pepper/quota_reservation.h" #include "content/common/pepper_file_util.h" #include "content/public/browser/browser_ppapi_host.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/plugin_service.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/storage_partition.h"
diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc index 91ab176..38461bb 100644 --- a/content/browser/renderer_host/render_frame_host_manager.cc +++ b/content/browser/renderer_host/render_frame_host_manager.cc
@@ -1962,6 +1962,8 @@ UrlInfo(UrlInfoInit(destination_effective_url) .WithOriginIsolationRequest( destination_url_info.origin_isolation_request) + .WithCOOPSiteIsolation( + destination_url_info.requests_coop_isolation()) .WithWebExposedIsolationInfo( destination_url_info.web_exposed_isolation_info)))) { return BrowsingContextGroupSwap::CreateSecuritySwap();
diff --git a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc index 42755bc..ed435ca9 100644 --- a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc +++ b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
@@ -1098,18 +1098,8 @@ // We should have received only 1 message in the opener and "foo" tabs, // and updated the title. - int opener_received_messages = 0; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - opener_contents, - "window.domAutomationController.send(window.receivedMessages);", - &opener_received_messages)); - int foo_received_messages = 0; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - foo_contents, - "window.domAutomationController.send(window.receivedMessages);", - &foo_received_messages)); - EXPECT_EQ(1, foo_received_messages); - EXPECT_EQ(1, opener_received_messages); + EXPECT_EQ(1, EvalJs(opener_contents, "window.receivedMessages;")); + EXPECT_EQ(1, EvalJs(foo_contents, "window.receivedMessages;")); EXPECT_EQ(u"msg", foo_contents->GetTitle()); // 4) Now post a message from the _blank window to the foo window. The @@ -1216,24 +1206,9 @@ ASSERT_EQ(expected_title, title_observer.WaitAndGetTitle()); // Check message counts. - int opener_received_messages_via_port = 0; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - opener_contents, - "window.domAutomationController.send(window.receivedMessagesViaPort);", - &opener_received_messages_via_port)); - int foo_received_messages = 0; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - foo_contents, - "window.domAutomationController.send(window.receivedMessages);", - &foo_received_messages)); - int foo_received_messages_with_port = 0; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - foo_contents, - "window.domAutomationController.send(window.receivedMessagesWithPort);", - &foo_received_messages_with_port)); - EXPECT_EQ(1, foo_received_messages); - EXPECT_EQ(1, foo_received_messages_with_port); - EXPECT_EQ(1, opener_received_messages_via_port); + EXPECT_EQ(1, EvalJs(opener_contents, "window.receivedMessagesViaPort;")); + EXPECT_EQ(1, EvalJs(foo_contents, "window.receivedMessages;")); + EXPECT_EQ(1, EvalJs(foo_contents, "window.receivedMessagesWithPort;")); EXPECT_EQ(u"msg-with-port", foo_contents->GetTitle()); EXPECT_EQ(u"msg-back-via-port", opener_contents->GetTitle()); }
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc index 85b6631a..20966bb 100644 --- a/content/browser/renderer_host/render_message_filter.cc +++ b/content/browser/renderer_host/render_message_filter.cc
@@ -36,7 +36,7 @@ #include "content/common/render_message_filter.mojom.h" #include "content/public/browser/browser_child_process_host.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/content_features.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc index a10c6f9..178efd7 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -544,7 +544,10 @@ if (pending_screen_state_.is_fullscreen) { pending_screen_state_.any_non_rotation_size_changed = true; } - rwhva_->SynchronizeVisualProperties(deadline_policy, absl::nullopt); + rwhva_->SynchronizeVisualProperties( + deadline_policy, absl::nullopt, + /*reuse_current_local_surface_id=*/false, + /*ignore_ack=*/true); } current_screen_state_.CopyDefinedAttributes(pending_screen_state_);
diff --git a/content/browser/scheduler/browser_task_executor.cc b/content/browser/scheduler/browser_task_executor.cc index b288f5a..818e5f1 100644 --- a/content/browser/scheduler/browser_task_executor.cc +++ b/content/browser/scheduler/browser_task_executor.cc
@@ -12,7 +12,6 @@ #include "base/task/deferred_sequenced_task_runner.h" #include "base/task/sequenced_task_runner.h" #include "base/task/single_thread_task_runner.h" -#include "base/task/task_traits_extension.h" #include "base/threading/threading_features.h" #include "base/time/time.h" #include "base/trace_event/trace_event.h" @@ -81,7 +80,7 @@ scoped_refptr<base::SingleThreadTaskRunner> BaseBrowserTaskExecutor::GetTaskRunner(BrowserThread::ID identifier, - const base::TaskTraits& traits) const { + const BrowserTaskTraits& traits) const { const QueueType queue_type = GetQueueType(traits); switch (identifier) { @@ -98,41 +97,30 @@ // static QueueType BaseBrowserTaskExecutor::GetQueueType( - const base::TaskTraits& traits) { - if (traits.extension_id() == BrowserTaskTraitsExtension::kExtensionId) { - const BrowserTaskTraitsExtension extension = - traits.GetExtension<BrowserTaskTraitsExtension>(); + const BrowserTaskTraits& traits) { + switch (traits.task_type()) { + case BrowserTaskType::kUserInput: + if (base::FeatureList::IsEnabled( + features::kBrowserPrioritizeInputQueue)) { + return QueueType::kUserInput; + } + // Defer to traits.priority() below. + break; - const BrowserTaskType task_type = extension.task_type(); - DCHECK_LT(task_type, BrowserTaskType::kBrowserTaskType_Last); + case BrowserTaskType::kNavigationNetworkResponse: + if (base::FeatureList::IsEnabled( + ::features::kNavigationNetworkResponseQueue)) { + return QueueType::kNavigationNetworkResponse; + } + // Defer to traits.priority() below. + break; - switch (task_type) { - case BrowserTaskType::kUserInput: - if (base::FeatureList::IsEnabled( - features::kBrowserPrioritizeInputQueue)) { - return QueueType::kUserInput; - } - // Defer to traits.priority() below. - break; + case BrowserTaskType::kServiceWorkerStorageControlResponse: + return QueueType::kServiceWorkerStorageControlResponse; - case BrowserTaskType::kNavigationNetworkResponse: - if (base::FeatureList::IsEnabled( - ::features::kNavigationNetworkResponseQueue)) { - return QueueType::kNavigationNetworkResponse; - } - // Defer to traits.priority() below. - break; - - case BrowserTaskType::kServiceWorkerStorageControlResponse: - return QueueType::kServiceWorkerStorageControlResponse; - - case BrowserTaskType::kDefault: - // Defer to traits.priority() below. - break; - - case BrowserTaskType::kBrowserTaskType_Last: - NOTREACHED(); - } + case BrowserTaskType::kDefault: + // Defer to traits.priority() below. + break; } switch (traits.priority()) {
diff --git a/content/browser/scheduler/browser_task_executor.h b/content/browser/scheduler/browser_task_executor.h index 8256bbb9..6d01274 100644 --- a/content/browser/scheduler/browser_task_executor.h +++ b/content/browser/scheduler/browser_task_executor.h
@@ -21,8 +21,7 @@ // The BrowserTaskExecutor's job is to map base::TaskTraits to actual task // queues for the browser process. // -// We actually have three TaskExecutors: -// * BrowserTaskExecutor registered for BrowserTaskTraitsExtension. +// We actually have two TaskExecutors: // * BrowserTaskExecutor::UIThreadExecutor registered with UI thread TLS. // * BrowserTaskExecutor::IOThreadExecutor registered with IO thread TLS. // @@ -44,14 +43,14 @@ // |traits|) -- ref. crbug.com/1026641. scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner( BrowserThread::ID identifier, - const base::TaskTraits& traits) const; + const BrowserTaskTraits& traits) const; // Helper to match a QueueType from TaskTraits. // TODO(1026641): Take BrowserTaskTraits as a parameter when getting off the // need to support base::TaskTraits currently passed to this class in its role // as a base::TaskExecutor. - static content::BrowserTaskQueues::QueueType GetQueueType( - const base::TaskTraits& traits); + static BrowserTaskQueues::QueueType GetQueueType( + const BrowserTaskTraits& traits); protected: scoped_refptr<BrowserUIThreadScheduler::Handle> browser_ui_thread_handle_;
diff --git a/content/browser/scheduler/browser_ui_thread_scheduler_unittest.cc b/content/browser/scheduler/browser_ui_thread_scheduler_unittest.cc index 285a15a..d21b309b 100644 --- a/content/browser/scheduler/browser_ui_thread_scheduler_unittest.cc +++ b/content/browser/scheduler/browser_ui_thread_scheduler_unittest.cc
@@ -16,7 +16,7 @@ #include "base/task/thread_pool/thread_pool_instance.h" #include "base/test/mock_callback.h" #include "base/test/scoped_feature_list.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "testing/gtest/include/gtest/gtest.h" namespace content {
diff --git a/content/browser/service_worker/service_worker_installed_scripts_sender_unittest.cc b/content/browser/service_worker/service_worker_installed_scripts_sender_unittest.cc index 6d497c2..2baaf43 100644 --- a/content/browser/service_worker/service_worker_installed_scripts_sender_unittest.cc +++ b/content/browser/service_worker/service_worker_installed_scripts_sender_unittest.cc
@@ -12,7 +12,7 @@ #include "content/browser/service_worker/embedded_worker_test_helper.h" #include "content/browser/service_worker/service_worker_context_core.h" #include "content/browser/service_worker/service_worker_test_utils.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "net/base/io_buffer.h"
diff --git a/content/browser/service_worker/service_worker_offline_capability_check_browsertest.cc b/content/browser/service_worker/service_worker_offline_capability_check_browsertest.cc index c834cc7b..9870971 100644 --- a/content/browser/service_worker/service_worker_offline_capability_check_browsertest.cc +++ b/content/browser/service_worker/service_worker_offline_capability_check_browsertest.cc
@@ -14,7 +14,7 @@ #include "content/browser/service_worker/service_worker_fetch_dispatcher.h" #include "content/browser/service_worker/service_worker_version.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "content/public/test/browser_test.h" #include "content/public/test/content_browser_test.h"
diff --git a/content/browser/service_worker/service_worker_updated_script_loader.cc b/content/browser/service_worker/service_worker_updated_script_loader.cc index eececd9..bf2016a 100644 --- a/content/browser/service_worker/service_worker_updated_script_loader.cc +++ b/content/browser/service_worker/service_worker_updated_script_loader.cc
@@ -17,7 +17,7 @@ #include "content/browser/service_worker/service_worker_context_wrapper.h" #include "content/browser/service_worker/service_worker_loader_helpers.h" #include "content/browser/service_worker/service_worker_version.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/common/content_client.h" #include "net/base/ip_endpoint.h"
diff --git a/content/browser/speech/speech_recognition_dispatcher_host.cc b/content/browser/speech/speech_recognition_dispatcher_host.cc index b24af93..5bd2a18 100644 --- a/content/browser/speech/speech_recognition_dispatcher_host.cc +++ b/content/browser/speech/speech_recognition_dispatcher_host.cc
@@ -14,7 +14,7 @@ #include "content/browser/speech/speech_recognition_manager_impl.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/speech_recognition_manager_delegate.h"
diff --git a/content/browser/url_info.cc b/content/browser/url_info.cc index e06b8d9..029925f 100644 --- a/content/browser/url_info.cc +++ b/content/browser/url_info.cc
@@ -18,6 +18,7 @@ UrlInfo::UrlInfo(const UrlInfoInit& init) : url(init.url_), origin_isolation_request(init.origin_isolation_request_), + is_coop_isolation_requested(init.requests_coop_isolation_), origin(init.origin_), is_sandboxed(init.is_sandboxed_), unique_sandbox_id(init.unique_sandbox_id_), @@ -54,6 +55,7 @@ UrlInfoInit::UrlInfoInit(const UrlInfo& base) : url_(base.url), origin_isolation_request_(base.origin_isolation_request), + requests_coop_isolation_(base.is_coop_isolation_requested), origin_(base.origin), is_sandboxed_(base.is_sandboxed), unique_sandbox_id_(base.unique_sandbox_id), @@ -69,6 +71,11 @@ return *this; } +UrlInfoInit& UrlInfoInit::WithCOOPSiteIsolation(bool requests_coop_isolation) { + requests_coop_isolation_ = requests_coop_isolation; + return *this; +} + UrlInfoInit& UrlInfoInit::WithOrigin(const url::Origin& origin) { origin_ = origin; return *this;
diff --git a/content/browser/url_info.h b/content/browser/url_info.h index 4d4f947..84108136 100644 --- a/content/browser/url_info.h +++ b/content/browser/url_info.h
@@ -60,9 +60,6 @@ // kOriginAgentCluster is, then OAC will be logical only, i.e. implemented // in the renderer via a separate AgentCluster. kRequiresOriginKeyedProcess = (1 << 1), - // The Cross-Origin-Opener-Policy header has triggered a hint to turn on - // site isolation for `url`'s site. - kCOOP = (1 << 2) }; // For isolated sandboxed iframes, when per-document mode is used, we @@ -96,11 +93,11 @@ OriginIsolationRequest::kRequiresOriginKeyedProcess); } - // Returns whether this UrlInfo is requesting isolation in response to the - // Cross-Origin-Opener-Policy header. - bool requests_coop_isolation() const { - return (origin_isolation_request & OriginIsolationRequest::kCOOP); - } + // Returns whether this UrlInfo is requesting site isolation for its site in + // response to the Cross-Origin-Opener-Policy header. See + // https://chromium.googlesource.com/chromium/src/+/main/docs/process_model_and_site_isolation.md#Partial-Site-Isolation + // for details. + bool requests_coop_isolation() const { return is_coop_isolation_requested; } // Returns whether this UrlInfo is for a page that should be cross-origin // isolated. @@ -109,14 +106,18 @@ GURL url; // This field indicates whether the URL is requesting additional process - // isolation during the current navigation (e.g., via OriginAgentCluster or - // COOP response headers). If URL did not request any isolation, this will - // be set to kNone. This field is only relevant (1) during a navigation - // request, (2) up to the point where the origin is placed into a - // SiteInstance. Other than these cases, this should be set to kNone. + // isolation during the current navigation (e.g., via OriginAgentCluster). If + // URL did not request any isolation, this will be set to kNone. This field is + // only relevant (1) during a navigation request, (2) up to the point where + // the origin is placed into a SiteInstance. Other than these cases, this + // should be set to kNone. OriginIsolationRequest origin_isolation_request = OriginIsolationRequest::kNone; + // True if the Cross-Origin-Opener-Policy header has triggered a hint to turn + // on site isolation for `url`'s site. + bool is_coop_isolation_requested = false; + // This allows overriding the origin of |url| for process assignment purposes // in certain very special cases. Namely, if |url| represents a resource // inside another resource (e.g. a resource with a urn: URL in WebBundle), @@ -196,6 +197,7 @@ UrlInfoInit& WithOriginIsolationRequest( UrlInfo::OriginIsolationRequest origin_isolation_request); + UrlInfoInit& WithCOOPSiteIsolation(bool requests_coop_isolation); UrlInfoInit& WithOrigin(const url::Origin& origin); UrlInfoInit& WithSandbox(bool is_sandboxed); UrlInfoInit& WithUniqueSandboxId(int unique_sandbox_id); @@ -216,6 +218,7 @@ GURL url_; UrlInfo::OriginIsolationRequest origin_isolation_request_ = UrlInfo::OriginIsolationRequest::kNone; + bool requests_coop_isolation_ = false; absl::optional<url::Origin> origin_; bool is_sandboxed_ = false; int64_t unique_sandbox_id_ = UrlInfo::kInvalidUniqueSandboxId;
diff --git a/content/browser/url_loader_factory_getter.cc b/content/browser/url_loader_factory_getter.cc index 58452eb..4d728be 100644 --- a/content/browser/url_loader_factory_getter.cc +++ b/content/browser/url_loader_factory_getter.cc
@@ -14,7 +14,7 @@ #include "base/lazy_instance.h" #include "base/run_loop.h" #include "content/browser/storage_partition_impl.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/common/content_switches.h" #include "services/network/public/cpp/features.h" #include "services/network/public/cpp/shared_url_loader_factory.h"
diff --git a/content/browser/webrtc/webrtc_internals_browsertest.cc b/content/browser/webrtc/webrtc_internals_browsertest.cc index 62955d4..4646ac86 100644 --- a/content/browser/webrtc/webrtc_internals_browsertest.cc +++ b/content/browser/webrtc/webrtc_internals_browsertest.cc
@@ -280,13 +280,11 @@ EXPECT_EQ(!requests.empty(), user_media_tab_existed); if (user_media_tab_existed) { - int user_media_request_count = -1; - ASSERT_TRUE(ExecuteScriptAndExtractInt( - shell(), - "window.domAutomationController.send(" - " document.querySelector('#user-media-tab-id')" - " .childNodes.length);", - &user_media_request_count)); + int user_media_request_count = + EvalJs(shell(), + "document.querySelector('#user-media-tab-id')" + " .childNodes.length") + .ExtractInt(); // The list of childnodes includes the input field and its label. ASSERT_EQ(requests.size(), static_cast<size_t>(user_media_request_count) - 2); @@ -441,14 +439,10 @@ } int GetSsrcInfoBlockCount(Shell* shell) { - int count = 0; - EXPECT_TRUE(ExecuteScriptAndExtractInt( - shell, - "window.domAutomationController.send(" - " document.getElementsByClassName(" - " ssrcInfoManager.SSRC_INFO_BLOCK_CLASS).length);", - &count)); - return count; + return EvalJs(shell, + "document.getElementsByClassName(" + " ssrcInfoManager.SSRC_INFO_BLOCK_CLASS).length") + .ExtractInt(); } // Verifies |dump| contains |peer_connection_number| peer connection dumps, @@ -627,12 +621,9 @@ EXPECT_TRUE(result); // Verify that the bweCompound graph contains multiple dataSeries. - int count = 0; - ASSERT_TRUE(ExecuteScriptAndExtractInt( - shell(), - "window.domAutomationController.send(" - " graphViews['" + graph_id + "'].getDataSeriesCount())", - &count)); + int count = + EvalJs(shell(), "graphViews['" + graph_id + "'].getDataSeriesCount()") + .ExtractInt(); EXPECT_EQ((int)stats.values.size(), count); } @@ -697,50 +688,37 @@ const int NUMBER_OF_PEER_CONNECTIONS = 2; // Verifies the number of peerconnections. - int count = 0; - ASSERT_TRUE(ExecuteScriptAndExtractInt( - shell2, - "window.domAutomationController.send(" - " document.querySelector('#peer-connections-list')" - " .getElementsByTagName('li').length);", - &count)); - EXPECT_EQ(NUMBER_OF_PEER_CONNECTIONS, count); + EXPECT_EQ(NUMBER_OF_PEER_CONNECTIONS, + EvalJs(shell2, + "document.querySelector('#peer-connections-list')" + " .getElementsByTagName('li').length;")); // Verifies the the event tables. - ASSERT_TRUE(ExecuteScriptAndExtractInt( - shell2, - "window.domAutomationController.send(" - " document.querySelector('#peer-connections-list')" - " .getElementsByClassName('update-log-table').length);", - &count)); - EXPECT_EQ(NUMBER_OF_PEER_CONNECTIONS, count); + EXPECT_EQ(NUMBER_OF_PEER_CONNECTIONS, + EvalJs(shell2, + "document.querySelector('#peer-connections-list')" + " .getElementsByClassName('update-log-table').length;")); - ASSERT_TRUE(ExecuteScriptAndExtractInt( - shell2, - "window.domAutomationController.send(" - " document.querySelector('#peer-connections-list')" - " .getElementsByClassName('update-log-table')[0].rows.length);", - &count)); - EXPECT_GT(count, 1); + EXPECT_GT( + EvalJs(shell2, + "document.querySelector('#peer-connections-list')" + " .getElementsByClassName('update-log-table')[0].rows.length;"), + 1); - ASSERT_TRUE(ExecuteScriptAndExtractInt( - shell2, - "window.domAutomationController.send(" - " document.querySelector('#peer-connections-list')" - " .getElementsByClassName('update-log-table')[1].rows.length);", - &count)); - EXPECT_GT(count, 1); + EXPECT_GT( + EvalJs(shell2, + "document.querySelector('#peer-connections-list')" + " .getElementsByClassName('update-log-table')[1].rows.length;"), + 1); // Wait until the stats table containers are created. - count = 0; + int count = 0; while (count != NUMBER_OF_PEER_CONNECTIONS) { - ASSERT_TRUE(ExecuteScriptAndExtractInt( - shell2, - "window.domAutomationController.send(" - " document.querySelector('#peer-connections-list')" - " .getElementsByClassName(" - " 'stats-table-container').length);", - &count)); + count = EvalJs(shell2, + "document.querySelector('#peer-connections-list')" + " .getElementsByClassName(" + " 'stats-table-container').length;") + .ExtractInt(); } // Verifies each stats table having more than one rows.
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn index 687e517..61f282d 100644 --- a/content/public/android/BUILD.gn +++ b/content/public/android/BUILD.gn
@@ -400,7 +400,6 @@ "//content/public/browser/android/message_payload_type.h", "//content/public/browser/android/motion_event_action.h", "//content/public/browser/bluetooth_scanning_prompt.h", - "//content/public/browser/browser_task_traits.h", "//content/public/browser/browsing_data_remover.h", "//content/public/browser/invalidate_type.h", "//content/public/browser/navigation_controller.h",
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn index d490fce..3e51341 100644 --- a/content/public/browser/BUILD.gn +++ b/content/public/browser/BUILD.gn
@@ -87,7 +87,6 @@ "browser_plugin_guest_delegate.h", "browser_plugin_guest_manager.cc", "browser_plugin_guest_manager.h", - "browser_task_traits.cc", "browser_task_traits.h", "browser_thread.h", "browser_url_handler.h",
diff --git a/content/public/browser/browser_message_filter.cc b/content/public/browser/browser_message_filter.cc index a3a2ce41..d78082e 100644 --- a/content/public/browser/browser_message_filter.cc +++ b/content/public/browser/browser_message_filter.cc
@@ -16,7 +16,7 @@ #include "build/build_config.h" #include "content/browser/browser_child_process_host_impl.h" #include "content/browser/child_process_launcher.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/common/content_switches.h" #include "content/public/common/result_codes.h" #include "ipc/ipc_sync_message.h"
diff --git a/content/public/browser/browser_task_traits.cc b/content/public/browser/browser_task_traits.cc deleted file mode 100644 index 10c6a00..0000000 --- a/content/public/browser/browser_task_traits.cc +++ /dev/null
@@ -1,12 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/public/browser/browser_task_traits.h" - -namespace content { - -// static -constexpr uint8_t BrowserTaskTraitsExtension::kExtensionId; - -} // namespace content
diff --git a/content/public/browser/browser_task_traits.h b/content/public/browser/browser_task_traits.h index 5a11ad4..6595e40 100644 --- a/content/public/browser/browser_task_traits.h +++ b/content/public/browser/browser_task_traits.h
@@ -6,9 +6,7 @@ #define CONTENT_PUBLIC_BROWSER_BROWSER_TASK_TRAITS_H_ #include "base/task/task_traits.h" -#include "base/task/task_traits_extension.h" #include "content/common/content_export.h" -#include "content/public/browser/browser_thread.h" namespace content { @@ -19,7 +17,6 @@ // specify this trait if you carefully isolated a set of tasks that have no // ordering requirements with anything else (in doubt, consult with // scheduler-dev@chromium.org). -// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.content_public.browser enum class BrowserTaskType { // A catch all for tasks that don't fit the types below. kDefault, @@ -38,97 +35,11 @@ // Tasks processing ServiceWorker's storage control's response. // TODO(chikamune): Make this content-internal. kServiceWorkerStorageControlResponse, - - // Used to validate values in Java - kBrowserTaskType_Last }; -// TaskTraits for running tasks on the browser threads. -// -// To post a task to the UI thread (analogous for IO thread): -// GetUIThreadTaskRunner({})->PostTask(FROM_HERE, task); -// -// To obtain a TaskRunner for the UI thread (analogous for the IO thread): -// GetUIThreadTaskRunner({}); -// -// Tasks posted to the same BrowserThread with the same traits will be executed -// in the order they were posted, regardless of the TaskRunners they were -// posted via. -// -// Posting to a BrowserThread must only be done after it was initialized (ref. -// BrowserMainLoop::CreateThreads() phase). -class CONTENT_EXPORT BrowserTaskTraitsExtension { +class CONTENT_EXPORT BrowserTaskTraits { public: - static constexpr uint8_t kExtensionId = - base::TaskTraitsExtensionStorage::kFirstEmbedderExtensionId; - - struct ValidTrait : public base::TaskTraits::ValidTrait { - using base::TaskTraits::ValidTrait::ValidTrait; - - ValidTrait(BrowserThread::ID); - ValidTrait(BrowserTaskType); - }; - - template < - class... ArgTypes, - class CheckArgumentsAreValid = std::enable_if_t< - base::trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> - constexpr BrowserTaskTraitsExtension(ArgTypes... args) - : browser_thread_( - base::trait_helpers::GetEnum<BrowserThread::ID, - BrowserThread::ID_COUNT>(args...)), - task_type_( - base::trait_helpers::GetEnum<BrowserTaskType, - BrowserTaskType::kDefault>(args...)) {} - - constexpr base::TaskTraitsExtensionStorage Serialize() const { - static_assert(8 == sizeof(BrowserTaskTraitsExtension), - "Update Serialize() and Parse() when changing " - "BrowserTaskTraitsExtension"); - return {kExtensionId, - {static_cast<uint8_t>(browser_thread_), - static_cast<uint8_t>(task_type_)}}; - } - - static const BrowserTaskTraitsExtension Parse( - const base::TaskTraitsExtensionStorage& extension) { - return BrowserTaskTraitsExtension( - static_cast<BrowserThread::ID>(extension.data[0]), - static_cast<BrowserTaskType>(extension.data[1])); - } - - constexpr BrowserThread::ID browser_thread() const { - // TODO(1026641): Migrate to BrowserTaskTraits under which BrowserThread is - // not a trait. Until then, only code that knows traits have explicitly set - // the BrowserThread trait should check this field. - DCHECK_NE(browser_thread_, BrowserThread::ID_COUNT); - return browser_thread_; - } - - constexpr BrowserTaskType task_type() const { return task_type_; } - - private: - BrowserTaskTraitsExtension(BrowserThread::ID browser_thread, - BrowserTaskType task_type) - : browser_thread_(browser_thread), task_type_(task_type) {} - - BrowserThread::ID browser_thread_; - BrowserTaskType task_type_; -}; - -template <class... ArgTypes, - class = std::enable_if_t<base::trait_helpers::AreValidTraits< - BrowserTaskTraitsExtension::ValidTrait, - ArgTypes...>::value>> -constexpr base::TaskTraitsExtensionStorage MakeTaskTraitsExtension( - ArgTypes&&... args) { - return BrowserTaskTraitsExtension(std::forward<ArgTypes>(args)...) - .Serialize(); -} - -class CONTENT_EXPORT BrowserTaskTraits : public base::TaskTraits { - public: - struct ValidTrait : public base::TaskTraits::ValidTrait { + struct ValidTrait { ValidTrait(BrowserTaskType); // TODO(1026641): Reconsider whether BrowserTaskTraits should really be @@ -142,24 +53,30 @@ ValidTrait(base::TaskShutdownBehavior); }; - // TODO(1026641): Get rid of BrowserTaskTraitsExtension and store its member - // |task_type_| directly in BrowserTaskTraits. template < class... ArgTypes, class CheckArgumentsAreValid = std::enable_if_t< base::trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> - constexpr BrowserTaskTraits(ArgTypes... args) : base::TaskTraits(args...) {} + // TaskTraits are intended to be implicitly-constructable (eg {}). + // NOLINTNEXTLINE(google-explicit-constructor) + constexpr BrowserTaskTraits(ArgTypes... args) + : task_type_( + base::trait_helpers::GetEnum<BrowserTaskType, + BrowserTaskType::kDefault>(args...)), + priority_( + base::trait_helpers::GetEnum<base::TaskPriority, + base::TaskPriority::USER_BLOCKING>( + args...)) {} - BrowserTaskType task_type() { - return GetExtension<BrowserTaskTraitsExtension>().task_type(); - } + BrowserTaskType task_type() const { return task_type_; } + + base::TaskPriority priority() const { return priority_; } + + private: + BrowserTaskType task_type_; + base::TaskPriority priority_; }; -static_assert(sizeof(BrowserTaskTraits) == sizeof(base::TaskTraits), - "During the migration away from BrowserTasktraitsExtension, " - "BrowserTaskTraits must only use base::TaskTraits for storage " - "to prevent slicing."); - } // namespace content #endif // CONTENT_PUBLIC_BROWSER_BROWSER_TASK_TRAITS_H_
diff --git a/content/public/browser/browser_thread.h b/content/public/browser/browser_thread.h index e7fc967..92c8ea7 100644 --- a/content/public/browser/browser_thread.h +++ b/content/public/browser/browser_thread.h
@@ -15,6 +15,7 @@ #include "base/memory/scoped_refptr.h" #include "base/task/single_thread_task_runner.h" #include "content/common/content_export.h" +#include "content/public/browser/browser_task_traits.h" #if defined(UNIT_TEST) #include "base/logging.h" @@ -22,11 +23,6 @@ namespace content { -// TODO(1026641): Include browser_task_traits.h directly when the migration to -// Get(UI|IO)ThreadTaskrunner() is complete and the cyclic dependency of -// browser_task_traits.h on BrowserThread::ID is broken. -class BrowserTaskTraits; - // Use DCHECK_CURRENTLY_ON(BrowserThread::ID) to assert that a function can only // be called on the named BrowserThread. #define DCHECK_CURRENTLY_ON(thread_identifier) \ @@ -43,16 +39,12 @@ // // In unit tests, there must be a content::BrowserTaskEnvironment in scope for // this API to be available. -// -// TODO(1026641): Make default traits |{}| the default param when it's possible -// to include browser_task_traits.h in this file (see note above on the -// BrowserTaskTraits fwd-decl). CONTENT_EXPORT scoped_refptr<base::SingleThreadTaskRunner> -GetUIThreadTaskRunner(const BrowserTaskTraits& traits); +GetUIThreadTaskRunner(const BrowserTaskTraits& traits = {}); // The BrowserThread::IO counterpart to GetUIThreadTaskRunner(). CONTENT_EXPORT scoped_refptr<base::SingleThreadTaskRunner> -GetIOThreadTaskRunner(const BrowserTaskTraits& traits); +GetIOThreadTaskRunner(const BrowserTaskTraits& traits = {}); /////////////////////////////////////////////////////////////////////////////// // BrowserThread
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc index 99d441ec..f47699f 100644 --- a/content/public/test/browser_test_utils.cc +++ b/content/public/test/browser_test_utils.cc
@@ -1470,22 +1470,6 @@ base::UTF8ToUTF16(script), base::NullCallback()); } -bool ExecuteScriptAndExtractInt(const ToRenderFrameHost& adapter, - const std::string& script, int* result) { - DCHECK(result); - std::unique_ptr<base::Value> value; - // Prerendering pages will never have user gesture. - bool user_gesture = adapter.render_frame_host()->GetLifecycleState() != - RenderFrameHost::LifecycleState::kPrerendering; - if (ExecuteScriptHelper(adapter.render_frame_host(), script, user_gesture, - ISOLATED_WORLD_ID_GLOBAL, &value) && - value && value->is_int() && result) { - *result = value->GetInt(); - return true; - } - return false; -} - bool ExecuteScriptAndExtractBool(const ToRenderFrameHost& adapter, const std::string& script, bool* result) { DCHECK(result);
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h index f18ce124..ff6ee1d8 100644 --- a/content/public/test/browser_test_utils.h +++ b/content/public/test/browser_test_utils.h
@@ -597,9 +597,6 @@ // execution failed or did not evaluate to the expected type. // // Deprecated: Use EvalJs(). -[[nodiscard]] bool ExecuteScriptAndExtractInt(const ToRenderFrameHost& adapter, - const std::string& script, - int* result); [[nodiscard]] bool ExecuteScriptAndExtractBool(const ToRenderFrameHost& adapter, const std::string& script, bool* result);
diff --git a/content/public/test/mock_render_thread.cc b/content/public/test/mock_render_thread.cc index c3996ae..1dbc8ee 100644 --- a/content/public/test/mock_render_thread.cc +++ b/content/public/test/mock_render_thread.cc
@@ -103,8 +103,8 @@ if (msg->is_sync()) { // We actually need to handle deleting the reply deserializer for sync // messages. - reply_deserializer_.reset( - static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer()); + reply_deserializer_ = + static_cast<IPC::SyncMessage*>(msg)->TakeReplyDeserializer(); } if (msg->routing_id() == MSG_ROUTING_CONTROL) OnControlMessageReceived(*msg);
diff --git a/content/renderer/dom_automation_controller.h b/content/renderer/dom_automation_controller.h index d2e0162..0a08e07 100644 --- a/content/renderer/dom_automation_controller.h +++ b/content/renderer/dom_automation_controller.h
@@ -30,7 +30,7 @@ // following: // - Test code: // - DOMMessageQueue class -// - ExecuteScriptAndExtractInt/Bool/String functions +// - ExecuteScriptAndExtractBool/String functions class DomAutomationController : public gin::Wrappable<DomAutomationController>, public RenderFrameObserver { public:
diff --git a/content/renderer/pepper/pepper_graphics_2d_host.cc b/content/renderer/pepper/pepper_graphics_2d_host.cc index cf9089d1..8db738c 100644 --- a/content/renderer/pepper/pepper_graphics_2d_host.cc +++ b/content/renderer/pepper/pepper_graphics_2d_host.cc
@@ -713,7 +713,7 @@ ri->WaitSyncTokenCHROMIUM(in_sync_token.GetConstData()); ri->WritePixels(gpu_mailbox, /*dst_x_offset=*/0, /*dst_y_offset=*/0, /*dst_plane_index=*/0, texture_target, - src_info.minRowBytes(), src_info, src); + SkPixmap(src_info, src, src_info.minRowBytes())); gpu::SyncToken out_sync_token; ri->GenUnverifiedSyncTokenCHROMIUM(out_sync_token.GetData());
diff --git a/content/renderer/pepper/pepper_in_process_router.cc b/content/renderer/pepper/pepper_in_process_router.cc index 051b2ca..715e8f8 100644 --- a/content/renderer/pepper/pepper_in_process_router.cc +++ b/content/renderer/pepper/pepper_in_process_router.cc
@@ -122,8 +122,8 @@ } pending_message_id_ = IPC::SyncMessage::GetMessageId(*message); - reply_deserializer_.reset( - static_cast<IPC::SyncMessage*>(message.get())->GetReplyDeserializer()); + reply_deserializer_ = + static_cast<IPC::SyncMessage*>(message.get())->TakeReplyDeserializer(); reply_result_ = false; bool result = host_impl_->GetPpapiHost()->OnMessageReceived(*message);
diff --git a/content/shell/app/ios-Info.plist b/content/shell/app/ios-Info.plist index 8ecdf28f..e05a25c 100644 --- a/content/shell/app/ios-Info.plist +++ b/content/shell/app/ios-Info.plist
@@ -48,5 +48,7 @@ </array> <key>UILaunchStoryboardName</key> <string>LaunchScreen</string> + <key>NSMicrophoneUsageDescription</key> + <string>Allow content_shell access to microphone</string> </dict> </plist>
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt index 42e067ec..061f8f3a 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
@@ -229,7 +229,6 @@ crbug.com/1426916 [ chromeos chromeos-board-amd64-generic passthrough ] conformance/extensions/webgl-compressed-texture-astc.html [ Slow ] crbug.com/1426916 [ chromeos chromeos-board-amd64-generic passthrough ] conformance/extensions/s3tc-and-rgtc.html [ Slow ] crbug.com/1426916 [ chromeos chromeos-board-amd64-generic passthrough ] conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ Slow ] -crbug.com/1426916 [ chromeos chromeos-board-amd64-generic passthrough ] conformance/textures/misc/tex-image-and-sub-image-2d-with-array-buffer-view.html [ Slow ] crbug.com/1426916 [ chromeos chromeos-board-amd64-generic passthrough ] conformance2/extensions/webgl-multi-draw-instanced-base-vertex-base-instance.html [ Slow ] crbug.com/1426916 [ chromeos chromeos-board-amd64-generic passthrough ] conformance2/sync/sync-webgl-specific.html [ Slow ] crbug.com/1426916 [ chromeos chromeos-board-amd64-generic passthrough ] conformance2/textures/canvas_sub_rectangle/tex-2d-rg32f-rg-float.html [ Slow ] @@ -884,6 +883,7 @@ crbug.com/1241179 [ chromeos chromeos-board-amd64-generic passthrough ] conformance2/extensions/ext-texture-norm16.html [ Failure ] crbug.com/1241183 [ chromeos chromeos-board-amd64-generic passthrough ] conformance2/textures/misc/immutable-tex-render-feedback.html [ Failure ] crbug.com/1399117 [ chromeos chromeos-board-amd64-generic passthrough ] WebglExtension_WEBGL_provoking_vertex [ Skip ] +crbug.com/1426916 [ chromeos chromeos-board-amd64-generic passthrough ] conformance/textures/misc/tex-image-and-sub-image-2d-with-array-buffer-view.html [ Failure ] # Must investigate ChromeOS failures with passthrough command decoder. crbug.com/angleproject/5038 [ chromeos passthrough ] conformance/extensions/ext-color-buffer-half-float.html [ Failure ]
diff --git a/content/test/io_thread_shared_url_loader_factory_owner.cc b/content/test/io_thread_shared_url_loader_factory_owner.cc index 4650949..9ee8e74 100644 --- a/content/test/io_thread_shared_url_loader_factory_owner.cc +++ b/content/test/io_thread_shared_url_loader_factory_owner.cc
@@ -7,7 +7,7 @@ #include "base/functional/bind.h" #include "base/run_loop.h" #include "content/browser/url_loader_factory_getter.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/test/simple_url_loader_test_helper.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "services/network/public/cpp/resource_request.h"
diff --git a/content/web_test/browser/web_test_control_host.cc b/content/web_test/browser/web_test_control_host.cc index c58ad3d..af7cfa4 100644 --- a/content/web_test/browser/web_test_control_host.cc +++ b/content/web_test/browser/web_test_control_host.cc
@@ -40,7 +40,7 @@ #include "content/browser/renderer_host/frame_tree_node.h" #include "content/browser/renderer_host/navigation_request.h" #include "content/browser/web_contents/web_contents_impl.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/child_process_termination_info.h" #include "content/public/browser/client_hints_controller_delegate.h"
diff --git a/docs/speed/metrics_changelog/2023_04_lcp.md b/docs/speed/metrics_changelog/2023_04_lcp.md new file mode 100644 index 0000000..4e3e2085 --- /dev/null +++ b/docs/speed/metrics_changelog/2023_04_lcp.md
@@ -0,0 +1,31 @@ +# Largest Contentul Paint change in Chrome 112 to ignore low-entropy images + +In Chrome 112, LCP will begin to ignore images with very low content relative +to their display sizes. + +LCP has historically ignored full screen background images, as well as solid +or simple gradient backgrounds when implemented through CSS. That heuristic +discounts paints which are not contenful, but just serve as backgrounds or +placeholders for other content. + +This change extends that heuristic to other images as well, when those images +have very little content, when compared to the size at which they are displayed. +The threshold is currently 0.05 bits of image data per displayed pixel, and +images which fall below this threshold will not be considered for LCP. We expect +that this threshold will mostly cover large simple background images or viewport +overlays, as well as simple placeholders which are sometimes used for lazily- +loaded images. + +## How does this affect a site's metrics? +By ignoring ver low-content images, Chrome will instead report the first paint +with either text or a more contenful image as LCP. This may result in LCP times +increasing, if a low-content background was being painted very early, or if a +low-content placeholder was being used to reserve space for a more contenful +image which loaded later. This may also improve LCP in cases where a low-content +background or viewport overlay was being added to the page after other content. + +## When were users affected? +This change was launched to Chrome users starting on roughly April 6, 2023, +and was rolled out to existing Chrome installs. This roughly coincides with +Chrome 112, although previous versions (back to Chrome 109) will also pick +up this change. \ No newline at end of file
diff --git a/docs/speed/metrics_changelog/lcp.md b/docs/speed/metrics_changelog/lcp.md index 7ec8de8..24e5e1c 100644 --- a/docs/speed/metrics_changelog/lcp.md +++ b/docs/speed/metrics_changelog/lcp.md
@@ -2,6 +2,8 @@ This is a list of changes to [Largest Contentful Paint](https://web.dev/lcp). +* Chrome 112 + * Metric definition improvement: [Largest Contentful Paint ignores low-entropy images](2023_04_lcp.md) * Chrome 111 * Implementation optimizations: [Changes related to LCP, FCP and Paint Holding](2023_03_lcp_fcp.md) * Chrome 99
diff --git a/docs/vscode.md b/docs/vscode.md index 375a798..0cae347 100644 --- a/docs/vscode.md +++ b/docs/vscode.md
@@ -433,7 +433,7 @@ problems, please refer to [go/vscode-remote#windows](http://go/vscode-remote#windows). -Non-Googlers may follow may follow Microsoft's instructions for +Non-Googlers may follow Microsoft's instructions for [installing the OpenSSH server](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse). VS Code should work remotely after following this step.
diff --git a/extensions/browser/api/bluetooth_socket/bluetooth_socket_event_dispatcher.cc b/extensions/browser/api/bluetooth_socket/bluetooth_socket_event_dispatcher.cc index 08b9a7c..e7741814 100644 --- a/extensions/browser/api/bluetooth_socket/bluetooth_socket_event_dispatcher.cc +++ b/extensions/browser/api/bluetooth_socket/bluetooth_socket_event_dispatcher.cc
@@ -8,7 +8,7 @@ #include "base/functional/bind.h" #include "base/lazy_instance.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "device/bluetooth/bluetooth_device.h" #include "device/bluetooth/bluetooth_socket.h" #include "extensions/browser/api/bluetooth_socket/bluetooth_api_socket.h"
diff --git a/extensions/browser/api/declarative/rules_cache_delegate.cc b/extensions/browser/api/declarative/rules_cache_delegate.cc index 26615a0..ccf8181b 100644 --- a/extensions/browser/api/declarative/rules_cache_delegate.cc +++ b/extensions/browser/api/declarative/rules_cache_delegate.cc
@@ -9,7 +9,7 @@ #include "base/functional/bind.h" #include "base/observer_list.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_source.h" #include "extensions/browser/api/declarative/rules_registry.h"
diff --git a/extensions/browser/api/socket/socket_api.cc b/extensions/browser/api/socket/socket_api.cc index e3f2d961..bd8b6d10 100644 --- a/extensions/browser/api/socket/socket_api.cc +++ b/extensions/browser/api/socket/socket_api.cc
@@ -15,7 +15,7 @@ #include "base/values.h" #include "build/build_config.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/storage_partition.h" #include "extensions/browser/api/socket/socket.h"
diff --git a/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.cc b/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.cc index 3b1a00b76..2498586e 100644 --- a/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.cc +++ b/extensions/browser/api/sockets_tcp/tcp_socket_event_dispatcher.cc
@@ -8,7 +8,7 @@ #include "base/functional/bind.h" #include "base/lazy_instance.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "extensions/browser/api/socket/tcp_socket.h" #include "extensions/browser/event_router.h" #include "extensions/browser/extension_system.h"
diff --git a/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.cc b/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.cc index 469e3dc..89a9653f3 100644 --- a/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.cc +++ b/extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_dispatcher.cc
@@ -8,7 +8,7 @@ #include "base/functional/bind.h" #include "base/lazy_instance.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "extensions/browser/api/socket/tcp_socket.h" #include "extensions/browser/event_router.h" #include "extensions/browser/extensions_browser_client.h"
diff --git a/extensions/browser/content_verifier.cc b/extensions/browser/content_verifier.cc index 2a872e9..8cc04479a 100644 --- a/extensions/browser/content_verifier.cc +++ b/extensions/browser/content_verifier.cc
@@ -20,7 +20,7 @@ #include "base/threading/thread_restrictions.h" #include "base/timer/elapsed_timer.h" #include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" #include "extensions/browser/content_hash_fetcher.h" #include "extensions/browser/content_hash_reader.h"
diff --git a/extensions/browser/content_verifier/test_utils.cc b/extensions/browser/content_verifier/test_utils.cc index 1bab5b57..a612504 100644 --- a/extensions/browser/content_verifier/test_utils.cc +++ b/extensions/browser/content_verifier/test_utils.cc
@@ -11,7 +11,7 @@ #include "base/json/json_writer.h" #include "base/strings/stringprintf.h" #include "base/task/sequenced_task_runner.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "crypto/sha2.h" #include "crypto/signature_creator.h" #include "extensions/browser/extension_file_task_runner.h"
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index 34f4f27..9387b62 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1841,6 +1841,8 @@ OS_EVENTS_ISEVENTSUPPORTED = 1778, OS_EVENTS_STARTCAPTURINGEVENTS = 1779, OS_EVENTS_STOPCAPTURINGEVENTS = 1780, + SIDEPANEL_SETPANELBEHAVIOR = 1781, + SIDEPANEL_GETPANELBEHAVIOR = 1782, // Last entry: Add new entries above, then run: // tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/extensions/shell/browser/shell_browser_main_parts.cc b/extensions/shell/browser/shell_browser_main_parts.cc index 1ee3576..eeb5352 100644 --- a/extensions/shell/browser/shell_browser_main_parts.cc +++ b/extensions/shell/browser/shell_browser_main_parts.cc
@@ -19,7 +19,7 @@ #include "components/sessions/core/session_id_generator.h" #include "components/storage_monitor/storage_monitor.h" #include "components/update_client/update_query_params.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/context_factory.h" #include "content/public/browser/devtools_agent_host.h"
diff --git a/fuchsia_web/runners/BUILD.gn b/fuchsia_web/runners/BUILD.gn index 6c2cfabc..5878dc3 100644 --- a/fuchsia_web/runners/BUILD.gn +++ b/fuchsia_web/runners/BUILD.gn
@@ -159,32 +159,15 @@ ] ] } -source_set("cast_runner_test_core") { - visibility += [ "//fuchsia_web/runners/cast/test:*" ] - testonly = true - sources = [ - "cast/fake_api_bindings.cc", - "cast/fake_api_bindings.h", - "cast/fake_application_config_manager.cc", - "cast/fake_application_config_manager.h", - ] - deps = [ ":cast_runner_core" ] - public_deps = [ - "./cast/fidl:fidl_hlcpp", - "//base", - "//url", - ] -} - test("cast_runner_unittests") { sources = [ "cast/application_controller_impl_unittest.cc" ] deps = [ ":cast_runner_core", - ":cast_runner_test_core", "//base", "//base/test:run_all_unittests", "//base/test:test_support", "//fuchsia_web/common/test:test_support", + "//fuchsia_web/runners/cast/test:test_support", "//net:test_support", "//testing/gmock", "//testing/gtest", @@ -198,7 +181,6 @@ data = [ "cast/testdata" ] deps = [ ":cast_runner_core", - ":cast_runner_test_core", "//base/test:test_support", "//build:chromecast_buildflags", "//components/cast/message_port", @@ -207,6 +189,7 @@ "//fuchsia_web/common/test:run_all_integration_tests", "//fuchsia_web/common/test:test_support", "//fuchsia_web/runners/cast/test:integration", + "//fuchsia_web/runners/cast/test:test_support", "//net:test_support", "//testing/gtest", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.camera3:fuchsia.camera3_hlcpp", @@ -248,13 +231,13 @@ data = [ "cast/testdata" ] deps = [ ":cast_runner_core", - ":cast_runner_test_core", "//base/test:test_support", "//components/cast/message_port", "//components/cast/message_port:test_message_port_receiver", "//content/public/browser", "//content/test:test_support", "//fuchsia_web/common/test:test_support", + "//fuchsia_web/runners/cast/test:test_support", "//fuchsia_web/webengine:browsertest_core", "//testing/gmock", "//testing/gtest",
diff --git a/fuchsia_web/runners/cast/api_bindings_client_browsertest.cc b/fuchsia_web/runners/cast/api_bindings_client_browsertest.cc index 1d3453bf..d20b1fb 100644 --- a/fuchsia_web/runners/cast/api_bindings_client_browsertest.cc +++ b/fuchsia_web/runners/cast/api_bindings_client_browsertest.cc
@@ -19,8 +19,8 @@ #include "fuchsia_web/common/test/frame_test_util.h" #include "fuchsia_web/common/test/test_navigation_listener.h" #include "fuchsia_web/runners/cast/api_bindings_client.h" -#include "fuchsia_web/runners/cast/fake_api_bindings.h" #include "fuchsia_web/runners/cast/named_message_port_connector_fuchsia.h" +#include "fuchsia_web/runners/cast/test/fake_api_bindings.h" #include "fuchsia_web/webengine/test/web_engine_browser_test.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/fuchsia_web/runners/cast/cast_runner_integration_test.cc b/fuchsia_web/runners/cast/cast_runner_integration_test.cc index 3625e1d..e5e1f62 100644 --- a/fuchsia_web/runners/cast/cast_runner_integration_test.cc +++ b/fuchsia_web/runners/cast/cast_runner_integration_test.cc
@@ -45,10 +45,10 @@ #include "fuchsia_web/common/test/url_request_rewrite_test_util.h" #include "fuchsia_web/runners/cast/cast_runner.h" #include "fuchsia_web/runners/cast/cast_runner_switches.h" -#include "fuchsia_web/runners/cast/fake_api_bindings.h" -#include "fuchsia_web/runners/cast/fake_application_config_manager.h" #include "fuchsia_web/runners/cast/fidl/fidl/hlcpp/chromium/cast/cpp/fidl.h" +#include "fuchsia_web/runners/cast/test/cast_runner_features.h" #include "fuchsia_web/runners/cast/test/cast_runner_launcher.h" +#include "fuchsia_web/runners/cast/test/fake_api_bindings.h" #include "net/test/embedded_test_server/default_handlers.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/fuchsia_web/runners/cast/fidl/BUILD.gn b/fuchsia_web/runners/cast/fidl/BUILD.gn index 11d5aaf..e3bbc76 100644 --- a/fuchsia_web/runners/cast/fidl/BUILD.gn +++ b/fuchsia_web/runners/cast/fidl/BUILD.gn
@@ -30,7 +30,7 @@ "//chromecast/bindings:*", "//chromecast/internal/*", "//fuchsia_web/runners:cast_runner_core", - "//fuchsia_web/runners:cast_runner_test_core", "//fuchsia_web/runners/cast/test:integration", + "//fuchsia_web/runners/cast/test:test_support", ] }
diff --git a/fuchsia_web/runners/cast/test/BUILD.gn b/fuchsia_web/runners/cast/test/BUILD.gn index d6e0943..7aa2f6a 100644 --- a/fuchsia_web/runners/cast/test/BUILD.gn +++ b/fuchsia_web/runners/cast/test/BUILD.gn
@@ -4,6 +4,21 @@ assert(is_fuchsia) +source_set("test_support") { + testonly = true + sources = [ + "fake_api_bindings.cc", + "fake_api_bindings.h", + "fake_application_config_manager.cc", + "fake_application_config_manager.h", + ] + public_deps = [ + "//base", + "//fuchsia_web/runners/cast/fidl:fidl_hlcpp", + "//url", + ] +} + source_set("integration") { testonly = true public = [ @@ -17,6 +32,7 @@ "fake_cast_agent.cc", ] public_deps = [ + ":test_support", "//fuchsia_web/common/test:test_support", "//third_party/abseil-cpp:absl", "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.camera3:fuchsia.camera3_hlcpp", @@ -28,7 +44,6 @@ "//base", "//fuchsia_web/common", "//fuchsia_web/runners:cast_runner_core", - "//fuchsia_web/runners:cast_runner_test_core", "//fuchsia_web/runners/cast/fidl:fidl_hlcpp", "//media/fuchsia/audio:test_support", "//media/fuchsia/audio:test_support_components",
diff --git a/fuchsia_web/runners/cast/fake_api_bindings.cc b/fuchsia_web/runners/cast/test/fake_api_bindings.cc similarity index 92% rename from fuchsia_web/runners/cast/fake_api_bindings.cc rename to fuchsia_web/runners/cast/test/fake_api_bindings.cc index 7a1bb136..afc3292 100644 --- a/fuchsia_web/runners/cast/fake_api_bindings.cc +++ b/fuchsia_web/runners/cast/test/fake_api_bindings.cc
@@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "fuchsia_web/runners/cast/fake_api_bindings.h" +#include "fuchsia_web/runners/cast/test/fake_api_bindings.h" + +#include <fuchsia/web/cpp/fidl.h> #include "base/auto_reset.h" #include "base/fuchsia/fuchsia_logging.h" @@ -25,8 +27,9 @@ it = ports_.find(expected_port_name_); } - if (it == ports_.end()) + if (it == ports_.end()) { return {}; + } fidl::InterfaceHandle<::fuchsia::web::MessagePort> port = std::move(it->second);
diff --git a/fuchsia_web/runners/cast/fake_api_bindings.h b/fuchsia_web/runners/cast/test/fake_api_bindings.h similarity index 91% rename from fuchsia_web/runners/cast/fake_api_bindings.h rename to fuchsia_web/runners/cast/test/fake_api_bindings.h index 29a9d6c..31c9889 100644 --- a/fuchsia_web/runners/cast/fake_api_bindings.h +++ b/fuchsia_web/runners/cast/test/fake_api_bindings.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef FUCHSIA_WEB_RUNNERS_CAST_FAKE_API_BINDINGS_H_ -#define FUCHSIA_WEB_RUNNERS_CAST_FAKE_API_BINDINGS_H_ +#ifndef FUCHSIA_WEB_RUNNERS_CAST_TEST_FAKE_API_BINDINGS_H_ +#define FUCHSIA_WEB_RUNNERS_CAST_TEST_FAKE_API_BINDINGS_H_ #include <string> #include <utility> @@ -55,4 +55,4 @@ base::OnceClosure on_expected_port_received_; }; -#endif // FUCHSIA_WEB_RUNNERS_CAST_FAKE_API_BINDINGS_H_ +#endif // FUCHSIA_WEB_RUNNERS_CAST_TEST_FAKE_API_BINDINGS_H_
diff --git a/fuchsia_web/runners/cast/fake_application_config_manager.cc b/fuchsia_web/runners/cast/test/fake_application_config_manager.cc similarity index 94% rename from fuchsia_web/runners/cast/fake_application_config_manager.cc rename to fuchsia_web/runners/cast/test/fake_application_config_manager.cc index f07e7b03e..813f4ec 100644 --- a/fuchsia_web/runners/cast/fake_application_config_manager.cc +++ b/fuchsia_web/runners/cast/test/fake_application_config_manager.cc
@@ -2,13 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "fuchsia_web/runners/cast/fake_application_config_manager.h" +#include "fuchsia_web/runners/cast/test/fake_application_config_manager.h" + +#include <fuchsia/web/cpp/fidl.h> #include <string> #include <utility> +#include "base/fuchsia/fuchsia_logging.h" #include "base/logging.h" -#include "fuchsia_web/runners/cast/cast_component.h" +#include "third_party/abseil-cpp/absl/types/optional.h" constexpr char FakeApplicationConfigManager::kFakeAgentUrl[] = "fuchsia-pkg://fuchsia.com/fake_agent#meta/fake_agent.cmx";
diff --git a/fuchsia_web/runners/cast/fake_application_config_manager.h b/fuchsia_web/runners/cast/test/fake_application_config_manager.h similarity index 87% rename from fuchsia_web/runners/cast/fake_application_config_manager.h rename to fuchsia_web/runners/cast/test/fake_application_config_manager.h index 057e1be..a4a69bc69 100644 --- a/fuchsia_web/runners/cast/fake_application_config_manager.h +++ b/fuchsia_web/runners/cast/test/fake_application_config_manager.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef FUCHSIA_WEB_RUNNERS_CAST_FAKE_APPLICATION_CONFIG_MANAGER_H_ -#define FUCHSIA_WEB_RUNNERS_CAST_FAKE_APPLICATION_CONFIG_MANAGER_H_ +#ifndef FUCHSIA_WEB_RUNNERS_CAST_TEST_FAKE_APPLICATION_CONFIG_MANAGER_H_ +#define FUCHSIA_WEB_RUNNERS_CAST_TEST_FAKE_APPLICATION_CONFIG_MANAGER_H_ #include <map> #include <string> @@ -47,4 +47,4 @@ std::map<std::string, chromium::cast::ApplicationConfig> id_to_config_; }; -#endif // FUCHSIA_WEB_RUNNERS_CAST_FAKE_APPLICATION_CONFIG_MANAGER_H_ +#endif // FUCHSIA_WEB_RUNNERS_CAST_TEST_FAKE_APPLICATION_CONFIG_MANAGER_H_
diff --git a/fuchsia_web/runners/cast/test/fake_cast_agent.h b/fuchsia_web/runners/cast/test/fake_cast_agent.h index e8cde02..bc91d3e 100644 --- a/fuchsia_web/runners/cast/test/fake_cast_agent.h +++ b/fuchsia_web/runners/cast/test/fake_cast_agent.h
@@ -14,8 +14,8 @@ #include "base/containers/flat_map.h" #include "base/functional/callback.h" #include "base/strings/string_piece.h" -#include "fuchsia_web/runners/cast/fake_application_config_manager.h" #include "fuchsia_web/runners/cast/fidl/fidl/hlcpp/chromium/cast/cpp/fidl.h" +#include "fuchsia_web/runners/cast/test/fake_application_config_manager.h" namespace test {
diff --git a/fuchsia_web/webengine/browser/navigation_controller_impl.cc b/fuchsia_web/webengine/browser/navigation_controller_impl.cc index 4ec61768..12b00f2 100644 --- a/fuchsia_web/webengine/browser/navigation_controller_impl.cc +++ b/fuchsia_web/webengine/browser/navigation_controller_impl.cc
@@ -194,8 +194,11 @@ // Send the current navigation state to the listener immediately. waiting_for_navigation_event_ack_ = true; + previous_navigation_state_ = GetVisibleNavigationState(); + fuchsia::web::NavigationState initial_state; + DiffNavigationEntries({}, previous_navigation_state_, &initial_state); navigation_listener_->OnNavigationStateChanged( - GetVisibleNavigationState(), [this]() { + std::move(initial_state), [this]() { waiting_for_navigation_event_ack_ = false; MaybeSendNavigationEvent(); });
diff --git a/gpu/command_buffer/client/raster_implementation.cc b/gpu/command_buffer/client/raster_implementation.cc index 1d2a0665..4a9e108 100644 --- a/gpu/command_buffer/client/raster_implementation.cc +++ b/gpu/command_buffer/client/raster_implementation.cc
@@ -1204,10 +1204,10 @@ int dst_y_offset, int dst_plane_index, GLenum texture_target, - GLuint src_row_bytes, - const SkImageInfo& src_info, - const void* src_pixels) { + const SkPixmap& src_sk_pixmap) { TRACE_EVENT0("gpu", "RasterImplementation::WritePixels"); + const auto& src_info = src_sk_pixmap.info(); + const auto& src_row_bytes = src_sk_pixmap.rowBytes(); DCHECK_GE(src_row_bytes, src_info.minRowBytes()); // Get the size of the SkColorSpace while maintaining 8-byte alignment. @@ -1217,7 +1217,7 @@ src_info.colorSpace()->writeToMemory(nullptr), sizeof(uint64_t)); } - GLuint src_size = src_info.computeByteSize(src_row_bytes); + GLuint src_size = src_sk_pixmap.computeByteSize(); GLuint total_size = pixels_offset + base::bits::AlignUp(src_size, static_cast<GLuint>(sizeof(uint64_t))); @@ -1239,7 +1239,8 @@ size_t bytes_written = src_info.colorSpace()->writeToMemory(address); DCHECK_LE(bytes_written, pixels_offset); } - memcpy(static_cast<uint8_t*>(address) + pixels_offset, src_pixels, src_size); + memcpy(static_cast<uint8_t*>(address) + pixels_offset, src_sk_pixmap.addr(), + src_size); helper_->WritePixelsINTERNALImmediate( dst_x_offset, dst_y_offset, dst_plane_index, src_info.width(),
diff --git a/gpu/command_buffer/client/raster_implementation.h b/gpu/command_buffer/client/raster_implementation.h index 7e08e7b..1f61d4b9 100644 --- a/gpu/command_buffer/client/raster_implementation.h +++ b/gpu/command_buffer/client/raster_implementation.h
@@ -131,9 +131,7 @@ int dst_y_offset, int dst_plane_index, GLenum texture_target, - GLuint src_row_bytes, - const SkImageInfo& src_info, - const void* src_pixels) override; + const SkPixmap& src_sk_pixmap) override; void ConvertYUVAMailboxesToRGB( const gpu::Mailbox& dest_mailbox,
diff --git a/gpu/command_buffer/client/raster_implementation_gles.cc b/gpu/command_buffer/client/raster_implementation_gles.cc index 3f6a38f..7833622 100644 --- a/gpu/command_buffer/client/raster_implementation_gles.cc +++ b/gpu/command_buffer/client/raster_implementation_gles.cc
@@ -194,9 +194,9 @@ int dst_y_offset, int dst_plane_index, GLenum texture_target, - GLuint src_row_bytes, - const SkImageInfo& src_info, - const void* src_pixels) { + const SkPixmap& src_sk_pixmap) { + const auto& src_info = src_sk_pixmap.info(); + const auto& src_row_bytes = src_sk_pixmap.rowBytes(); DCHECK_GE(src_row_bytes, src_info.minRowBytes()); GLuint texture_id = CreateAndConsumeForGpuRaster(dest_mailbox); BeginSharedImageAccessDirectCHROMIUM( @@ -212,7 +212,7 @@ texture_target, 0, dst_x_offset, dst_y_offset, src_info.width(), src_info.height(), SkColorTypeToGLDataFormat(src_info.colorType(), capabilities_.texture_rg), - SkColorTypeToGLDataType(src_info.colorType()), src_pixels); + SkColorTypeToGLDataType(src_info.colorType()), src_sk_pixmap.addr()); gl_->BindTexture(texture_target, 0); gl_->PixelStorei(GL_UNPACK_ROW_LENGTH, 0); gl_->PixelStorei(GL_UNPACK_ALIGNMENT, old_align);
diff --git a/gpu/command_buffer/client/raster_implementation_gles.h b/gpu/command_buffer/client/raster_implementation_gles.h index 15626f9c..c20dcad4 100644 --- a/gpu/command_buffer/client/raster_implementation_gles.h +++ b/gpu/command_buffer/client/raster_implementation_gles.h
@@ -74,9 +74,7 @@ int dst_y_offset, int dst_plane_index, GLenum texture_target, - GLuint src_row_bytes, - const SkImageInfo& src_info, - const void* src_pixels) override; + const SkPixmap& src_sk_pixmap) override; void ConvertYUVAMailboxesToRGB( const gpu::Mailbox& dest_mailbox,
diff --git a/gpu/command_buffer/client/raster_interface.h b/gpu/command_buffer/client/raster_interface.h index a445db7..11a8ea5f 100644 --- a/gpu/command_buffer/client/raster_interface.h +++ b/gpu/command_buffer/client/raster_interface.h
@@ -15,6 +15,7 @@ #include "gpu/command_buffer/common/sync_token.h" #include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkImageInfo.h" +#include "third_party/skia/include/core/SkPixmap.h" #include "third_party/skia/include/core/SkYUVAInfo.h" #include "third_party/skia/include/gpu/GrTypes.h" @@ -61,19 +62,17 @@ GLboolean unpack_flip_y, GLboolean unpack_premultiply_alpha) = 0; - // Synchronously writes pixels from caller-owned memory |src_pixels| and given - // |src_info| + |src_row_bytes| into |dest_mailbox| for given |plane_index|. - // |plane_index| applies to multiplanar textures in mailboxes, for example YUV - // images produced by the VideoDecoder. |plane_index| as 0 should be passed - // for known single-plane textures. + // Asynchronously writes pixels from caller-owned memory inside + // |src_sk_pixmap| into |dest_mailbox| for given |plane_index|. |plane_index| + // applies to multiplanar textures in mailboxes, for example YUV images + // produced by the VideoDecoder. |plane_index| as 0 should be passed for known + // single-plane textures. virtual void WritePixels(const gpu::Mailbox& dest_mailbox, int dst_x_offset, int dst_y_offset, int dst_plane_index, GLenum texture_target, - GLuint src_row_bytes, - const SkImageInfo& src_info, - const void* src_pixels) = 0; + const SkPixmap& src_sk_pixmap) = 0; // 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
diff --git a/headless/lib/browser/headless_browser_impl.cc b/headless/lib/browser/headless_browser_impl.cc index cbe1c8c..f6510e0 100644 --- a/headless/lib/browser/headless_browser_impl.cc +++ b/headless/lib/browser/headless_browser_impl.cc
@@ -131,6 +131,11 @@ /// static blink::UserAgentMetadata HeadlessBrowser::GetUserAgentMetadata() { auto metadata = embedder_support::GetUserAgentMetadata(nullptr); + // Skip override brand version information if components' API returns a blank + // UserAgentMetadata. + if (metadata == blink::UserAgentMetadata()) { + return metadata; + } std::string significant_version = version_info::GetMajorVersionNumber(); constexpr bool kEnableUpdatedGreaseByPolicy = true;
diff --git a/headless/lib/browser/headless_browser_impl_unittest.cc b/headless/lib/browser/headless_browser_impl_unittest.cc index 5a03281f..2ca7ef4b 100644 --- a/headless/lib/browser/headless_browser_impl_unittest.cc +++ b/headless/lib/browser/headless_browser_impl_unittest.cc
@@ -4,6 +4,8 @@ #include "headless/lib/browser/headless_browser_impl.h" +#include "base/test/scoped_command_line.h" +#include "components/embedder_support/switches.h" #include "components/embedder_support/user_agent_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -33,4 +35,16 @@ } } +TEST(HeadlessBrowserTest, CustomUserAgent) { + std::string custom_user_agent = "custom chrome user agent"; + base::test::ScopedCommandLine scoped_command_line; + base::CommandLine* command_line = scoped_command_line.GetProcessCommandLine(); + command_line->AppendSwitchASCII(embedder_support::kUserAgent, + custom_user_agent); + ASSERT_TRUE(command_line->HasSwitch(embedder_support::kUserAgent)); + // Make sure return blank values for HeadlessBrowser::GetUserAgentMetadata(). + EXPECT_EQ(blink::UserAgentMetadata(), + HeadlessBrowser::GetUserAgentMetadata()); +} + } // namespace headless
diff --git a/headless/lib/browser/headless_request_context_manager.cc b/headless/lib/browser/headless_request_context_manager.cc index 9272fe9..a6ff741 100644 --- a/headless/lib/browser/headless_request_context_manager.cc +++ b/headless/lib/browser/headless_request_context_manager.cc
@@ -9,7 +9,7 @@ #include "base/task/single_thread_task_runner.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/network_service_instance.h" #include "content/public/browser/resource_context.h" #include "headless/lib/browser/headless_browser_context_options.h"
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index a29f1881..77d1100 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -2977,9 +2977,12 @@ <message name="IDS_IOS_PASSWORD_CHECKUP_LAST_COMPLETED_CHECK" desc="Subtitle for Password Checkup cell which shows the timestamp of the last check." meaning="Time when passwords were checked last time."> Checked <ph name="TIME">$1<ex>10 minutes ago</ex></ph> </message> - <message name="IDS_IOS_CHECK_FINISHED_JUST_NOW" desc="Used instead of timestamp when Password Check finished less than 1 minute ago." meaning="Check finished just now."> + <message name="IDS_IOS_CHECK_FINISHED_JUST_NOW" desc="Used instead of timestamp when Password Check finished less than 1 minute ago." meaning="[In sentence case] Check finished just now."> just now </message> + <message name="IDS_IOS_CHECK_FINISHED_JUST_NOW_TITLE_CASE" desc="Used instead of timestamp when Password Check finished less than 1 minute ago." meaning="[In Title Case] Check finished just now."> + Just Now + </message> <message name="IDS_IOS_CHECK_NEVER_RUN" desc="Used instead of timestamp when Password Check never ran" meaning="Check never run."> Check never run. </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_CHECK_FINISHED_JUST_NOW_TITLE_CASE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_CHECK_FINISHED_JUST_NOW_TITLE_CASE.png.sha1 new file mode 100644 index 0000000..82f13f9f --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_CHECK_FINISHED_JUST_NOW_TITLE_CASE.png.sha1
@@ -0,0 +1 @@ +4568e2ba07872a0ff9247dc35d491a18f8e01476 \ 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 4b2c431..b4d85f6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_af.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} gestoorde adres is bo jou sleutelbord beskikbaar.}other{{count} gestoorde adresse is bo jou sleutelbord beskikbaar.}}</translation> <translation id="2421004566762153674">Blokkeer tans derdeparty-webkoekies</translation> <translation id="2421044535038393232">Hou wysiging</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} gekompromitteerde wagwoord}other{{COUNT} gekompromitteerde wagwoorde}}</translation> <translation id="2434405374328098816">Jy het reeds 'n wagwoord vir "<ph name="USERNAME" />" op <ph name="WEBSITE" /> gestoor</translation> <translation id="2435457462613246316">Wys wagwoord</translation> <translation id="2451654228769116489">Speld oortjie vas</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Kom meer te wete<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Onlangse oortjies</translation> <translation id="7006788746334555276">Inhoudinstellings</translation> -<translation id="7014087399239955356">Gaan tans wagwoorde na …</translation> <translation id="7029809446516969842">Wagwoorde</translation> <translation id="7053983685419859001">Blokkeer</translation> <translation id="7062545763355031412">Aanvaar en wissel rekeninge</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index 7c86cf2..6538a03 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} የተቀመጠ አድራሻ ከቁልፍ ሰሌዳዎ በላይ ይገኛል።}one{{count} የተቀመጠ አድራሻ ከቁልፍ ሰሌዳዎ በላይ ይገኛል።}other{{count} የተቀመጡ አድራሻዎች ከቁልፍ ሰሌዳዎ በላይ ይገኛሉ።}}</translation> <translation id="2421004566762153674">የሶስተኛ ወገን ኩኪዎችን ማገድ</translation> <translation id="2421044535038393232">አርትዖቱን ቀጥል</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} የተጠለፈ የይለፍ ቃል}one{{COUNT} የተጠለፈ የይለፍ ቃል}other{{COUNT} የተጠለፉ የይለፍ ቃላት}}</translation> <translation id="2434405374328098816"><ph name="WEBSITE" /> ላይ ለ«<ph name="USERNAME" />» የይለፍ ቃል አስቀድመው አስቀምጠዋል</translation> <translation id="2435457462613246316">የይለፍ ቃል አሳይ</translation> <translation id="2451654228769116489">ትርን ሰካ</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> <translation id="7004499039102548441">የቅርብ ጊዜ ትሮች</translation> <translation id="7006788746334555276">የይዘት ቅንብሮች </translation> -<translation id="7014087399239955356">የይለፍ ቃላትን በመፈተሽ ላይ…</translation> <translation id="7029809446516969842">የይለፍ ቃላት</translation> <translation id="7053983685419859001">አግድ</translation> <translation id="7062545763355031412">ይቀበሉ እና መለያዎችን ይቀይሩ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 411971c..e1fcd86 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -208,7 +208,6 @@ <translation id="2411749908844615428">{count,plural, =1{يتوفّر عنوان واحد ({count}) محفوظ أعلى لوحة المفاتيح.}zero{يتوفّر {count} عنوان محفوظ أعلى لوحة المفاتيح.}two{يتوفّر عنوانَان ({count}) محفوظان أعلى لوحة المفاتيح.}few{تتوفّر {count} عناوين محفوظة أعلى لوحة المفاتيح.}many{يتوفّر {count} عنوانًا محفوظًا أعلى لوحة المفاتيح.}other{يتوفّر {count} عنوان محفوظ أعلى لوحة المفاتيح.}}</translation> <translation id="2421004566762153674">حظر ملفات تعريف الارتباط التابعة لجهات خارجية</translation> <translation id="2421044535038393232">متابعة التعديل</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{كلمة مرور واحدة محتمَل تعرّضها للاختراق ({COUNT})}zero{{COUNT} كلمة مرور محتمَل تعرّضها للاختراق}two{كلِمتا مرور محتمَل تعرّضهما للاختراق ({COUNT})}few{{COUNT} كلمات مرور محتمَل تعرّضها للاختراق}many{{COUNT} كلمة مرور محتمَل تعرّضها للاختراق}other{{COUNT} كلمة مرور محتمَل تعرّضها للاختراق}}</translation> <translation id="2434405374328098816">سبق أن حفظت كلمة مرور لاسم المستخدم "<ph name="USERNAME" />" على <ph name="WEBSITE" />.</translation> <translation id="2435457462613246316">عرض كلمة المرور</translation> <translation id="2451654228769116489">تثبيت علامة تبويب</translation> @@ -926,7 +925,6 @@ <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> <translation id="7004499039102548441">علامات التبويب الأخيرة</translation> <translation id="7006788746334555276">إعدادات المحتوى</translation> -<translation id="7014087399239955356">جارٍ التحقّق من كلمات المرور…</translation> <translation id="7029809446516969842">كلمات المرور</translation> <translation id="7053983685419859001">حظر</translation> <translation id="7062545763355031412">قبول الحسابات وتبديلها</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index 3c5fb42d..18732df 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314"><ph name="LANGUAGE" /> সদাই অনুবাদ কৰক</translation> <translation id="110724200315609752">খোলা থকা ৱিণ্ড’লৈ যাওক</translation> <translation id="1112015203684611006">প্ৰিণ্টিং কৰিব পৰা নগ'ল।</translation> +<translation id="1118266931011974190"><ph name="THRESHOLD" /> দিনৰ পাছত</translation> <translation id="1125564390852150847">নতুন টেব সৃষ্টি কৰক।</translation> <translation id="1126013303640354461">Google Payৰ পৰা পৰিশোধ পদ্ধতি আৰু ঠিকনা এনক্ৰিপ্ট কৰা নহ’ব। Chromeৰ পৰা ব্ৰাউজিঙৰ ইতিহাস ছিংক কৰা নহ’ব। আপোনাৰ পাছফ্ৰেজ থকাগৰাকীয়েহে আপোনাৰ এনক্ৰিপ্ট কৰা ডেটা পঢ়িব পাৰিব। পাছফ্ৰেজটো Googleলৈ পঠিওৱা নহয় অথবা Googleএ সেয়া ষ্ট’ৰ নকৰে। আপুনি যদি নিজৰ পাছফ্ৰেজটো পাহৰে অথবা এই ছেটিংটো সলাব বিচাৰে, তেন্তে আপুনি ছিংক ৰিছেট কৰিব লাগিব। <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">জুম আউট কৰক</translation> <translation id="2230173723195178503">ৱেবপৃষ্ঠা ল’ড হ’ল</translation> <translation id="2239626343334228536">ব্ৰাউজিঙৰ ডেটা মচি থকা হৈছে...</translation> +<translation id="22508856139286506">অগ্ৰাহ্য কৰা সকীয়নি (<ph name="COUNT" /> টা)</translation> <translation id="2251686759395008410">মেনু → ইতিহাস</translation> <translation id="2256933947031277845">আপোনাৰ প্ৰতিষ্ঠানে আপোনাক কেৱল কিছুমান নিৰ্দিষ্ট একাউণ্টৰ জৰিয়তেহে ছাইন ইন কৰিবলৈ দিয়ে।</translation> <translation id="225943865679747347">আসোঁৱাহ ক’ড: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{আপোনাৰ কীব’ৰ্ডৰ ওপৰত {count} টা ছেভ কৰি থোৱা ঠিকনা উপলব্ধ।}one{আপোনাৰ কীব’ৰ্ডৰ ওপৰত {count} টা ছেভ কৰি থোৱা ঠিকনা উপলব্ধ।}other{আপোনাৰ কীব’ৰ্ডৰ ওপৰত {count} টা ছেভ কৰি থোৱা ঠিকনা উপলব্ধ।}}</translation> <translation id="2421004566762153674">তৃতীয় পক্ষৰ কুকিসমূহ অৱৰোধ কৰা</translation> <translation id="2421044535038393232">সম্পাদনা কৰি থাকক</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} টা হেক কৰা পাছৱৰ্ড}one{{COUNT} টা হেক কৰা পাছৱৰ্ড}other{{COUNT} টা হেক কৰা পাছৱৰ্ড}}</translation> <translation id="2434405374328098816">আপুনি ইতিমধ্যে "<ph name="USERNAME" />"ৰ বাবে <ph name="WEBSITE" />ত এটা পাছৱৰ্ড ছেভ কৰিছে</translation> <translation id="2435457462613246316">পাছৱৰ্ড দেখুৱাওক</translation> <translation id="2451654228769116489">টেবটো পিন কৰক</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">আপোনাৰ সংযোগ পৰীক্ষা কৰক আৰু পুনৰ ছাইন ইন কৰি চাওক।</translation> <translation id="2637313651144986786">সন্ধানৰ টেব…</translation> <translation id="2647269890314209800">ব্যৱহাৰ হৈ থকা কুকিসমূহ</translation> +<translation id="2648721026697078500">কেতিয়াও স্থানান্তৰ নকৰিব</translation> <translation id="2648803196158606475">পঢ়া প্ৰৱিষ্টি মচক</translation> <translation id="2653659639078652383">দাখিল কৰক</translation> <translation id="2664621323652615289">বন্ধ কৰক</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">অধিক</translation> <translation id="3311748811247479259">অফ আছে</translation> <translation id="3324193307694657476">ঠিকনা ২</translation> +<translation id="3328459813621383194">নিষ্ক্ৰিয় টেবসমূহ স্থানান্তৰ কৰক</translation> <translation id="3328801116991980348">ছাইটৰ তথ্য</translation> <translation id="3371831930909698441">অনুবাদ কৰিব পাৰি। স্ক্ৰীনৰ একেবাৰে তলৰ অংশৰ কাষত থকা বিকল্পসমূহ।</translation> <translation id="3377063233124932127">এতিয়া আপোনাৰ ছেভ কৰি থোৱা বুকমাৰ্ক, পাছৱৰ্ড আৰু অধিক একেবাৰে ওপৰত।</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">আপোনাৰ ছিংক কৰা ডেটা পর্যালোচনা কৰক</translation> <translation id="4536418791685807335">পুনৰ ছাইন ইন কৰি চাওক।</translation> <translation id="4540780316273593836">কিবা ভুল হ’ল</translation> +<translation id="4550040941166547650">কেৱল এই ডিভাইচটোত</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} টা নিষ্ক্ৰিয় টেব বন্ধ কৰিবনে?}one{{COUNT} টা নিষ্ক্ৰিয় টেব বন্ধ কৰিবনে?}other{{COUNT} টা নিষ্ক্ৰিয় টেব বন্ধ কৰিবনে?}}</translation> <translation id="457386861538956877">অধিক…</translation> <translation id="4587235830039045480">পাছৱৰ্ড আপোনাৰ Google একাউণ্টত ছেভ কৰক</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{{title}ত বুকমাৰ্ক কৰা হৈছে}one{{title}ত বুকমাৰ্ক কৰা হৈছে}other{{title}ত বুকমাৰ্ক কৰা হৈছে}}</translation> <translation id="6196207969502475924">কণ্ঠধ্বনিৰদ্বাৰা সন্ধান</translation> <translation id="6202364442240589072">{COUNT,plural, =1{{COUNT} টা টেব বন্ধ কৰক}one{{COUNT} টা টেব বন্ধ কৰক}other{{COUNT} টা টেব বন্ধ কৰক}}</translation> +<translation id="6210079381482819663"><ph name="THRESHOLD" /> অথবা ততোধিক দিন ব্যৱহাৰ নকৰা টেবসমূহ ইয়ালৈ স্থানান্তৰ কৰা হয়। আপুনি যিকোনো সময়তে <ph name="BEGIN_LINK" />ছেটিঙ<ph name="END_LINK" />ত এইটো সলনি কৰিব পাৰে।</translation> <translation id="6213567400989743524">অগ্ৰাহ্য কৰা সকীয়নি</translation> <translation id="6219550825416862075">পুনৰ স্বাগতম</translation> <translation id="6219688215832490856">কেতিয়াও অনুবাদ নকৰিব</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation> <translation id="7004499039102548441">শেহতীয়া টেব</translation> <translation id="7006788746334555276">সমলৰ ছেটিংসমূহ</translation> -<translation id="7014087399239955356">পাছৱৰ্ড পৰীক্ষা কৰি থকা হৈছে...</translation> <translation id="7029809446516969842">পাছৱৰ্ডসমূহ</translation> <translation id="7053983685419859001">অৱৰোধ কৰক</translation> <translation id="7062545763355031412">গ্ৰহণ কৰি একাউণ্টসমূহ সলনি কৰক</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">শাখাটো সংকোচন কৰে</translation> <translation id="8065292699993359127">Chromeৰ ইনক’গনিট’ত URLসমূহ খোলক</translation> <translation id="806745655614357130">মোৰ ডেটা পৃথক কৰি ৰাখক</translation> +<translation id="8069394452933076548">শেহতীয়াকৈ ব্যৱহাৰ নকৰা টেবসমূহ কেতিয়া নিষ্ক্ৰিয় টেব শাখালৈ স্থানান্তৰ কৰা হয় বাছনি কৰক।</translation> <translation id="8073670137947914548">ডাউনল’ড সম্পূর্ণ হ’ল</translation> <translation id="8073872304774253879">সন্ধানসমূহ আৰু ব্ৰাউজিং উন্নত কৰক</translation> <translation id="8076492880354921740">টেব</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">ছাইন ইন কৰিব নোৱাৰি</translation> <translation id="9055960261314198756">বৰ্ধিত সুৰক্ষা অফ কৰা আছে</translation> <translation id="9057972802061533987">ফ’ল’ কৰিব নোৱাৰি। কিবা ভুল হ’ল।</translation> +<translation id="9061495354530850708">আপোনাৰ Google একাউণ্টত</translation> <translation id="9065203028668620118">সম্পাদনা কৰক</translation> <translation id="9068336935206019333">Chromeৰ ইনক’গনিট’ ম’ডত খোলক</translation> <translation id="9079935439869366234">সকলো নপঢ়া বুলি চিহ্নিত কৰক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_az.xtb b/ios/chrome/app/strings/resources/ios_strings_az.xtb index 8958aee..f4fc582 100644 --- a/ios/chrome/app/strings/resources/ios_strings_az.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_az.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Həmişə <ph name="LANGUAGE" /> dilinə tərcümə edin</translation> <translation id="110724200315609752">Açıq Pəncərəyə keçirin</translation> <translation id="1112015203684611006">Çap alınmadı.</translation> +<translation id="1118266931011974190"><ph name="THRESHOLD" /> gün sonra</translation> <translation id="1125564390852150847">Yeni panel yaradın.</translation> <translation id="1126013303640354461">Google Pay'dən ödəniş metodları və ünvanlar şifrələnməyəcək. Chrome'dan baxış tarixçəsi sinxronlaşdırılmayacaq. Yalnız parolunuzu bilən kimsə şifrələnmiş datanızı oxuya bilər. Bu parol Google tərəfindən göndərilmiş və yadda saxlanmır. Parol ifadəsini unutsanız və ya bu ayarı dəyişmək istəsəniz sinxronizasiyanı sıfırlamalısınız. <ph name="BEGIN_LINK" />Ətraflı məlumat<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Kiçildin</translation> <translation id="2230173723195178503">Veb səhifə yükləndi</translation> <translation id="2239626343334228536">Brauzinq datası silinir...</translation> +<translation id="22508856139286506">İmtina edilmiş xəbərdarlıqlar (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menyu → Tarixçə</translation> <translation id="2256933947031277845">Təşkilatınız yalnız müəyyən hesablarla daxil olmağa icazə verir.</translation> <translation id="225943865679747347">Xəta kodu: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} yaddaşda saxlanılmış ünvan klaviaturanızın yuxarısında əlçatandır.}other{{count} yaddaşda saxlanılmış ünvan klaviaturanızın yuxarısında əlçatandır.}}</translation> <translation id="2421004566762153674">Üçüncü tərəf kukilərinin bloklanması</translation> <translation id="2421044535038393232">Redaktəyə Davam Edin</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} oğurlanmış parol}other{{COUNT} oğurlanmış parol}}</translation> <translation id="2434405374328098816">Artıq <ph name="WEBSITE" /> saytında "<ph name="USERNAME" />" üçün parolu yadda saxlamısınız</translation> <translation id="2435457462613246316">Parol görünsün</translation> <translation id="2451654228769116489">Tabı sancın</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Bağlantını yoxlayın və yenidən daxil olmağa cəhd edin.</translation> <translation id="2637313651144986786">Tabları axtarın...</translation> <translation id="2647269890314209800">İstifadə edilən kukilər</translation> +<translation id="2648721026697078500">Heç vaxt köçürməyin</translation> <translation id="2648803196158606475">Oxunmuşları Silin</translation> <translation id="2653659639078652383">Təqdim edin</translation> <translation id="2664621323652615289">Dayandırın</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">ardı</translation> <translation id="3311748811247479259">Deaktiv</translation> <translation id="3324193307694657476">Ünvan 2</translation> +<translation id="3328459813621383194">Fəaliyyətsiz tabları köçürün</translation> <translation id="3328801116991980348">Sayt haqqında</translation> <translation id="3371831930909698441">Tərcümə əlçatandır. Seçimlər ekranın aşağı hissəsində əlçatandır.</translation> <translation id="3377063233124932127">İndi yadda saxladığınız əlfəcinlər, parollar və s. yuxarıdadır.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Sinxronlaşdırılmış datanızı nəzərdən keçirin</translation> <translation id="4536418791685807335">Yenidən daxil olmağa cəhd edin.</translation> <translation id="4540780316273593836">Xəta baş verdi</translation> +<translation id="4550040941166547650">Yalnız bu cihazda</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} fəaliyyətsiz tab bağlansın?}other{{COUNT} fəaliyyətsiz tab bağlansın?}}</translation> <translation id="457386861538956877">Digər...</translation> <translation id="4587235830039045480">Parolu Google Hesabında yadda saxlayın</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Buraya əlfəcinlənib: {title}}other{Buraya əlfəcinlənib: {title}}}</translation> <translation id="6196207969502475924">Səsli Axtarış</translation> <translation id="6202364442240589072">{COUNT,plural, =1{{COUNT} Tabı bağlayın}other{{COUNT} Tabı bağlayın}}</translation> +<translation id="6210079381482819663"><ph name="THRESHOLD" /> gün və ya daha uzun müddət istifadə edilməyən tablar bura köçürülür. <ph name="BEGIN_LINK" />Ayarlarda<ph name="END_LINK" /> dəyişə bilərsiniz.</translation> <translation id="6213567400989743524">Qapadılmış Xəbərdarlıqlar</translation> <translation id="6219550825416862075">Təkrar xoş gəldiniz</translation> <translation id="6219688215832490856">Heç Vaxt Tərcümə Etməyin</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Ətraflı məlumat<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Son Tablar</translation> <translation id="7006788746334555276">Məzmun Ayarları</translation> -<translation id="7014087399239955356">Parollar yoxlanılır…</translation> <translation id="7029809446516969842">Parollar</translation> <translation id="7053983685419859001">Bloklayın</translation> <translation id="7062545763355031412">Qəbul edin və hesablar arasında keçid edin</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Bölməni yığcamlaşdırır.</translation> <translation id="8065292699993359127">Keçidləri Chrome'da Anonim rejimdə açın</translation> <translation id="806745655614357130">Datamı ayrı saxlayın</translation> +<translation id="8069394452933076548">Son vaxtlar istifadə edilməyən tabların nə vaxt fəaliyyətsiz tab bölməsinə köçürüləcəyini seçin.</translation> <translation id="8073670137947914548">Endirmə tamamlandı</translation> <translation id="8073872304774253879">Axtarışları və Brauzer Fəaliyyətini Təkmilləşdirin</translation> <translation id="8076492880354921740">Tablar</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Daxil ola bilmir</translation> <translation id="9055960261314198756">Qabaqcıl Qoruma Deaktivdir</translation> <translation id="9057972802061533987">İzləmək olmur. Xəta oldu.</translation> +<translation id="9061495354530850708">Google Hesabında</translation> <translation id="9065203028668620118">Düzəliş edin</translation> <translation id="9068336935206019333">Chrome Anonim rejimində açın</translation> <translation id="9079935439869366234">Hamısını Oxunmamış kimi Qeyd Edin</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_be.xtb b/ios/chrome/app/strings/resources/ios_strings_be.xtb index a4e3731f..13f2f39 100644 --- a/ios/chrome/app/strings/resources/ios_strings_be.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_be.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Заўсёды перакладаць з мовы: <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Пераключыцца на адкрытае акно</translation> <translation id="1112015203684611006">Памылка друкавання.</translation> +<translation id="1118266931011974190">Праз <ph name="THRESHOLD" /> сут</translation> <translation id="1125564390852150847">Стварыць новую ўкладку.</translation> <translation id="1126013303640354461">Спосабы аплаты і адрасы з Google Pay не будуць шыфравацца. Гісторыя прагляду сайтаў у браўзеры Chrome не будзе сінхранізавацца. Толькі карыстальнікі, якія ведаюць фразу-пароль, могуць чытаць вашы зашыфраваныя даныя. Google не атрымлівае і не захоўвае фразу-пароль. Калі вы забудзеце фразу-пароль або захочаце змяніць гэту наладу, вам трэба будзе скінуць параметры сінхранізацыі. <ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Паменшыць</translation> <translation id="2230173723195178503">Вэб-старонка загружана</translation> <translation id="2239626343334228536">Ідзе ачыстка даных прагляду...</translation> +<translation id="22508856139286506">Адхіленыя папярэджанні (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Меню → Гісторыя</translation> <translation id="2256933947031277845">Палітыка вашай арганізацыі дазваляе ўваходзіць у сістэмы, выкарыстоўваючы толькі пэўныя ўліковыя запісы.</translation> <translation id="225943865679747347">Код памылкі: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} захаваны адрас паказваецца над клавіятурай.}one{{count} захаваны адрас паказваецца над клавіятурай.}few{{count} захаваныя адрасы паказваюцца над клавіятурай.}many{{count} захаваных адрасоў паказваюцца над клавіятурай.}other{{count} захаванага адраса паказваюцца над клавіятурай.}}</translation> <translation id="2421004566762153674">Блакіроўка старонніх файлаў cookie</translation> <translation id="2421044535038393232">Працягнуць рэдагаванне</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} раскрыты пароль}one{{COUNT} раскрыты пароль}few{{COUNT} раскрытыя паролі}many{{COUNT} раскрытых пароляў}other{{COUNT} раскрытага пароля}}</translation> <translation id="2434405374328098816">Вы ўжо захавалі пароль для карыстальніка <ph name="USERNAME" /> на вэб-сайце <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Паказаць пароль</translation> <translation id="2451654228769116489">Замацаваць укладку</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Праверце падключэнне і паўтарыце спробу ўваходу.</translation> <translation id="2637313651144986786">Пошук укладак...</translation> <translation id="2647269890314209800">Файлы cookie, якія выкарыстоўваюцца</translation> +<translation id="2648721026697078500">Ніколі не перамяшчаць</translation> <translation id="2648803196158606475">Выдаліць прачытанае</translation> <translation id="2653659639078652383">Адправіць</translation> <translation id="2664621323652615289">Спыніць</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">яшчэ</translation> <translation id="3311748811247479259">Выключана</translation> <translation id="3324193307694657476">Радок адраса 2</translation> +<translation id="3328459813621383194">Перамяшчэнне неактыўных укладак</translation> <translation id="3328801116991980348">Звесткі пра сайт</translation> <translation id="3371831930909698441">Пераклад гатовы. Параметры знаходзяцца ў ніжняй частцы экрана.</translation> <translation id="3377063233124932127">Цяпер вашы захаваныя закладкі, паролі і іншае змесціва будуць паказвацца ўверсе.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Праверыць сінхранізаваныя даныя</translation> <translation id="4536418791685807335">Увайдзіце яшчэ раз.</translation> <translation id="4540780316273593836">Нешта пайшло не так</translation> +<translation id="4550040941166547650">Толькі на гэтай прыладзе.</translation> <translation id="457292989631956153">{COUNT,plural, =1{Закрыць {COUNT} неактыўную ўкладку?}one{Закрыць {COUNT} неактыўную ўкладку?}few{Закрыць {COUNT} неактыўныя ўкладкі?}many{Закрыць {COUNT} неактыўных укладак?}other{Закрыць {COUNT} неактыўнай укладкі?}}</translation> <translation id="457386861538956877">Яшчэ...</translation> <translation id="4587235830039045480">Пароль будзе захаваны ў вашым Уліковым запісе Google</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Закладка дададзена ў папку "{title}"}one{Закладкі дададзены ў папку "{title}"}few{Закладкі дададзены ў папку "{title}"}many{Закладкі дададзены ў папку "{title}"}other{Закладкі дададзены ў папку "{title}"}}</translation> <translation id="6196207969502475924">Галасавы пошук</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Закрыць {COUNT} укладку}one{Закрыць {COUNT} укладку}few{Закрыць {COUNT} укладкі}many{Закрыць {COUNT} укладак}other{Закрыць {COUNT} укладкі}}</translation> +<translation id="6210079381482819663">Укладкі, якія не выкарыстоўваліся на працягу <ph name="THRESHOLD" /> сут, перамяшчаюцца сюды. Гэты параметр можна змяніць у любы час у <ph name="BEGIN_LINK" />наладах<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Адхіленыя папярэджанні</translation> <translation id="6219550825416862075">З вяртаннем!</translation> <translation id="6219688215832490856">Ніколі не перакладаць з мовы</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Даведацца больш<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Нядаўнія ўкладкі</translation> <translation id="7006788746334555276">Налады змесціва</translation> -<translation id="7014087399239955356">Ідзе праверка пароляў…</translation> <translation id="7029809446516969842">Паролі</translation> <translation id="7053983685419859001">Заблакіраваць</translation> <translation id="7062545763355031412">Прыняць і пераключыцца на іншы ўліковы запіс</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Згортвае раздзел.</translation> <translation id="8065292699993359127">Адкрыць URL-адрасы ў Chrome у рэжыме інкогніта</translation> <translation id="806745655614357130">Захоўваць мае даныя асобна</translation> +<translation id="8069394452933076548">Выберыце, калі ўкладкі, якія даўно не выкарыстоўваліся, павінны перамяшчацца ў раздзел неактыўных укладак.</translation> <translation id="8073670137947914548">Спампоўванне завершана</translation> <translation id="8073872304774253879">Паскорыць пошук і прагляд</translation> <translation id="8076492880354921740">Укладкі</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Не ўдалося ўвайсці</translation> <translation id="9055960261314198756">Палепшаная абарона выключана</translation> <translation id="9057972802061533987">Не ўдалося падпісацца. Нешта пайшло не так.</translation> +<translation id="9061495354530850708">У вашым Уліковым запісе Google</translation> <translation id="9065203028668620118">Змяніць</translation> <translation id="9068336935206019333">Адкрыць у Chrome у рэжыме інкогніта</translation> <translation id="9079935439869366234">Пазн. усе як непрачытаныя</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index 71ecfb22..a45853b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">Отдалечаване</translation> <translation id="2230173723195178503">Уеб страницата се зареди</translation> <translation id="2239626343334228536">Данните за сърфирането се изчистват...</translation> +<translation id="22508856139286506">Отхвърлени предупреждения (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">„Меню → История“</translation> <translation id="2256933947031277845">Организацията ви разрешава да влизате само с определени профили.</translation> <translation id="225943865679747347">Код на грешката: <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} запазен адрес е налице над клавиатурата ви.}other{{count} запазени адреса са налице над клавиатурата ви.}}</translation> <translation id="2421004566762153674">„Бисквитките“ на трети страни се блокират</translation> <translation id="2421044535038393232">Продължаване на редактирането</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} компрометирана парола}other{{COUNT} компрометирани пароли}}</translation> <translation id="2434405374328098816">Вече запазихте парола за <ph name="USERNAME" /> за <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Показване на паролата</translation> <translation id="2451654228769116489">Фиксиране на раздела</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Скорошни раздели</translation> <translation id="7006788746334555276">Настройки за съдържанието</translation> -<translation id="7014087399239955356">Паролите се проверяват...</translation> <translation id="7029809446516969842">Пароли</translation> <translation id="7053983685419859001">Блокиране</translation> <translation id="7062545763355031412">Приемане и превключване на профилите</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index 787b4a4..940143a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count}টি সেভ করা ঠিকানা আপনার কীবোর্ডের উপর দেখানো হবে।}one{{count}টি সেভ করা ঠিকানা আপনার কীবোর্ডের উপর দেখানো হবে।}other{{count}টি সেভ করা ঠিকানা আপনার কীবোর্ডের উপর দেখানো হবে।}}</translation> <translation id="2421004566762153674">থার্ড-পার্টি কুকি ব্লক করুন</translation> <translation id="2421044535038393232">এডিট করতে থাকুন</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{চুরি হয়ে যাওয়া {COUNT}টি পাসওয়ার্ড}one{চুরি হয়ে যাওয়া {COUNT}টি পাসওয়ার্ড}other{চুরি হয়ে যাওয়া {COUNT}টি পাসওয়ার্ড}}</translation> <translation id="2434405374328098816">আপনি আগে থেকেই "<ph name="USERNAME" />"-এর জন্য <ph name="WEBSITE" />-এ পাসওয়ার্ড সেভ করেছেন</translation> <translation id="2435457462613246316">পাসওয়ার্ড দেখান</translation> <translation id="2451654228769116489">ট্যাব পিন করুন</translation> @@ -925,7 +924,6 @@ <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" /></translation> <translation id="7004499039102548441">সাম্প্রতিক ট্যাবগুলি</translation> <translation id="7006788746334555276">কন্টেন্ট সেটিংস</translation> -<translation id="7014087399239955356">পাসওয়ার্ড চেক করা হচ্ছে...</translation> <translation id="7029809446516969842">পাসওয়ার্ড</translation> <translation id="7053983685419859001">ব্লক করুন</translation> <translation id="7062545763355031412">স্বীকার করে অ্যাকাউন্টগুলি সুইচ করুন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb index 390a1e5..34489c1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} sačuvana adresa je dostupna iznad tastature.}one{{count} sačuvana adresa je dostupna iznad tastature.}few{{count} sačuvane adrese su dostupne iznad tastature.}other{{count} sačuvanih adresa je dostupno iznad tastature.}}</translation> <translation id="2421004566762153674">Blokiranje kolačića treće strane</translation> <translation id="2421044535038393232">Nastavi uređivanje</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ugrožena lozinka}one{{COUNT} ugrožena lozinka}few{{COUNT} ugrožene lozinke}other{{COUNT} ugroženih lozinki}}</translation> <translation id="2434405374328098816">Već ste sačuvali lozinku za korisnika "<ph name="USERNAME" />" na web lokaciji <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Prikaži lozinku</translation> <translation id="2451654228769116489">Zakači karticu</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nedavne kartice</translation> <translation id="7006788746334555276">Postavke sadržaja</translation> -<translation id="7014087399239955356">Provjera lozinki…</translation> <translation id="7029809446516969842">Lozinke</translation> <translation id="7053983685419859001">Blokiraj</translation> <translation id="7062545763355031412">Prihvati i zamjeni račune</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 19ebdb95..f8b893b4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Tradueix sempre el text en <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Canvia a la finestra oberta</translation> <translation id="1112015203684611006">Error en imprimir</translation> +<translation id="1118266931011974190">Al cap de <ph name="THRESHOLD" /> dies</translation> <translation id="1125564390852150847">Crea una pestanya nova.</translation> <translation id="1126013303640354461">Les formes de pagament i les adreces de Google Pay no s'encriptaran. L'historial de navegació de Chrome no se sincronitzarà. Només els usuaris que sàpiguen la teva frase de contrasenya poden llegir les dades encriptades. La frase de contrasenya no s'envia a Google, i Google tampoc no l'emmagatzema. Si l'oblides o vols canviar aquesta opció, has de restablir la sincronització. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Hi ha {count} adreça desada disponible a sobre del teclat.}other{Hi ha {count} adreces desades disponibles a sobre del teclat.}}</translation> <translation id="2421004566762153674">S'estan bloquejant les galetes de tercers</translation> <translation id="2421044535038393232">Continua editant</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} contrasenya en perill}other{{COUNT} contrasenyes en perill}}</translation> <translation id="2434405374328098816">Ja has desat una contrasenya per a <ph name="USERNAME" /> a <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Mostra la contrasenya</translation> <translation id="2451654228769116489">Fixa la pestanya</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">Comprova la connexió i torna a provar d'iniciar la sessió.</translation> <translation id="2637313651144986786">Cerca pestanyes</translation> <translation id="2647269890314209800">Galetes en ús</translation> +<translation id="2648721026697078500">No moguis mai</translation> <translation id="2648803196158606475">Suprimeix els elements llegits</translation> <translation id="2653659639078652383">Envia</translation> <translation id="2664621323652615289">Atura</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">més</translation> <translation id="3311748811247479259">Desactivat</translation> <translation id="3324193307694657476">Adreça 2</translation> +<translation id="3328459813621383194">Mou les pestanyes inactives</translation> <translation id="3328801116991980348">Informació del lloc web</translation> <translation id="3371831930909698441">El Traductor està disponible. Tens opcions a la part inferior de la pantalla</translation> <translation id="3377063233124932127">Ara, les adreces d'interès, les contrasenyes i altres dades desades es troben a la part superior.</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">Revisa les teves dades sincronitzades</translation> <translation id="4536418791685807335">Prova d'iniciar la sessió de nou.</translation> <translation id="4540780316273593836">S'ha produït un error</translation> +<translation id="4550040941166547650">Només en aquest dispositiu</translation> <translation id="457292989631956153">{COUNT,plural, =1{Vols tancar {COUNT} pestanya inactiva?}other{Vols tancar {COUNT} pestanyes inactives?}}</translation> <translation id="457386861538956877">Més...</translation> <translation id="4587235830039045480">Desa la contrasenya al teu Compte de Google</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Adreça d'interès afegida a {title}}other{Adreces d'interès afegides a {title}}}</translation> <translation id="6196207969502475924">Cerca per veu</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Tanca {COUNT} pestanya}other{Tanca {COUNT} pestanyes}}</translation> +<translation id="6210079381482819663">Les pestanyes que no s'utilitzen durant <ph name="THRESHOLD" /> dies o més es mouen aquí. Pots canviar aquesta opció en qualsevol moment a la <ph name="BEGIN_LINK" />configuració<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Advertiments ignorats</translation> <translation id="6219550825416862075">Et donem la benvinguda de nou</translation> <translation id="6219688215832490856">No tradueixis mai</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Pestanyes recents</translation> <translation id="7006788746334555276">Configuració del contingut</translation> -<translation id="7014087399239955356">S'estan comprovant les contrasenyes…</translation> <translation id="7029809446516969842">Contrasenyes</translation> <translation id="7053983685419859001">Bloqueja</translation> <translation id="7062545763355031412">Accepta i canvia de compte</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">Replega la secció.</translation> <translation id="8065292699993359127">Obre els URL en mode d'incògnit a Chrome</translation> <translation id="806745655614357130">Mantén les meves dades separades</translation> +<translation id="8069394452933076548">Tria quan es mouran les pestanyes que no s'han utilitzat recentment a la secció de pestanyes inactives.</translation> <translation id="8073670137947914548">La baixada ha finalitzat</translation> <translation id="8073872304774253879">Millora les cerques i la navegació</translation> <translation id="8076492880354921740">Pestanyes</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">No es pot iniciar la sessió</translation> <translation id="9055960261314198756">La protecció millorada està desactivada</translation> <translation id="9057972802061533987">No es pot seguir. S'ha produït un error.</translation> +<translation id="9061495354530850708">Al teu Compte de Google</translation> <translation id="9065203028668620118">Edita</translation> <translation id="9068336935206019333">Obre en mode d'incògnit a Chrome</translation> <translation id="9079935439869366234">Marca-ho tot com a no llegit</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index b5ef342e..3a09a6e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Vždy překládat jazyk <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Přepnout na otevřené okno</translation> <translation id="1112015203684611006">Tisk se nezdařil.</translation> +<translation id="1118266931011974190">Po tomto počtu dní: <ph name="THRESHOLD" /></translation> <translation id="1125564390852150847">Vytvořit novou kartu</translation> <translation id="1126013303640354461">Platební metody a adresy z Google Pay nebudou šifrovány. Historie prohlížení v Chromu se nebude synchronizovat. Vaše šifrovaná data mohou číst pouze uživatelé, kteří mají vaši heslovou frázi. Heslová fráze se neodesílá do Googlu a není na Googlu uložena. Pokud heslovou frázi zapomenete nebo toto nastavení budete chtít změnit, budete muset synchronizaci resetovat. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Oddálit</translation> <translation id="2230173723195178503">Webová stránka byla načtena</translation> <translation id="2239626343334228536">Mazání údajů o prohlížení...</translation> +<translation id="22508856139286506">Zavřená upozornění (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Nabídka → Historie</translation> <translation id="2256933947031277845">Vaše organizace umožňuje pouze přihlášení pomocí určitých účtů.</translation> <translation id="225943865679747347">Kód chyby: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Nad klávesnicí je k dispozici {count} uložená adresa.}few{Nad klávesnicí jsou k dispozici {count} uložené adresy.}many{Nad klávesnicí je k dispozici {count} uložené adresy.}other{Nad klávesnicí je k dispozici {count} uložených adres.}}</translation> <translation id="2421004566762153674">Blokování souborů cookie třetích stran</translation> <translation id="2421044535038393232">Pokračovat v úpravách</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} prolomené heslo}few{{COUNT} prolomená hesla}many{{COUNT} prolomeného hesla}other{{COUNT} prolomených hesel}}</translation> <translation id="2434405374328098816">Heslo pro uživatelské jméno „<ph name="USERNAME" />“ už jste na webu <ph name="WEBSITE" /> uložili</translation> <translation id="2435457462613246316">Zobrazit heslo</translation> <translation id="2451654228769116489">Připnout kartu</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Zkontrolujte připojení a zkuste se přihlásit znovu.</translation> <translation id="2637313651144986786">Hledat karty…</translation> <translation id="2647269890314209800">Používané soubory cookie</translation> +<translation id="2648721026697078500">Nikdy nepřesouvat</translation> <translation id="2648803196158606475">Smazat přečtené</translation> <translation id="2653659639078652383">Odeslat</translation> <translation id="2664621323652615289">Ukončit</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">více</translation> <translation id="3311748811247479259">Vypnuto</translation> <translation id="3324193307694657476">Druhý řádek adresy</translation> +<translation id="3328459813621383194">Přesunout neaktivní karty</translation> <translation id="3328801116991980348">Informace o stránkách</translation> <translation id="3371831930909698441">Je k dispozici Překladač. Možnosti jsou k dispozici ve spodní části obrazovky.</translation> <translation id="3377063233124932127">Uložené záložky, hesla a další položky teď najdete nahoře.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Zkontrolovat synchronizovaná data</translation> <translation id="4536418791685807335">Zkuste se přihlásit znovu.</translation> <translation id="4540780316273593836">Něco se pokazilo</translation> +<translation id="4550040941166547650">Pouze na tomto zařízení</translation> <translation id="457292989631956153">{COUNT,plural, =1{Zavřít {COUNT} neaktivní kartu?}few{Zavřít {COUNT} neaktivní karty?}many{Zavřít {COUNT} neaktivní karty?}other{Zavřít {COUNT} neaktivních karet?}}</translation> <translation id="457386861538956877">Další...</translation> <translation id="4587235830039045480">Uložte si heslo do účtu Google</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Záložka přidána do složky {title}}few{Záložka přidána do složky {title}}many{Záložka přidána do složky {title}}other{Záložka přidána do složky {title}}}</translation> <translation id="6196207969502475924">Hlasové vyhledávání</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Zavřít {COUNT} kartu}few{Zavřít {COUNT} karty}many{Zavřít {COUNT} karty}other{Zavřít {COUNT} karet}}</translation> +<translation id="6210079381482819663">Sem se přesouvají karty, které <ph name="THRESHOLD" /> nebo déle nebyly použity. Možnosti této funkce můžete v <ph name="BEGIN_LINK" />nastavení<ph name="END_LINK" /> kdykoli změnit.</translation> <translation id="6213567400989743524">Zavřená upozornění</translation> <translation id="6219550825416862075">Vítejte zpět</translation> <translation id="6219688215832490856">Nikdy nepřekládat</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nedávno použité karty</translation> <translation id="7006788746334555276">Nastavení obsahu</translation> -<translation id="7014087399239955356">Kontrola hesel…</translation> <translation id="7029809446516969842">Hesla</translation> <translation id="7053983685419859001">Blokovat</translation> <translation id="7062545763355031412">Přijmout a přepnout účet</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Sbalí sekci.</translation> <translation id="8065292699993359127">Otevírat adresy URL v Chromu v anonymním režimu</translation> <translation id="806745655614357130">Uchovat má data samostatně.</translation> +<translation id="8069394452933076548">Zvolte, kdy se karty, které v poslední době nebyly použity, přesunou do sekce neaktivních karet.</translation> <translation id="8073670137947914548">Stahování bylo dokončeno</translation> <translation id="8073872304774253879">Vylepšit vyhledávání a procházení</translation> <translation id="8076492880354921740">Karty</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Přihlášení se nezdařilo</translation> <translation id="9055960261314198756">Vylepšená ochrana je vypnutá</translation> <translation id="9057972802061533987">Sledování nelze zapnout. Něco se pokazilo.</translation> +<translation id="9061495354530850708">Ve vašem účtu Google</translation> <translation id="9065203028668620118">Upravit</translation> <translation id="9068336935206019333">Otevřít v Chromu v anonymním režimu</translation> <translation id="9079935439869366234">Označit vše jako nepřečtené</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb index e2a813ef..4324273 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Cyfieithu <ph name="LANGUAGE" /> bob amser</translation> <translation id="110724200315609752">Newid i ffenestr sydd ar Agor</translation> <translation id="1112015203684611006">Wedi methu ag argraffu.</translation> +<translation id="1118266931011974190">Ar ôl <ph name="THRESHOLD" /> o ddiwrnodau</translation> <translation id="1125564390852150847">Creu tab newydd.</translation> <translation id="1126013303640354461">Ni fydd dulliau talu a chyfeiriadau o Google Pay yn cael eu hamgryptio. Ni fydd hanes pori o Chrome yn cysoni. Dim ond rhywun sydd â'ch cyfrinymadrodd all ddarllen eich data sydd wedi'u hamgryptio. Nid yw'r cyfrinymadrodd yn cael ei anfon at Google na'i storio. Os byddwch yn anghofio'ch cyfrinymadrodd neu eisiau newid y gosodiad hwn, bydd angen i chi ailosod cysoni. <ph name="BEGIN_LINK" />Dysgu rhagor<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Pellhau</translation> <translation id="2230173723195178503">Mae tudalen we wedi'i llwytho</translation> <translation id="2239626343334228536">Wrthi'n clirio data pori...</translation> +<translation id="22508856139286506">Rhybuddion a Ddiystyrwyd (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Dewislen → Hanes</translation> <translation id="2256933947031277845">Mae eich sefydliad yn caniatáu i chi fewngofnodi gyda rhai cyfrifon yn unig.</translation> <translation id="225943865679747347">Cod gwall: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Mae {count} cyfeiriad sydd wedi'i gadw ar gael uwchben eich bysellfwrdd.}zero{Mae {count} cyfeiriad sydd wedi'u cadw ar gael uwchben eich bysellfwrdd.}two{Mae {count} gyfeiriad sydd wedi'u cadw ar gael uwchben eich bysellfwrdd.}few{Mae {count} chyfeiriad sydd wedi'u cadw ar gael uwchben eich bysellfwrdd.}many{Mae {count} chyfeiriad sydd wedi'u cadw ar gael uwchben eich bysellfwrdd.}other{Mae {count} cyfeiriad sydd wedi'u cadw ar gael uwchben eich bysellfwrdd.}}</translation> <translation id="2421004566762153674">Rhwystro cwcis trydydd parti</translation> <translation id="2421044535038393232">Parhau i olygu</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} Cyfrinair sydd wedi'i Ddarganfod}zero{{COUNT} Cyfrinair sydd wedi'u Darganfod}two{{COUNT} Gyfrinair sydd wedi'u Darganfod}few{{COUNT} Cyfrinair sydd wedi'u Darganfod}many{{COUNT} Cyfrinair sydd wedi'u Darganfod}other{{COUNT} Cyfrinair sydd wedi'u Darganfod}}</translation> <translation id="2434405374328098816">Rydych eisoes wedi cadw cyfrinair ar gyfer "<ph name="USERNAME" />" yn <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Dangos y cyfrinair</translation> <translation id="2451654228769116489">Pinio Tab</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Gwiriwch eich cysylltiad a rhowch gynnig arall ar fewngofnodi.</translation> <translation id="2637313651144986786">Chwilio Tabiau...</translation> <translation id="2647269890314209800">Cwcis sy'n cael eu defnyddio</translation> +<translation id="2648721026697078500">Peidio Byth â Symud</translation> <translation id="2648803196158606475">Clirio'r Rhestr Ddarllen</translation> <translation id="2653659639078652383">Danfon</translation> <translation id="2664621323652615289">Stopio</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">rhagor</translation> <translation id="3311748811247479259">Diffodd</translation> <translation id="3324193307694657476">Cyfeiriad 2</translation> +<translation id="3328459813621383194">Symud Tabiau Anweithredol</translation> <translation id="3328801116991980348">Gwybodaeth am y wefan</translation> <translation id="3371831930909698441">Mae cyfieithiad ar gael. Mae opsiynau ar gael yn agos at waelod y sgrîn.</translation> <translation id="3377063233124932127">Mae eich nodau tudalen, cyfrineiriau a rhagor bellach wedi'u cadw ar y brig.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Adolygwch eich data a gysonwyd</translation> <translation id="4536418791685807335">Rhowch gynnig arall ar fewngofnodi.</translation> <translation id="4540780316273593836">Aeth Rhywbeth o'i Le</translation> +<translation id="4550040941166547650">Ar y ddyfais hon yn unig</translation> <translation id="457292989631956153">{COUNT,plural, =1{Cau {COUNT} Tab Anweithredol?}zero{Cau {COUNT} Tab Anweithredol?}two{Cau {COUNT} Dab Anweithredol?}few{Cau {COUNT} Thab Anweithredol?}many{Cau {COUNT} Thab Anweithredol?}other{Cau {COUNT} Tab Anweithredol?}}</translation> <translation id="457386861538956877">Rhagor...</translation> <translation id="4587235830039045480">Cadw cyfrinair yn eich Cyfrif Google</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Wedi creu nod tudalen yn {title}}zero{Wedi creu nodau tudalen yn {title}}two{Wedi creu nodau tudalen yn {title}}few{Wedi creu nodau tudalen yn {title}}many{Wedi creu nodau tudalen yn {title}}other{Wedi creu nodau tudalen yn {title}}}</translation> <translation id="6196207969502475924">Chwilio â Llais</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Cau {COUNT} Tab}zero{Cau {COUNT} Tab}two{Cau {COUNT} Dab}few{Cau {COUNT} Thab}many{Cau {COUNT} Thab}other{Cau {COUNT} Tab}}</translation> +<translation id="6210079381482819663">Mae tabiau sydd heb eu defnyddio am <ph name="THRESHOLD" /> o ddiwrnodau neu fwy yn cael eu symud yma. Gallwch newid hyn unrhyw bryd yn y <ph name="BEGIN_LINK" />gosodiadau<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Rhybuddion a Ddiystyrwyd</translation> <translation id="6219550825416862075">Croeso'n Ôl</translation> <translation id="6219688215832490856">Peidio Byth â Chyfieithu</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Dysgu rhagor<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Tabiau Diweddar</translation> <translation id="7006788746334555276">Gosodiadau Cynnwys</translation> -<translation id="7014087399239955356">Wrthi'n Gwirio Cyfrineiriau...</translation> <translation id="7029809446516969842">Cyfrineiriau</translation> <translation id="7053983685419859001">Rhwystro</translation> <translation id="7062545763355031412">Derbyn a newid cyfrifon</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Yn crebachu'r adran.</translation> <translation id="8065292699993359127">Agor cyfeiriadau URL yn Chrome yn Anhysbys</translation> <translation id="806745655614357130">Cadw fy nata ar wahân</translation> +<translation id="8069394452933076548">Dewiswch pryd y bydd tabiau nad ydynt wedi'u defnyddio'n ddiweddar yn cael eu symud i'r adran tabiau anweithredol.</translation> <translation id="8073670137947914548">Wedi gorffen lawrlwytho</translation> <translation id="8073872304774253879">Gwneud Chwiliadau a Phori yn well</translation> <translation id="8076492880354921740">Tabiau</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Methu â mewngofnodi</translation> <translation id="9055960261314198756">Mae Gwell Amddiffyniad wedi'i ddiffodd</translation> <translation id="9057972802061533987">Methu â dilyn. Aeth rhywbeth o'i le.</translation> +<translation id="9061495354530850708">Yn eich Cyfrif Google</translation> <translation id="9065203028668620118">Golygu</translation> <translation id="9068336935206019333">Agor yn y modd Anhysbys Chrome</translation> <translation id="9079935439869366234">Marcio pob un fel heb ei ddarllen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 9d9e1d4..9f26125a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">Zoom ud</translation> <translation id="2230173723195178503">Websiden er indlæst</translation> <translation id="2239626343334228536">Browserdata ryddes...</translation> +<translation id="22508856139286506">Afviste advarsler (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menu → Historik</translation> <translation id="2256933947031277845">Din organisation tillader kun login med bestemte konti.</translation> <translation id="225943865679747347">Fejlkode: <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} gemt adresse er tilgængelig over dit tastatur.}one{{count} gemt adresse er tilgængelig over dit tastatur.}other{{count} gemte adresser er tilgængelige over dit tastatur.}}</translation> <translation id="2421004566762153674">Blokering af cookies fra tredjeparter</translation> <translation id="2421044535038393232">Rediger videre</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} kompromitteret adgangskode}one{{COUNT} kompromitteret adgangskode}other{{COUNT} kompromitterede adgangskoder}}</translation> <translation id="2434405374328098816">Du har allerede gemt en adgangskode for "<ph name="USERNAME" />" på <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Vis adgangskode</translation> <translation id="2451654228769116489">Fastgør fane</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Seneste faner</translation> <translation id="7006788746334555276">Indstillinger for indhold</translation> -<translation id="7014087399239955356">Tjekker adgangskoder...</translation> <translation id="7029809446516969842">Adgangskoder</translation> <translation id="7053983685419859001">Bloker</translation> <translation id="7062545763355031412">Acceptér, og skift konto</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index aa3e1a6..3d05d03 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314"><ph name="LANGUAGE" /> immer übersetzen</translation> <translation id="110724200315609752">Zu offenem Fenster wechseln</translation> <translation id="1112015203684611006">Fehler beim Drucken.</translation> +<translation id="1118266931011974190">Nach <ph name="THRESHOLD" /> Tagen</translation> <translation id="1125564390852150847">Neuen Tab erstellen.</translation> <translation id="1126013303640354461">Zahlungsmethoden und Adressen bei Google Pay werden nicht verschlüsselt. Der Chrome-Browserverlauf wird nicht synchronisiert. Nur Personen, die deine Passphrase kennen, können deine verschlüsselten Daten lesen. Die Passphrase wird nicht an Google gesendet oder von Google gespeichert. Falls du sie vergessen hast oder diese Einstellung ändern möchtest, musst du die Synchronisierung zurücksetzen. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} gespeicherte Adresse oben auf der Tastatur verfügbar.}other{{count} gespeicherte Adressen oben auf der Tastatur verfügbar.}}</translation> <translation id="2421004566762153674">Drittanbieter-Cookies werden blockiert</translation> <translation id="2421044535038393232">Weiter bearbeiten</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} gehacktes Passwort}other{{COUNT} gehackte Passwörter}}</translation> <translation id="2434405374328098816">Du hast für „<ph name="USERNAME" />“ schon ein Passwort bei <ph name="WEBSITE" /> gespeichert</translation> <translation id="2435457462613246316">Passwort anzeigen</translation> <translation id="2451654228769116489">Tab anpinnen</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">Prüfe deine Verbindung und versuche es noch einmal.</translation> <translation id="2637313651144986786">Tabs suchen…</translation> <translation id="2647269890314209800">Verwendete Cookies</translation> +<translation id="2648721026697078500">Nie verschieben</translation> <translation id="2648803196158606475">Gelesene löschen</translation> <translation id="2653659639078652383">Senden</translation> <translation id="2664621323652615289">Beenden</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">mehr</translation> <translation id="3311748811247479259">Aus</translation> <translation id="3324193307694657476">Adresse 2</translation> +<translation id="3328459813621383194">Inaktive Tabs verschieben</translation> <translation id="3328801116991980348">Websiteinformationen</translation> <translation id="3371831930909698441">Übersetzer ist verfügbar. Optionen sind unten auf dem Bildschirm verfügbar.</translation> <translation id="3377063233124932127">Deine gespeicherten Lesezeichen, Passwörter und mehr werden jetzt oben angezeigt.</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">Synchronisierte Daten prüfen</translation> <translation id="4536418791685807335">Melde dich noch einmal an.</translation> <translation id="4540780316273593836">Ein Problem ist aufgetreten</translation> +<translation id="4550040941166547650">Nur auf diesem Gerät</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} inaktiven Tab schließen?}other{{COUNT} inaktive Tabs schließen?}}</translation> <translation id="457386861538956877">Mehr...</translation> <translation id="4587235830039045480">Passwort in meinem Google-Konto speichern</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Lesezeichen in „{title}“ gespeichert}other{Lesezeichen in „{title}“ gespeichert}}</translation> <translation id="6196207969502475924">Sprachsuche</translation> <translation id="6202364442240589072">{COUNT,plural, =1{{COUNT} Tab schließen}other{{COUNT} Tabs schließen}}</translation> +<translation id="6210079381482819663">Tabs, die <ph name="THRESHOLD" /> Tage oder länger nicht verwendet wurden, werden hierhin verschoben. Du kannst dies jederzeit <ph name="BEGIN_LINK" />in den Einstellungen<ph name="END_LINK" /> ändern.</translation> <translation id="6213567400989743524">Geschlossene Warnungen</translation> <translation id="6219550825416862075">Willkommen zurück</translation> <translation id="6219688215832490856">Nie übersetzen</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Zuletzt geöffnete Tabs</translation> <translation id="7006788746334555276">Inhaltseinstellungen</translation> -<translation id="7014087399239955356">Passwörter werden geprüft…</translation> <translation id="7029809446516969842">Passwörter</translation> <translation id="7053983685419859001">Blockieren</translation> <translation id="7062545763355031412">Akzeptieren und Konto wechseln</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">Abschnitt minimieren</translation> <translation id="8065292699993359127">URLs in Chrome im Inkognitomodus öffnen</translation> <translation id="806745655614357130">Daten getrennt halten</translation> +<translation id="8069394452933076548">Lege fest, wann Tabs, die länger nicht verwendet wurden, in den Bereich „Inaktive Tabs“ verschoben werden sollen.</translation> <translation id="8073670137947914548">Download abgeschlossen</translation> <translation id="8073872304774253879">Suchanfragen und das Surfen verbessern</translation> <translation id="8076492880354921740">Tabs</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">Anmeldefehler</translation> <translation id="9055960261314198756">Erweiterter Schutz ist deaktiviert</translation> <translation id="9057972802061533987">Folgen nicht möglich. Ein Fehler ist aufgetreten.</translation> +<translation id="9061495354530850708">Im Google-Konto</translation> <translation id="9065203028668620118">Bearbeiten</translation> <translation id="9068336935206019333">Im Inkognitomodus von Chrome öffnen</translation> <translation id="9079935439869366234">Alle als ungelesen markieren</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 05f9a692..6c7697f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Διατίθεται {count} αποθηκευμένη διεύθυνση πάνω από το πληκτρολόγιο.}other{Διατίθενται {count} αποθηκευμένες διευθύνσεις πάνω από το πληκτρολόγιο.}}</translation> <translation id="2421004566762153674">Αποκλεισμός cookie τρίτου μέρους</translation> <translation id="2421044535038393232">Συνέχιση επεξεργασίας</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} παραβιασμένος κωδικός πρόσβασης}other{{COUNT} παραβιασμένοι κωδικοί πρόσβασης}}</translation> <translation id="2434405374328098816">Έχετε ήδη αποθηκεύσει έναν κωδικό πρόσβασης για τον χρήστη "<ph name="USERNAME" />" στον ιστότοπο <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Εμφάνιση κωδικού πρόσβασης</translation> <translation id="2451654228769116489">Καρφίτσωμα καρτέλας</translation> @@ -925,7 +924,6 @@ <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Πρόσφατες καρτέλες</translation> <translation id="7006788746334555276">Ρυθμίσεις περιεχομένου</translation> -<translation id="7014087399239955356">Έλεγχος κωδικών πρόσβασης…</translation> <translation id="7029809446516969842">Κωδ. πρόσβασης</translation> <translation id="7053983685419859001">Αποκλεισμός</translation> <translation id="7062545763355031412">Αποδοχή και εναλλαγή λογαριασμών</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb index a8f0d53..b687e4f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Always translate <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Switch to open window</translation> <translation id="1112015203684611006">Printing failed.</translation> +<translation id="1118266931011974190">After <ph name="THRESHOLD" /> days</translation> <translation id="1125564390852150847">Create new tab.</translation> <translation id="1126013303640354461">Payment methods and addresses from Google Pay won’t be encrypted. Browsing history from Chrome won’t sync. Only someone with your passphrase can read your encrypted data. The passphrase is not sent to or stored by Google. If you forget your passphrase or want to change this setting, you’ll need to reset sync. <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} saved address available above your keyboard.}other{{count} saved addresses available above your keyboard.}}</translation> <translation id="2421004566762153674">Blocking third-party cookies</translation> <translation id="2421044535038393232">Keep editing</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} compromised Password}other{{COUNT} compromised passwords}}</translation> <translation id="2434405374328098816">You already saved a password for '<ph name="USERNAME" />' at <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Show password</translation> <translation id="2451654228769116489">Pin tab</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">Check your connection and try signing in again.</translation> <translation id="2637313651144986786">Search Tabs…</translation> <translation id="2647269890314209800">Cookies in Use</translation> +<translation id="2648721026697078500">Never Move</translation> <translation id="2648803196158606475">Delete Read</translation> <translation id="2653659639078652383">Submit</translation> <translation id="2664621323652615289">Stop</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">more</translation> <translation id="3311748811247479259">Off</translation> <translation id="3324193307694657476">Address 2</translation> +<translation id="3328459813621383194">Move inactive tabs</translation> <translation id="3328801116991980348">Site information</translation> <translation id="3371831930909698441">Translate is available. Options available near bottom of the screen.</translation> <translation id="3377063233124932127">Now your saved bookmarks, passwords and more are at the top.</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">Review your synced data</translation> <translation id="4536418791685807335">Try signing in again.</translation> <translation id="4540780316273593836">Something went wrong</translation> +<translation id="4550040941166547650">Only on this device</translation> <translation id="457292989631956153">{COUNT,plural, =1{Close {COUNT} inactive tab?}other{Close {COUNT} inactive tabs?}}</translation> <translation id="457386861538956877">More...</translation> <translation id="4587235830039045480">Save password in your Google Account</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Bookmarked to {title}}other{Bookmarked to {title}}}</translation> <translation id="6196207969502475924">Voice Search</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Close {COUNT} tab}other{Close {COUNT} tabs}}</translation> +<translation id="6210079381482819663">Tabs not used for <ph name="THRESHOLD" /> days or more are moved here. You can change this at any time in <ph name="BEGIN_LINK" />settings<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Dismissed warnings</translation> <translation id="6219550825416862075">Welcome back</translation> <translation id="6219688215832490856">Never translate</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Recent tabs</translation> <translation id="7006788746334555276">Content Settings</translation> -<translation id="7014087399239955356">Checking passwords…</translation> <translation id="7029809446516969842">Passwords</translation> <translation id="7053983685419859001">Block</translation> <translation id="7062545763355031412">Accept and switch accounts</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">Collapses the section.</translation> <translation id="8065292699993359127">Open URLs in Chrome in Incognito</translation> <translation id="806745655614357130">Keep my data separate</translation> +<translation id="8069394452933076548">Choose when tabs that haven't been used recently are moved to the inactive tabs section.</translation> <translation id="8073670137947914548">Download finished</translation> <translation id="8073872304774253879">Make searches and browsing better</translation> <translation id="8076492880354921740">Tabs</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">Cannot Sign In</translation> <translation id="9055960261314198756">Enhanced protection is off</translation> <translation id="9057972802061533987">Can't follow. Something went wrong.</translation> +<translation id="9061495354530850708">In your Google Account</translation> <translation id="9065203028668620118">Edit</translation> <translation id="9068336935206019333">Open in Chrome Incognito</translation> <translation id="9079935439869366234">Mark All Unread</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 fc17641..b37063d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Hay {count} dirección guardada disponible sobre el teclado.}other{Hay {count} direcciones guardadas disponibles sobre el teclado.}}</translation> <translation id="2421004566762153674">Se están bloqueando las cookies de terceros</translation> <translation id="2421044535038393232">Seguir editando</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} contraseña hackeada}other{{COUNT} contraseñas hackeadas}}</translation> <translation id="2434405374328098816">Ya guardaste una contraseña para "<ph name="USERNAME" />" en <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Mostrar contraseña</translation> <translation id="2451654228769116489">Fijar pestaña</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Pestañas recientes</translation> <translation id="7006788746334555276">Configuración de contenido</translation> -<translation id="7014087399239955356">Revisando contraseñas…</translation> <translation id="7029809446516969842">Contraseñas</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7062545763355031412">Aceptar y cambiar de cuenta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 8d058ef2..8c29829 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Traducir siempre del <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Cambiar a ventana abierta</translation> <translation id="1112015203684611006">Error al imprimir.</translation> +<translation id="1118266931011974190">Después de <ph name="THRESHOLD" /> días</translation> <translation id="1125564390852150847">Crear nueva pestaña.</translation> <translation id="1126013303640354461">Los métodos de pago y las direcciones de Google Pay no se cifrarán. El historial de navegación de Chrome no se sincronizará. Solo las personas que tengan tu frase de contraseña podrán leer tus datos cifrados. La frase de contraseña no se enviará a Google y Google tampoco la almacenará. Si la olvidas o quieres cambiar este ajuste, tendrás que restablecer la sincronización. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Reducir</translation> <translation id="2230173723195178503">Página web cargada</translation> <translation id="2239626343334228536">Borrando datos de navegación...</translation> +<translation id="22508856139286506">Advertencias cerradas (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menú → Historial</translation> <translation id="2256933947031277845">Tu organización solo te permite iniciar sesión con determinadas cuentas.</translation> <translation id="225943865679747347">Código de error: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} dirección guardada disponible encima del teclado.}other{{count} direcciones guardadas disponibles encima del teclado.}}</translation> <translation id="2421004566762153674">Bloquear cookies de terceros</translation> <translation id="2421044535038393232">Seguir editando</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} contraseña vulnerada}other{{COUNT} contraseñas vulneradas}}</translation> <translation id="2434405374328098816">Ya has guardado una contraseña para <ph name="USERNAME" /> en <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Mostrar contraseña</translation> <translation id="2451654228769116489">Fijar pestaña</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Comprueba tu conexión y prueba a iniciar sesión de nuevo.</translation> <translation id="2637313651144986786">Buscar en pestañas...</translation> <translation id="2647269890314209800">Cookies en uso</translation> +<translation id="2648721026697078500">No mover nunca</translation> <translation id="2648803196158606475">Eliminar entradas leídas</translation> <translation id="2653659639078652383">Enviar</translation> <translation id="2664621323652615289">Detener</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">más</translation> <translation id="3311748811247479259">Desactivada</translation> <translation id="3324193307694657476">Dirección 2</translation> +<translation id="3328459813621383194">Mover pestañas inactivas</translation> <translation id="3328801116991980348">Información del sitio</translation> <translation id="3371831930909698441">El Traductor está disponible. Opciones disponibles cerca de la parte inferior de la pantalla.</translation> <translation id="3377063233124932127">Ahora tus marcadores, contraseñas y otros elementos guardados se muestran en la parte superior.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Revisar los datos sincronizados</translation> <translation id="4536418791685807335">Prueba a iniciar sesión de nuevo.</translation> <translation id="4540780316273593836">Se ha producido un error</translation> +<translation id="4550040941166547650">Solo en este dispositivo</translation> <translation id="457292989631956153">{COUNT,plural, =1{¿Cerrar {COUNT} pestaña inactiva?}other{¿Cerrar {COUNT} pestañas inactivas?}}</translation> <translation id="457386861538956877">Más...</translation> <translation id="4587235830039045480">Guarda la contraseña en tu cuenta de Google</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Marcador añadido a {title}}other{Marcadores añadidos a {title}}}</translation> <translation id="6196207969502475924">Búsqueda por voz</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Cerrar {COUNT} pestaña}other{Cerrar {COUNT} pestañas}}</translation> +<translation id="6210079381482819663">Las pestañas que no se usen durante <ph name="THRESHOLD" /> días o más se moverán aquí. Puedes cambiar esta opción en cualquier momento desde la <ph name="BEGIN_LINK" />configuración<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Advertencias cerradas</translation> <translation id="6219550825416862075">Hola de nuevo</translation> <translation id="6219688215832490856">No traducir nunca</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Pestañas recientes</translation> <translation id="7006788746334555276">Configuración de contenido</translation> -<translation id="7014087399239955356">Comprobando contraseñas...</translation> <translation id="7029809446516969842">Contraseñas</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7062545763355031412">Aceptar y cambiar de cuenta</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Oculta la sección.</translation> <translation id="8065292699993359127">Abrir URLs en Chrome en incógnito</translation> <translation id="806745655614357130">Mantener mis datos separados</translation> +<translation id="8069394452933076548">Elige cuándo se moverán las pestañas que no se han usado recientemente a la sección de pestañas inactivas.</translation> <translation id="8073670137947914548">Descarga finalizada</translation> <translation id="8073872304774253879">Mejorar las búsquedas y la navegación</translation> <translation id="8076492880354921740">Pestañas</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Error al iniciar sesión</translation> <translation id="9055960261314198756">La protección mejorada está desactivada</translation> <translation id="9057972802061533987">No se puede seguir. Algo ha fallado.</translation> +<translation id="9061495354530850708">En tu cuenta de Google</translation> <translation id="9065203028668620118">Editar</translation> <translation id="9068336935206019333">Abrir en modo Incógnito de Chrome</translation> <translation id="9079935439869366234">Marcar todo como no leído</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 3e4a7c2..12bb7bd8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} salvestatud aadress on klaviatuuri kohal saadaval.}other{{count} salvestatud aadressi on klaviatuuri kohal saadaval.}}</translation> <translation id="2421004566762153674">Kolmanda osapoole küpsisefailide blokeerimine</translation> <translation id="2421044535038393232">Jätka töötlemist</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ohustatud parool}other{{COUNT} ohustatud parooli}}</translation> <translation id="2434405374328098816">Olete kasutaja „<ph name="USERNAME" />“ jaoks parooli saidil <ph name="WEBSITE" /> juba salvestanud.</translation> <translation id="2435457462613246316">Kuva parool</translation> <translation id="2451654228769116489">Kinnita vaheleht</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Hiljutised vahelehed</translation> <translation id="7006788746334555276">Sisu seaded</translation> -<translation id="7014087399239955356">Paroolide kontrollimine …</translation> <translation id="7029809446516969842">Paroolid</translation> <translation id="7053983685419859001">Blokeeri</translation> <translation id="7062545763355031412">Nõustu ja vaheta kontosid</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb index 1d8215e7..9b8303c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">Txikitu</translation> <translation id="2230173723195178503">Kargatu da webgunea</translation> <translation id="2239626343334228536">Arakatze-datuak garbitzen…</translation> +<translation id="22508856139286506">Baztertutako abisuak (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menua → Historia</translation> <translation id="2256933947031277845">Erakundeak kontu jakin batzuekin soilik uzten du saioa hasten.</translation> <translation id="225943865679747347">Errore-kodea: <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Gordetako helbide {count} dago erabilgarri teklatuaren gainean.}other{Gordetako {count} helbide daude erabilgarri teklatuaren gainean.}}</translation> <translation id="2421004566762153674">Hirugarrenen cookieak blokeatzea</translation> <translation id="2421044535038393232">Jarraitu editatzen</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} pasahitz dago arriskuan}other{{COUNT} pasahitz daude arriskuan}}</translation> <translation id="2434405374328098816">Gordeta daukazu jada "<ph name="USERNAME" />" erabiltzaile-izenari eta <ph name="WEBSITE" /> webguneari dagokien pasahitza</translation> <translation id="2435457462613246316">Erakutsi pasahitza</translation> <translation id="2451654228769116489">Ainguratu fitxa</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />Lortu informazio gehiago<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Azken fitxak</translation> <translation id="7006788746334555276">Edukiaren ezarpenak</translation> -<translation id="7014087399239955356">Pasahitzak egiaztatzen…</translation> <translation id="7029809446516969842">Pasahitzak</translation> <translation id="7053983685419859001">Blokeatu</translation> <translation id="7062545763355031412">Onartu eta aldatu kontua</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index 5d35f47..d1560bb6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} نشانی ذخیرهشده در بالای صفحهکلید موجود است.}one{{count} نشانی ذخیرهشده در بالای صفحهکلید موجود است.}other{{count} نشانی ذخیرهشده در بالای صفحهکلید موجود است.}}</translation> <translation id="2421004566762153674">کوکیهای شخص ثالث را مسدود میکند</translation> <translation id="2421044535038393232">ادامه ویرایش</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} گذرواژه لورفته}one{{COUNT} گذرواژه لورفته}other{{COUNT} گذرواژه لورفته}}</translation> <translation id="2434405374328098816">قبلاً گذرواژهای برای «<ph name="USERNAME" />» در <ph name="WEBSITE" /> ذخیره کردهاید</translation> <translation id="2435457462613246316">نمایش گذرواژه</translation> <translation id="2451654228769116489">سنجاق کردن برگه</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> <translation id="7004499039102548441">برگههای جدید</translation> <translation id="7006788746334555276">تنظیمات محتوا</translation> -<translation id="7014087399239955356">درحال بررسی گذرواژهها…</translation> <translation id="7029809446516969842">گذرواژهها</translation> <translation id="7053983685419859001">مسدود کردن</translation> <translation id="7062545763355031412">پذیرش و تغییر حسابها</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index 74d607b..9c305677 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Käännä <ph name="LANGUAGE" /> aina</translation> <translation id="110724200315609752">Vaihda avoimeen ikkunaan</translation> <translation id="1112015203684611006">Tulostus epäonnistui</translation> +<translation id="1118266931011974190"><ph name="THRESHOLD" /> päivän päästä</translation> <translation id="1125564390852150847">Luo uusi välilehti.</translation> <translation id="1126013303640354461">Google Payn maksutapoja ja osoitteita ei salata. Chromen selaushistoriaa ei synkronoida. Salatun datasi voi lukea vain tunnuslauseen avulla. Tunnuslausetta ei lähetetä Googlelle eikä Google tallenna sitä. Jos unohdat tunnuslauseesi tai haluat muuttaa asetusta, synkronointi on nollattava. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Loitonna</translation> <translation id="2230173723195178503">Verkkosivu ladattiin.</translation> <translation id="2239626343334228536">Selaustietoja poistetaan…</translation> +<translation id="22508856139286506">Ohitetut varoitukset (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Valikko → Historia</translation> <translation id="2256933947031277845">Organisaatiosi sallii sinun kirjautua sisään vain tietyillä tileillä.</translation> <translation id="225943865679747347">Virhekoodi: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Näppäimistön yläpuolella on saatavilla {count} tallennettu osoite.}other{Näppäimistön yläpuolella on saatavilla {count} tallennettua osoitetta.}}</translation> <translation id="2421004566762153674">Kolmannen osapuolen evästeet estetään</translation> <translation id="2421044535038393232">Jatka muokkausta</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} vaarantunut salasana}other{{COUNT} vaarantunutta salasanaa}}</translation> <translation id="2434405374328098816">Olet jo tallentanut salasanan (käyttäjätunnus: <ph name="USERNAME" />) täällä: <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Näytä salasana</translation> <translation id="2451654228769116489">Kiinnitä välilehti</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Tarkista yhteys ja yritä kirjautumista uudelleen.</translation> <translation id="2637313651144986786">Hae välilehtiä…</translation> <translation id="2647269890314209800">Käytössä olevat evästeet</translation> +<translation id="2648721026697078500">Älä koskaan siirrä</translation> <translation id="2648803196158606475">Poista luetut</translation> <translation id="2653659639078652383">Lähetä</translation> <translation id="2664621323652615289">Lopeta</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">lisää</translation> <translation id="3311748811247479259">Pois päältä</translation> <translation id="3324193307694657476">Osoite 2</translation> +<translation id="3328459813621383194">Siirrä ei-aktiiviset välilehdet</translation> <translation id="3328801116991980348">Tietoja sivustosta</translation> <translation id="3371831930909698441">Kääntäjä on käytössä. Asetukset löytyvät näytön alalaidasta.</translation> <translation id="3377063233124932127">Tallennetut kirjanmerkit, salasanat ja muut tiedot ovat nyt ylhäällä.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Tarkista synkronoitu datasi</translation> <translation id="4536418791685807335">Yritä kirjautua sisään uudelleen.</translation> <translation id="4540780316273593836">Jotain meni pieleen</translation> +<translation id="4550040941166547650">Vain tällä laitteella</translation> <translation id="457292989631956153">{COUNT,plural, =1{Suljetaanko {COUNT} ei-aktiivinen välilehti?}other{Suljetaanko {COUNT} ei-aktiivista välilehteä?}}</translation> <translation id="457386861538956877">Lisää...</translation> <translation id="4587235830039045480">Tallenna salasana Google-tilille</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Lisätty kirjanmerkiksi tänne: {title}}other{Lisätty kirjanmerkiksi tänne: {title}}}</translation> <translation id="6196207969502475924">Puhehaku</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Sulje {COUNT} välilehti}other{Sulje {COUNT} välilehteä}}</translation> +<translation id="6210079381482819663">Välilehdet, joita ei ole käytetty vähintään <ph name="THRESHOLD" /> päivään, siirretään tänne. Voit muuttaa tätä milloin tahansa <ph name="BEGIN_LINK" />asetuksista<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Ohitetut varoitukset</translation> <translation id="6219550825416862075">Tervetuloa takaisin</translation> <translation id="6219688215832490856">Älä käännä koskaan</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Hiljattain suljetut välilehdet</translation> <translation id="7006788746334555276">Sisältöasetukset</translation> -<translation id="7014087399239955356">Tarkistetaan salasanoja…</translation> <translation id="7029809446516969842">Salasanat</translation> <translation id="7053983685419859001">Estä</translation> <translation id="7062545763355031412">Hyväksy ja vaihda tiliä</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Tiivistää osion.</translation> <translation id="8065292699993359127">Avaa URL-osoitteet Chromen incognito-tilassa</translation> <translation id="806745655614357130">Pidä tiedot erillään</translation> +<translation id="8069394452933076548">Valitse, milloin viime aikoina käyttämättömät välilehdet siirretään ei-aktiivisiin välilehtiin.</translation> <translation id="8073670137947914548">Lataus valmis</translation> <translation id="8073872304774253879">Paranna hakuja ja selausta</translation> <translation id="8076492880354921740">Välilehdet</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Kirjaut. epäonnistui</translation> <translation id="9055960261314198756">Parannettu suojaus on pois päältä</translation> <translation id="9057972802061533987">Ei voi seurata. Jotain meni pieleen.</translation> +<translation id="9061495354530850708">Google-tililläsi</translation> <translation id="9065203028668620118">Muokkaa</translation> <translation id="9068336935206019333">Avaa Chromen incognito-tilassa</translation> <translation id="9079935439869366234">Merkitse kaikki lukemattomiksi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index f2effe5..4cea593 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} na-save na address ang available sa itaas ng iyong keyboard.}one{{count} na-save na address ang available sa itaas ng iyong keyboard.}other{{count} na na-save na address ang available sa itaas ng iyong keyboard.}}</translation> <translation id="2421004566762153674">Pag-block sa third-party na cookies</translation> <translation id="2421044535038393232">Magpatuloy sa Pag-edit</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} Nakompromisong Password}one{{COUNT} Nakompromisong Password}other{{COUNT} na Nakompromisong Password}}</translation> <translation id="2434405374328098816">May na-save ka nang password para sa "<ph name="USERNAME" />" sa <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Ipakita ang password</translation> <translation id="2451654228769116489">I-pin ang Tab</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Mga Kamakailang Tab</translation> <translation id="7006788746334555276">Mga Setting ng Nilalaman</translation> -<translation id="7014087399239955356">Sinusuri ang Mga Password...</translation> <translation id="7029809446516969842">Mga Password</translation> <translation id="7053983685419859001">I-block</translation> <translation id="7062545763355031412">Tanggapin at lumipat ng account</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index 58e7517..89b81508 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Toujours traduire les pages rédigées en <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Retourner à la fenêtre ouverte</translation> <translation id="1112015203684611006">Échec impr.</translation> +<translation id="1118266931011974190">Après <ph name="THRESHOLD" /> jours</translation> <translation id="1125564390852150847">Créer un onglet.</translation> <translation id="1126013303640354461">Les modes de paiement et les adresses de Google Pay ne seront pas chiffrés. L'historique de navigation de Chrome ne se synchronisera pas. Seule une personne connaissant votre phrase de passe peut lire vos données chiffrées. La phrase de passe n'est ni envoyée à Google, ni stockée par Google. Si vous oubliez votre phrase de passe ou si vous souhaitez la modifier, vous devrez réinitialiser la synchronisation. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Zoom arrière</translation> <translation id="2230173723195178503">Page Web chargée</translation> <translation id="2239626343334228536">Effacement des données de navigation en cours…</translation> +<translation id="22508856139286506">Avertissements ignorés (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menu → Historique</translation> <translation id="2256933947031277845">Votre organisation vous autorise à vous connecter à certains comptes seulement.</translation> <translation id="225943865679747347">Code d'erreur : <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} adresse enregistrée proposée en haut du clavier.}one{{count} adresse enregistrée proposée en haut du clavier.}other{{count} adresses enregistrées proposées en haut du clavier.}}</translation> <translation id="2421004566762153674">Blocage des témoins tiers</translation> <translation id="2421044535038393232">Continuer à modifier</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} mot de passe compromis}one{{COUNT} mots de passe compromis}other{{COUNT} mots de passe compromis}}</translation> <translation id="2434405374328098816">Vous avez déjà enregistré un mot de passe pour l'utilisateur « <ph name="USERNAME" /> » sur le site <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Affich. mot de passe</translation> <translation id="2451654228769116489">Épingler l'onglet</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Vérifiez votre connexion et réessayez de vous connecter.</translation> <translation id="2637313651144986786">Rechercher des onglets…</translation> <translation id="2647269890314209800">Témoins en cours d'utilisation</translation> +<translation id="2648721026697078500">Ne jamais déplacer</translation> <translation id="2648803196158606475">Supprimer les éléments lus</translation> <translation id="2653659639078652383">Envoyer</translation> <translation id="2664621323652615289">Arrêter</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">plus</translation> <translation id="3311748811247479259">Désactivé</translation> <translation id="3324193307694657476">Ligne adresse 2</translation> +<translation id="3328459813621383194">Déplacer les onglets inactifs</translation> <translation id="3328801116991980348">Information sur le site</translation> <translation id="3371831930909698441">La traduction est disponible. Vous trouverez les options vers le bas de l'écran.</translation> <translation id="3377063233124932127">Désormais, vos favoris, vos mots de passe et d'autres éléments que vous avez enregistrés s'affichent en haut.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Examiner vos données synchronisées</translation> <translation id="4536418791685807335">Essayez de vous reconnecter.</translation> <translation id="4540780316273593836">Un problème est survenu</translation> +<translation id="4550040941166547650">Uniquement sur cet appareil</translation> <translation id="457292989631956153">{COUNT,plural, =1{Fermer {COUNT} onglet inactif?}one{Fermer {COUNT} onglet inactif?}other{Fermer {COUNT} onglets inactifs?}}</translation> <translation id="457386861538956877">Autres...</translation> <translation id="4587235830039045480">Enregistrer le mot de passe dans votre compte Google</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Marqué comme favori dans {title}}one{Marqué comme favori dans {title}}other{Marqués comme favoris dans {title}}}</translation> <translation id="6196207969502475924">Recherche vocale</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Fermer {COUNT} onglet}one{Fermer {COUNT} onglet}other{Fermer {COUNT} onglets}}</translation> +<translation id="6210079381482819663">Les onglets non utilisés pendant <ph name="THRESHOLD" /> jours ou plus sont déplacés ici. Vous pouvez changer cette option en tout temps dans les <ph name="BEGIN_LINK" />paramètres<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Avertissements ignorés</translation> <translation id="6219550825416862075">Rebonjour</translation> <translation id="6219688215832490856">Ne jamais traduire</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Onglets récents</translation> <translation id="7006788746334555276">Paramètres de contenu</translation> -<translation id="7014087399239955356">Vérification des mots de passe en cours…</translation> <translation id="7029809446516969842">Mots de passe</translation> <translation id="7053983685419859001">Bloquer</translation> <translation id="7062545763355031412">Accepter et changer de compte</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Réduit la section.</translation> <translation id="8065292699993359127">Ouvrir les URL dans Chrome en mode de navigation privée</translation> <translation id="806745655614357130">Conserver mes données à part</translation> +<translation id="8069394452933076548">Choisir quand les onglets qui n'ont pas été utilisés récemment sont déplacés vers la section des onglets inactifs.</translation> <translation id="8073670137947914548">Téléchargement terminé</translation> <translation id="8073872304774253879">Améliorer les recherches et de la navigation</translation> <translation id="8076492880354921740">Onglets</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Connexion impossible</translation> <translation id="9055960261314198756">La protection renforcée est désactivée</translation> <translation id="9057972802061533987">L'abonnement a échoué. Un problème est survenu.</translation> +<translation id="9061495354530850708">Dans votre compte Google</translation> <translation id="9065203028668620118">Modifier</translation> <translation id="9068336935206019333">Ouvrir dans Chrome en navigation privée</translation> <translation id="9079935439869366234">Tout marquer comme non lu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 1341659..c9d4f8de 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">Zoom arrière</translation> <translation id="2230173723195178503">Page Web chargée</translation> <translation id="2239626343334228536">Effacement des données de navigation…</translation> +<translation id="22508856139286506">Avertissements ignorés (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menu → Historique</translation> <translation id="2256933947031277845">Votre organisation ne vous autorise à vous connecter qu'avec certains comptes.</translation> <translation id="225943865679747347">Code d'erreur : <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} adresse enregistrée disponible au-dessus de votre clavier.}one{{count} adresse enregistrée disponible au-dessus de votre clavier.}other{{count} adresses enregistrées disponibles au-dessus de votre clavier.}}</translation> <translation id="2421004566762153674">Blocage des cookies tiers</translation> <translation id="2421044535038393232">Poursuivre les modifications</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} mot de passe compromis}one{{COUNT} mot de passe compromis}other{{COUNT} mots de passe compromis}}</translation> <translation id="2434405374328098816">Vous avez déjà enregistré un mot de passe pour "<ph name="USERNAME" />" sur <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Afficher le mot de passe</translation> <translation id="2451654228769116489">Épingler l'onglet</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Onglets récents</translation> <translation id="7006788746334555276">Paramètres de contenu</translation> -<translation id="7014087399239955356">Vérification des mots de passe…</translation> <translation id="7029809446516969842">Mots de passe</translation> <translation id="7053983685419859001">Bloquer</translation> <translation id="7062545763355031412">Accepter et changer de compte</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index b673b710a..ff58bfc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Hai {count} enderezo gardado dispoñible sobre o teclado.}other{Hai {count} enderezos gardados dispoñibles sobre o teclado.}}</translation> <translation id="2421004566762153674">Bloqueando cookies de terceiros</translation> <translation id="2421044535038393232">Seguir editando</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} contrasinal vulnerado}other{{COUNT} contrasinais vulnerados}}</translation> <translation id="2434405374328098816">Xa gardaches un contrasinal de <ph name="USERNAME" /> para <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Mostrar contrasinal</translation> <translation id="2451654228769116489">Fixar pestana</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Máis información<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Pestanas recentes</translation> <translation id="7006788746334555276">Configuración de contido</translation> -<translation id="7014087399239955356">Comprobando contrasinais...</translation> <translation id="7029809446516969842">Contrasinais</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7062545763355031412">Aceptar e cambiar de conta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index 578670e..26e646a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314"><ph name="LANGUAGE" />નો હંમેશાં અનુવાદ કરો</translation> <translation id="110724200315609752">ખુલ્લી વિંડો પર સ્વિચ કરો</translation> <translation id="1112015203684611006">છાપવાનું નિષ્ફળ થયું.</translation> +<translation id="1118266931011974190"><ph name="THRESHOLD" /> દિવસ પછી</translation> <translation id="1125564390852150847">નવું ટૅબ બનાવો.</translation> <translation id="1126013303640354461">Google Payમાંથી ચુકવણી પદ્ધતિઓ અને સરનામા એન્ક્રિપ્ટ કરવામાં આવશે નહીં. Chromeમાંથી બ્રાઉઝિંગ ઇતિહાસ સિંક થશે નહીં. તમારો પાસફ્રેઝ ધરાવતી વ્યક્તિ જ તમારો એન્ક્રિપ્ટેડ ડેટા વાંચી શકશે. Google દ્વારા પાસફ્રેઝ મોકલવામાં અથવા સ્ટોર કરવામાં આવતો નથી. જો તમે તમારો પાસફ્રેઝ ભૂલી જાઓ અથવા આ સેટિંગ બદલવા માગો, તો તમારે સિંક કરવાની પ્રક્રિયા રીસેટ કરવી જરૂરી રહેશે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{તમારા કીબોર્ડ પર {count} સાચવેલું સરનામું ઉપલબ્ધ છે.}one{તમારા કીબોર્ડ પર {count} સાચવેલું સરનામું ઉપલબ્ધ છે.}other{તમારા કીબોર્ડ પર {count} સાચવેલા સરનામા ઉપલબ્ધ છે.}}</translation> <translation id="2421004566762153674">ત્રીજા પક્ષની કુકી બ્લૉક કરી રહ્યાં છીએ</translation> <translation id="2421044535038393232">ફેરફાર કરતા રહો</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{ચેડાં કરાયેલો {COUNT} પાસવર્ડ}one{ચેડાં કરાયેલો {COUNT} પાસવર્ડ}other{ચેડાં કરાયેલા {COUNT} પાસવર્ડ}}</translation> <translation id="2434405374328098816">તમે <ph name="WEBSITE" /> પર "<ph name="USERNAME" />" માટેનો પાસવર્ડ પહેલેથી સાચવ્યો છે</translation> <translation id="2435457462613246316">પાસવર્ડ બતાવો</translation> <translation id="2451654228769116489">ટૅબને પિન કરો</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">તમારું કનેક્શન ચેક કરો અને સાઇન ઇન કરવાનો ફરી પ્રયાસ કરો.</translation> <translation id="2637313651144986786">ટૅબ શોધો...</translation> <translation id="2647269890314209800">ઉપયોગમાંની કુકી</translation> +<translation id="2648721026697078500">ક્યારેય ખસેડશો નહીં</translation> <translation id="2648803196158606475">વાંચેલું ડિલીટ કરો</translation> <translation id="2653659639078652383">સબમિટ કરો</translation> <translation id="2664621323652615289">રોકો</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">વધુ</translation> <translation id="3311748811247479259">બંધ</translation> <translation id="3324193307694657476">સરનામાં 2</translation> +<translation id="3328459813621383194">નિષ્ક્રિય ટૅબ ખસેડો</translation> <translation id="3328801116991980348">સાઇટ માહિતી</translation> <translation id="3371831930909698441">અનુવાદ ઉપલબ્ધ છે. વિકલ્પો સ્ક્રીનની નીચેની બાજુએ ઉપલબ્ધ રહે છે.</translation> <translation id="3377063233124932127">હવે તમારા બુકમાર્ક, પાસવર્ડ અને બીજું ઘણું સૌથી ઉપર રહે છે.</translation> @@ -510,6 +512,7 @@ <translation id="452750746583162491">તમારા સિંક કરેલા ડેટાનો રિવ્યૂ કરો</translation> <translation id="4536418791685807335">ફરીથી સાઇન ઇન કરવાનો પ્રયાસ કરો.</translation> <translation id="4540780316273593836">કંઈક ખોટું થયું હતું</translation> +<translation id="4550040941166547650">માત્ર આ જ ડિવાઇસ પર</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} નિષ્ક્રિય ટૅબ બંધ કરીએ?}one{{COUNT} નિષ્ક્રિય ટૅબ બંધ કરીએ?}other{{COUNT} નિષ્ક્રિય ટૅબ બંધ કરીએ?}}</translation> <translation id="457386861538956877">વધુ...</translation> <translation id="4587235830039045480">તમારા Google એકાઉન્ટમાં પાસવર્ડ સાચવો</translation> @@ -763,6 +766,7 @@ <translation id="6193424046394092997">{count,plural, =1{{title} પર બુકમાર્ક કર્યું}one{{title} પર બુકમાર્ક કર્યું}other{{title} પર બુકમાર્ક કર્યા}}</translation> <translation id="6196207969502475924">વૉઇસ શોધ</translation> <translation id="6202364442240589072">{COUNT,plural, =1{{COUNT} ટૅબ બંધ કરો}one{{COUNT} ટૅબ બંધ કરો}other{{COUNT} ટૅબ બંધ કરો}}</translation> +<translation id="6210079381482819663"><ph name="THRESHOLD" /> દિવસ કે તેથી વધારે સમય સુધી ઉપયોગ કરવામાં આવ્યો ન હોય એવા ટૅબને અહીં ખસેડવામાં આવશે. તમે <ph name="BEGIN_LINK" />સેટિંગ<ph name="END_LINK" />માં જઈને આને કોઈપણ સમયે બદલી શકો છો.</translation> <translation id="6213567400989743524">છોડી દીધેલી ચેતવણીઓ</translation> <translation id="6219550825416862075">આપનું ફરી સ્વાગત છે</translation> <translation id="6219688215832490856">ક્યારેય અનુવાદ કરશો નહીં</translation> @@ -918,7 +922,6 @@ <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation> <translation id="7004499039102548441">તાજેતરના ટૅબ્સ</translation> <translation id="7006788746334555276">કન્ટેન્ટ સેટિંગ</translation> -<translation id="7014087399239955356">પાસવર્ડ ચેક કરી રહ્યાં છીએ…</translation> <translation id="7029809446516969842">પાસવર્ડ</translation> <translation id="7053983685419859001">અવરોધિત કરો</translation> <translation id="7062545763355031412">સ્વીકારો અને એકાઉન્ટ્સ સ્વિચ કરો</translation> @@ -1058,6 +1061,7 @@ <translation id="8059533439631660104">વિભાગને સંકુચિત કરે છે.</translation> <translation id="8065292699993359127">છૂપા મોડમાં Chromeમાં URLs ખોલો</translation> <translation id="806745655614357130">મારા ડેટાને અલગ રાખો</translation> +<translation id="8069394452933076548">તાજેતરમાં જે ટૅબનો ઉપયોગ કરવામાં આવ્યો ન હોય, તેમને નિષ્ક્રિય ટૅબના વિભાગમાં ક્યારે ખસેડવામાં આવે તે પસંદ કરો.</translation> <translation id="8073670137947914548">ડાઉનલોડ સમાપ્ત</translation> <translation id="8073872304774253879">શોધ અને બ્રાઉઝિંગ વધુ સારું બનાવો</translation> <translation id="8076492880354921740">ટૅબ્સ</translation> @@ -1202,6 +1206,7 @@ <translation id="9055772144595778347">સાઇન ઇન કરી શકાતું નથી</translation> <translation id="9055960261314198756">વધારેલું સંરક્ષણ બંધ છે</translation> <translation id="9057972802061533987">ફૉલો કરી શકતા નથી. કંઈક ખોટું થયું.</translation> +<translation id="9061495354530850708">તમારા Google એકાઉન્ટમાં</translation> <translation id="9065203028668620118">ફેરફાર કરો</translation> <translation id="9068336935206019333">Chromeના છૂપા મોડમાં ખોલો</translation> <translation id="9079935439869366234">તમામને વાંચ્યા વગરની તરીકે ચિહ્નિત કરો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index 3a9dd9a7..98e8a15a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{सेव किया गया {count} पता, आपके कीबोर्ड के ऊपर उपलब्ध है.}one{सेव किया गया {count} पता, आपके कीबोर्ड के ऊपर उपलब्ध है.}other{सेव किए गए {count} पते, आपके कीबोर्ड के ऊपर उपलब्ध हैं.}}</translation> <translation id="2421004566762153674">तीसरे पक्ष की कुकी ब्लॉक की जा रही हैं</translation> <translation id="2421044535038393232">बदलाव करते रहें</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} पासवर्ड या तो हैक हुआ है या चोरी हुआ है}one{{COUNT} पासवर्ड या तो हैक हुआ है या चोरी हुआ है}other{{COUNT} पासवर्ड या तो हैक हुए हैं या चोरी हुए हैं}}</translation> <translation id="2434405374328098816">आपने <ph name="WEBSITE" /> पर, "<ph name="USERNAME" />" का पासवर्ड पहले ही सेव कर दिया है</translation> <translation id="2435457462613246316">पासवर्ड दिखाएं</translation> <translation id="2451654228769116489">पिन करके छोटा किया गया टैब</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation> <translation id="7004499039102548441">हाल के टैब</translation> <translation id="7006788746334555276">सामग्री सेटिंग</translation> -<translation id="7014087399239955356">पासवर्ड की जांच की जा रही है...</translation> <translation id="7029809446516969842">पासवर्ड</translation> <translation id="7053983685419859001">ब्लॉक करें</translation> <translation id="7062545763355031412">स्वीकार करें और खातों को बदलें</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 8779a72..cf9c83c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">Smanji</translation> <translation id="2230173723195178503">Web-stranica učitana</translation> <translation id="2239626343334228536">Brisanje podataka o pregledavanju...</translation> +<translation id="22508856139286506">Odbačena upozorenja (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Izbornik → Povijest</translation> <translation id="2256933947031277845">Vaša organizacija dopušta da se prijavite samo putem određenih računa.</translation> <translation id="225943865679747347">Kôd pogreške: <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Iznad tipkovnice dostupna je {count} spremljena adresa.}one{Iznad tipkovnice dostupna je {count} spremljena adresa.}few{Iznad tipkovnice dostupne su {count} spremljene adrese.}other{Iznad tipkovnice dostupno je {count} spremljenih adresa.}}</translation> <translation id="2421004566762153674">Blokiranje kolačića trećih strana</translation> <translation id="2421044535038393232">Nastavi uređivati</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ugrožena zaporka}one{{COUNT} ugrožena zaporka}few{{COUNT} ugrožene zaporke}other{{COUNT} ugroženih zaporki}}</translation> <translation id="2434405374328098816">Već ste spremili zaporku za korisničko ime <ph name="USERNAME" /> na web-lokaciji <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Pokaži zaporku</translation> <translation id="2451654228769116489">Prikvači karticu</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nedavne kartice</translation> <translation id="7006788746334555276">Postavke sadržaja</translation> -<translation id="7014087399239955356">Provjera zaporki…</translation> <translation id="7029809446516969842">Zaporke</translation> <translation id="7053983685419859001">Blokiraj</translation> <translation id="7062545763355031412">Prihvati i promijeni račun</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index 77e5f65..f489f84a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} mentett cím áll rendelkezésre a billentyűzet felett.}other{{count} mentett cím áll rendelkezésre a billentyűzet felett.}}</translation> <translation id="2421004566762153674">Harmadik félhez tartozó cookie-k letiltása</translation> <translation id="2421044535038393232">Szerkesztés folytatása</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} illetéktelen kezekbe került jelszó}other{{COUNT} illetéktelen kezekbe került jelszó}}</translation> <translation id="2434405374328098816">Már mentett jelszót a(z) „<ph name="USERNAME" />” felhasználónévhez a(z) <ph name="WEBSITE" /> webhelyen</translation> <translation id="2435457462613246316">Jelszó megjelenítése</translation> <translation id="2451654228769116489">Lap rögzítése</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="7004499039102548441">Nemrég megnyitott lapok</translation> <translation id="7006788746334555276">Tartalombeállítások</translation> -<translation id="7014087399239955356">Jelszavak ellenőrzése…</translation> <translation id="7029809446516969842">Jelszavak</translation> <translation id="7053983685419859001">Letiltás</translation> <translation id="7062545763355031412">Elfogadás és fiókváltás</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index b58f476..7331ec3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">Փոքրացնել</translation> <translation id="2230173723195178503">Կայքէջը բեռնվեց</translation> <translation id="2239626343334228536">Այցելությունների պատմությունը ջնջվում է…</translation> +<translation id="22508856139286506">Թաքցված նախազգուշացումներ (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Ընտրացանկ → Պատմություն</translation> <translation id="2256933947031277845">Ձեր կազմակերպությունում հնարավոր է մուտք գործել միայն որոշակի հաշիվներ։</translation> <translation id="225943865679747347">Սխալի կոդ` <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} պահված հասցե ցուցադրվում է ստեղնաշարի վերևում։}one{{count} պահված հասցե ցուցադրվում է ստեղնաշարի վերևում։}other{{count} պահված հասցե ցուցադրվում է ստեղնաշարի վերևում։}}</translation> <translation id="2421004566762153674">Երրորդ կողմի քուքիների արգելափակում</translation> <translation id="2421044535038393232">Շարունակել խմբագրումը</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} կոտրված գաղտնաբառ}one{{COUNT} կոտրված գաղտնաբառ}other{{COUNT} կոտրված գաղտնաբառ}}</translation> <translation id="2434405374328098816">Դուք <ph name="WEBSITE" /> կայքում «<ph name="USERNAME" />» օգտատիրոջ համար արդեն գաղտնաբառ պահել եք։</translation> <translation id="2435457462613246316">Ցույց տալ գաղտնաբառը</translation> <translation id="2451654228769116489">Ամրացնել ներդիրը</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />Իմանալ ավելին<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Վերջին բացած ներդիրները</translation> <translation id="7006788746334555276">Բովանդակության կարգավորումներ</translation> -<translation id="7014087399239955356">Գաղտնաբառերի ստուգում…</translation> <translation id="7029809446516969842">Գաղտնաբառեր</translation> <translation id="7053983685419859001">Արգելափակել</translation> <translation id="7062545763355031412">Ընդունել և փոխարկել հաշիվները</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index b57996e04..18d5409 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} alamat tersimpan tersedia di atas keyboard Anda.}other{{count} alamat tersimpan tersedia di atas keyboard Anda.}}</translation> <translation id="2421004566762153674">Memblokir cookie pihak ketiga</translation> <translation id="2421044535038393232">Terus Edit</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} Sandi Telah Dibobol}other{{COUNT} Sandi Telah Dibobol}}</translation> <translation id="2434405374328098816">Anda sudah menyimpan sandi untuk "<ph name="USERNAME" />" di <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Tampilkan sandi</translation> <translation id="2451654228769116489">Sematkan Tab</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Tab Terbaru</translation> <translation id="7006788746334555276">Setelan Konten</translation> -<translation id="7014087399239955356">Memeriksa Sandi...</translation> <translation id="7029809446516969842">Sandi</translation> <translation id="7053983685419859001">Blokir</translation> <translation id="7062545763355031412">Terima dan berganti akun</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_is.xtb b/ios/chrome/app/strings/resources/ios_strings_is.xtb index 4c9a9c8..872a1a70 100644 --- a/ios/chrome/app/strings/resources/ios_strings_is.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_is.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} vistað heimilisfang tiltækt ofan við lyklaborðið.}one{{count} vistað heimilisfang tiltækt ofan við lyklaborðið.}other{{count} vistuð heimilisföng tiltæk ofan við lyklaborðið.}}</translation> <translation id="2421004566762153674">Lokað á fótspor frá þriðju aðilum</translation> <translation id="2421044535038393232">Halda áfram að breyta</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} aðgangsorð í hættu}one{{COUNT} aðgangsorð í hættu}other{{COUNT} aðgangsorð í hættu}}</translation> <translation id="2434405374328098816">Þú hefur þegar vistað aðgangsorð fyrir „<ph name="USERNAME" />“ á <ph name="WEBSITE" />.</translation> <translation id="2435457462613246316">Sýna aðgangsorð</translation> <translation id="2451654228769116489">Festa flipa</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Frekari upplýsingar<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nýlegir flipar</translation> <translation id="7006788746334555276">Efnisstillingar</translation> -<translation id="7014087399239955356">Athugar aðgangsorð…</translation> <translation id="7029809446516969842">Aðgangsorð</translation> <translation id="7053983685419859001">Setja á bannlista</translation> <translation id="7062545763355031412">Samþykkja og skipta um reikning</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index 2ff9e82..2094a35 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Traduci sempre <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Passa alla finestra aperta</translation> <translation id="1112015203684611006">Stampa non riuscita.</translation> +<translation id="1118266931011974190">Dopo <ph name="THRESHOLD" /> giorni</translation> <translation id="1125564390852150847">Crea una nuova scheda.</translation> <translation id="1126013303640354461">I metodi di pagamento e gli indirizzi memorizzati su Google Pay non verranno criptati. La cronologia di navigazione di Chrome non verrà sincronizzata. Solo chi conosce la tua passphrase può leggere i tuoi dati criptati. La passphrase non viene inviata a Google o memorizzata da Google. Se dimentichi la passphrase o vuoi modificare questa impostazione, dovrai reimpostare la sincronizzazione. <ph name="BEGIN_LINK" />Scopri di più<ph name="END_LINK" /></translation> @@ -198,14 +199,13 @@ <translation id="2362083820973145409">Accesso eseguito come <ph name="USER_NAME" />. <ph name="USER_EMAIL" />. Consente di aprire le impostazioni.</translation> <translation id="236977714248711277">I siti non possono utilizzare i cookie per migliorare la tua esperienza di navigazione, ad esempio per mantenere l'accesso o memorizzare gli articoli aggiunti al carrello. -I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su siti diversi, ad esempio per personalizzare gli annunci.</translation> +I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci.</translation> <translation id="2375243552872247702">Vedi i contenuti per te</translation> <translation id="2381405137052800939">Opzioni di base</translation> <translation id="2386793615875593361">Una selezionata</translation> <translation id="2411749908844615428">{count,plural, =1{{count} indirizzo salvato disponibile sopra la tastiera.}other{{count} indirizzi salvati disponibili sopra la tastiera.}}</translation> <translation id="2421004566762153674">Blocco dei cookie di terze parti</translation> <translation id="2421044535038393232">Continua a modificare</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} password compromessa}other{{COUNT} password compromesse}}</translation> <translation id="2434405374328098816">Hai già salvato una password per "<ph name="USERNAME" />" su <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Mostra password</translation> <translation id="2451654228769116489">Blocca scheda</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">Controlla la connessione e riprova ad accedere.</translation> <translation id="2637313651144986786">Cerca tra le schede…</translation> <translation id="2647269890314209800">Cookie in uso</translation> +<translation id="2648721026697078500">Non spostare mai</translation> <translation id="2648803196158606475">Elimina voci lette</translation> <translation id="2653659639078652383">Invia</translation> <translation id="2664621323652615289">Interrompi</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">altro</translation> <translation id="3311748811247479259">Off</translation> <translation id="3324193307694657476">Indirizzo 2</translation> +<translation id="3328459813621383194">Sposta schede non attive</translation> <translation id="3328801116991980348">Informazioni sito</translation> <translation id="3371831930909698441">Traduttore disponibile. Opzioni disponibili nella parte inferiore dello schermo.</translation> <translation id="3377063233124932127">Ora i tuoi preferiti, le password e altri dati salvati sono visualizzati in alto.</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">Verifica i tuoi dati sincronizzati</translation> <translation id="4536418791685807335">Prova ad accedere nuovamente.</translation> <translation id="4540780316273593836">Si è verificato un problema</translation> +<translation id="4550040941166547650">Solo su questo dispositivo</translation> <translation id="457292989631956153">{COUNT,plural, =1{Chiudere {COUNT} scheda non attiva?}other{Chiudere {COUNT} schede non attive?}}</translation> <translation id="457386861538956877">Altro...</translation> <translation id="4587235830039045480">Salva la password nel tuo Account Google</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Preferito aggiunto in: {title}}other{Preferiti aggiunti in: {title}}}</translation> <translation id="6196207969502475924">Ricerca vocale</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Chiudi {COUNT} scheda}other{Chiudi {COUNT} schede}}</translation> +<translation id="6210079381482819663">Le schede che non vengono utilizzate per almeno <ph name="THRESHOLD" /> giorni vengono spostate qui. Puoi modificare questa preferenza in qualsiasi momento nelle <ph name="BEGIN_LINK" />impostazioni<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Avvisi ignorati</translation> <translation id="6219550825416862075">Ti diamo il bentornato</translation> <translation id="6219688215832490856">Non tradurre mai</translation> @@ -823,7 +827,7 @@ <translation id="6464071786529933911">Apri in nuova scheda in incognito</translation> <translation id="6464397691496239022">I siti possono utilizzare i cookie per migliorare la tua esperienza di navigazione, ad esempio per mantenere l'accesso o memorizzare gli articoli aggiunti al carrello. -I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su siti diversi, ad esempio per personalizzare gli annunci.</translation> +I siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci.</translation> <translation id="6476253015009698798">Il monitoraggio dei prezzi non è disponibile per questa pagina.</translation> <translation id="6476800141292307438">Traduzione della pagina in <ph name="LANGUAGE" />. Opzioni disponibili nella parte inferiore dello schermo.</translation> <translation id="648164694371393720">Errore di autenticazione</translation> @@ -863,7 +867,7 @@ <translation id="6668619169535738264">Modifica preferito</translation> <translation id="6672241253012342409">I siti possono utilizzare i cookie per migliorare la tua esperienza di navigazione, ad esempio per mantenere l'accesso o memorizzare gli articoli aggiunti al carrello. -Quando navighi in incognito, i siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su siti diversi, ad esempio per personalizzare gli annunci.</translation> +Quando navighi in incognito, i siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci.</translation> <translation id="6672697278890207089">Inserisci la passphrase</translation> <translation id="6674571176963658787">Per avviare la sincronizzazione devi inserire la tua passphrase</translation> <translation id="667999046851023355">Documento</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />Scopri di più<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Schede recenti</translation> <translation id="7006788746334555276">Impostazioni contenuti</translation> -<translation id="7014087399239955356">Controllo delle password in corso…</translation> <translation id="7029809446516969842">Password</translation> <translation id="7053983685419859001">Blocca</translation> <translation id="7062545763355031412">Accetta e cambia account</translation> @@ -1040,7 +1043,7 @@ <translation id="7961015016161918242">Mai</translation> <translation id="7966516440812255683">I siti possono utilizzare i cookie per migliorare la tua esperienza di navigazione, ad esempio per mantenere l'accesso o memorizzare gli articoli aggiunti al carrello. -I siti possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti web, ad esempio per personalizzare gli annunci.</translation> +I siti possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci.</translation> <translation id="7971521879845308059">Blocca popup</translation> <translation id="797413074872316787">Attiva la sincronizzazione per sincronizzare e personalizzare tutti i dispositivi.</translation> <translation id="7978018860671536736">3. Tocca Riempimento automatico password</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">Viene compressa la sezione.</translation> <translation id="8065292699993359127">Apri gli URL in Chrome nella modalità in incognito</translation> <translation id="806745655614357130">Mantieni separati i miei dati</translation> +<translation id="8069394452933076548">Scegli quando spostare nella sezione Schede non attive le schede che non sono state utilizzate di recente.</translation> <translation id="8073670137947914548">Download terminato</translation> <translation id="8073872304774253879">Migliora le ricerche e le attività di navigazione</translation> <translation id="8076492880354921740">Schede</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">Impossibile accedere</translation> <translation id="9055960261314198756">La Protezione avanzata non è attiva</translation> <translation id="9057972802061533987">Non è possibile seguire questi contenuti. Si è verificato un errore.</translation> +<translation id="9061495354530850708">Nel tuo Account Google</translation> <translation id="9065203028668620118">Modifica</translation> <translation id="9068336935206019333">Apri in modalità di navigazione in incognito di Chrome</translation> <translation id="9079935439869366234">Segna tutti come da leggere</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index fd7fcfe..5caf8535 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{כתובת שמורה אחת ({count}) זמינה מעל המקלדת.}one{{count} כתובות שמורות זמינות מעל המקלדת.}two{{count} כתובות שמורות זמינות מעל המקלדת.}other{{count} כתובות שמורות זמינות מעל המקלדת.}}</translation> <translation id="2421004566762153674">חסימת קובצי Cookie של צד שלישי</translation> <translation id="2421044535038393232">המשך העריכה</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{סיסמה אחת ({COUNT}) שנחשפה}one{{COUNT} סיסמאות שנחשפו}two{{COUNT} סיסמאות שנחשפו}other{{COUNT} סיסמאות שנחשפו}}</translation> <translation id="2434405374328098816">כבר שמרת סיסמה עבור המשתמש "<ph name="USERNAME" />" לאתר <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">הצגת סיסמה</translation> <translation id="2451654228769116489">הצמדת הכרטיסייה</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /></translation> <translation id="7004499039102548441">כרטיסיות אחרונות</translation> <translation id="7006788746334555276">הגדרות תוכן</translation> -<translation id="7014087399239955356">הסיסמאות נבדקות…</translation> <translation id="7029809446516969842">סיסמאות</translation> <translation id="7053983685419859001">חסימה</translation> <translation id="7062545763355031412">אישור והחלפת חשבונות</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index 7e037d0..eed3744f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{キーボードの上部に保存済みの住所が {count} 件表示されています。}other{キーボードの上部に保存済みの住所が {count} 件表示されています。}}</translation> <translation id="2421004566762153674">サードパーティの Cookie をブロック</translation> <translation id="2421044535038393232">編集を続ける</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{不正使用されたパスワード: {COUNT} 件}other{不正使用されたパスワード: {COUNT} 件}}</translation> <translation id="2434405374328098816"><ph name="WEBSITE" /> の「<ph name="USERNAME" />」のパスワードは保存済みです</translation> <translation id="2435457462613246316">パスワードを表示</translation> <translation id="2451654228769116489">タブを固定</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> <translation id="7004499039102548441">最近使ったタブ</translation> <translation id="7006788746334555276">コンテンツの設定</translation> -<translation id="7014087399239955356">パスワードをチェックしています...</translation> <translation id="7029809446516969842">パスワード</translation> <translation id="7053983685419859001">ブロック</translation> <translation id="7062545763355031412">同意してアカウントを切り替える</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ka.xtb b/ios/chrome/app/strings/resources/ios_strings_ka.xtb index 5481ebb..9738a50 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ka.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ka.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{კლავიატურის ზემოთ ხელმისაწვდომია {count} შენახული მისამართი.}other{კლავიატურის ზემოთ ხელმისაწვდომია {count} შენახული მისამართი.}}</translation> <translation id="2421004566762153674">მესამე მხარის ქუქი-ჩანაწერების დაბლოკვა</translation> <translation id="2421044535038393232">რედაქტირების გაგრძელება</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} გატეხილი პაროლი}other{{COUNT} გატეხილი პაროლი}}</translation> <translation id="2434405374328098816"><ph name="WEBSITE" />-დან „<ph name="USERNAME" />“-ის პაროლი უკვე შეინახეთ</translation> <translation id="2435457462613246316">პაროლის ჩვენება</translation> <translation id="2451654228769116489">ჩანართის ჩამაგრება</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />შეიტყვეთ მეტი<ph name="END_LINK" /></translation> <translation id="7004499039102548441">ბოლო ჩანართები</translation> <translation id="7006788746334555276">შინაარსის პარამეტრები</translation> -<translation id="7014087399239955356">მიმდინარეობს პაროლების შემოწმება...</translation> <translation id="7029809446516969842">პაროლები</translation> <translation id="7053983685419859001">დაბლოკვა</translation> <translation id="7062545763355031412">მიღება და ანგარიშების გადართვა</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index 20cfdcb..723dd9e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Пернетақтаның үстінде {count} сақталған мекенжай қолжетімді.}other{Пернетақтаның үстінде {count} сақталған мекенжай қолжетімді.}}</translation> <translation id="2421004566762153674">Үшінші тараптың cookie файлдарын бөгеу</translation> <translation id="2421044535038393232">Өзгерте беру</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ұрланған құпия сөз}other{{COUNT} ұрланған құпия сөз}}</translation> <translation id="2434405374328098816"><ph name="WEBSITE" /> веб-сайтында <ph name="USERNAME" /> құпия сөзін сақтап қойғансыз.</translation> <translation id="2435457462613246316">Құпия сөзді көрсету</translation> <translation id="2451654228769116489">Қойындыны бекіту</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Соңғы қойындылар</translation> <translation id="7006788746334555276">Контент параметрлері</translation> -<translation id="7014087399239955356">Құпия сөздер тексерілуде...</translation> <translation id="7029809446516969842">Құпия сөздер</translation> <translation id="7053983685419859001">Бөгеу</translation> <translation id="7062545763355031412">Аккаунттарды қабылдау және ауыстыру</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb index 3e796b55..fdbe44a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_km.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{មានអាសយដ្ឋានដែលបានរក្សាទុក {count} នៅលើក្ដារចុចរបស់អ្នក។}other{មានអាសយដ្ឋានដែលបានរក្សាទុក {count} នៅលើក្ដារចុចរបស់អ្នក។}}</translation> <translation id="2421004566762153674">ទប់ស្កាត់ខូគីភាគីទីបី</translation> <translation id="2421044535038393232">បន្តកែ</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{ពាក្យសម្ងាត់ដែលរងការលុកលុយ {COUNT}}other{ពាក្យសម្ងាត់ដែលរងការលុកលុយ {COUNT}}}</translation> <translation id="2434405374328098816">អ្នកបានរក្សាទុកពាក្យសម្ងាត់សម្រាប់ "<ph name="USERNAME" />" នៅ <ph name="WEBSITE" /> រួចហើយ</translation> <translation id="2435457462613246316">បង្ហាញពាក្យសម្ងាត់</translation> <translation id="2451654228769116489">ខ្ទាស់ផ្ទាំង</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែម<ph name="END_LINK" /></translation> <translation id="7004499039102548441">ផ្ទាំងថ្មីៗ</translation> <translation id="7006788746334555276">ការកំណត់មាតិកា</translation> -<translation id="7014087399239955356">កំពុងពិនិត្យមើលពាក្យសម្ងាត់...</translation> <translation id="7029809446516969842">ពាក្យសម្ងាត់</translation> <translation id="7053983685419859001">ទប់ស្កាត់</translation> <translation id="7062545763355031412">ទទួលយក និងប្តូរគណនី</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index 4a3ad9b..580b1a8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} ಉಳಿಸಿದ ವಿಳಾಸ ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಲಭ್ಯವಿದೆ.}one{{count} ಉಳಿಸಿದ ವಿಳಾಸಗಳು ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಲಭ್ಯವಿದೆ.}other{{count} ಉಳಿಸಿದ ವಿಳಾಸಗಳು ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಲಭ್ಯವಿದೆ.}}</translation> <translation id="2421004566762153674">ಥರ್ಡ್-ಪಾರ್ಟಿ ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸುವುದು</translation> <translation id="2421044535038393232">ಎಡಿಟ್ ಮಾಡುತ್ತಿರಿ</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ಪಾಸ್ವರ್ಡ್ ಅಪಾಯಕ್ಕೀಡಾಗಿದೆ}one{{COUNT} ಪಾಸ್ವರ್ಡ್ಗಳು ಅಪಾಯಕ್ಕೀಡಾಗಿವೆ}other{{COUNT} ಪಾಸ್ವರ್ಡ್ಗಳು ಅಪಾಯಕ್ಕೀಡಾಗಿವೆ}}</translation> <translation id="2434405374328098816">ನೀವು ಈಗಾಗಲೇ <ph name="WEBSITE" /> ನಲ್ಲಿ "<ph name="USERNAME" />" ಗೆ ಸಂಬಂಧಿಸಿದ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಉಳಿಸಿದ್ದೀರಿ</translation> <translation id="2435457462613246316">ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ತೋರಿಸಿ</translation> <translation id="2451654228769116489">ಟ್ಯಾಬ್ ಅನ್ನು ಪಿನ್ ಮಾಡಿ</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation> <translation id="7004499039102548441">ಇತ್ತೀಚಿನ ಟ್ಯಾಬ್ಗಳು</translation> <translation id="7006788746334555276">ವಿಷಯ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> -<translation id="7014087399239955356">ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ…</translation> <translation id="7029809446516969842">ಪಾಸ್ವರ್ಡ್ಗಳು</translation> <translation id="7053983685419859001">ನಿರ್ಬಂಧಿಸು</translation> <translation id="7062545763355031412">ಸಮ್ಮತಿಸಿ ಮತ್ತು ಖಾತೆಗಳನ್ನು ಬದಲಾಯಿಸಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 3551985a..8eeff544 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314"><ph name="LANGUAGE" /> 항상 번역</translation> <translation id="110724200315609752">열려 있는 다른 창으로 전환</translation> <translation id="1112015203684611006">인쇄 실패</translation> +<translation id="1118266931011974190"><ph name="THRESHOLD" />일 후</translation> <translation id="1125564390852150847">새 탭 만들기</translation> <translation id="1126013303640354461">Google Pay 결제 수단 및 주소는 암호화되지 않습니다. Chrome 방문 기록은 동기화되지 않습니다. 암호를 아는 사람만 암호화된 데이터를 볼 수 있습니다. 암호는 Google로 전송되거나 Google에 저장되지 않습니다. 암호가 기억나지 않거나 이 설정을 변경하려면 동기화를 재설정해야 합니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{키보드 위에 저장된 주소 {count}개가 있습니다.}other{키보드 위에 저장된 주소 {count}개가 있습니다.}}</translation> <translation id="2421004566762153674">타사 쿠키 차단</translation> <translation id="2421044535038393232">수정 계속</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{유출된 비밀번호 {COUNT}개}other{유출된 비밀번호 {COUNT}개}}</translation> <translation id="2434405374328098816"><ph name="USERNAME" />님의 <ph name="WEBSITE" /> 비밀번호는 이미 저장되어 있습니다.</translation> <translation id="2435457462613246316">비밀번호 표시</translation> <translation id="2451654228769116489">탭 고정</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">연결을 확인하고 다시 로그인해 보세요</translation> <translation id="2637313651144986786">탭 검색...</translation> <translation id="2647269890314209800">사용 중인 쿠키</translation> +<translation id="2648721026697078500">이동 안 함</translation> <translation id="2648803196158606475">읽은 항목 삭제</translation> <translation id="2653659639078652383">제출</translation> <translation id="2664621323652615289">중지</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">더보기</translation> <translation id="3311748811247479259">사용 안함</translation> <translation id="3324193307694657476">주소 2</translation> +<translation id="3328459813621383194">비활성 탭 이동</translation> <translation id="3328801116991980348">사이트 정보</translation> <translation id="3371831930909698441">번역을 사용할 수 있습니다. 화면 하단에서 옵션을 선택할 수 있습니다.</translation> <translation id="3377063233124932127">저장된 북마크, 비밀번호 등이 상단에 표시됩니다</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">동기화된 데이터 검토</translation> <translation id="4536418791685807335">다시 로그인해 주세요.</translation> <translation id="4540780316273593836">문제 발생</translation> +<translation id="4550040941166547650">이 기기에서만 저장됨</translation> <translation id="457292989631956153">{COUNT,plural, =1{비활성 탭 {COUNT}개를 닫으시겠습니까?}other{비활성 탭 {COUNT}개를 닫으시겠습니까?}}</translation> <translation id="457386861538956877">더보기...</translation> <translation id="4587235830039045480">Google 계정에 비밀번호 저장</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{{title}에 북마크를 생성함}other{{title}에 북마크를 생성함}}</translation> <translation id="6196207969502475924">음성 검색</translation> <translation id="6202364442240589072">{COUNT,plural, =1{탭 {COUNT}개 닫기}other{탭 {COUNT}개 닫기}}</translation> +<translation id="6210079381482819663"><ph name="THRESHOLD" />일 이상 사용하지 않은 탭은 여기로 이동됩니다. 언제든지 <ph name="BEGIN_LINK" />설정<ph name="END_LINK" />에서 변경할 수 있습니다.</translation> <translation id="6213567400989743524">닫은 경고</translation> <translation id="6219550825416862075">다시 방문해 주셔서 감사합니다</translation> <translation id="6219688215832490856">번역 안함</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="7004499039102548441">최근 탭</translation> <translation id="7006788746334555276">콘텐츠 설정</translation> -<translation id="7014087399239955356">비밀번호 확인 중…</translation> <translation id="7029809446516969842">비밀번호</translation> <translation id="7053983685419859001">차단</translation> <translation id="7062545763355031412">동의 및 계정 전환</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">섹션을 접습니다.</translation> <translation id="8065292699993359127">Chrome에서 시크릿 모드로 URL 열기</translation> <translation id="806745655614357130">내 데이터 별도로 유지</translation> +<translation id="8069394452933076548">최근에 사용하지 않은 탭을 비활성 탭 섹션으로 이동할 시점을 선택합니다</translation> <translation id="8073670137947914548">다운로드가 완료되었습니다</translation> <translation id="8073872304774253879">검색 및 탐색 기능 개선</translation> <translation id="8076492880354921740">탭</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">로그인할 수 없음</translation> <translation id="9055960261314198756">향상된 보호 모드 사용 중지됨</translation> <translation id="9057972802061533987">팔로우할 수 없습니다. 문제가 발생했습니다.</translation> +<translation id="9061495354530850708">Google 계정의 북마크</translation> <translation id="9065203028668620118">수정</translation> <translation id="9068336935206019333">Chrome 시크릿 모드에서 열기</translation> <translation id="9079935439869366234">모두 읽지않음으로 표시</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index bdc4db9..be627478 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Сакталган {count} дарек баскычтоптун өйдө жагында жеткиликтүү.}other{Сакталган {count} дарек баскычтоптун өйдө жагында жеткиликтүү.}}</translation> <translation id="2421004566762153674">Үчүнчү тараптын cookie файлдарын бөгөттөө</translation> <translation id="2421044535038393232">Түзөтө берүү</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} уурдалган сырсөз бар}other{{COUNT} уурдалган сырсөз бар}}</translation> <translation id="2434405374328098816">"<ph name="USERNAME" />" үчүн <ph name="WEBSITE" /> вебсайтында сырсөздү сактап койгонсуз</translation> <translation id="2435457462613246316">Сырсөздү көрсөтүү</translation> <translation id="2451654228769116489">Өтмөктү кадоо</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Кеңири маалымат<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Акыркы өтмөктөр</translation> <translation id="7006788746334555276">Мазмун параметрлери</translation> -<translation id="7014087399239955356">Сырсөздөр текшерилүүдө…</translation> <translation id="7029809446516969842">Сырсөздөр</translation> <translation id="7053983685419859001">Бөгөттөө</translation> <translation id="7062545763355031412">Кабыл алып, башка аккаунтка которулуңуз</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb index 3fbf6fb..7918180 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{ທີ່ຢູ່ທີ່ບັນທຶກໄວ້ {count} ລາຍການຈະສາມາດໃຊ້ໄດ້ຢູ່ທາງເທິງແປ້ນພິມຂອງທ່ານ.}other{ທີ່ຢູ່ທີ່ບັນທຶກໄວ້ {count} ລາຍການຈະສາມາດໃຊ້ໄດ້ຢູ່ທາງເທິງແປ້ນພິມຂອງທ່ານ.}}</translation> <translation id="2421004566762153674">ການບລັອກຄຸກກີ້ພາກສ່ວນທີສາມ</translation> <translation id="2421044535038393232">ສືບຕໍ່ແກ້ໄຂ</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ລະຫັດຜ່ານທີ່ຖືກລະເມີດ}other{{COUNT} ລະຫັດຜ່ານທີ່ຖືກລະເມີດ}}</translation> <translation id="2434405374328098816">ທ່ານມີລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ສຳລັບ "<ph name="USERNAME" />" ຢູ່ <ph name="WEBSITE" /> ຢູ່ກ່ອນແລ້ວ</translation> <translation id="2435457462613246316">ສະແດງລະຫັດຜ່ານ</translation> <translation id="2451654228769116489">ປັກໝຸດແຖບ</translation> @@ -227,6 +226,7 @@ <translation id="2576499762020411840">ນຳໃຊ້ ແລະ ບັນທຶກລະຫັດຜ່ານໃນບັນຊີ Google ຂອງທ່ານ</translation> <translation id="2578571896248130439">ສົ່ງໜ້າເວັບ</translation> <translation id="2584132361465095047">ເພີ່ມບັນຊີ...</translation> +<translation id="2595587704210555261">{COUNT,plural, =1{ເປີດແຖບທີ່ບໍ່ໄດ້ໃຊ້ເປັນເວລາໜຶ່ງມື້ ຫຼື ຫຼາຍກວ່ານັ້ນຈະຖືກຍ້າຍໄປໃສ່ແຖບທີ່ບໍ່ເຄື່ອນໄຫວ ເພື່ອໃຫ້ທ່ານສາມາດສຸມໃສ່ແຖບທີ່ທ່ານໃຊ້ຫຼາຍທີ່ສຸດໄດ້ຢ່າງງ່າຍດາຍ. ທ່ານສາມາດປ່ຽນສິ່ງນີ້ຕອນໃດກໍໄດ້ໃນການຕັ້ງຄ່າ.}other{ເປີດແຖບທີ່ບໍ່ໄດ້ໃຊ້ເປັນເວລາ {COUNT} ມື້ ຫຼື ຫຼາຍກວ່ານັ້ນຈະຖືກຍ້າຍໄປໃສ່ແຖບທີ່ບໍ່ເຄື່ອນໄຫວ ເພື່ອໃຫ້ທ່ານສາມາດສຸມໃສ່ແຖບທີ່ທ່ານໃຊ້ຫຼາຍທີ່ສຸດໄດ້ຢ່າງງ່າຍດາຍ. ທ່ານສາມາດປ່ຽນສິ່ງນີ້ຕອນໃດກໍໄດ້ໃນການຕັ້ງຄ່າ.}}</translation> <translation id="2600682495497606169">ລຶບລ້າງຄຸກກີ້ເວັບໄຊ</translation> <translation id="2609008503159898744">ປິດແຖບທັງໝົດບໍ?</translation> <translation id="2625189173221582860">ສຳເນົາລະຫັດຜ່ານແລ້ວ</translation> @@ -574,6 +574,7 @@ <translation id="4844899002472726590">ເບິ່ງ ແລະ ແກ້ໄຂຫົວຂໍ້ທີ່ທ່ານສົນໃຈ</translation> <translation id="4848999860252535517">ລຶບລະຫັດຜ່ານສຳລັບ <ph name="WEBSITE" /> ບໍ?</translation> <translation id="4854345657858711387">ຕັ້ງລະຫັດຜ່ານ</translation> +<translation id="4856498338299082007">ໃນບັນຊີ Google ຂອງທ່ານ</translation> <translation id="4858786880085262208">ອັບເກຣດເປັນ HTTPS, ເມື່ອເປັນໄປໄດ້. ເວັບໄຊທີ່ປອດໄພອາດຝັງເນື້ອຫາທີ່ບໍ່ປອດໄພ.</translation> <translation id="4860895144060829044">ໂທ</translation> <translation id="4872323082491632254">ກວດເບິ່ງລະຫັດຜ່ານ</translation> @@ -924,7 +925,6 @@ <ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK" /></translation> <translation id="7004499039102548441">ແຖບບໍ່ດົນມານີ້</translation> <translation id="7006788746334555276">ການຕັ້ງຄ່າເນື້ອໃນ</translation> -<translation id="7014087399239955356">ກຳລັງກວດລະຫັດຜ່ານ…</translation> <translation id="7029809446516969842">ລະຫັດຜ່ານ</translation> <translation id="7053983685419859001">ບລັອກ</translation> <translation id="7062545763355031412">ຍອມຮັບ ແລະ ປ່ຽນບັນຊີ</translation> @@ -1091,6 +1091,7 @@ <translation id="821809831108207540">ເພື່ອປັບແຕ່ງຟີດ Discover ແລະ Chrome ຂອງທ່ານໃຫ້ເປັນແບບສ່ວນຕົວ, ໃຫ້ເຂົ້າສູ່ລະບົບແລ້ວເປີດໃຊ້ການຊິ້ງຂໍ້ມູນ.</translation> <translation id="8225985093977202398">ຮູບ ແລະ ໄຟລ໌ທີ່ຖືກແຄດຊ໌</translation> <translation id="8237382152611443140">ເປີດການຕັ້ງຄ່າການຕື່ມຂໍ້ມູນລະຫັດຜ່ານອັດຕະໂນມັດ</translation> +<translation id="8248969482078657578">ແຖບທີ່ບໍ່ເຄື່ອນໄຫວຊ່ວຍໃຫ້ທ່ານຕັ້ງໃຈຢູ່ສະເໝີ</translation> <translation id="8261506727792406068">ລຶບ</translation> <translation id="8264966119170358612">ລະຫັດຜ່ານຂອງທ່ານຈຳນວນໜຶ່ງທີ່ບັນທຶກໄວ້ຖືກເປີດເຜີຍໃນການລະເມີດຂໍ້ມູນທີ່ບໍ່ແມ່ນຂໍ້ມູນ Google. <ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK" /></translation> <translation id="8265018477030547118">ສະເພາະໃນອຸປະກອນນີ້</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index 69e93e96..7f18508 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Virš klaviatūros pasiekiamas {count} išsaugotas adresas.}one{Virš klaviatūros pasiekiamas {count} išsaugotas adresas.}few{Virš klaviatūros pasiekiami {count} išsaugoti adresai.}many{Virš klaviatūros pasiekiama {count} išsaugoto adreso.}other{Virš klaviatūros pasiekiami {count} išsaugotų adresų.}}</translation> <translation id="2421004566762153674">Blokuojami trečiosios šalies slapukai</translation> <translation id="2421044535038393232">Toliau redaguoti</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} pažeistas slaptažodis}one{{COUNT} pažeistas slaptažodis}few{{COUNT} pažeisti slaptažodžiai}many{{COUNT} pažeisto slaptažodžio}other{{COUNT} pažeistų slaptažodžių}}</translation> <translation id="2434405374328098816">Jau išsaugojote <ph name="USERNAME" /> slaptažodį svetainėje <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Rodyti slaptažodį</translation> <translation id="2451654228769116489">Prisegti skirtuką</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Naujausi skirtukai</translation> <translation id="7006788746334555276">Turinio nustatymai</translation> -<translation id="7014087399239955356">Tikrinami slaptažodžiai…</translation> <translation id="7029809446516969842">Slaptažodžiai</translation> <translation id="7053983685419859001">Blokuoti</translation> <translation id="7062545763355031412">Sutikti ir perjungti paskyras</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index b60186a..4665065 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Vienmēr tulkot <ph name="LANGUAGE" /> valodas saturu</translation> <translation id="110724200315609752">Pārslēgties uz atvērto logu</translation> <translation id="1112015203684611006">Neizdevās drukāt.</translation> +<translation id="1118266931011974190">Pēc <ph name="THRESHOLD" /> dienas(-ām)</translation> <translation id="1125564390852150847">Izveidot jaunu cilni.</translation> <translation id="1126013303640354461">Maksājuma veidi un adreses no pakalpojuma Google Pay netiks šifrētas. Pārlūkā Chrome saglabātā pārlūkošanas vēsture netiks sinhronizēta. Jūsu šifrētos datus var lasīt tikai personas, kurām ir jūsu ieejas frāze. Ieejas frāze netiek sūtīta uzņēmumam Google, un uzņēmums Google to neuzglabā. Ja aizmirsīsiet ieejas frāzi vai vēlēsieties mainīt šo iestatījumu, jums būs jāveic sinhronizācijas atiestatīšana. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Tālināt</translation> <translation id="2230173723195178503">Tīmekļa lapa ielādēta</translation> <translation id="2239626343334228536">Notiek pārlūkošanas datu notīrīšana…</translation> +<translation id="22508856139286506">Noraidītie brīdinājumi (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Izvēlne → Vēsture</translation> <translation id="2256933947031277845">Jūsu organizācija ir atļāvusi pierakstīšanos tikai ar noteiktiem kontiem.</translation> <translation id="225943865679747347">Kļūdas kods: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Virs tastatūras ir pieejama {count} saglabāta adrese.}zero{Virs tastatūras ir pieejamas {count} saglabātas adreses.}one{Virs tastatūras ir pieejama {count} saglabāta adrese.}other{Virs tastatūras ir pieejamas {count} saglabātas adreses.}}</translation> <translation id="2421004566762153674">Trešo pušu sīkfaili tiek bloķēti</translation> <translation id="2421044535038393232">Turpināt rediģēt</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} uzlauzta parole}zero{{COUNT} uzlauztu paroļu}one{{COUNT} uzlauzta parole}other{{COUNT} uzlauztas paroles}}</translation> <translation id="2434405374328098816">Jūs jau esat saglabājis paroli lietotājvārdam “<ph name="USERNAME" />” vietnē <ph name="WEBSITE" />.</translation> <translation id="2435457462613246316">Rādīt paroli</translation> <translation id="2451654228769116489">Piespraust cilni</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Pārbaudiet savienojumu un mēģiniet pierakstīties vēlreiz.</translation> <translation id="2637313651144986786">Meklēt cilnēs…</translation> <translation id="2647269890314209800">Izmantojamie sīkfaili</translation> +<translation id="2648721026697078500">Nekad nepārvietot</translation> <translation id="2648803196158606475">Dzēst izlasītos</translation> <translation id="2653659639078652383">Iesniegt</translation> <translation id="2664621323652615289">Apturēt</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">vēl</translation> <translation id="3311748811247479259">Izslēgta</translation> <translation id="3324193307694657476">2. adrese</translation> +<translation id="3328459813621383194">Neaktīvo cilņu pārvietošana</translation> <translation id="3328801116991980348">Vietnes informācija</translation> <translation id="3371831930909698441">Ir pieejams tulkojums. Opcijas, kas pieejamas ekrāna apakšējā daļā.</translation> <translation id="3377063233124932127">Tagad jūsu saglabātās grāmatzīmes, paroles un citi dati atrodas augšdaļā.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Pārskatīt sinhronizētos datus</translation> <translation id="4536418791685807335">Mēģiniet pierakstīties vēlreiz.</translation> <translation id="4540780316273593836">Radās problēma</translation> +<translation id="4550040941166547650">Tikai šajā ierīcē</translation> <translation id="457292989631956153">{COUNT,plural, =1{Vai aizvērt {COUNT} neaktīvu cilni?}zero{Vai aizvērt {COUNT} neaktīvas cilnes?}one{Vai aizvērt {COUNT} neaktīvu cilni?}other{Vai aizvērt {COUNT} neaktīvas cilnes?}}</translation> <translation id="457386861538956877">Vēl...</translation> <translation id="4587235830039045480">Saglabājiet paroli savā Google kontā.</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Grāmatzīme saglabāta mapē “{title}”}zero{Grāmatzīmes saglabātas mapē “{title}”}one{Grāmatzīmes saglabātas mapē “{title}”}other{Grāmatzīmes saglabātas mapē “{title}”}}</translation> <translation id="6196207969502475924">Meklēšana ar balsi</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Aizvērt {COUNT} cilni}zero{Aizvērt {COUNT} cilnes}one{Aizvērt {COUNT} cilni}other{Aizvērt {COUNT} cilnes}}</translation> +<translation id="6210079381482819663">Šeit tiek pārvietotas cilnes, kas nav izmantotas vismaz <ph name="THRESHOLD" /> dienu(-as). <ph name="BEGIN_LINK" />Iestatījumos<ph name="END_LINK" /> varat jebkurā laikā to mainīt.</translation> <translation id="6213567400989743524">Noraidītie brīdinājumi</translation> <translation id="6219550825416862075">Laipni lūdzam atpakaļ!</translation> <translation id="6219688215832490856">Nekad netulkot</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Uzzināt vairāk<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nesen atvērtas cilnes</translation> <translation id="7006788746334555276">Satura iestatījumi</translation> -<translation id="7014087399239955356">Notiek paroļu pārbaude…</translation> <translation id="7029809446516969842">Paroles</translation> <translation id="7053983685419859001">Bloķēt</translation> <translation id="7062545763355031412">Piekrist un pārslēgt kontus</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Sakļauj sadaļu.</translation> <translation id="8065292699993359127">Vietrāžu URL atvēršana inkognito režīmā pārlūkā Chrome</translation> <translation id="806745655614357130">Glabāt datus atsevišķi</translation> +<translation id="8069394452933076548">Izvēlieties, kad uz neaktīvo ciļņu sadaļu tiek pārvietotas cilnes, kas pēdējā laikā nav izmantotas.</translation> <translation id="8073670137947914548">Lejupielāde ir pabeigta</translation> <translation id="8073872304774253879">Uzlabot meklēšanu un pārlūkošanu</translation> <translation id="8076492880354921740">Cilnes</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Nevar pierakstīties</translation> <translation id="9055960261314198756">Uzlabota aizsardzība ir izslēgta</translation> <translation id="9057972802061533987">Nevar sekot. Radās kļūda.</translation> +<translation id="9061495354530850708">Jūsu Google kontā</translation> <translation id="9065203028668620118">Labot</translation> <translation id="9068336935206019333">Atvērt Chrome inkognito režīmā</translation> <translation id="9079935439869366234">Atzīmēt visu kā nelasītu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mk.xtb b/ios/chrome/app/strings/resources/ios_strings_mk.xtb index 2811c0d..cdfe39b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mk.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Секогаш преведувај <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Префрлете се на отворениот прозорец</translation> <translation id="1112015203684611006">Печатењето не успеа.</translation> +<translation id="1118266931011974190">По <ph name="THRESHOLD" /> дена</translation> <translation id="1125564390852150847">Создај нова картичка.</translation> <translation id="1126013303640354461">Начините на плаќање и адресите од Google Pay нема да бидат шифрирани. Историјата на прелистување од Chrome нема да се синхронизира. Само лицата што ја имаат вашата лозинка може да ги прочитаат шифрираните податоци. Лозинката не се испраќа до Google и тој не ја складира. Ако ја заборавите лозинката или сакате да ја промените поставкава, ќе треба да ја ресетирате синхронизацијата. <ph name="BEGIN_LINK" />Дознајте повеќе<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Одзумирај</translation> <translation id="2230173723195178503">Веб-страницата е вчитана</translation> <translation id="2239626343334228536">Се чистат податоците од прелистувањето…</translation> +<translation id="22508856139286506">Отфрлени предупредувања (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Мени → Историја</translation> <translation id="2256933947031277845">Вашата организација ви дозволува да се најавите само со одредени сметки.</translation> <translation id="225943865679747347">Код на грешка: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} зачувана адреса достапна над тастатурата.}one{{count} зачувана адреса достапни над тастатурата.}other{{count} зачувани адреси достапни над тастатурата.}}</translation> <translation id="2421004566762153674">Се блокираат колачиња од трети страни</translation> <translation id="2421044535038393232">Продолжи со изменување</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} компромитирана лозинка}one{{COUNT} компромитирана лозинка}other{{COUNT} компромитирани лозинки}}</translation> <translation id="2434405374328098816">Веќе зачувавте лозинка за „<ph name="USERNAME" />“ на <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Прикажи ја лозинката</translation> <translation id="2451654228769116489">Прикачи картичка</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Проверете ја врската и обидете се повторно да се најавите.</translation> <translation id="2637313651144986786">Пребарајте ги картичките…</translation> <translation id="2647269890314209800">Колачиња во употреба</translation> +<translation id="2648721026697078500">Никогаш не преместувај</translation> <translation id="2648803196158606475">Избриши ги прочитаните</translation> <translation id="2653659639078652383">Испрати</translation> <translation id="2664621323652615289">Запри</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">повеќе</translation> <translation id="3311748811247479259">Исклучено</translation> <translation id="3324193307694657476">Адреса 2</translation> +<translation id="3328459813621383194">Преместување неактивни картички</translation> <translation id="3328801116991980348">Информации за веб-локација</translation> <translation id="3371831930909698441">„Преведи“ е достапна. Достапни се опции на дното на екранот.</translation> <translation id="3377063233124932127">Отсега вашите зачувани обележувачи, лозинки и друго се најгоре.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Прегледајте ги синхронизираните податоци</translation> <translation id="4536418791685807335">Обидете се да се најавите повторно.</translation> <translation id="4540780316273593836">Нешто тргна наопаку</translation> +<translation id="4550040941166547650">Само на уредов</translation> <translation id="457292989631956153">{COUNT,plural, =1{Дали да се затвори {COUNT} неактивна картичка?}one{Дали да се затворат {COUNT} неактивна картичка?}other{Дали да се затворат {COUNT} неактивни картички?}}</translation> <translation id="457386861538956877">Повеќе…</translation> <translation id="4587235830039045480">Зачувајте ја лозинката на вашата сметка на Google</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Додаден е обележувач во {title}}one{Додадени се обележувачи во {title}}other{Додадени се обележувачи во {title}}}</translation> <translation id="6196207969502475924">Гласовно пребарување</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Затвори {COUNT} картичка}one{Затвори {COUNT} картичка}other{Затвори {COUNT} картички}}</translation> +<translation id="6210079381482819663">Картичките што не се користат <ph name="THRESHOLD" /> или повеќе дена се преместуваат тука. Ова може да го промените во секое време во <ph name="BEGIN_LINK" />Поставки<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Отфрлени предупредувања</translation> <translation id="6219550825416862075">Добре дојдовте назад</translation> <translation id="6219688215832490856">Никогаш не преведувај</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Дознајте повеќе<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Неодамнешни картички</translation> <translation id="7006788746334555276">Поставки за содржина</translation> -<translation id="7014087399239955356">Се проверуваат лозинките…</translation> <translation id="7029809446516969842">Лозинки</translation> <translation id="7053983685419859001">Блокирај</translation> <translation id="7062545763355031412">Прифати и замени ги сметките</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Го собира делот.</translation> <translation id="8065292699993359127">Отворај URL-адреси во Chrome во „Инкогнито“</translation> <translation id="806745655614357130">Не поврзувај ги податоците</translation> +<translation id="8069394452933076548">Изберете кога картичките што не сте ги користеле неодамна да се преместуваат во делот за неактивни картички.</translation> <translation id="8073670137947914548">Преземањето заврши</translation> <translation id="8073872304774253879">Подобрете ги пребарувањата и прелистувањето</translation> <translation id="8076492880354921740">Картички</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Не може да се најави</translation> <translation id="9055960261314198756">„Подобрената заштита“ е исклучена</translation> <translation id="9057972802061533987">Не може да се следи. Нешто тргна наопаку.</translation> +<translation id="9061495354530850708">Во вашата сметка на Google</translation> <translation id="9065203028668620118">Измени</translation> <translation id="9068336935206019333">Отвори во „Инкогнито“ на Chrome</translation> <translation id="9079935439869366234">Означи ги сите како непрочитани</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index 3282818..1191be09 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">സൂം ഔട്ട് ചെയ്യുക</translation> <translation id="2230173723195178503">വെബ്പേജ് ലോഡ് ചെയ്തു</translation> <translation id="2239626343334228536">ബ്രൗസിംഗ് ഡാറ്റ മായ്ക്കുന്നു...</translation> +<translation id="22508856139286506">ഡിസ്മിസ് ചെയ്ത മുന്നറിയിപ്പുകൾ (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">മെനു → ചരിത്രം</translation> <translation id="2256933947031277845">ചില അക്കൗണ്ടുകൾ ഉപയോഗിച്ച് മാത്രമേ സൈൻ ഇൻ ചെയ്യാൻ നിങ്ങളുടെ സ്ഥാപനം അനുവദിക്കൂ.</translation> <translation id="225943865679747347">പിശക് കോഡ്: <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{നിങ്ങളുടെ കീബോർഡിന് മുകളിൽ {count} സംരക്ഷിച്ച വിലാസം ലഭ്യമാണ്.}other{നിങ്ങളുടെ കീബോർഡിന് മുകളിൽ {count} സംരക്ഷിച്ച വിലാസങ്ങൾ ലഭ്യമാണ്.}}</translation> <translation id="2421004566762153674">മൂന്നാം കക്ഷി കുക്കികളെ ബ്ലോക്ക് ചെയ്യുന്നു</translation> <translation id="2421044535038393232">എഡിറ്റ് ചെയ്യുന്നത് തുടരുക</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{അപഹരിക്കപ്പെട്ട {COUNT} പാസ്വേഡ്}other{അപഹരിക്കപ്പെട്ട {COUNT} പാസ്വേഡുകൾ}}</translation> <translation id="2434405374328098816">നിങ്ങൾ "<ph name="USERNAME" />" എന്നതിനുള്ള പാസ്വേഡ് <ph name="WEBSITE" /> എന്ന വെബ്സൈറ്റിൽ മുമ്പേ സംരക്ഷിച്ചു</translation> <translation id="2435457462613246316">പാസ്വേഡ് കാണിക്കുക</translation> <translation id="2451654228769116489">ടാബ് പിൻ ചെയ്യുക</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation> <translation id="7004499039102548441">സമീപകാല ടാബുകൾ</translation> <translation id="7006788746334555276">ഉള്ളടക്ക ക്രമീകരണങ്ങള്</translation> -<translation id="7014087399239955356">പാസ്വേഡുകൾ പരിശോധിക്കുന്നു...</translation> <translation id="7029809446516969842">പാസ്വേഡുകള്</translation> <translation id="7053983685419859001">തടയുക</translation> <translation id="7062545763355031412">അംഗീകരിച്ചശേഷം, അക്കൗണ്ടുകൾ മാറുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb index 1f3da31..e471069 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Таны гарын дээр хадгалсан {count} хаяг боломжтой байна.}other{Таны гарын дээр хадгалсан {count} хаяг боломжтой байна.}}</translation> <translation id="2421004566762153674">Гуравдагч талын күүкиг блоклож байна</translation> <translation id="2421044535038393232">Үргэлжлүүлэн засах</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{Алдагдсан {COUNT} нууц үг}other{Алдагдсан {COUNT} нууц үг}}</translation> <translation id="2434405374328098816">Та <ph name="WEBSITE" />-д аль хэдийн "<ph name="USERNAME" />"-н нууц үгийг хадгалсан</translation> <translation id="2435457462613246316">Нууц үг харуулах</translation> <translation id="2451654228769116489">Таб бэхлэх</translation> @@ -923,7 +922,6 @@ <ph name="BEGIN_LINK" />Нэмэлт мэдээлэл авах<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Саяхан нээсэн табууд</translation> <translation id="7006788746334555276">Агуулгын тохиргоо</translation> -<translation id="7014087399239955356">Нууц үгнүүдийг шалгаж байна...</translation> <translation id="7029809446516969842">Нууц үг</translation> <translation id="7053983685419859001">Блоклох</translation> <translation id="7062545763355031412">Зөвшөөрч, бүртгэлийг шилжүүлэх</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 0056090..15491f4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{तुमच्या कीबोर्डच्या वरती सेव्ह केलेला {count} अॅड्रेस उपलब्ध आहे.}other{तुमच्या कीबोर्डच्या वरती सेव्ह केलेले {count} अॅड्रेस उपलब्ध आहेत.}}</translation> <translation id="2421004566762153674">तृतीय पक्षाच्या कुकी ब्लॉक करत आहे</translation> <translation id="2421044535038393232">संपादन करणे सुरू ठेवा</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} धोक्यात असलेला पासवर्ड}other{{COUNT} धोक्यात असलेले पासवर्ड}}</translation> <translation id="2434405374328098816">तुम्ही <ph name="WEBSITE" /> वर "<ph name="USERNAME" />" चा पासवर्ड आधीच सेव्ह केला आहे</translation> <translation id="2435457462613246316">पासवर्ड दर्शवा</translation> <translation id="2451654228769116489">टॅब पिन करा</translation> @@ -925,7 +924,6 @@ <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="7004499039102548441">अलीकडील टॅब</translation> <translation id="7006788746334555276">आशय सेटिंग्ज</translation> -<translation id="7014087399239955356">पासवर्ड तपासत आहे…</translation> <translation id="7029809446516969842">पासवर्ड</translation> <translation id="7053983685419859001">ब्लॉक करा</translation> <translation id="7062545763355031412">स्वीकार करा आणि खाती स्विच करा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 64db1045..b7179ce 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} alamat yang disimpan tersedia di sebelah atas papan kekunci anda.}other{{count} alamat yang disimpan tersedia di sebelah atas papan kekunci anda.}}</translation> <translation id="2421004566762153674">Menyekat kuki pihak ketiga</translation> <translation id="2421044535038393232">Teruskan Mengedit</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} Kata Laluan yang Terjejas}other{{COUNT} Kata Laluan yang Terjejas}}</translation> <translation id="2434405374328098816">Anda telah pun menyimpan kata laluan untuk "<ph name="USERNAME" />" pada <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Paparkan kata laluan</translation> <translation id="2451654228769116489">Semat Tab</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Tab Terbaharu</translation> <translation id="7006788746334555276">Tetapan Kandungan</translation> -<translation id="7014087399239955356">Menyemak Kata Laluan…</translation> <translation id="7029809446516969842">Kata laluan</translation> <translation id="7053983685419859001">Sekat</translation> <translation id="7062545763355031412">Terima dan tukar akaun</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb index 73e2a46..da3efa6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_my.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{သိမ်းထားသော လိပ်စာ {count} ခု သင့်ကီးဘုတ်ပေါ်တွင် ရနိုင်သည်။}other{သိမ်းထားသော လိပ်စာ {count} ခု သင့်ကီးဘုတ်ပေါ်တွင် ရနိုင်သည်။}}</translation> <translation id="2421004566762153674">ပြင်ပအဖွဲ့အစည်း၏ ကွတ်ကီးများကို ပိတ်ထားသည်</translation> <translation id="2421044535038393232">ဆက်လက်တည်းဖြတ်ရန်</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{ကျိုးပေါက်ထားသည့် စကားဝှက် {COUNT} ခု}other{ကျိုးပေါက်ထားသည့် စကားဝှက် {COUNT} ခု}}</translation> <translation id="2434405374328098816"><ph name="WEBSITE" /> တွင် “<ph name="USERNAME" />” အတွက် စကားဝှက်ကို သိမ်းပြီးဖြစ်သည်</translation> <translation id="2435457462613246316">စကားဝှက်ကို ပြပါ</translation> <translation id="2451654228769116489">တဘ် ပင်ထိုးရန်</translation> @@ -923,7 +922,6 @@ <ph name="BEGIN_LINK" />ပိုမိုလေ့လာရန်<ph name="END_LINK" /></translation> <translation id="7004499039102548441">မကြာမီက တဲဘ်များ</translation> <translation id="7006788746334555276">အကြောင်းအရာ ဆက်တင်များ</translation> -<translation id="7014087399239955356">စကားဝှက်များ စစ်ဆေးနေသည်…</translation> <translation id="7029809446516969842">စကားဝှက်များ</translation> <translation id="7053983685419859001">ပိတ်ဆို့ရန်</translation> <translation id="7062545763355031412">လက်ခံပြီး အကောင့်များကိုပြောင်းပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index 384f3fb..b5992be 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">सँधै अनुवाद गर्नुहोस् <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">खुला विन्डोमा जानुहोस्</translation> <translation id="1112015203684611006">छाप्न सकिएन।</translation> +<translation id="1118266931011974190"><ph name="THRESHOLD" /> दिनपछि</translation> <translation id="1125564390852150847">नयाँ ट्याब सिर्जना गर्नुहोस्।</translation> <translation id="1126013303640354461">Google Pay मा भएका भुक्तानी विधि र ठेगानाहरू इन्क्रिप्ट गरिने छैन। Chrome को ब्राउजिङ हिस्ट्री सिंक गरिने छैन। तपाईंको पासफ्रेज भएका मान्छे मात्र इन्क्रिप्ट गरिएको तपाईंको जानकारी पढ्न सक्छन्। उक्त पासफ्रेज Google मा पठाइँदैन वा Google ले उक्त पासफ्रेज भण्डारण गरेर राख्दैन। तपाईंले आफ्नो पासफ्रेज बिर्सनुभयो वा तपाईं यो सेटिङ बदल्न चाहनुहुन्छ भने तपाईंले सिंक गर्ने सुविधा रिसेट गर्नु पर्ने हुन्छ। <ph name="BEGIN_LINK" />थप जान्नुहोस्<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{तपाईंको किबोर्डको माथिल्लो भागमा {count} वटा सेभ गरिएको ठेगाना उपलब्ध छ।}other{तपाईंको किबोर्डको माथिल्लो भागमा {count} वटा सेभ गरिएको ठेगाना उपलब्ध छ।}}</translation> <translation id="2421004566762153674">तेस्रो पक्षीय कुकीहरूलाई रोक लगाउँदै</translation> <translation id="2421044535038393232">सम्पादन गरिरहनुहोस्</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} वटा पासवर्ड ह्याक वा चोरी भएको छ}other{{COUNT} वटा पासवर्ड ह्याक वा चोरी भएका छन्}}</translation> <translation id="2434405374328098816">तपाईंले <ph name="WEBSITE" /> का हकमा "<ph name="USERNAME" />" को पासवर्ड सेभ गरिसक्नुभएको छ</translation> <translation id="2435457462613246316">पासवर्ड देखाउनुहोस्</translation> <translation id="2451654228769116489">ट्याब पिन गर्नुहोस्</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">आफ्नो इन्टरनेट जाँच्नुहोस् र फेरि साइन इन गरी हेर्नुहोस्।</translation> <translation id="2637313651144986786">ट्याबहरू खोज्नुहोस्...</translation> <translation id="2647269890314209800">प्रयोगमा रहेका कुकीहरू</translation> +<translation id="2648721026697078500">कहिल्यै पनि नसारियोस्</translation> <translation id="2648803196158606475">पढिसकिएकोलाई मेट्नुहोस्</translation> <translation id="2653659639078652383">पेश गर्नुहोस्</translation> <translation id="2664621323652615289">रोक्नुहोस्</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">थप</translation> <translation id="3311748811247479259">निष्क्रिय छ</translation> <translation id="3324193307694657476">ठेगाना 2</translation> +<translation id="3328459813621383194">निष्क्रिय ट्याबहरू सार्नुहोस्</translation> <translation id="3328801116991980348">साइट जानकारी</translation> <translation id="3371831930909698441">अनुवाद उपलब्ध छ। विकल्पहरू स्क्रिनका पुछारतिर उपलब्ध छन्।</translation> <translation id="3377063233124932127">अब तपाईंले सेभ गर्नुभएका बुकमार्क तथा पासवर्डलगायतका कुराहरू सिरानमा देखिन्छन्।</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">आफ्नो सिंक गरिएको डेटाको समीक्षा गर्नुहोस्</translation> <translation id="4536418791685807335">फेरि साइन इन गरी हेर्नुहोस्।</translation> <translation id="4540780316273593836">केही चिज गडबड भयो</translation> +<translation id="4550040941166547650">यो डिभाइसमा मात्र</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} निष्क्रिय ट्याब बन्द गर्ने हो?}other{{COUNT} वटा निष्क्रिय ट्याब बन्द गर्ने हो?}}</translation> <translation id="457386861538956877">थप...</translation> <translation id="4587235830039045480">आफ्नो Google खातामा पासवर्ड सेभ गर्नुहोस्</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{{title} मा बुकमार्क गरियो}other{{title} मा बुकमार्क गरियो}}</translation> <translation id="6196207969502475924">आवाज खोज</translation> <translation id="6202364442240589072">{COUNT,plural, =1{{COUNT} वटा ट्याब बन्द गर्नुहोस्}other{{COUNT} वटा ट्याब बन्द गर्नुहोस्}}</translation> +<translation id="6210079381482819663"><ph name="THRESHOLD" /> वा सोभन्दा धेरै दिनसम्म प्रयोग नगरिएका ट्याबहरू सारेर यहाँ ल्याइन्छन्। तपाईं जुनसुकै बेला <ph name="BEGIN_LINK" />सेटिङ<ph name="END_LINK" />मा गई यो सेटिङ बदल्न सक्नुहुन्छ।</translation> <translation id="6213567400989743524">खारेज गरिएका चेतावनीहरू</translation> <translation id="6219550825416862075">फेरि स्वागत छ</translation> <translation id="6219688215832490856">कहिल्यै पनि अनुवाद नगर्नुहोस्</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />थप जान्नुहोस्<ph name="END_LINK" /></translation> <translation id="7004499039102548441">हालका ट्याबहरू</translation> <translation id="7006788746334555276">सामग्री सेटिङहरू</translation> -<translation id="7014087399239955356">निम्न साइट वा एपका पासवर्डहरू जाँच गरिँदै छन्…</translation> <translation id="7029809446516969842">पासवर्डहरू</translation> <translation id="7053983685419859001">रोक्नुहोस्</translation> <translation id="7062545763355031412">स्वीकार गरी खाताहरू स्विच गर्नुहोस्</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">खण्ड संक्षिप्त गर्छ।</translation> <translation id="8065292699993359127">URL हरू Chrome को इन्कोग्निटो मोडमा खोल्नुहोस्</translation> <translation id="806745655614357130">मेरो डेटा अलग राख्नुहोस्</translation> +<translation id="8069394452933076548">हालसालै प्रयोग नगरिएका ट्याबहरू सारेर निष्क्रिय ट्याबको खण्डमा कहिले लैजाने भन्ने कुरा छनौट गर्नुहोस्।</translation> <translation id="8073670137947914548">डाउनलोड भयो</translation> <translation id="8073872304774253879">खोज तथा ब्राउजिङलाई अझ राम्रा बनाउनुहोस्</translation> <translation id="8076492880354921740">ट्याबहरू</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">साइन इन गर्न सकिदैन</translation> <translation id="9055960261314198756">"उन्नत सुरक्षा" अफ गरिएको छ</translation> <translation id="9057972802061533987">फलो गर्न सकिएन। केही चिज गडबड भयो।</translation> +<translation id="9061495354530850708">तपाईंको Google खातामा</translation> <translation id="9065203028668620118">सम्पादन गर्नुहोस</translation> <translation id="9068336935206019333">Chrome को इन्कोग्निटो मोडमा खोल्नुहोस्</translation> <translation id="9079935439869366234">नपढिएका भनी सबैलाई चिन्ह लगाउनुहोस्</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 58a239c..1abf198 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} opgeslagen adres beschikbaar boven je toetsenbord.}other{{count} opgeslagen adressen beschikbaar boven je toetsenbord.}}</translation> <translation id="2421004566762153674">Cookies van derden blokkeren</translation> <translation id="2421044535038393232">Doorgaan met bewerken</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} gehackt wachtwoord}other{{COUNT} gehackte wachtwoorden}}</translation> <translation id="2434405374328098816">Je hebt al een wachtwoord voor <ph name="USERNAME" /> opgeslagen op <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Wachtwoord bekijken</translation> <translation id="2451654228769116489">Tabblad vastzetten</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Recent gebruikte tabbladen</translation> <translation id="7006788746334555276">Instellingen voor content</translation> -<translation id="7014087399239955356">Wachtwoorden checken...</translation> <translation id="7029809446516969842">Wachtwoorden</translation> <translation id="7053983685419859001">Blokkeren</translation> <translation id="7062545763355031412">Accepteren en account wijzigen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index 64ef5d75..c8f94ec 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} lagret adresse er tilgjengelig over tastaturet.}other{{count} lagrede adresser er tilgjengelige over tastaturet.}}</translation> <translation id="2421004566762153674">Blokkerer informasjonskapsler fra tredjeparter</translation> <translation id="2421044535038393232">Fortsett redigeringen</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} passord er utsatt for sikkerhetsbrudd}other{{COUNT} passord er utsatt for sikkerhetsbrudd}}</translation> <translation id="2434405374328098816">Du har allerede lagret et passord for «<ph name="USERNAME" />» på <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Vis passord</translation> <translation id="2451654228769116489">Fest fanen</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nylige faner</translation> <translation id="7006788746334555276">Innholdsinnstillinger</translation> -<translation id="7014087399239955356">Sjekker passord …</translation> <translation id="7029809446516969842">Passord</translation> <translation id="7053983685419859001">Blokkér</translation> <translation id="7062545763355031412">Godta og bytt konto</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb index e5b20c0..443226c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">ଜୁମ୍ ଆଉଟ୍ କରନ୍ତୁ</translation> <translation id="2230173723195178503">ୱେବ୍ପୃଷ୍ଠା ଲୋଡ୍ କରାଗଲା</translation> <translation id="2239626343334228536">ବ୍ରାଇଜିଂ ଡାଟା ଖାଲି ହେଉଛି...</translation> +<translation id="22508856139286506">ଖାରଜ କରାଯାଇଥିବା ଚେତାବନୀ (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">ମେନୁ → ଇତିହାସ</translation> <translation id="2256933947031277845">ଆପଣଙ୍କ ସଂସ୍ଥା ଆପଣଙ୍କୁ କେବଳ ନିର୍ଦ୍ଦିଷ୍ଟ କିଛି ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ ସାଇନ ଇନ କରିବାକୁ ଅନୁମତି ଦିଏ।</translation> <translation id="225943865679747347">ତ୍ରୁଟି କୋଡ୍: <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{ଆପଣଙ୍କ କୀବୋର୍ଡ ଉପରେ {count}ଟି ସେଭ କରାଯାଇଥିବା ଠିକଣା ଉପଲବ୍ଧ ଅଛି।}other{ଆପଣଙ୍କ କୀବୋର୍ଡ ଉପରେ {count}ଟି ସେଭ କରାଯାଇଥିବା ଠିକଣା ଉପଲବ୍ଧ ଅଛି।}}</translation> <translation id="2421004566762153674">ତୃତୀୟ-ପକ୍ଷ କୁକୀଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରାଯାଉଛି</translation> <translation id="2421044535038393232">ସମ୍ପାଦନା ଜାରି ରଖନ୍ତୁ</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT}ଟି ଚୋରି ହୋଇଯାଇଥିବା ପାସୱାର୍ଡ}other{{COUNT}ଟି ଚୋରି ହୋଇଯାଇଥିବା ପାସୱାର୍ଡ}}</translation> <translation id="2434405374328098816">ଆପଣ <ph name="WEBSITE" />ରେ "<ph name="USERNAME" />" ପାଇଁ ପୂର୍ବରୁ ଏକ ପାସୱାର୍ଡ ସେଭ କରିଛନ୍ତି</translation> <translation id="2435457462613246316">ପାସୱାର୍ଡ ଦେଖାନ୍ତୁ</translation> <translation id="2451654228769116489">ଟାବକୁ ପିନ କରନ୍ତୁ</translation> @@ -921,7 +921,6 @@ <ph name="BEGIN_LINK" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK" /></translation> <translation id="7004499039102548441">ସାମ୍ପ୍ରତିକ ଟାବ୍</translation> <translation id="7006788746334555276">ବିଷୟବସ୍ତୁ ସେଟିଂସ୍</translation> -<translation id="7014087399239955356">ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରାଯାଉଛି…</translation> <translation id="7029809446516969842">ପାସୱାର୍ଡଗୁଡିକ</translation> <translation id="7053983685419859001">ଅବରୋଧ କରନ୍ତୁ</translation> <translation id="7062545763355031412">ଆକାଉଣ୍ଟ ଗୁଡ଼ିକ ସ୍ଵିଚ କରନ୍ତୁ ଏବଂ ଗ୍ରହଣ କରନ୍ତୁ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb index cd24c52..a6c1390 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਪਤਾ ਤੁਹਾਡੇ ਕੀ-ਬੋਰਡ ਦੇ ਉੱਪਰ ਉਪਲਬਧ ਹੈ।}one{{count} ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਪਤਾ ਤੁਹਾਡੇ ਕੀ-ਬੋਰਡ ਦੇ ਉੱਪਰ ਉਪਲਬਧ ਹੈ।}other{{count} ਰੱਖਿਅਤ ਕੀਤੇ ਗਏ ਪਤੇ ਤੁਹਾਡੇ ਕੀ-ਬੋਰਡ ਦੇ ਉੱਪਰ ਉਪਲਬਧ ਹਨ।}}</translation> <translation id="2421004566762153674">ਤੀਜੀ-ਧਿਰ ਵਾਲੀਆਂ ਕੁਕੀਜ਼ ਬਲਾਕ ਕੀਤੀਆਂ ਜਾ ਰਹੀਆਂ ਹਨ</translation> <translation id="2421044535038393232">ਸੰਪਾਦਨ ਕਰਦੇ ਰਹੋ</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ਪਾਸਵਰਡ ਨਾਲ ਛੇੜਛਾੜ ਹੋਈ}one{{COUNT} ਪਾਸਵਰਡ ਨਾਲ ਛੇੜਛਾੜ ਹੋਈ}other{{COUNT} ਪਾਸਵਰਡਾਂ ਨਾਲ ਛੇੜਛਾੜ ਹੋਈ}}</translation> <translation id="2434405374328098816">ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ "<ph name="USERNAME" />" ਲਈ <ph name="WEBSITE" /> 'ਤੇ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰ ਲਿਆ ਹੈ</translation> <translation id="2435457462613246316">ਪਾਸਵਰਡ ਵੇਖੋ</translation> <translation id="2451654228769116489">ਟੈਬ ਪਿੰਨ ਕਰੋ</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />ਹੋਰ ਜਾਣੋ<ph name="END_LINK" /></translation> <translation id="7004499039102548441">ਹਾਲੀਆ ਟੈਬਸ</translation> <translation id="7006788746334555276">ਸਮੱਗਰੀ ਸੈਟਿੰਗਾਂ</translation> -<translation id="7014087399239955356">ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ...</translation> <translation id="7029809446516969842">ਪਾਸਵਰਡ</translation> <translation id="7053983685419859001">ਬਲੌਕ ਕਰੋ</translation> <translation id="7062545763355031412">ਸਵੀਕਾਰ ਕਰੋ ਅਤੇ ਖਾਤੇ ਬਦਲੀ ਕਰੋ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index fa9d2fe3..7e8b780 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} zapisany adres dostępny nad klawiaturą.}few{{count} zapisane adresy dostępne nad klawiaturą.}many{{count} zapisanych adresów dostępnych nad klawiaturą.}other{{count} zapisanego adresu dostępnego nad klawiaturą.}}</translation> <translation id="2421004566762153674">Blokowanie plików cookie innych firm</translation> <translation id="2421044535038393232">Edytuj dalej</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} przejęte hasło}few{{COUNT} przejęte hasła}many{{COUNT} przejętych haseł}other{{COUNT} przejętego hasła}}</translation> <translation id="2434405374328098816">Masz już zapisane hasło do strony <ph name="WEBSITE" /> powiązane z nazwą użytkownika „<ph name="USERNAME" />”</translation> <translation id="2435457462613246316">Pokaż hasło</translation> <translation id="2451654228769116489">Przypnij kartę</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Ostatnie karty</translation> <translation id="7006788746334555276">Ustawienia treści</translation> -<translation id="7014087399239955356">Sprawdzam hasła…</translation> <translation id="7029809446516969842">Hasła</translation> <translation id="7053983685419859001">Blokuj</translation> <translation id="7062545763355031412">Zaakceptuj i przełącz konta</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 7c617d7..b0d5240 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">Diminuir zoom</translation> <translation id="2230173723195178503">Página da Web carregada</translation> <translation id="2239626343334228536">Limpando dados de navegação…</translation> +<translation id="22508856139286506">Avisos dispensados (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menu → Histórico</translation> <translation id="2256933947031277845">Sua organização permite que você faça login apenas com determinadas contas.</translation> <translation id="225943865679747347">Código de erro: <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} endereço salvo disponível acima do teclado.}one{{count} endereço salvo disponível acima do teclado.}other{{count} endereços salvos disponíveis acima do teclado.}}</translation> <translation id="2421004566762153674">Bloqueando cookies de terceiros</translation> <translation id="2421044535038393232">Continuar editando</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} senha comprometida}one{{COUNT} senha comprometida}other{{COUNT} senhas comprometidas}}</translation> <translation id="2434405374328098816">Você já salvou uma senha para "<ph name="USERNAME" />" em <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Mostrar senha</translation> <translation id="2451654228769116489">Fixar guia</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Guias recentes</translation> <translation id="7006788746334555276">Configurações de conteúdo</translation> -<translation id="7014087399239955356">Verificando senhas…</translation> <translation id="7029809446516969842">Senhas</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7062545763355031412">Aceitar e alternar entre contas</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index cac599e..0ec0c0c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} morada guardada disponível acima do teclado.}other{{count} moradas guardadas disponíveis acima do teclado.}}</translation> <translation id="2421004566762153674">Bloquear cookies de terceiros</translation> <translation id="2421044535038393232">Continuar a editar</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} palavra-passe comprometida}other{{COUNT} palavras-passe comprometidas}}</translation> <translation id="2434405374328098816">Já guardou uma palavra-passe para "<ph name="USERNAME" />" em <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Mostrar palavra-passe</translation> <translation id="2451654228769116489">Fixar separador</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Separadores recentes</translation> <translation id="7006788746334555276">Definições de Conteúdo</translation> -<translation id="7014087399239955356">A verificar as palavras-passe…</translation> <translation id="7029809446516969842">Palavras-passe</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7062545763355031412">Aceitar e mudar de contas</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 6ffddc1..ed6ef5e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} adresă salvată disponibilă deasupra tastaturii.}few{{count} adrese salvate disponibile deasupra tastaturii.}other{{count} de adrese salvate disponibile deasupra tastaturii.}}</translation> <translation id="2421004566762153674">Blocarea cookie-urilor terță parte</translation> <translation id="2421044535038393232">Continuă editarea</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} parolă compromisă}few{{COUNT} parole compromise}other{{COUNT} de parole compromise}}</translation> <translation id="2434405374328098816">Ai salvat deja o parolă pentru <ph name="USERNAME" /> la <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Afișați parola</translation> <translation id="2451654228769116489">Fixează fila</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation> <translation id="7004499039102548441">File recente</translation> <translation id="7006788746334555276">Setări privind conținutul</translation> -<translation id="7014087399239955356">Se verifică parolele…</translation> <translation id="7029809446516969842">Parole</translation> <translation id="7053983685419859001">Blochează</translation> <translation id="7062545763355031412">Acceptă și comută conturile</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 243c97c2..1229eb2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Всегда переводить <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Переключиться на открытое окно</translation> <translation id="1112015203684611006">Ошибка печати</translation> +<translation id="1118266931011974190">Через <ph name="THRESHOLD" /> дн.</translation> <translation id="1125564390852150847">Создать вкладку</translation> <translation id="1126013303640354461">Сведения о способах оплаты и адресах из Google Pay не будут шифроваться. История браузера Chrome не будет синхронизироваться. Прочесть ваши зашифрованные данные сможет только тот, кто знает кодовую фразу. Эта фраза не отправляется компании Google и не хранится на ее серверах. Если вы ее забыли или хотите изменить, сбросьте настройки синхронизации. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} сохраненный адрес показан над клавиатурой.}one{{count} сохраненный адрес показан над клавиатурой.}few{{count} сохраненных адреса показаны над клавиатурой.}many{{count} сохраненных адресов показаны над клавиатурой.}other{{count} сохраненного адреса показаны над клавиатурой.}}</translation> <translation id="2421004566762153674">Блокировать сторонние файлы cookie</translation> <translation id="2421044535038393232">Продолжить редактирование</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} раскрытый пароль}one{{COUNT} раскрытый пароль}few{{COUNT} раскрытых пароля}many{{COUNT} раскрытых паролей}other{{COUNT} раскрытого пароля}}</translation> <translation id="2434405374328098816">Пароль пользователя <ph name="USERNAME" /> для сайта <ph name="WEBSITE" /> уже сохранен.</translation> <translation id="2435457462613246316">Показать пароль</translation> <translation id="2451654228769116489">Закрепить вкладку</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">Проверьте подключение и повторите попытку.</translation> <translation id="2637313651144986786">Поиск по вкладкам</translation> <translation id="2647269890314209800">Использование файлов cookie</translation> +<translation id="2648721026697078500">Никогда</translation> <translation id="2648803196158606475">Удалить прочитанное</translation> <translation id="2653659639078652383">Отправить</translation> <translation id="2664621323652615289">Остановить</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">ещё</translation> <translation id="3311748811247479259">Отключено</translation> <translation id="3324193307694657476">Адрес, строка 2</translation> +<translation id="3328459813621383194">Неактивные вкладки</translation> <translation id="3328801116991980348">Информация о сайте</translation> <translation id="3371831930909698441">Доступен перевод. Параметры указаны в нижней части экрана.</translation> <translation id="3377063233124932127">Теперь ваши сохраненные закладки, пароли и другие данные будут отображаться наверху.</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">Проверить синхронизированные данные</translation> <translation id="4536418791685807335">Войдите в аккаунт снова.</translation> <translation id="4540780316273593836">Ошибка</translation> +<translation id="4550040941166547650">Только на этом устройстве</translation> <translation id="457292989631956153">{COUNT,plural, =1{Закрыть {COUNT} неактивную вкладку?}one{Закрыть {COUNT} неактивную вкладку?}few{Закрыть {COUNT} неактивные вкладки?}many{Закрыть {COUNT} неактивных вкладок?}other{Закрыть {COUNT} неактивной вкладки?}}</translation> <translation id="457386861538956877">Ещё...</translation> <translation id="4587235830039045480">Сохраните пароль в аккаунте Google.</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Закладка добавлена в папку "{title}".}one{Закладки добавлены в папку "{title}".}few{Закладки добавлены в папку "{title}".}many{Закладки добавлены в папку "{title}".}other{Закладки добавлены в папку "{title}".}}</translation> <translation id="6196207969502475924">Голосовой поиск</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Закрыть {COUNT} вкладку}one{Закрыть {COUNT} вкладку}few{Закрыть {COUNT} вкладки}many{Закрыть {COUNT} вкладок}other{Закрыть {COUNT} вкладки}}</translation> +<translation id="6210079381482819663">Вкладки, которые не использовались в течение нескольких дней (<ph name="THRESHOLD" />), перемещаются сюда. Это поведение можно в любой момент изменить в <ph name="BEGIN_LINK" />настройках<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Закрытые предупреждения</translation> <translation id="6219550825416862075">С возвращением!</translation> <translation id="6219688215832490856">Никогда не переводить</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Недавние вкладки</translation> <translation id="7006788746334555276">Настройки контента</translation> -<translation id="7014087399239955356">Проверка паролей…</translation> <translation id="7029809446516969842">Пароли</translation> <translation id="7053983685419859001">Блокировать</translation> <translation id="7062545763355031412">Принять и переключиться</translation> @@ -969,7 +972,7 @@ <translation id="7459628154744868585">Улучшенная защита включена</translation> <translation id="746684838091935575">3. Выберите Chrome.</translation> <translation id="7472734401283673885">Название компании</translation> -<translation id="7473891865547856676">Пропустить</translation> +<translation id="7473891865547856676">Нет, спасибо</translation> <translation id="7491131399623468277">Открыть настройки</translation> <translation id="750228856503700085">Обновления недоступны</translation> <translation id="750493650310597496">Закладки не выбраны</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">Сворачивает раздел.</translation> <translation id="8065292699993359127">Открыть URL в Chrome в режиме инкогнито</translation> <translation id="806745655614357130">Не объединять данные</translation> +<translation id="8069394452933076548">Выберите, когда неиспользуемые вкладки перемещаются в список неактивных.</translation> <translation id="8073670137947914548">Скачивание завершено</translation> <translation id="8073872304774253879">Улучшить функции поиска и просмотра страниц</translation> <translation id="8076492880354921740">Вкладки</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">Ошибка</translation> <translation id="9055960261314198756">Улучшенная защита отключена</translation> <translation id="9057972802061533987">Не удалось подписаться. Произошла ошибка.</translation> +<translation id="9061495354530850708">В аккаунте Google</translation> <translation id="9065203028668620118">Изменить</translation> <translation id="9068336935206019333">Открыть в Chrome инкогнито</translation> <translation id="9079935439869366234">Отметить все как непрочитанные</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_si.xtb b/ios/chrome/app/strings/resources/ios_strings_si.xtb index 4095bca..9b5ae51 100644 --- a/ios/chrome/app/strings/resources/ios_strings_si.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_si.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">සැමවිටම <ph name="LANGUAGE" /> පරිවර්තනය කරන්න</translation> <translation id="110724200315609752">කවුළුව විවෘත කරන්න වෙත මාරු වන්න</translation> <translation id="1112015203684611006">මුද්රණය කිරීම අසාර්ථක විය.</translation> +<translation id="1118266931011974190">දින <ph name="THRESHOLD" />කට පසු</translation> <translation id="1125564390852150847">නව පටිත්තක් තනන්න.</translation> <translation id="1126013303640354461">Google Pay වෙතින් ගෙවීම් ක්රම සහ ලිපින සංකේතනය කරනු නොලැබේ. Chrome වෙතින් බ්රවුස් කිරීමේ ඉතිහාසය සමමුහුර්ත නොවනු ඇත. සංකේතනය කළ දත්ත කියවිය හැක්කේ ඔබේ මුර-වැකිකඩ සහිත අයකුට පමණි. මුර-වැකිකඩ Google වෙත යැවීම හෝ ගබඩා කර ගැනීම කරනු නොලැබේ. ඔබට ඔබේ මුර-වැකිකඩ අමතක වුවහොත් හෝ මෙම සැකසීම වෙනස් කිරීමට අවශ්ය නම්, ඔබට සමමුහුර්ත කිරීම යළි සැකසීමට අවශ්ය වනු ඇත. <ph name="BEGIN_LINK" />තව දැන ගන්න<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">කුඩා කරන්න</translation> <translation id="2230173723195178503">වෙබ් පිටුව පූරණය කරන ලදී</translation> <translation id="2239626343334228536">බ්රවුස් කිරීමේ දත්ත හිස් කිරීම...</translation> +<translation id="22508856139286506">ඉවත දැමූ අනතුරු ඇඟවීම් (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">මෙනුව → ඉතිහාසය</translation> <translation id="2256933947031277845">නිශ්චිත ගිණුම්වලින් පමණක් පිරීමට ඔබගේ සංවිධානය ඔබට ඉඩ දෙයි.</translation> <translation id="225943865679747347">දෝශ කේතය: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{ඔබේ යතුරු පුවරුවට ඉහළින් {count} සුරැකි ලිපිනයක් ඇත.}one{ඔබේ යතුරු පුවරුවට ඉහළින් සුරැකි ලිපින {count}ක් ඇත.}other{ඔබේ යතුරු පුවරුවට ඉහළින් සුරැකි ලිපින {count}ක් ඇත.}}</translation> <translation id="2421004566762153674">තෙවන පාර්ශ්ව කුකී අවහිර කිරීම</translation> <translation id="2421044535038393232">සංස්කරණ කර ගෙන යන්න</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{අවදානමට පත් වූ {COUNT} මුරපදයක්}one{අවදානමට පත් වූ මුරපද {COUNT}ක්}other{අවදානමට පත් වූ මුරපද {COUNT}ක්}}</translation> <translation id="2434405374328098816">ඔබ දැනටමත් "<ph name="USERNAME" />" සඳහා මුරපදයක් <ph name="WEBSITE" /> හි සුරැක ඇත</translation> <translation id="2435457462613246316">මුරපදය පෙන්වන්න</translation> <translation id="2451654228769116489">පටිත්ත අමුණන්න</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">ඔබගේ සබැඳුම පරීක්ෂා කර නැවත පිරීමට උත්සාහ කරන්න.</translation> <translation id="2637313651144986786">ටැබ සොයන්න...</translation> <translation id="2647269890314209800">භාවිතයේ ඇති කුකීස්</translation> +<translation id="2648721026697078500">කිසි විටෙකත් ගෙන නොයන්න</translation> <translation id="2648803196158606475">කියවීම මකන්න</translation> <translation id="2653659639078652383">ඉදිරිපත් කරන්න</translation> <translation id="2664621323652615289">නවත්වන්න</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">තවත්</translation> <translation id="3311748811247479259">අක්රිය</translation> <translation id="3324193307694657476">ලිපිනය 2</translation> +<translation id="3328459813621383194">අක්රිය පටිති ගෙන යන්න</translation> <translation id="3328801116991980348">අඩවි තොරතුරු</translation> <translation id="3371831930909698441">පරිවර්තනය ලැබේ. තිරයේ පහළට ආසන්නව විකල්ප ලබා ගත හැක.</translation> <translation id="3377063233124932127">දැන් ඔබේ සුරකින ලද පිටුසන්, මුරපද සහ තවත් දේ ඉහළින්ම ඇත.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">ඔබේ සමමුහූර්ත කළ දත්ත සමාලෝචන කරන්න</translation> <translation id="4536418791685807335">නැවත පිරීමට උත්සාහ කරන්න.</translation> <translation id="4540780316273593836">යම් දෙයක් වැරදිණි</translation> +<translation id="4550040941166547650">මෙම උපාංගය මත පමණි</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} අක්රිය පටිත්තක් වසන්න ද?}one{අක්රිය පටිති {COUNT}ක් වසන්න ද?}other{අක්රිය පටිති {COUNT}ක් වසන්න ද?}}</translation> <translation id="457386861538956877">තව...</translation> <translation id="4587235830039045480">ඔබේ Google ගිණුමේ මුරපදය සුරකින්න</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{{title} වෙත පිටුසන් කර ඇත}one{{title} වෙත පිටුසන් කර ඇත}other{{title} වෙත පිටුසන් කර ඇත}}</translation> <translation id="6196207969502475924">හඬ සෙවීම</translation> <translation id="6202364442240589072">{COUNT,plural, =1{ටැබ {COUNT}ක් වසන්න}one{ටැබ {COUNT}ක් වසන්න}other{ටැබ {COUNT}ක් වසන්න}}</translation> +<translation id="6210079381482819663">දින <ph name="THRESHOLD" />ක් හෝ ඊට වැඩි කාලයක් භාවිතා නොකළ පටිති මෙතැනට ගෙන යනු ලැබේ. ඔබට <ph name="BEGIN_LINK" />සැකසීම්<ph name="END_LINK" /> තුළ මෙය ඕනෑම වේලාවක වෙනස් කළ හැක.</translation> <translation id="6213567400989743524">ඉවත දැමූ අනතුරු ඇඟවීම්</translation> <translation id="6219550825416862075">ආපසු සාදරයෙන් පිළිගනිමු</translation> <translation id="6219688215832490856">කිසි විටෙක පරිවර්තන නොකරන්න</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />තව දැන ගන්න<ph name="END_LINK" /></translation> <translation id="7004499039102548441">මෑතකාලීන ටැබ</translation> <translation id="7006788746334555276">අන්තර්ගත සැකසුම්</translation> -<translation id="7014087399239955356">මුරපද පරීක්ෂා කරමින්...</translation> <translation id="7029809446516969842">මුරපද</translation> <translation id="7053983685419859001">අවහිර කරන්න</translation> <translation id="7062545763355031412">පිළිගන්න සහ ගිණුම් මාරු කරන්න</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">මෙම කොටස හකුළුවයි.</translation> <translation id="8065292699993359127">අප්රසිද්ධ තුළ Chrome හි URL විවෘත කරන්න</translation> <translation id="806745655614357130">මගේ දත්ත වෙනම තබා ගන්න</translation> +<translation id="8069394452933076548">මෑතක දී භාවිතා නොකළ පටිති අක්රිය පටිති කොටස වෙත ගෙන යන්නේ කෙවිට දැයි තෝරා ගන්න.</translation> <translation id="8073670137947914548">බාගැනීම අවසන් වී ඇත</translation> <translation id="8073872304774253879">සෙවීම් සහ බ්රවුස් කිරීම තවත් හොඳ කරන්න</translation> <translation id="8076492880354921740">පටිති</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">පුරනය වීමට නොහැක</translation> <translation id="9055960261314198756">වැඩිදියුණු කළ ආරක්ෂාව ක්රියාවිරහිතයි</translation> <translation id="9057972802061533987">අනුගමනය කළ නොහැකිය. යම් දෙයක් වැරදිණි.</translation> +<translation id="9061495354530850708">ඔබේ Google ගිණුම තුළ</translation> <translation id="9065203028668620118">සංස්කරණය කරන්න</translation> <translation id="9068336935206019333">Chrome අප්රසිද්ධ තුළ විවෘත කරන්න</translation> <translation id="9079935439869366234">සියල්ල නොකියවූ ලෙස ලකුණු කරන්න</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 97a51df1..148b0ec 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Nad klávesnicou je k dispozícii {count} uložená adresa.}few{Nad klávesnicou sú k dispozícii {count} uložené adresy.}many{{count} saved addresses available above your keyboard.}other{Nad klávesnicou je k dispozícii {count} uložených adries.}}</translation> <translation id="2421004566762153674">Blokovanie súborov cookie tretích strán</translation> <translation id="2421044535038393232">Ďalej upravovať</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} odhalené heslo}few{{COUNT} odhalené heslá}many{{COUNT} Compromised Passwords}other{{COUNT} odhalených hesiel}}</translation> <translation id="2434405374328098816">Heslo pre používateľské meno <ph name="USERNAME" /> ste už uložili na <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Zobraziť heslo</translation> <translation id="2451654228769116489">Pripnúť kartu</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nedávne karty</translation> <translation id="7006788746334555276">Nastavenia obsahu</translation> -<translation id="7014087399239955356">Kontrolujú sa heslá…</translation> <translation id="7029809446516969842">Heslá</translation> <translation id="7053983685419859001">Blokovať</translation> <translation id="7062545763355031412">Prijať a prepnúť účty</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index f4e4c12..536af5a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Nad tipkovnico je na voljo {count} shranjen naslov.}one{Nad tipkovnico je na voljo {count} shranjen naslov.}two{Nad tipkovnico sta na voljo {count} shranjena naslova.}few{Nad tipkovnico so na voljo {count} shranjeni naslovi.}other{Nad tipkovnico je na voljo {count} shranjenih naslovov.}}</translation> <translation id="2421004566762153674">Blokiranje piškotkov drugih spletnih mest</translation> <translation id="2421044535038393232">Nadaljuj urejanje</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ogroženo geslo}one{{COUNT} ogroženo geslo}two{{COUNT} ogroženi gesli}few{{COUNT} ogrožena gesla}other{{COUNT} ogroženih gesel}}</translation> <translation id="2434405374328098816">Na <ph name="WEBSITE" /> ste že shranili geslo za »<ph name="USERNAME" />«.</translation> <translation id="2435457462613246316">Pokaži geslo</translation> <translation id="2451654228769116489">Pripni zavihek</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nedavni zavihki</translation> <translation id="7006788746334555276">Nastavitve vsebine</translation> -<translation id="7014087399239955356">Preverjanje gesel …</translation> <translation id="7029809446516969842">Gesla</translation> <translation id="7053983685419859001">Blokiraj</translation> <translation id="7062545763355031412">Sprejmi in preklopi račun</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb index 1809d8d..ff6c03605 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Përkthe gjithmonë nga <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Kalo te dritarja e hapur</translation> <translation id="1112015203684611006">Printimi dështoi.</translation> +<translation id="1118266931011974190">Pas <ph name="THRESHOLD" /> ditësh</translation> <translation id="1125564390852150847">Krijo një skedë të re</translation> <translation id="1126013303640354461">Mënyrat e pagesës dhe adresat nga Google Pay nuk do të enkriptohen. Historiku i shfletimit nga Chrome nuk do të sinkronizohet. Vetëm dikush me frazën tënde të kalimit mund të lexojë të dhënat e tua të enkriptuara. Fraza e kalimit nuk dërgohet apo ruhet nga Google. Nëse e harron frazën tënde të kalimit apo dëshiron të ndryshosh këtë cilësim, duhet që të rivendosësh sinkronizimin. <ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Zvogëlo</translation> <translation id="2230173723195178503">Faqja e uebit u ngarkua</translation> <translation id="2239626343334228536">Të dhënat e shfletimit po pastrohen...</translation> +<translation id="22508856139286506">Paralajmërimet e hequra (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menyja → Historiku</translation> <translation id="2256933947031277845">Organizata jote të lejon të identifikohesh vetëm me llogari të caktuara.</translation> <translation id="225943865679747347">Kodi i gabimit: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} adresë e ruajtur e disponueshme mbi tastierën tënde.}other{{count} adresa të ruajtura të disponueshme mbi tastierën tënde.}}</translation> <translation id="2421004566762153674">Bllokimi i kukive të palëve të treta</translation> <translation id="2421044535038393232">Vazhdo modifikimin</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} fjalëkalim i komprometuar}other{{COUNT} fjalëkalime të komprometuara}}</translation> <translation id="2434405374328098816">Ke ruajtur tashmë një fjalëkalim për "<ph name="USERNAME" />" në <ph name="WEBSITE" />.</translation> <translation id="2435457462613246316">Shfaq fjalëkalimin</translation> <translation id="2451654228769116489">Gozhdo skedën</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Kontrollo lidhjen dhe provo të identifikohesh sërish.</translation> <translation id="2637313651144986786">Kërko skedat...</translation> <translation id="2647269890314209800">Kukit në përdorim</translation> +<translation id="2648721026697078500">Mos zhvendos asnjëherë</translation> <translation id="2648803196158606475">Fshi të lexuarat</translation> <translation id="2653659639078652383">Dërgoje</translation> <translation id="2664621323652615289">Ndalo</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">më shumë</translation> <translation id="3311748811247479259">Joaktiv</translation> <translation id="3324193307694657476">Adresa 2</translation> +<translation id="3328459813621383194">Skeda të tjera ndërvepruese</translation> <translation id="3328801116991980348">Informacionet rreth sajtit</translation> <translation id="3371831930909698441">Ofrohet "Përkthe". Opsionet ofrohen pranë fundit të ekranit</translation> <translation id="3377063233124932127">Tani faqeshënuesit, fjalëkalimet e ruajtura etj. janë në krye.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Rishiko të dhënat e tua të sinkronizuara</translation> <translation id="4536418791685807335">Provo të identifikohesh sërish.</translation> <translation id="4540780316273593836">Ndodhi një gabim</translation> +<translation id="4550040941166547650">. Vetëm në këtë pajisje</translation> <translation id="457292989631956153">{COUNT,plural, =1{Të mbyllet {COUNT} skedë joaktive?}other{Të mbyllen {COUNT} skeda joaktive?}}</translation> <translation id="457386861538956877">Më shumë...</translation> <translation id="4587235830039045480">Ruaje fjalëkalimin në "Llogarinë tënde të Google"</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{U shënua si faqeshënues te {title}}other{U shënuan si faqeshënues te {title}}}</translation> <translation id="6196207969502475924">Kërkimi me zë</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Mbyll {COUNT} skedë}other{Mbyll {COUNT} skeda}}</translation> +<translation id="6210079381482819663">Skedat që nuk përdoren për <ph name="THRESHOLD" /> ditë ose më shumë zhvendosen këtu. Këtë mund ta ndryshosh në çdo kohë te <ph name="BEGIN_LINK" />cilësimet<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Paralajmërimet e hequra</translation> <translation id="6219550825416862075">Mirë se u ktheve</translation> <translation id="6219688215832490856">Asnjëherë mos përkthe</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Mëso më shumë<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Skedat e fundit</translation> <translation id="7006788746334555276">Cilësimet e përmbajtjes</translation> -<translation id="7014087399239955356">Po kontrollon fjalëkalimet...</translation> <translation id="7029809446516969842">Fjalëkalimet</translation> <translation id="7053983685419859001">Bllokoje</translation> <translation id="7062545763355031412">Pranoje dhe ndërro llogaritë</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Mbyll seksionin.</translation> <translation id="8065292699993359127">Hap URL-të në Chrome në modalitetin "i fshehtë"</translation> <translation id="806745655614357130">Mbaji më vete të dhënat e mia</translation> +<translation id="8069394452933076548">Zgjidh se kur zhvendosen te seksioni i skedave joaktive skedat që nuk janë përdorur së fundi.</translation> <translation id="8073670137947914548">Shkarkimi përfundoi</translation> <translation id="8073872304774253879">Përmirëson kërkimet dhe shfletimin</translation> <translation id="8076492880354921740">Skedat</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Nuk mund të identifikohet</translation> <translation id="9055960261314198756">Mbrojtja e përmirësuar është joaktive</translation> <translation id="9057972802061533987">Nuk mund të ndiqet. Ndodhi një gabim.</translation> +<translation id="9061495354530850708">Në "Llogarinë tënde të Google"</translation> <translation id="9065203028668620118">Redakto</translation> <translation id="9068336935206019333">Hape në modalitetin "e fshehtë" në Chrome</translation> <translation id="9079935439869366234">Shëno të gjitha si të palexuara</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 7366ec5..239c215 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} sačuvana adresa je dostupna iznad tastature.}one{{count} sačuvana adresa je dostupna iznad tastature.}few{{count} sačuvane adrese su dostupne iznad tastature.}other{{count} sačuvanih adresa je dostupno iznad tastature.}}</translation> <translation id="2421004566762153674">Blokira kolačiće treće strane</translation> <translation id="2421044535038393232">Nastavi izmene</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ugrožena lozinka}one{{COUNT} ugrožena lozinka}few{{COUNT} ugrožene lozinke}other{{COUNT} ugroženih lozinki}}</translation> <translation id="2434405374328098816">Već ste sačuvali lozinku za „<ph name="USERNAME" />“ na <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Prikaži lozinku</translation> <translation id="2451654228769116489">Zakači karticu</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Nedavne kartice</translation> <translation id="7006788746334555276">Podešavanja sadržaja</translation> -<translation id="7014087399239955356">Proveravaju se lozinke…</translation> <translation id="7029809446516969842">Lozinke</translation> <translation id="7053983685419859001">Blokiraj</translation> <translation id="7062545763355031412">Prihvatam, promeni nalog</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index 8d507de..43923dc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} сачувана адреса је доступна изнад тастатуре.}one{{count} сачувана адреса је доступна изнад тастатуре.}few{{count} сачуване адресе су доступне изнад тастатуре.}other{{count} сачуваних адреса је доступно изнад тастатуре.}}</translation> <translation id="2421004566762153674">Блокира колачиће треће стране</translation> <translation id="2421044535038393232">Настави изменe</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} угрожена лозинка}one{{COUNT} угрожена лозинка}few{{COUNT} угрожене лозинке}other{{COUNT} угрожених лозинки}}</translation> <translation id="2434405374328098816">Већ сте сачували лозинку за „<ph name="USERNAME" />“ на <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Прикажи лозинку</translation> <translation id="2451654228769116489">Закачи картицу</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Недавне картице</translation> <translation id="7006788746334555276">Подешавања садржаја</translation> -<translation id="7014087399239955356">Проверавају се лозинке…</translation> <translation id="7029809446516969842">Лозинке</translation> <translation id="7053983685419859001">Блокирај</translation> <translation id="7062545763355031412">Прихватам, промени налог</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index 42ae14d..62041d2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314">Översätt alltid <ph name="LANGUAGE" /></translation> <translation id="110724200315609752">Byt till Öppet fönster</translation> <translation id="1112015203684611006">Utskriftsfel.</translation> +<translation id="1118266931011974190">Efter <ph name="THRESHOLD" /> dagar</translation> <translation id="1125564390852150847">Skapa en ny flik.</translation> <translation id="1126013303640354461">Betalningsmetoder och adresser från Google Pay krypteras inte. Webbhistorik från Chrome synkroniseras inte. Din krypterade data kan endast läsas av en person som har din lösenfras. Lösenfrasen varken skickas till eller lagras av Google. Om du glömmer lösenfrasen eller vill ändra den här inställningen måste du återställa synkroniseringen. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} sparad adress visas ovanför tangentbordet.}other{{count} sparade adresser visas ovanför tangentbordet.}}</translation> <translation id="2421004566762153674">Cookies från tredje part blockeras</translation> <translation id="2421044535038393232">Fortsätt redigera</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} utsatt lösenord}other{{COUNT} utsatta lösenord}}</translation> <translation id="2434405374328098816">Du har redan sparat ett lösenord för <ph name="USERNAME" /> på <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Visa lösenord</translation> <translation id="2451654228769116489">Fäst flik</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">Kontrollera anslutningen och försök logga in igen.</translation> <translation id="2637313651144986786">Sök bland flikar …</translation> <translation id="2647269890314209800">Cookies är aktiverade</translation> +<translation id="2648721026697078500">Flytta aldrig</translation> <translation id="2648803196158606475">Radera lästa</translation> <translation id="2653659639078652383">Skicka</translation> <translation id="2664621323652615289">Stopp</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">mer</translation> <translation id="3311748811247479259">Av</translation> <translation id="3324193307694657476">Adressrad 2</translation> +<translation id="3328459813621383194">Flytta inaktiva flikar</translation> <translation id="3328801116991980348">Platsinformation</translation> <translation id="3371831930909698441">Översättning finns. Alternativ visas nära skärmens nedre kant.</translation> <translation id="3377063233124932127">Nu visas dina sparade bokmärken, lösenord och annat högst upp.</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">Granska din synkroniserade data</translation> <translation id="4536418791685807335">Försök att logga in igen.</translation> <translation id="4540780316273593836">Något gick fel</translation> +<translation id="4550040941166547650">Bara på den här enheten</translation> <translation id="457292989631956153">{COUNT,plural, =1{Vill du stänga {COUNT} inaktiv flik?}other{Vill du stänga {COUNT} inaktiva flikar?}}</translation> <translation id="457386861538956877">Mer...</translation> <translation id="4587235830039045480">Spara lösenord i Google-kontot</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Bokmärkt i {title}}other{Bokmärkt i {title}}}</translation> <translation id="6196207969502475924">Röstsökning</translation> <translation id="6202364442240589072">{COUNT,plural, =1{Stäng {COUNT} flik}other{Stäng {COUNT} flikar}}</translation> +<translation id="6210079381482819663">Flikar som inte har använts på <ph name="THRESHOLD" /> dagar eller mer flyttas hit. Du kan när som helst ändra detta i <ph name="BEGIN_LINK" />inställningarna<ph name="END_LINK" />.</translation> <translation id="6213567400989743524">Ignorerade varningar</translation> <translation id="6219550825416862075">Välkommen tillbaka</translation> <translation id="6219688215832490856">Översätt aldrig</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Senaste flikarna</translation> <translation id="7006788746334555276">Innehållsinställningar</translation> -<translation id="7014087399239955356">Kontrollerar lösenord …</translation> <translation id="7029809446516969842">Lösenord</translation> <translation id="7053983685419859001">Blockera</translation> <translation id="7062545763355031412">Godkänn och byt konto</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">Komprimera avsnittet.</translation> <translation id="8065292699993359127">Öppna webbadresser i Chrome i inkognitoläge</translation> <translation id="806745655614357130">Håll min data separat</translation> +<translation id="8069394452933076548">Välj när flikar som inte har använts nyligen ska flyttas till avsnittet för inaktiva flikar.</translation> <translation id="8073670137947914548">Nedladdningen är klar</translation> <translation id="8073872304774253879">Förbättra sökningar och surfande</translation> <translation id="8076492880354921740">Flikar</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">Kan inte logga in</translation> <translation id="9055960261314198756">Utökat skydd är inaktiverat</translation> <translation id="9057972802061533987">Det gick inte att börja följa detta. Något gick fel.</translation> +<translation id="9061495354530850708">I Google-kontot</translation> <translation id="9065203028668620118">Redigera</translation> <translation id="9068336935206019333">Öppna i Chromes inkognitoläge</translation> <translation id="9079935439869366234">Markera alla som olästa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index bf48638..60052163 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -178,6 +178,7 @@ <translation id="2218443599109088993">Sogeza Mbali</translation> <translation id="2230173723195178503">Ukurasa wa Wavuti umepakiwa</translation> <translation id="2239626343334228536">Inafuta data ya kuvinjari...</translation> +<translation id="22508856139286506">Maonyo Uliyoondoa (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menyu → Historia</translation> <translation id="2256933947031277845">Shirika lako hukuruhusu kuingia kwa kutumia baadhi ya akaunti tu.</translation> <translation id="225943865679747347">Hitilafu ya msimbo: <ph name="ERROR_CODE" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Anwani {count} iliyohifadhiwa inapatikana juu ya kibodi yako.}other{Anwani {count} zilizohifadhiwa zinapatikana juu ya kibodi yako.}}</translation> <translation id="2421004566762153674">Kuzuia vidakuzi vya tovuti nyingine</translation> <translation id="2421044535038393232">Endelea Kubadilisha</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{Nenosiri {COUNT} limeathiriwa}other{Manenosiri {COUNT} yameathiriwa}}</translation> <translation id="2434405374328098816">Tayari umehifadhi nenosiri la "<ph name="USERNAME" />" unalotumia katika <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Onyesha nenosiri</translation> <translation id="2451654228769116489">Bandika Kichupo</translation> @@ -923,7 +923,6 @@ <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Vichupo vya Hivi Punde</translation> <translation id="7006788746334555276">Mipangilio ya Maudhui</translation> -<translation id="7014087399239955356">Inakagua Manenosiri…</translation> <translation id="7029809446516969842">Manenosiri</translation> <translation id="7053983685419859001">Zuia</translation> <translation id="7062545763355031412">Kubali na ubadilishe akaunti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index 036f7feb..7ebd8fe0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{சேமிக்கப்பட்ட {count} முகவரி உங்கள் கீபோர்டுக்கு மேலே காட்டப்படும்.}other{சேமிக்கப்பட்ட {count} முகவரிகள் உங்கள் கீபோர்டுக்கு மேலே காட்டப்படும்.}}</translation> <translation id="2421004566762153674">மூன்றாம் தரப்புக் குக்கீகளைத் தடுக்கிறது</translation> <translation id="2421044535038393232">தொடர்ந்து திருத்து</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} களவாடப்பட்ட கடவுச்சொல்}other{{COUNT} களவாடப்பட்ட கடவுச்சொற்கள்}}</translation> <translation id="2434405374328098816"><ph name="WEBSITE" /> இணையதளத்தில் "<ph name="USERNAME" />" கணக்கிற்கான கடவுச்சொல்லை ஏற்கெனவே சேமித்துள்ளீர்கள்</translation> <translation id="2435457462613246316">கடவுச்சொல்லைக் காண்பி</translation> <translation id="2451654228769116489">உலாவிப் பக்கத்தைப் பின் செய்</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation> <translation id="7004499039102548441">சமீபத்திய தாவல்கள்</translation> <translation id="7006788746334555276">உள்ளடக்க அமைப்புகள்</translation> -<translation id="7014087399239955356">கடவுச்சொற்களைச் சரிபார்க்கிறது...</translation> <translation id="7029809446516969842">கடவுச்சொற்கள்</translation> <translation id="7053983685419859001">தடு</translation> <translation id="7062545763355031412">சரி, கணக்குகளை மாற்று</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 54c5aab..271076b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{సేవ్ చేసిన {count} అడ్రస్ మీ కీబోర్డ్ పైన అందుబాటులో ఉంది.}other{సేవ్ చేసిన {count} అడ్రస్లు మీ కీబోర్డ్ పైన అందుబాటులో ఉన్నాయి.}}</translation> <translation id="2421004566762153674">థర్డ్-పార్టీ కుక్కీలను బ్లాక్ చేయడం</translation> <translation id="2421044535038393232">ఎడిట్ను కొనసాగించండి</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} చోరీకి గురైన పాస్వర్డ్}other{{COUNT} చోరీకి గురైన పాస్వర్డ్లు}}</translation> <translation id="2434405374328098816">మీరు "<ph name="USERNAME" />" కోసం పాస్వర్డ్ను <ph name="WEBSITE" />లో ఇప్పటికే సేవ్ చేశారు</translation> <translation id="2435457462613246316">పాస్వర్డ్ను చూపించు</translation> <translation id="2451654228769116489">ట్యాబ్ను పిన్ చేయండి</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> <translation id="7004499039102548441">ఇటీవలి ట్యాబ్లు</translation> <translation id="7006788746334555276">కంటెంట్ సెట్టింగ్లు</translation> -<translation id="7014087399239955356">పాస్వర్డ్లను చెక్ చేస్తోంది...</translation> <translation id="7029809446516969842">పాస్వర్డ్లు</translation> <translation id="7053983685419859001">నిరోధించు</translation> <translation id="7062545763355031412">అంగీకరిస్తున్నాను, ఖాతాలను మార్చు</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index 00f3f21..3eef56a2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{ที่อยู่ที่บันทึกไว้ {count} รายการพร้อมให้ใช้งานอยู่เหนือแป้นพิมพ์}other{ที่อยู่ที่บันทึกไว้ {count} รายการพร้อมให้ใช้งานอยู่เหนือแป้นพิมพ์}}</translation> <translation id="2421004566762153674">การบล็อกคุกกี้ของบุคคลที่สาม</translation> <translation id="2421044535038393232">แก้ไขต่อไป</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{มีรหัสผ่านที่ถูกละเมิด {COUNT} รหัส}other{มีรหัสผ่านที่ถูกละเมิด {COUNT} รหัส}}</translation> <translation id="2434405374328098816">คุณบันทึกรหัสผ่านสำหรับ "<ph name="USERNAME" />" ที่ <ph name="WEBSITE" /> ไว้แล้ว</translation> <translation id="2435457462613246316">แสดงรหัสผ่าน</translation> <translation id="2451654228769116489">ปักหมุดแท็บ</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation> <translation id="7004499039102548441">แท็บล่าสุด</translation> <translation id="7006788746334555276">การตั้งค่าเนื้อหา</translation> -<translation id="7014087399239955356">กำลังตรวจสอบรหัสผ่าน…</translation> <translation id="7029809446516969842">รหัสผ่าน</translation> <translation id="7053983685419859001">บล็อก</translation> <translation id="7062545763355031412">ยอมรับและเปลี่ยนบัญชี</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index c6f714e..4431269 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314"><ph name="LANGUAGE" /> dilini daima çevir</translation> <translation id="110724200315609752">Açık Pencereye Geç</translation> <translation id="1112015203684611006">Yazdırılamadı.</translation> +<translation id="1118266931011974190"><ph name="THRESHOLD" /> Gün Sonra</translation> <translation id="1125564390852150847">Yeni sekme oluştur.</translation> <translation id="1126013303640354461">Google Pay'deki ödeme yöntemleri ve adresler şifrelenmez. Chrome'daki tarama geçmişi senkronize edilmez. Sadece parolanıza sahip olan kişiler şifrelenmiş verilerinizi okuyabilir. Parola Google'a gönderilmez veya Google tarafından saklanmaz. Parolanızı unutursanız veya bu ayarı değiştirmek isterseniz senkronizasyonu sıfırlamanız gerekir. <ph name="BEGIN_LINK" />Daha fazla bilgi<ph name="END_LINK" /></translation> @@ -177,6 +178,7 @@ <translation id="2218443599109088993">Uzaklaştır</translation> <translation id="2230173723195178503">Web sayfası yüklendi</translation> <translation id="2239626343334228536">Göz atma verileri temizleniyor...</translation> +<translation id="22508856139286506">Kapatılan Uyarılar (<ph name="COUNT" />)</translation> <translation id="2251686759395008410">Menü → Geçmiş</translation> <translation id="2256933947031277845">Kuruluşunuz yalnızca belirli hesaplarla oturum açmanıza izin vermektedir.</translation> <translation id="225943865679747347">Hata kodu: <ph name="ERROR_CODE" /></translation> @@ -204,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Klavyenizin üzerinde {count} tane kayıtlı adres mevcut.}other{Klavyenizin üzerinde {count} tane kayıtlı adres mevcut.}}</translation> <translation id="2421004566762153674">Üçüncü taraf çerezler engelleniyor</translation> <translation id="2421044535038393232">Düzenlemeye Devam Et</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{Güvenliği İhlal Edilmiş {COUNT} Şifre}other{Güvenliği İhlal Edilmiş {COUNT} Şifre}}</translation> <translation id="2434405374328098816"><ph name="WEBSITE" /> adresinde "<ph name="USERNAME" />" için zaten kayıtlı şifreniz var</translation> <translation id="2435457462613246316">Şifreyi göster</translation> <translation id="2451654228769116489">Sekmeyi Sabitle</translation> @@ -231,6 +232,7 @@ <translation id="2626236249646841566">Bağlantınızı kontrol edip tekrar oturum açmayı deneyin.</translation> <translation id="2637313651144986786">Sekmelerde ara...</translation> <translation id="2647269890314209800">Kullanımdaki Çerezler</translation> +<translation id="2648721026697078500">Hiçbir Zaman Taşıma</translation> <translation id="2648803196158606475">Okunanları Sil</translation> <translation id="2653659639078652383">Gönder</translation> <translation id="2664621323652615289">Durdur</translation> @@ -346,6 +348,7 @@ <translation id="3305294846493618482">daha fazla</translation> <translation id="3311748811247479259">Kapalı</translation> <translation id="3324193307694657476">Adres 2</translation> +<translation id="3328459813621383194">Etkin Olmayan Sekmeleri Taşı</translation> <translation id="3328801116991980348">Site bilgileri</translation> <translation id="3371831930909698441">Çeviri kullanılabilir. Kullanılabilen seçenekler sayfanın altına yakın bir yerdedir.</translation> <translation id="3377063233124932127">Kayıtlı yer işaretleriniz, şifreleriniz ve daha fazlası artık üst kısımda.</translation> @@ -510,6 +513,7 @@ <translation id="452750746583162491">Senkronize edilmiş verilerinizi inceleyin</translation> <translation id="4536418791685807335">Tekrar oturum açmayı deneyin.</translation> <translation id="4540780316273593836">Bir Sorun Oluştu</translation> +<translation id="4550040941166547650">Yalnızca Bu Cihazda</translation> <translation id="457292989631956153">{COUNT,plural, =1{Etkin Olmayan {COUNT} Sekme Kapatılsın mı?}other{Etkin Olmayan {COUNT} Sekme Kapatılsın mı?}}</translation> <translation id="457386861538956877">Diğer...</translation> <translation id="4587235830039045480">Şifreyi Google Hesabınıza kaydedin</translation> @@ -644,7 +648,7 @@ <translation id="5439599923922718668">Sık Ziyaret Edilenler</translation> <translation id="54401264925851789">Sayfa Güvenlik Bilgileri</translation> <translation id="5443952882982198570">Kredi Kartları</translation> -<translation id="5444892875087332195">Yer işaretleri</translation> +<translation id="5444892875087332195">Yer İşaretleri</translation> <translation id="5453250766792920795">{count,plural, =1{Yer işareti, hesabınıza ({email}) kaydedildi}other{Yer işaretleri, hesabınıza ({email}) kaydedildi}}</translation> <translation id="5457226814769348910">Çevrimdışı Sürümü aç</translation> <translation id="5489208564673669003">Çerezlerin tüm siteler için nasıl yönetileceğini <ph name="BEGIN_LINK" />Çerez Ayarları<ph name="END_LINK" /> sayfasından öğrenebilirsiniz.</translation> @@ -763,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{Yer işareti {title} klasörüne eklendi}other{Yer işareti {title} klasörüne eklendi}}</translation> <translation id="6196207969502475924">Sesli Arama</translation> <translation id="6202364442240589072">{COUNT,plural, =1{{COUNT} Sekmeyi Kapat}other{{COUNT} Sekmeyi Kapat}}</translation> +<translation id="6210079381482819663"><ph name="THRESHOLD" /> gün veya daha uzun süre boyunca kullanılmayan sekmeler buraya taşınır. İstediğiniz zaman bunu <ph name="BEGIN_LINK" />ayarlardan<ph name="END_LINK" /> değiştirebilirsiniz.</translation> <translation id="6213567400989743524">Yok Sayılan Uyarılar</translation> <translation id="6219550825416862075">Tekrar hoş geldiniz</translation> <translation id="6219688215832490856">Asla Çevirme</translation> @@ -918,7 +923,6 @@ <ph name="BEGIN_LINK" />Daha fazla bilgi<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Son Sekmeler</translation> <translation id="7006788746334555276">İçerik Ayarları</translation> -<translation id="7014087399239955356">Şifreler kontrol ediliyor...</translation> <translation id="7029809446516969842">Şifreler</translation> <translation id="7053983685419859001">Engelle</translation> <translation id="7062545763355031412">Kabul et ve hesabı değiştir</translation> @@ -1058,6 +1062,7 @@ <translation id="8059533439631660104">Bölümü daraltır.</translation> <translation id="8065292699993359127">URL'leri Chrome'da Gizli modda aç</translation> <translation id="806745655614357130">Verilerimi ayrı tut</translation> +<translation id="8069394452933076548">Yakın zamanda kullanılmayan sekmelerin, etkin olmayan sekmeler bölümüne ne zaman taşınacağı seçin.</translation> <translation id="8073670137947914548">İndirme tamamlandı</translation> <translation id="8073872304774253879">Aramaları ve Göz Atmayı Daha İyi Yap</translation> <translation id="8076492880354921740">Sekmeler</translation> @@ -1202,6 +1207,7 @@ <translation id="9055772144595778347">Oturum Açılamıyor</translation> <translation id="9055960261314198756">Gelişmiş Koruma Kapalı</translation> <translation id="9057972802061533987">Takip edilemiyor. Bir sorun oldu.</translation> +<translation id="9061495354530850708">Google Hesabınızda</translation> <translation id="9065203028668620118">Düzenle</translation> <translation id="9068336935206019333">Chrome Gizli modda aç</translation> <translation id="9079935439869366234">Tümünü Okunmadı Olarak İşaretle</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index d74fb62..dc90ee4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Над клавіатурою показується {count} збережена адреса.}one{Над клавіатурою показується {count} збережена адреса.}few{Над клавіатурою показуються {count} збережені адреси.}many{Над клавіатурою показуються {count} збережених адрес.}other{Над клавіатурою показуються {count} збереженої адреси.}}</translation> <translation id="2421004566762153674">Блокуються сторонні файли cookie</translation> <translation id="2421044535038393232">Продовжити редагувати</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} зламаний пароль}one{{COUNT} зламаний пароль}few{{COUNT} зламані паролі}many{{COUNT} зламаних паролів}other{{COUNT} зламаного пароля}}</translation> <translation id="2434405374328098816">Ви вже зберегли пароль для користувача <ph name="USERNAME" /> на веб-сайті <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Показати пароль</translation> <translation id="2451654228769116489">Закріпити вкладку</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Останні вкладки</translation> <translation id="7006788746334555276">Веб-контент</translation> -<translation id="7014087399239955356">Перевірка паролів…</translation> <translation id="7029809446516969842">Паролі</translation> <translation id="7053983685419859001">Блокувати</translation> <translation id="7062545763355031412">Прийняти та перейти в інший обліковий запис</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index 4216daa..cc4767b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -20,6 +20,7 @@ <translation id="1103523840287552314"><ph name="LANGUAGE" /> کو ہمیشہ ترجمہ کریں</translation> <translation id="110724200315609752">کھلی ہوئی ونڈو پر سوئچ کریں</translation> <translation id="1112015203684611006">پرنٹنگ ناکام۔</translation> +<translation id="1118266931011974190"><ph name="THRESHOLD" /> دن کے بعد</translation> <translation id="1125564390852150847">نیا ٹیب بنائیں۔</translation> <translation id="1126013303640354461">Google Pay سے ادائیگی کے طریقے اور پتے مرموز نہیں ہوں گے۔ Chrome سے براؤزنگ کی سرگزشت مطابقت پذیر نہیں ہوگی۔ صرف وہ شخص جس کے پاس آپ کی پاس فریز ہے آپ کے مرموز کردہ ڈیٹا کو پڑھ سکتا ہے۔ پاس فریز Google کو نہیں بھیجا جاتا یا اس کے ذریعے اسٹور نہیں کیا جاتا ہے۔ اگر آپ اپنا پاس فریز بھول جاتے ہیں یا اس ترتیب کو تبدیل کرنا چاہتے ہیں تو آپ کو مطابقت پذیری دوبارہ ترتیب دینے کی ضرورت ہوگی۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation> @@ -205,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{آپ کے کی بورڈ کے اوپر {count} محفوظ کردہ پتہ دستیاب ہے۔}other{آپ کے کی بورڈ کے اوپر {count} محفوظ کردہ پتے دستیاب ہیں۔}}</translation> <translation id="2421004566762153674">فریق ثالث کوکیز کو مسدود کیا جا رہا ہے</translation> <translation id="2421044535038393232">ترمیم جاری رکھیں</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} متاثرہ پاس ورڈ}other{{COUNT} متاثرہ پاس ورڈز}}</translation> <translation id="2434405374328098816">آپ نے <ph name="WEBSITE" /> پر "<ph name="USERNAME" />" کے لیے پہلے ہی پاس ورڈ محفوظ کر لیا ہے</translation> <translation id="2435457462613246316">پاس ورڈ دکھائیں</translation> <translation id="2451654228769116489">ٹیب کو پن کریں</translation> @@ -232,6 +232,7 @@ <translation id="2626236249646841566">اپنا کنکشن چیک کریں اور دوبارہ سائن ان کرنے کی کوشش کریں۔</translation> <translation id="2637313651144986786">ٹیبز تلاش کریں...</translation> <translation id="2647269890314209800">زیر استعمال کوکیز</translation> +<translation id="2648721026697078500">کبھی منتقل نہ کریں</translation> <translation id="2648803196158606475">پڑھے ہوئے کو حذف کریں</translation> <translation id="2653659639078652383">جمع کرائیں</translation> <translation id="2664621323652615289">روکیں</translation> @@ -347,6 +348,7 @@ <translation id="3305294846493618482">مزید</translation> <translation id="3311748811247479259">آف</translation> <translation id="3324193307694657476">پتہ 2</translation> +<translation id="3328459813621383194">غیر فعال ٹیبز کو منتقل کریں</translation> <translation id="3328801116991980348">سائٹ کی معلومات</translation> <translation id="3371831930909698441">ترجمہ دستیاب ہے۔ اسکرین کے نچلے حصہ کے قریب اختیارات دستیاب ہیں۔</translation> <translation id="3377063233124932127">اب آپ کے محفوظ کردہ بک مارکس، پاس ورڈز اور بہت کچھ سب سے اوپر ہیں۔</translation> @@ -511,6 +513,7 @@ <translation id="452750746583162491">اپنے مطابقت پذیر ڈیٹا کا جائزہ لیں</translation> <translation id="4536418791685807335">دوبارہ سائن ان کرنے کی کوشش کریں۔</translation> <translation id="4540780316273593836">کچھ غلط ہو گیا</translation> +<translation id="4550040941166547650">صرف اس آلہ پر</translation> <translation id="457292989631956153">{COUNT,plural, =1{{COUNT} غیر فعال ٹیب بند کریں؟}other{{COUNT} غیر فعال ٹیبز بند کریں؟}}</translation> <translation id="457386861538956877">مزید…</translation> <translation id="4587235830039045480">اپنے Google اکاؤنٹ میں پاس ورڈ محفوظ کریں</translation> @@ -764,6 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{{title} میں بُک مارک ہو گیا}other{{title} میں بُک مارک ہو گیا}}</translation> <translation id="6196207969502475924">صوتی تلاش</translation> <translation id="6202364442240589072">{COUNT,plural, =1{{COUNT} ٹیب بند کریں}other{{COUNT} ٹیبز بند کریں}}</translation> +<translation id="6210079381482819663"><ph name="THRESHOLD" /> دن یا اس سے زیادہ استعمال نہ ہونے والے ٹیبز کو یہاں منتقل کر دیا جاتا ہے۔ آپ اسے <ph name="BEGIN_LINK" />ترتیبات<ph name="END_LINK" /> میں کسی بھی وقت تبدیل کر سکتے ہیں۔</translation> <translation id="6213567400989743524">برخاست کردہ وارننگز</translation> <translation id="6219550825416862075">واپسی پر خوش آمدید</translation> <translation id="6219688215832490856">کبھی بھی ترجمہ نہ کریں</translation> @@ -919,7 +923,6 @@ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation> <translation id="7004499039102548441">حالیہ ٹیبز</translation> <translation id="7006788746334555276">مواد کی ترتیبات</translation> -<translation id="7014087399239955356">پاس ورڈز چیک ہو رہے ہیں…</translation> <translation id="7029809446516969842">پاس ورڈز</translation> <translation id="7053983685419859001">مسدود کریں</translation> <translation id="7062545763355031412">قبول کریں اور اکاؤنٹس سوئچ کریں</translation> @@ -1059,6 +1062,7 @@ <translation id="8059533439631660104">سیکشن کو سکیڑیں۔</translation> <translation id="8065292699993359127">URLs کو Chrome میں پوشیدگی میں کھولیں</translation> <translation id="806745655614357130">میرا ڈیٹا علیحدہ رکھیں</translation> +<translation id="8069394452933076548">منتخب کریں کہ وہ ٹیبز جو حال ہی میں استعمال نہیں ہوئے ہیں انہیں غیر فعال ٹیب سیکشن میں کب منتقل کیا جائے۔</translation> <translation id="8073670137947914548">ڈاؤن لوڈ کا عمل مکمل ہو گیا</translation> <translation id="8073872304774253879">تلاشوں اور براؤزنگ کو بہتر بنائیں</translation> <translation id="8076492880354921740">ٹیبز</translation> @@ -1203,6 +1207,7 @@ <translation id="9055772144595778347">سائن ان نہیں کر سکتے ہیں</translation> <translation id="9055960261314198756">بہتر کردہ حفاظت آف ہے</translation> <translation id="9057972802061533987">پیروی نہیں کر سکتے۔ کچھ غلط ہوگیا۔</translation> +<translation id="9061495354530850708">آپ کے Google اکاؤنٹ میں</translation> <translation id="9065203028668620118">تبدیل کریں</translation> <translation id="9068336935206019333">Chrome پوشیدگی میں کھولیں</translation> <translation id="9079935439869366234">سبھی کو نہ پڑھا ہوا کے بطور نشان کریں</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb index cbb3fc01..609aa0f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{{count} ta saqlangan manzil klaviatura ustida chiqadi.}other{{count} ta saqlangan manzil klaviatura ustida chiqadi.}}</translation> <translation id="2421004566762153674">Tashqi cookie fayllarni bloklash</translation> <translation id="2421044535038393232">Tahrirlashda davom etish</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} ta parol oshkor etilgan}other{{COUNT} ta parol oshkor etilgan}}</translation> <translation id="2434405374328098816"><ph name="WEBSITE" /> saytidagi <ph name="USERNAME" /> paroli allaqachon saqlangan</translation> <translation id="2435457462613246316">Parolni ko‘rsatish</translation> <translation id="2451654228769116489">Varaqni mahkamlash</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Batafsil<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Oxirgi varaqlar</translation> <translation id="7006788746334555276">Kontent sozlamalari</translation> -<translation id="7014087399239955356">Parollar tekshirilmoqda…</translation> <translation id="7029809446516969842">Parollar</translation> <translation id="7053983685419859001">Taqiqlash</translation> <translation id="7062545763355031412">Qabul qilish va kirish</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index 24dfa11..b9646ca 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Có {count} địa chỉ đã lưu xuất hiện phía trên bàn phím.}other{Có {count} địa chỉ đã lưu xuất hiện phía trên bàn phím.}}</translation> <translation id="2421004566762153674">Chặn cookie của bên thứ ba</translation> <translation id="2421044535038393232">Tiếp tục chỉnh sửa</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} mật khẩu bị lộ}other{{COUNT} mật khẩu bị lộ}}</translation> <translation id="2434405374328098816">Bạn đã lưu mật khẩu cho "<ph name="USERNAME" />" tại <ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Hiện mật khẩu</translation> <translation id="2451654228769116489">Ghim thẻ</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Các thẻ gần đây</translation> <translation id="7006788746334555276">Cài đặt nội dung</translation> -<translation id="7014087399239955356">Đang kiểm tra mật khẩu...</translation> <translation id="7029809446516969842">Mật khẩu</translation> <translation id="7053983685419859001">Chặn</translation> <translation id="7062545763355031412">Chấp nhận và chuyển đổi tài khoản</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index 9dbeaa87..2814356c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{键盘上方显示了 {count} 个已保存的地址。}other{键盘上方显示了 {count} 个已保存的地址。}}</translation> <translation id="2421004566762153674">阻止第三方 Cookie</translation> <translation id="2421044535038393232">继续修改</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{有 {COUNT} 个已泄露的密码}other{有 {COUNT} 个已泄露的密码}}</translation> <translation id="2434405374328098816">您已经在 <ph name="WEBSITE" /> 上保存了“<ph name="USERNAME" />”的密码</translation> <translation id="2435457462613246316">显示密码</translation> <translation id="2451654228769116489">固定标签页</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> <translation id="7004499039102548441">最近打开的标签页</translation> <translation id="7006788746334555276">内容设置</translation> -<translation id="7014087399239955356">正在检查密码…</translation> <translation id="7029809446516969842">密码</translation> <translation id="7053983685419859001">禁止</translation> <translation id="7062545763355031412">接受并切换帐号</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb index 8bed16e..d293309 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{有 {count} 個可以用嘅地址儲存咗喺鍵盤上面。}other{有 {count} 個可以用嘅地址儲存咗喺鍵盤上面。}}</translation> <translation id="2421004566762153674">封鎖第三方 Cookie</translation> <translation id="2421044535038393232">繼續編輯</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} 個被盜用的密碼}other{{COUNT} 個被盜用的密碼}}</translation> <translation id="2434405374328098816">您已儲存「<ph name="USERNAME" />」在 <ph name="WEBSITE" /> 使用的密碼</translation> <translation id="2435457462613246316">顯示密碼</translation> <translation id="2451654228769116489">固定分頁</translation> @@ -514,7 +513,7 @@ <translation id="452750746583162491">查看您已同步的資料</translation> <translation id="4536418791685807335">請嘗試再次登入。</translation> <translation id="4540780316273593836">發生錯誤</translation> -<translation id="4550040941166547650">僅在這部裝置上</translation> +<translation id="4550040941166547650">只在此裝置上</translation> <translation id="457292989631956153">{COUNT,plural, =1{要關閉 {COUNT} 個閒置分頁嗎?}other{要關閉 {COUNT} 個閒置分頁嗎?}}</translation> <translation id="457386861538956877">更多語言…</translation> <translation id="4587235830039045480">將密碼儲存在您的 Google 帳戶中</translation> @@ -768,7 +767,7 @@ <translation id="6193424046394092997">{count,plural, =1{已將書籤加入「{title}」}other{已將書籤加入「{title}」}}</translation> <translation id="6196207969502475924">語音搜尋</translation> <translation id="6202364442240589072">{COUNT,plural, =1{關閉 {COUNT} 個分頁}other{關閉 {COUNT} 個分頁}}</translation> -<translation id="6210079381482819663"><ph name="THRESHOLD" /> 天以上未使用的分頁會移到這裡。你隨時可以前往<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />進行變更。</translation> +<translation id="6210079381482819663">已有 <ph name="THRESHOLD" /> 天或以上未使用的分頁會移到此處。您可隨時在<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />中變更此設定。</translation> <translation id="6213567400989743524">已關閉的警告</translation> <translation id="6219550825416862075">歡迎回來</translation> <translation id="6219688215832490856">永不翻譯</translation> @@ -922,7 +921,6 @@ <ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="7004499039102548441">最近開啟的分頁</translation> <translation id="7006788746334555276">內容設定</translation> -<translation id="7014087399239955356">正在檢查密碼…</translation> <translation id="7029809446516969842">密碼</translation> <translation id="7053983685419859001">封鎖</translation> <translation id="7062545763355031412">接受並切換帳戶</translation> @@ -1062,7 +1060,7 @@ <translation id="8059533439631660104">收起嗰個部分。</translation> <translation id="8065292699993359127">在 Chrome 中以無痕模式開啟網址</translation> <translation id="806745655614357130">分開保留我的資料</translation> -<translation id="8069394452933076548">針對最近沒有使用的分頁,選擇過多久要移至閒置分頁區塊。</translation> +<translation id="8069394452933076548">針對最近未使用的分頁,選擇何時要移至閒置分頁部分。</translation> <translation id="8073670137947914548">下載完畢</translation> <translation id="8073872304774253879">改善搜尋和瀏覽體驗</translation> <translation id="8076492880354921740">分頁</translation> @@ -1207,7 +1205,7 @@ <translation id="9055772144595778347">無法登入</translation> <translation id="9055960261314198756">已關閉「強化保護功能」</translation> <translation id="9057972802061533987">無法追蹤,發生錯誤。</translation> -<translation id="9061495354530850708">在你的 Google 帳戶中</translation> +<translation id="9061495354530850708">在 Google 帳戶中</translation> <translation id="9065203028668620118">編輯</translation> <translation id="9068336935206019333">在 Chrome 無痕模式中開啟</translation> <translation id="9079935439869366234">全部標示為未讀</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 89b38a9..fe9389a0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{鍵盤上方顯示 {count} 個已儲存的地址。}other{鍵盤上方顯示 {count} 個已儲存的地址。}}</translation> <translation id="2421004566762153674">封鎖第三方 Cookie</translation> <translation id="2421044535038393232">繼續編輯</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{{COUNT} 組密碼遭外洩}other{{COUNT} 組密碼遭外洩}}</translation> <translation id="2434405374328098816">你已儲存過「<ph name="USERNAME" />」在 <ph name="WEBSITE" /> 使用的密碼</translation> <translation id="2435457462613246316">顯示密碼</translation> <translation id="2451654228769116489">固定分頁</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="7004499039102548441">最近開啟的分頁</translation> <translation id="7006788746334555276">內容設定</translation> -<translation id="7014087399239955356">正在檢查密碼...</translation> <translation id="7029809446516969842">密碼</translation> <translation id="7053983685419859001">封鎖</translation> <translation id="7062545763355031412">接受並切換帳戶</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zu.xtb b/ios/chrome/app/strings/resources/ios_strings_zu.xtb index d3d0092..c73f8a7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zu.xtb
@@ -206,7 +206,6 @@ <translation id="2411749908844615428">{count,plural, =1{Ikheli eli-{count} elilondoloziwe litholakala ngaphezu kwekhibhodi yakho.}one{Amakheli angu-{count} alondoloziwe atholakala ngaphezu kwekhibhodi yakho.}other{Amakheli angu-{count} alondoloziwe atholakala ngaphezu kwekhibhodi yakho.}}</translation> <translation id="2421004566762153674">Ivimba amakhukhi enkampani yangaphandle</translation> <translation id="2421044535038393232">Qhubeka nokuhlela</translation> -<translation id="2430198251915534025">{COUNT,plural, =1{Iphasiwedi Eyonakalisiwe e-{COUNT}}one{Amaphasiwedi Onakalisiwe angu-{COUNT}}other{Amaphasiwedi Onakalisiwe angu-{COUNT}}}</translation> <translation id="2434405374328098816">Usuyilondolozile kakade iphasiwedi ka-"<ph name="USERNAME" />" ku-<ph name="WEBSITE" /></translation> <translation id="2435457462613246316">Bonisa iphasiwedi</translation> <translation id="2451654228769116489">Phina ithebhu</translation> @@ -924,7 +923,6 @@ <ph name="BEGIN_LINK" />Funda kabanzi<ph name="END_LINK" /></translation> <translation id="7004499039102548441">Amathebhu wakamuva</translation> <translation id="7006788746334555276">Izilungiselelo zokuqukethwe</translation> -<translation id="7014087399239955356">Ihlola Amaphasiwedi…</translation> <translation id="7029809446516969842">Amaphasiwedi</translation> <translation id="7053983685419859001">Vimba</translation> <translation id="7062545763355031412">Yamukela uphinde ushintshe ama-akhawunti</translation>
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 88aa5927..66839f74 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -704,6 +704,11 @@ flags_ui::kOsIos, FEATURE_VALUE_TYPE( autofill::features::test::kAutofillShowTypePredictions)}, + {"autofill-account-profiles-storage", + flag_descriptions::kAutofillAccountProfilesStorageName, + flag_descriptions::kAutofillAccountProfilesStorageDescription, + flags_ui::kOsIos, + FEATURE_VALUE_TYPE(autofill::features::kAutofillAccountProfileStorage)}, {"autofill-account-profiles-union-view", flag_descriptions::kAutofillAccountProfilesUnionViewName, flag_descriptions::kAutofillAccountProfilesUnionViewDescription,
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 579a044..022593b 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -26,6 +26,11 @@ "When enabled, App Store Rating promo will be presented to eligible " "users."; +const char kAutofillAccountProfilesStorageName[] = + "Enable profile saving in Google Account"; +const char kAutofillAccountProfilesStorageDescription[] = + "When enabled, the profiles would be saved to the Google Account"; + const char kAutofillAccountProfilesUnionViewName[] = "Enable compatibility with GAS"; const char kAutofillAccountProfilesUnionViewDescription[] =
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index 88c94a3..d4ae15e 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -27,6 +27,11 @@ extern const char kAppStoreRatingName[]; extern const char kAppStoreRatingDescription[]; +// Title and description for the flag to enable save of profiles in Google +// Account. +extern const char kAutofillAccountProfilesStorageName[]; +extern const char kAutofillAccountProfilesStorageDescription[]; + // Title and description for the flag to enable compatibility with GAS profiles. extern const char kAutofillAccountProfilesUnionViewName[]; extern const char kAutofillAccountProfilesUnionViewDescription[];
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h index 1dbae5c4..5197abc 100644 --- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h +++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.h
@@ -29,6 +29,8 @@ IOSChromeSavePasswordInfoBarDelegate( absl::optional<std::string> account_to_store_password, bool password_update, + password_manager::metrics_util::PasswordAccountStorageUserState + account_storage_user_state, std::unique_ptr<password_manager::PasswordFormManagerForUI> form_to_save); IOSChromeSavePasswordInfoBarDelegate( @@ -111,6 +113,10 @@ // password will only be stored on this device. const absl::optional<std::string> account_to_store_password_; + // Used to record metrics related to passwords account storage. + const password_manager::metrics_util::PasswordAccountStorageUserState + account_storage_user_state_; + // Used to track the results we get from the info bar. password_manager::metrics_util::UIDismissalReason infobar_response_ = password_manager::metrics_util::NO_DIRECT_INTERACTION;
diff --git a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm index 167d8e08..5a1cb4e 100644 --- a/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm +++ b/ios/chrome/browser/passwords/ios_chrome_save_password_infobar_delegate.mm
@@ -94,6 +94,8 @@ void RecordDismissalMetrics( password_manager::PasswordFormManagerForUI* form_to_save, password_manager::metrics_util::UIDismissalReason infobar_response, + password_manager::metrics_util::PasswordAccountStorageUserState + account_storage_user_state, bool update_infobar) { form_to_save->GetMetricsRecorder()->RecordUIDismissalReason(infobar_response); @@ -105,7 +107,7 @@ password_manager::metrics_util::LogSaveUIDismissalReason( infobar_response, form_to_save->GetPendingCredentials().submission_event, - /*user_state=*/absl::nullopt); + account_storage_user_state); } } @@ -126,20 +128,24 @@ IOSChromeSavePasswordInfoBarDelegate::IOSChromeSavePasswordInfoBarDelegate( absl::optional<std::string> account_to_store_password, bool password_update, + password_manager::metrics_util::PasswordAccountStorageUserState + account_storage_user_state, std::unique_ptr<PasswordFormManagerForUI> form_to_save) : form_to_save_(std::move(form_to_save)), infobar_type_(password_update ? PasswordInfobarType::kPasswordInfobarTypeUpdate : PasswordInfobarType::kPasswordInfobarTypeSave), account_to_store_password_(account_to_store_password), + account_storage_user_state_(account_storage_user_state), password_update_(password_update) {} IOSChromeSavePasswordInfoBarDelegate::~IOSChromeSavePasswordInfoBarDelegate() { // If by any reason this delegate gets dealloc before the Infobar is // dismissed, record the dismissal metrics. if (infobar_presenting_) { - RecordDismissalMetrics(form_to_save_.get(), infobar_response_, - IsUpdateInfobar(infobar_type_)); + RecordDismissalMetrics(form_to_save_.get(), infobar_response_, + account_storage_user_state_, + IsUpdateInfobar(infobar_type_)); } } @@ -250,6 +256,7 @@ return; RecordDismissalMetrics(form_to_save_.get(), infobar_response_, + account_storage_user_state_, IsUpdateInfobar(infobar_type_)); // After the metrics have been recorded we can reset the response. infobar_response_ = password_manager::metrics_util::NO_DIRECT_INTERACTION;
diff --git a/ios/chrome/browser/passwords/password_controller.mm b/ios/chrome/browser/passwords/password_controller.mm index 268c3d1..5816914 100644 --- a/ios/chrome/browser/passwords/password_controller.mm +++ b/ios/chrome/browser/passwords/password_controller.mm
@@ -39,6 +39,8 @@ #import "components/password_manager/core/browser/password_generation_frame_helper.h" #import "components/password_manager/core/browser/password_manager.h" #import "components/password_manager/core/browser/password_manager_client.h" +#import "components/password_manager/core/browser/password_manager_features_util.h" +#import "components/password_manager/core/browser/password_manager_metrics_util.h" #import "components/password_manager/core/browser/password_sync_util.h" #import "components/password_manager/core/common/password_manager_features.h" #import "components/password_manager/core/common/password_manager_pref_names.h" @@ -447,12 +449,15 @@ return; } - absl::optional<std::string> accountToStorePassword = absl::nullopt; - if (self.browserState) { - accountToStorePassword = password_manager::sync_util::GetAccountForSaving( - self.browserState->GetPrefs(), - SyncServiceFactory::GetForBrowserState(self.browserState)); - } + CHECK(self.browserState); + PrefService* prefs = self.browserState->GetPrefs(); + syncer::SyncService* syncService = + SyncServiceFactory::GetForBrowserState(self.browserState); + const absl::optional<std::string> accountToStorePassword = + password_manager::sync_util::GetAccountForSaving(prefs, syncService); + const password_manager::metrics_util::PasswordAccountStorageUserState + accountStorageUserState = password_manager::features_util:: + ComputePasswordAccountStorageUserState(prefs, syncService); infobars::InfoBarManager* infoBarManager = InfoBarManagerImpl::FromWebState(_webState); @@ -468,7 +473,7 @@ auto delegate = std::make_unique<IOSChromeSavePasswordInfoBarDelegate>( accountToStorePassword, - /*password_update=*/false, std::move(form)); + /*password_update=*/false, accountStorageUserState, std::move(form)); std::unique_ptr<InfoBarIOS> infobar = std::make_unique<InfoBarIOS>( InfobarType::kInfobarTypePasswordSave, std::move(delegate), /*skip_banner=*/manual); @@ -486,7 +491,7 @@ auto delegate = std::make_unique<IOSChromeSavePasswordInfoBarDelegate>( accountToStorePassword, - /*password_update=*/true, std::move(form)); + /*password_update=*/true, accountStorageUserState, std::move(form)); std::unique_ptr<InfoBarIOS> infobar = std::make_unique<InfoBarIOS>( InfobarType::kInfobarTypePasswordUpdate, std::move(delegate), /*skip_banner=*/manual);
diff --git a/ios/chrome/browser/passwords/test/mock_ios_chrome_save_passwords_infobar_delegate.mm b/ios/chrome/browser/passwords/test/mock_ios_chrome_save_passwords_infobar_delegate.mm index 59bd743be..b5cfc523 100644 --- a/ios/chrome/browser/passwords/test/mock_ios_chrome_save_passwords_infobar_delegate.mm +++ b/ios/chrome/browser/passwords/test/mock_ios_chrome_save_passwords_infobar_delegate.mm
@@ -8,6 +8,7 @@ #import "base/strings/sys_string_conversions.h" #import "components/password_manager/core/browser/mock_password_form_manager_for_ui.h" #import "components/password_manager/core/browser/password_manager_metrics_util.h" +#import "third_party/abseil-cpp/absl/types/optional.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -54,6 +55,11 @@ : IOSChromeSavePasswordInfoBarDelegate( account_to_store_password, /*password_update=*/false, + account_to_store_password.has_value() + ? password_manager::metrics_util:: + PasswordAccountStorageUserState::kSyncUser + : password_manager::metrics_util:: + PasswordAccountStorageUserState::kSignedOutUser, CreateFormManager(form.get(), url.get())), form_(std::move(form)), url_(std::move(url)) {}
diff --git a/ios/chrome/browser/shared/coordinator/layout_guide/BUILD.gn b/ios/chrome/browser/shared/coordinator/layout_guide/BUILD.gn new file mode 100644 index 0000000..9e33b4d --- /dev/null +++ b/ios/chrome/browser/shared/coordinator/layout_guide/BUILD.gn
@@ -0,0 +1,12 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("layout_guide") { + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ "layout_guide_util.h" ] + deps = [ + "//ios/chrome/browser/shared/ui/layout_guide", + "//ios/chrome/browser/ui/main:layout_guide_util", + ] +}
diff --git a/ios/chrome/browser/shared/coordinator/layout_guide/layout_guide_util.h b/ios/chrome/browser/shared/coordinator/layout_guide/layout_guide_util.h new file mode 100644 index 0000000..23276a68 --- /dev/null +++ b/ios/chrome/browser/shared/coordinator/layout_guide/layout_guide_util.h
@@ -0,0 +1,11 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_SHARED_COORDINATOR_LAYOUT_GUIDE_LAYOUT_GUIDE_UTIL_H_ +#define IOS_CHROME_BROWSER_SHARED_COORDINATOR_LAYOUT_GUIDE_LAYOUT_GUIDE_UTIL_H_ + +// Temporary include. +#import "ios/chrome/browser/ui/main/layout_guide_util.h" + +#endif // IOS_CHROME_BROWSER_SHARED_COORDINATOR_LAYOUT_GUIDE_LAYOUT_GUIDE_UTIL_H_
diff --git a/ios/chrome/browser/shared/coordinator/scene/BUILD.gn b/ios/chrome/browser/shared/coordinator/scene/BUILD.gn new file mode 100644 index 0000000..e6e91d0 --- /dev/null +++ b/ios/chrome/browser/shared/coordinator/scene/BUILD.gn
@@ -0,0 +1,14 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("scene_state_header") { + configs += [ "//build/config/compiler:enable_arc" ] + + sources = [ + "scene_state.h", + "scene_state_browser_agent.h", + ] + + public_deps = [ "//ios/chrome/browser/ui/main:scene_state_header" ] +}
diff --git a/ios/chrome/browser/shared/coordinator/scene/scene_state.h b/ios/chrome/browser/shared/coordinator/scene/scene_state.h new file mode 100644 index 0000000..3fcb1ce --- /dev/null +++ b/ios/chrome/browser/shared/coordinator/scene/scene_state.h
@@ -0,0 +1,11 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_SHARED_COORDINATOR_SCENE_SCENE_STATE_H_ +#define IOS_CHROME_BROWSER_SHARED_COORDINATOR_SCENE_SCENE_STATE_H_ + +// Temporary include. +#import "ios/chrome/browser/ui/main/scene_state.h" + +#endif // IOS_CHROME_BROWSER_SHARED_COORDINATOR_SCENE_SCENE_STATE_H_
diff --git a/ios/chrome/browser/shared/coordinator/scene/scene_state_browser_agent.h b/ios/chrome/browser/shared/coordinator/scene/scene_state_browser_agent.h new file mode 100644 index 0000000..d2052eb --- /dev/null +++ b/ios/chrome/browser/shared/coordinator/scene/scene_state_browser_agent.h
@@ -0,0 +1,11 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_SHARED_COORDINATOR_SCENE_SCENE_STATE_BROWSER_AGENT_H_ +#define IOS_CHROME_BROWSER_SHARED_COORDINATOR_SCENE_SCENE_STATE_BROWSER_AGENT_H_ + +// Temporary include. +#import "ios/chrome/browser/ui/main/scene_state_browser_agent.h" + +#endif // IOS_CHROME_BROWSER_SHARED_COORDINATOR_SCENE_SCENE_STATE_BROWSER_AGENT_H_
diff --git a/ios/chrome/browser/shared/ui/layout_guide/BUILD.gn b/ios/chrome/browser/shared/ui/layout_guide/BUILD.gn new file mode 100644 index 0000000..d4f0c9e --- /dev/null +++ b/ios/chrome/browser/shared/ui/layout_guide/BUILD.gn
@@ -0,0 +1,17 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/ios/swift_source_set.gni") + +source_set("layout_guide") { + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ "layout_guide_names.h" ] + deps = [ "//ios/chrome/browser/shared/ui/util" ] +} + +source_set("layout_guide_swift") { + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ "layout_guide_swift.h" ] + deps = [ "//ios/chrome/browser/shared/ui/util:util_swift" ] +}
diff --git a/ios/chrome/browser/shared/ui/layout_guide/layout_guide_names.h b/ios/chrome/browser/shared/ui/layout_guide/layout_guide_names.h new file mode 100644 index 0000000..b287f42 --- /dev/null +++ b/ios/chrome/browser/shared/ui/layout_guide/layout_guide_names.h
@@ -0,0 +1,11 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_SHARED_UI_LAYOUT_GUIDE_LAYOUT_GUIDE_NAMES_H_ +#define IOS_CHROME_BROWSER_SHARED_UI_LAYOUT_GUIDE_LAYOUT_GUIDE_NAMES_H_ + +// Temporary include. +#import "ios/chrome/browser/shared/ui/util/layout_guide_names.h" + +#endif // IOS_CHROME_BROWSER_SHARED_UI_LAYOUT_GUIDE_LAYOUT_GUIDE_NAMES_H_
diff --git a/ios/chrome/browser/shared/ui/layout_guide/layout_guide_swift.h b/ios/chrome/browser/shared/ui/layout_guide/layout_guide_swift.h new file mode 100644 index 0000000..747642f2 --- /dev/null +++ b/ios/chrome/browser/shared/ui/layout_guide/layout_guide_swift.h
@@ -0,0 +1,11 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_SHARED_UI_LAYOUT_GUIDE_LAYOUT_GUIDE_SWIFT_H_ +#define IOS_CHROME_BROWSER_SHARED_UI_LAYOUT_GUIDE_LAYOUT_GUIDE_SWIFT_H_ + +// Temporary include. +#import "ios/chrome/browser/shared/ui/util/util_swift.h" + +#endif // IOS_CHROME_BROWSER_SHARED_UI_LAYOUT_GUIDE_LAYOUT_GUIDE_SWIFT_H_
diff --git a/ios/chrome/browser/snapshots/snapshot_browser_agent.mm b/ios/chrome/browser/snapshots/snapshot_browser_agent.mm index 30126f6..64e34ff 100644 --- a/ios/chrome/browser/snapshots/snapshot_browser_agent.mm +++ b/ios/chrome/browser/snapshots/snapshot_browser_agent.mm
@@ -19,13 +19,6 @@ #error "This file requires ARC support." #endif -namespace { - -const base::FilePath::CharType kLegacyBaseDirectory[] = - FILE_PATH_LITERAL("Chromium"); - -} // namespace - BROWSER_USER_DATA_KEY_IMPL(SnapshotBrowserAgent) SnapshotBrowserAgent::SnapshotBrowserAgent(Browser* browser) @@ -103,14 +96,6 @@ void SnapshotBrowserAgent::MigrateStorageIfNecessary() { DCHECK(snapshot_cache_); - base::FilePath legacy_directory; - DCHECK(base::PathService::Get(base::DIR_CACHE, &legacy_directory)); - legacy_directory = legacy_directory.Append(kLegacyBaseDirectory) - .Append(kSnapshotsDirectoryName); - // The legacy directory is deleted in migration, and migration is NO-OP if - // directory does not exist. - [snapshot_cache_ migrateSnapshotsWithIDs:GetTabIDs() - fromSourcePath:legacy_directory]; } void SnapshotBrowserAgent::PurgeUnusedSnapshots() {
diff --git a/ios/chrome/browser/snapshots/snapshot_cache.h b/ios/chrome/browser/snapshots/snapshot_cache.h index 1d238fcf..6cabcb7 100644 --- a/ios/chrome/browser/snapshots/snapshot_cache.h +++ b/ios/chrome/browser/snapshots/snapshot_cache.h
@@ -56,12 +56,6 @@ // Removes all images from the LRU and disk. - (void)removeAllImages; -// Moves all images for `snapshotIDs` from `sourcePath` to the current storage -// path of this snapshot cache. Deletes the folder `sourcePath` after migration, -// regardless of remaining files (which may be obsolete snapshots). -- (void)migrateSnapshotsWithIDs:(NSSet<NSString*>*)snapshotIDs - fromSourcePath:(const base::FilePath&)sourcePath; - // Purge the cache of snapshots that are older than `date`. The snapshots for // `liveSnapshotIDs` will be kept. This will be done asynchronously on a // background thread.
diff --git a/ios/chrome/browser/snapshots/snapshot_cache.mm b/ios/chrome/browser/snapshots/snapshot_cache.mm index d1e2d37..45864ff 100644 --- a/ios/chrome/browser/snapshots/snapshot_cache.mm +++ b/ios/chrome/browser/snapshots/snapshot_cache.mm
@@ -214,45 +214,6 @@ base::mac::SetBackupExclusion(image_path); } -void MigrateSnapshotsWithIDs(const base::FilePath& old_cache_directory, - const base::FilePath& new_cache_directory, - NSSet<NSString*>* snapshot_ids, - ImageScale snapshot_scale) { - base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, - base::BlockingType::WILL_BLOCK); - - if (old_cache_directory.empty() || - old_cache_directory == new_cache_directory || - !base::DirectoryExists(old_cache_directory)) { - return; - } - - DCHECK(base::DirectoryExists(new_cache_directory)); - for (NSString* snapshot_id in snapshot_ids) { - for (const ImageType image_type : kImageTypes) { - const base::FilePath old_image_path = ImagePath( - snapshot_id, image_type, snapshot_scale, old_cache_directory); - const base::FilePath new_image_path = ImagePath( - snapshot_id, image_type, snapshot_scale, new_cache_directory); - - // Only migrate snapshots which are needed. - if (!base::PathExists(old_image_path) || base::PathExists(new_image_path)) - continue; - - if (!base::Move(old_image_path, new_image_path)) { - DLOG(ERROR) << "Error migrating file: " - << old_image_path.AsUTF8Unsafe(); - } - } - } - - // Remove the old source folder. - if (!base::DeletePathRecursively(old_cache_directory)) { - DLOG(ERROR) << "Error deleting snapshots folder during migration: " - << old_cache_directory.AsUTF8Unsafe(); - } -} - void DeleteImageWithSnapshotID(const base::FilePath& cache_directory, NSString* snapshot_id, ImageScale snapshot_scale) { @@ -523,17 +484,6 @@ _cacheDirectory); } -- (void)migrateSnapshotsWithIDs:(NSSet<NSString*>*)snapshotIDs - fromSourcePath:(const base::FilePath&)sourcePath { - DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker); - if (!_taskRunner) - return; - - _taskRunner->PostTask( - FROM_HERE, base::BindOnce(&MigrateSnapshotsWithIDs, sourcePath, - _cacheDirectory, snapshotIDs, _snapshotsScale)); -} - - (void)purgeCacheOlderThan:(const base::Time&)date keeping:(NSSet*)liveSnapshotIDs { DCHECK_CALLED_ON_VALID_SEQUENCE(_sequenceChecker);
diff --git a/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm b/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm index 70b0328..eede8a4 100644 --- a/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm +++ b/ios/chrome/browser/snapshots/snapshot_cache_unittest.mm
@@ -343,45 +343,6 @@ } } -// Tests that migration moves only specified files to the current SnapshotCache -// folder. Tests that the legacy folder and any remaining contents are deleted. -TEST_F(SnapshotCacheTest, MigrationMovesFileAndDeletesSource) { - base::ScopedTempDir scoped_source_directory; - ASSERT_TRUE(scoped_source_directory.CreateUniqueTempDir()); - - SnapshotCache* cache = GetSnapshotCache(); - base::FilePath source_folder = scoped_source_directory.GetPath(); - - // This snapshot will be included in migration. - NSString* image1_id = [[NSUUID UUID] UUIDString]; - base::FilePath source_image1_path = - AddSnapshotFileToDirectory(source_folder, image1_id); - base::FilePath destination_image1_path = - [cache imagePathForSnapshotID:image1_id]; - - // This snapshot will be excluded from migration. - NSString* image2_id = [[NSUUID UUID] UUIDString]; - base::FilePath source_image2_path = - AddSnapshotFileToDirectory(source_folder, image2_id); - base::FilePath destination_image2_path = - [cache imagePathForSnapshotID:image2_id]; - - NSSet<NSString*>* snapshot_ids = [[NSSet alloc] initWithArray:@[ image1_id ]]; - [cache migrateSnapshotsWithIDs:snapshot_ids fromSourcePath:source_folder]; - FlushRunLoops(); - - // image1 should have been moved to the destination path. - EXPECT_TRUE(base::PathExists(destination_image1_path)); - - // image2 should not have been moved. - EXPECT_FALSE(base::PathExists(destination_image2_path)); - - // The legacy folder should have been deleted. - EXPECT_FALSE(base::PathExists(source_image1_path)); - EXPECT_FALSE(base::PathExists(source_image1_path)); - EXPECT_FALSE(base::PathExists(source_folder)); -} - TEST_F(SnapshotCacheTest, Purge) { SnapshotCache* cache = GetSnapshotCache();
diff --git a/ios/chrome/browser/ui/bookmarks/folder_chooser/BUILD.gn b/ios/chrome/browser/ui/bookmarks/folder_chooser/BUILD.gn index 22e895b8..89bd5d1 100644 --- a/ios/chrome/browser/ui/bookmarks/folder_chooser/BUILD.gn +++ b/ios/chrome/browser/ui/bookmarks/folder_chooser/BUILD.gn
@@ -50,7 +50,10 @@ # Contains folder chooser ui implementation. source_set("ui") { configs += [ "//build/config/compiler:enable_arc" ] - visibility = [ ":coordinator_impl" ] + visibility = [ + ":coordinator_impl", + ":unit_tests", + ] sources = [ "bookmarks_folder_chooser_consumer.h", "bookmarks_folder_chooser_mediator.h", @@ -83,6 +86,28 @@ frameworks = [ "UIKit.framework" ] } +source_set("unit_tests") { + configs += [ "//build/config/compiler:enable_arc" ] + testonly = true + sources = [ "bookmarks_folder_chooser_sub_data_source_impl_unittest.mm" ] + deps = [ + ":ui", + "//base/test:test_support", + "//components/bookmarks/browser", + "//components/bookmarks/test", + "//ios/chrome/browser/bookmarks", + "//ios/chrome/browser/browser_state:test_support", + "//ios/chrome/browser/signin", + "//ios/chrome/browser/signin:test_support", + "//ios/chrome/browser/sync", + "//ios/chrome/browser/sync:test_support", + "//ios/chrome/test:test_support", + "//ios/web/public/test:test", + "//testing/gtest", + "//third_party/ocmock", + ] +} + source_set("eg2_tests") { configs += [ "//build/config/compiler:enable_arc",
diff --git a/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_mediator.mm b/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_mediator.mm index 1bdb880..6263c96 100644 --- a/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_mediator.mm +++ b/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_mediator.mm
@@ -92,8 +92,10 @@ - (void)disconnect { [_profileDataSource disconnect]; + _profileDataSource.consumer = nil; _profileDataSource = nil; [_accountDataSource disconnect]; + _accountDataSource.consumer = nil; _accountDataSource = nil; _editedNodes.clear(); _authService = nullptr; @@ -167,7 +169,6 @@ // The selected folder has been deleted. Unset `_selectedFolderNode`. _selectedFolderNode = nil; } - [_consumer notifyModelUpdated]; } - (void)bookmarkModelWillRemoveAllNodes:(const BookmarkModel*)bookmarkModel { @@ -182,9 +183,7 @@ // chooser. [_delegate bookmarksFolderChooserMediatorWantsDismissal:self]; } else if (_selectedFolderNode->HasAncestor(bookmarkModel->root_node())) { - // The selected folder will be deleted. Unset `_selectedFolderNode`. The UI - // will be updated after the nodes are deleted in - // `BookmarksFolderChooserSubDataSourceImpl::bookmarkModelRemovedAllNodes`. + // The selected folder will be deleted. Unset `_selectedFolderNode`. _selectedFolderNode = nil; } }
diff --git a/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.h b/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.h index d2bfb02..51da1de 100644 --- a/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.h +++ b/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.h
@@ -15,7 +15,11 @@ class BookmarkNode; } // namespace bookmarks -// Protocol to access and update data from parent data source object. +// Protocol to access and update data from parent data source object. Please +// note that the parent data source is not and should not be responsible for +// updating the UI in these method calls as that distributes UI update logic +// across multiple files. `BookmarksFolderChooserSubDataSourceImpl` is +// responsible for updating the UI after calling these methods. @protocol BookmarksFolderChooserParentDataSource <NSObject> // Called when a bookmark node is deleted from the model.
diff --git a/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.mm b/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.mm index b7ab1f4..733ae08 100644 --- a/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.mm +++ b/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.mm
@@ -98,9 +98,12 @@ didDeleteNode:(const bookmarks::BookmarkNode*)node fromFolder:(const bookmarks::BookmarkNode*)folder { [_parentDataSource bookmarkNodeDeleted:node]; + [_consumer notifyModelUpdated]; } - (void)bookmarkModelWillRemoveAllNodes:(const BookmarkModel*)model { + // `_consumer` is notified after the nodes are acutally deleted in + // `bookmarkModelRemovedAllNodes`. [_parentDataSource bookmarkModelWillRemoveAllNodes:model]; }
diff --git a/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl_unittest.mm b/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl_unittest.mm new file mode 100644 index 0000000..9c41a69 --- /dev/null +++ b/ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl_unittest.mm
@@ -0,0 +1,304 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_sub_data_source_impl.h" + +#import <Foundation/Foundation.h> +#import <OCMock/OCMock.h> + +#import "base/containers/contains.h" +#import "base/strings/sys_string_conversions.h" +#import "base/test/scoped_feature_list.h" +#import "components/bookmarks/browser/bookmark_model.h" +#import "components/bookmarks/common/bookmark_features.h" +#import "components/bookmarks/test/bookmark_test_helpers.h" +#import "ios/chrome/browser/bookmarks/account_bookmark_model_factory.h" +#import "ios/chrome/browser/bookmarks/local_or_syncable_bookmark_model_factory.h" +#import "ios/chrome/browser/browser_state/test_chrome_browser_state.h" +#import "ios/chrome/browser/ui/bookmarks/folder_chooser/bookmarks_folder_chooser_consumer.h" +#import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" +#import "ios/web/public/test/web_task_environment.h" +#import "testing/gtest_mac.h" +#import "testing/platform_test.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +using bookmarks::BookmarkModel; +using bookmarks::BookmarkNode; + +namespace { + +enum class TestParam { + kProfileModel, + kAccountModel, +}; + +} // namespace + +@interface FakeBookmarksFolderChooserParentDataSource + : NSObject <BookmarksFolderChooserParentDataSource> + +// The argument provided when `bookmarkNodeDeleted:` was called. +@property(nonatomic, assign) const BookmarkNode* bookmarkNodeDeletedArg; +// The argument provided when `bookmarkModelWillRemoveAllNodes:` was called. +@property(nonatomic, assign) + const BookmarkModel* bookmarkModelWillRemoveAllNodesArg; + +- (instancetype)initWithNodes:(const std::set<const BookmarkNode*>&)nodes; + +@end + +@implementation FakeBookmarksFolderChooserParentDataSource { + std::set<const BookmarkNode*> _editedNodes; +} + +- (instancetype)initWithNodes:(const std::set<const BookmarkNode*>&)nodes { + if ((self = [super init])) { + _editedNodes = nodes; + } + return self; +} + +- (void)bookmarkNodeDeleted:(const BookmarkNode*)bookmarkNode { + if (base::Contains(_editedNodes, bookmarkNode)) { + _editedNodes.erase(bookmarkNode); + } + _bookmarkNodeDeletedArg = bookmarkNode; +} + +- (void)bookmarkModelWillRemoveAllNodes:(const BookmarkModel*)bookmarkModel { + _editedNodes.clear(); + _bookmarkModelWillRemoveAllNodesArg = bookmarkModel; +} + +- (const std::set<const BookmarkNode*>&)editedNodes { + return _editedNodes; +} + +@end + +class BookmarksFolderChooserSubDataSourceImplTest + : public PlatformTest, + public testing::WithParamInterface<TestParam> { + protected: + BookmarksFolderChooserSubDataSourceImplTest() { + TestChromeBrowserState::Builder builder; + builder.AddTestingFactory( + ios::LocalOrSyncableBookmarkModelFactory::GetInstance(), + ios::LocalOrSyncableBookmarkModelFactory::GetDefaultFactory()); + builder.AddTestingFactory( + ios::AccountBookmarkModelFactory::GetInstance(), + ios::AccountBookmarkModelFactory::GetDefaultFactory()); + + browser_state_ = builder.Build(); + // `scoped_feature_list_` should be initialized before creating the + // `model_`. Otherwise `AccountBookmarkModelFactory` will return `nullptr`. + scoped_feature_list_.InitAndEnableFeature( + bookmarks::kEnableBookmarksAccountStorage); + model_ = GetParam() == TestParam::kAccountModel + ? ios::AccountBookmarkModelFactory::GetForBrowserState( + browser_state_.get()) + : ios::LocalOrSyncableBookmarkModelFactory::GetForBrowserState( + browser_state_.get()); + bookmarks::test::WaitForBookmarkModelToLoad(model_); + mock_consumer_ = + OCMStrictProtocolMock(@protocol(BookmarksFolderChooserConsumer)); + edited_nodes_.insert(AddURL(model_->mobile_node(), @"Test URL")); + } + + ~BookmarksFolderChooserSubDataSourceImplTest() override { + [sub_data_source_ disconnect]; + sub_data_source_.consumer = nil; + sub_data_source_ = nil; + mock_consumer_ = nil; + fake_parent_data_source_ = nil; + model_ = nullptr; + } + + void CreateSubDataSource() { + fake_parent_data_source_ = + [[FakeBookmarksFolderChooserParentDataSource alloc] + initWithNodes:edited_nodes_]; + sub_data_source_ = [[BookmarksFolderChooserSubDataSourceImpl alloc] + initWithBookmarkModel:model_ + parentDataSource:fake_parent_data_source_]; + sub_data_source_.consumer = mock_consumer_; + } + + const BookmarkNode* AddURL(const BookmarkNode* parent, NSString* title) { + std::u16string c_title = base::SysNSStringToUTF16(title); + GURL url(base::SysNSStringToUTF16(@"http://example.com/bookmark") + + c_title); + return model_->AddURL(parent, parent->children().size(), c_title, url); + } + + const BookmarkNode* AddFolder(const BookmarkNode* parent, NSString* title) { + std::u16string c_title = base::SysNSStringToUTF16(title); + return model_->AddFolder(parent, parent->children().size(), c_title); + } + + void ChangeTitle(const BookmarkNode* node, NSString* title) { + std::u16string c_title = base::SysNSStringToUTF16(title); + model_->SetTitle(node, c_title, + bookmarks::metrics::BookmarkEditSource::kUser); + } + + void RemoveNode(const BookmarkNode* node) { + model_->Remove(node, bookmarks::metrics::BookmarkEditSource::kUser); + } + + void RemoveAllNodes() { model_->RemoveAllUserBookmarks(); } + + void MoveNode(const BookmarkNode* node, const BookmarkNode* new_parent) { + model_->Move(node, new_parent, new_parent->children().size()); + } + + IOSChromeScopedTestingLocalState local_state_; + web::WebTaskEnvironment task_environment_; + base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr<TestChromeBrowserState> browser_state_; + BookmarkModel* model_; + BookmarksFolderChooserSubDataSourceImpl* sub_data_source_; + id mock_consumer_; + FakeBookmarksFolderChooserParentDataSource* fake_parent_data_source_; + NSString* test_folder_title_1 = @"Test Folder 1"; + NSString* test_folder_title_2 = @"Test Folder 2"; + std::set<const BookmarkNode*> edited_nodes_; +}; + +// Tests that the sub data source correctly fetches visible folders. +TEST_P(BookmarksFolderChooserSubDataSourceImplTest, TestVisibleFolderNodes) { + const BookmarkNode* test_folder_node_1 = + AddFolder(model_->mobile_node(), test_folder_title_1); + const BookmarkNode* test_folder_node_2 = + AddFolder(test_folder_node_1, test_folder_title_2); + edited_nodes_.insert(test_folder_node_2); + CreateSubDataSource(); + + std::vector<const BookmarkNode*> visible_folder_nodes = + [sub_data_source_ visibleFolderNodes]; + ASSERT_EQ(2u, visible_folder_nodes.size()); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[0]->GetTitle()), + @"Mobile Bookmarks"); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[1]->GetTitle()), + test_folder_title_1); +} + +// Tests that changing title of bookmarked folder node updates the UI. +TEST_P(BookmarksFolderChooserSubDataSourceImplTest, TestFolderTitleChange) { + const BookmarkNode* test_folder_node = + AddFolder(model_->mobile_node(), test_folder_title_1); + CreateSubDataSource(); + + [[mock_consumer_ expect] notifyModelUpdated]; + ChangeTitle(test_folder_node, test_folder_title_2); + + [mock_consumer_ verify]; + std::vector<const BookmarkNode*> visible_folder_nodes = + [sub_data_source_ visibleFolderNodes]; + ASSERT_EQ(2u, visible_folder_nodes.size()); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[0]->GetTitle()), + @"Mobile Bookmarks"); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[1]->GetTitle()), + test_folder_title_2); +} + +// Tests that adding a folder node in the bookmark model updates the UI. +TEST_P(BookmarksFolderChooserSubDataSourceImplTest, TestFolderAdded) { + const BookmarkNode* test_folder_node_1 = + AddFolder(model_->mobile_node(), test_folder_title_1); + CreateSubDataSource(); + + [[mock_consumer_ expect] notifyModelUpdated]; + AddFolder(test_folder_node_1, test_folder_title_2); + + [mock_consumer_ verify]; + std::vector<const BookmarkNode*> visible_folder_nodes = + [sub_data_source_ visibleFolderNodes]; + ASSERT_EQ(3u, visible_folder_nodes.size()); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[0]->GetTitle()), + @"Mobile Bookmarks"); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[1]->GetTitle()), + test_folder_title_1); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[2]->GetTitle()), + test_folder_title_2); +} + +// Tests that removing a folder node from the bookmark model updates the UI. +TEST_P(BookmarksFolderChooserSubDataSourceImplTest, TestFolderRemoved) { + const BookmarkNode* test_folder_node_1 = + AddFolder(model_->mobile_node(), test_folder_title_1); + const BookmarkNode* test_folder_node_2 = + AddFolder(test_folder_node_1, test_folder_title_2); + CreateSubDataSource(); + + // `mock_consumer_` gets notified twice in `bookmarkNodeChildrenChanged:` and + // `bookmarkNodeDeleted:fromFolder:` method calls from `BookmarkModel` + // observer. + [[mock_consumer_ expect] notifyModelUpdated]; + [[mock_consumer_ expect] notifyModelUpdated]; + RemoveNode(test_folder_node_2); + + [mock_consumer_ verify]; + ASSERT_EQ(test_folder_node_2, + fake_parent_data_source_.bookmarkNodeDeletedArg); + std::vector<const BookmarkNode*> visible_folder_nodes = + [sub_data_source_ visibleFolderNodes]; + ASSERT_EQ(2u, visible_folder_nodes.size()); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[0]->GetTitle()), + @"Mobile Bookmarks"); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[1]->GetTitle()), + test_folder_title_1); +} + +// Tests that removing all nodes in the bookmark model updates the UI. +TEST_P(BookmarksFolderChooserSubDataSourceImplTest, TestAllFoldersRemoved) { + const BookmarkNode* test_folder_node_1 = + AddFolder(model_->mobile_node(), test_folder_title_1); + AddFolder(test_folder_node_1, test_folder_title_2); + CreateSubDataSource(); + + [[mock_consumer_ expect] notifyModelUpdated]; + RemoveAllNodes(); + + [mock_consumer_ verify]; + ASSERT_EQ(model_, + fake_parent_data_source_.bookmarkModelWillRemoveAllNodesArg); + std::vector<const BookmarkNode*> visible_folder_nodes = + [sub_data_source_ visibleFolderNodes]; + ASSERT_EQ(1u, visible_folder_nodes.size()); + // "Mobile Bookmarks" is a permanent node and thus always exists. + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[0]->GetTitle()), + @"Mobile Bookmarks"); +} + +// Tests that moving a node in the bookmark model updates the UI. +TEST_P(BookmarksFolderChooserSubDataSourceImplTest, TestFolderMoved) { + const BookmarkNode* test_folder_node_1 = + AddFolder(model_->mobile_node(), test_folder_title_1); + const BookmarkNode* test_folder_node_2 = + AddFolder(test_folder_node_1, test_folder_title_2); + CreateSubDataSource(); + + [[mock_consumer_ expect] notifyModelUpdated]; + MoveNode(test_folder_node_2, model_->mobile_node()); + + [mock_consumer_ verify]; + std::vector<const BookmarkNode*> visible_folder_nodes = + [sub_data_source_ visibleFolderNodes]; + ASSERT_EQ(3u, visible_folder_nodes.size()); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[0]->GetTitle()), + @"Mobile Bookmarks"); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[1]->GetTitle()), + test_folder_title_1); + EXPECT_NSEQ(base::SysUTF16ToNSString(visible_folder_nodes[2]->GetTitle()), + test_folder_title_2); +} + +INSTANTIATE_TEST_SUITE_P(/* No InstantionName*/, + BookmarksFolderChooserSubDataSourceImplTest, + testing::Values(TestParam::kAccountModel, + TestParam::kProfileModel));
diff --git a/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_coordinator.mm b/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_coordinator.mm index ea1023d..b987114 100644 --- a/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_coordinator.mm +++ b/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_coordinator.mm
@@ -92,31 +92,25 @@ SyncSetupServiceFactory::GetForBrowserState(browserState); syncer::SyncService* syncService = SyncServiceFactory::GetForBrowserState(browserState); + _viewController = [[BookmarksFolderEditorViewController alloc] + initWithBookmarkModel:model + folderNode:_folderNode + parentFolderNode:_parentFolderNode + syncSetupService:syncSetupService + syncService:syncService + browser:self.browser]; + _viewController.delegate = self; + _viewController.snackbarCommandsHandler = HandlerForProtocol( + self.browser->GetCommandDispatcher(), SnackbarCommands); + if (_baseNavigationController) { DCHECK(_parentFolderNode); - _viewController = [BookmarksFolderEditorViewController - folderCreatorWithBookmarkModel:model - parentFolder:_parentFolderNode - browser:self.browser - syncSetupService:syncSetupService - syncService:syncService]; - _viewController.delegate = self; - _viewController.snackbarCommandsHandler = HandlerForProtocol( - self.browser->GetCommandDispatcher(), SnackbarCommands); + DCHECK(!_folderNode); [_baseNavigationController pushViewController:_viewController animated:YES]; } else { DCHECK(!_navigationController); - DCHECK(_folderNode); DCHECK(!_parentFolderNode); - _viewController = [BookmarksFolderEditorViewController - folderEditorWithBookmarkModel:model - folder:_folderNode - browser:self.browser - syncSetupService:syncSetupService - syncService:syncService]; - _viewController.delegate = self; - _viewController.snackbarCommandsHandler = HandlerForProtocol( - self.browser->GetCommandDispatcher(), SnackbarCommands); + DCHECK(_folderNode); _navigationController = [[BookmarkNavigationController alloc] initWithRootViewController:_viewController]; _navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
diff --git a/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_view_controller.h b/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_view_controller.h index 25e4a43..70505384 100644 --- a/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_view_controller.h +++ b/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_view_controller.h
@@ -68,28 +68,19 @@ // Snackbar commands handler for this ViewController. @property(nonatomic, weak) id<SnackbarCommands> snackbarCommandsHandler; -// Designated factory methods. - -// Returns a view controller set to create a new folder in `parentFolder`. -// `parentFolder` must not be `nullptr`. // `bookmarkModel` must not be `nullptr` and must be loaded. -+ (instancetype) - folderCreatorWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel - parentFolder:(const bookmarks::BookmarkNode*)parentFolder - browser:(Browser*)browser - syncSetupService:(SyncSetupService*)syncSetupService - syncService:(syncer::SyncService*)syncService; - -// `bookmarkModel` must not be `nullptr` and must be loaded. -// `folder` must not be `nullptr` and must be editable. +// Both `parentFolder` and `folder` cannot be `nullptr`. If `folder` is not +// `nullptr` than it must also be editable. If `folder` is not `nullptr` then +// it also means that we're editing an existing folder. // `browser` must not be `nullptr`. -+ (instancetype) - folderEditorWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel - folder:(const bookmarks::BookmarkNode*)folder - browser:(Browser*)browser - syncSetupService:(SyncSetupService*)syncSetupService - syncService:(syncer::SyncService*)syncService; - +- (instancetype)initWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel + folderNode:(const bookmarks::BookmarkNode*)folder + parentFolderNode: + (const bookmarks::BookmarkNode*)parentFolder + syncSetupService:(SyncSetupService*)syncSetupService + syncService:(syncer::SyncService*)syncService + browser:(Browser*)browser + NS_DESIGNATED_INITIALIZER; - (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE; // Called when the user attempt to swipe down the view controller.
diff --git a/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_view_controller.mm b/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_view_controller.mm index 57fd7afa3..f45a591 100644 --- a/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/folder_editor/bookmarks_folder_editor_view_controller.mm
@@ -59,118 +59,59 @@ @interface BookmarksFolderEditorViewController () < BookmarkModelBridgeObserver, BookmarkTextFieldItemDelegate, - SyncObserverModelBridge> { - std::unique_ptr<BookmarkModelBridge> _modelBridge; + SyncObserverModelBridge> +@end - // Flag to ignore bookmark model Move notifications when the move is performed - // by this class. - BOOL _ignoresOwnMove; +@implementation BookmarksFolderEditorViewController { + bookmarks::BookmarkModel* _bookmarkModel; + std::unique_ptr<BookmarkModelBridge> _modelBridge; std::unique_ptr<SyncObserverBridge> _syncObserverModelBridge; SyncSetupService* _syncSetupService; // The browser for this view controller. base::WeakPtr<Browser> _browser; -} -@property(nonatomic, assign) BOOL editingExistingFolder; -@property(nonatomic, assign) bookmarks::BookmarkModel* bookmarkModel; -@property(nonatomic, assign) ChromeBrowserState* browserState; -// Whether the folder name was edited. -@property(nonatomic, assign) BOOL edited; -@property(nonatomic, assign) const BookmarkNode* folder; -@property(nonatomic, assign) const BookmarkNode* parentFolder; -@property(nonatomic, weak) UIBarButtonItem* doneItem; -@property(nonatomic, strong) BookmarkTextFieldItem* titleItem; -@property(nonatomic, strong) BookmarkParentFolderItem* parentFolderItem; -// The action sheet coordinator, if one is currently being shown. -@property(nonatomic, strong) ActionSheetCoordinator* actionSheetCoordinator; + ChromeBrowserState* _browserState; + const BookmarkNode* _parentFolder; + const BookmarkNode* _folder; -// `bookmarkModel` must not be NULL and must be loaded. -- (instancetype)initWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel - syncSetupService:(SyncSetupService*)syncSetupService - syncService:(syncer::SyncService*)syncService - browser:(Browser*)browser - NS_DESIGNATED_INITIALIZER; - -// Enables or disables the save button depending on the state of the form. -- (void)updateSaveButtonState; - -// Configures collection view model. -- (void)setupCollectionViewModel; - -// Bottom toolbar with DELETE button that only appears when the edited folder -// allows deletion. -- (void)addToolbar; - -@end - -@implementation BookmarksFolderEditorViewController - -@synthesize bookmarkModel = _bookmarkModel; -@synthesize delegate = _delegate; -@synthesize editingExistingFolder = _editingExistingFolder; -@synthesize folder = _folder; -@synthesize parentFolder = _parentFolder; -@synthesize browserState = _browserState; -@synthesize doneItem = _doneItem; -@synthesize titleItem = _titleItem; -@synthesize parentFolderItem = _parentFolderItem; - -#pragma mark - Class methods - -+ (instancetype) - folderCreatorWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel - parentFolder:(const BookmarkNode*)parentFolder - browser:(Browser*)browser - syncSetupService:(SyncSetupService*)syncSetupService - syncService:(syncer::SyncService*)syncService { - DCHECK(browser); - DCHECK(parentFolder); - BookmarksFolderEditorViewController* folderCreator = - [[self alloc] initWithBookmarkModel:bookmarkModel - syncSetupService:syncSetupService - syncService:syncService - browser:browser]; - folderCreator.parentFolder = parentFolder; - folderCreator.folder = NULL; - folderCreator.editingExistingFolder = NO; - return folderCreator; -} - -+ (instancetype) - folderEditorWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel - folder:(const BookmarkNode*)folder - browser:(Browser*)browser - syncSetupService:(SyncSetupService*)syncSetupService - syncService:(syncer::SyncService*)syncService { - DCHECK(folder); - DCHECK(!bookmarkModel->is_permanent_node(folder)); - DCHECK(browser); - BookmarksFolderEditorViewController* folderEditor = - [[self alloc] initWithBookmarkModel:bookmarkModel - syncSetupService:syncSetupService - syncService:syncService - browser:browser]; - folderEditor.parentFolder = folder->parent(); - folderEditor.folder = folder; - folderEditor.browserState = - browser->GetBrowserState()->GetOriginalChromeBrowserState(); - folderEditor.editingExistingFolder = YES; - return folderEditor; + BOOL _edited; + BOOL _editingExistingFolder; + // Flag to ignore bookmark model Move notifications when the move is performed + // by this class. + BOOL _ignoresOwnMove; + __weak UIBarButtonItem* _doneItem; + __strong BookmarkTextFieldItem* _titleItem; + __strong BookmarkParentFolderItem* _parentFolderItem; + // The action sheet coordinator, if one is currently being shown. + __strong ActionSheetCoordinator* _actionSheetCoordinator; } #pragma mark - Initialization - (instancetype)initWithBookmarkModel:(bookmarks::BookmarkModel*)bookmarkModel + folderNode:(const BookmarkNode*)folder + parentFolderNode:(const BookmarkNode*)parentFolder syncSetupService:(SyncSetupService*)syncSetupService syncService:(syncer::SyncService*)syncService browser:(Browser*)browser { DCHECK(bookmarkModel); DCHECK(bookmarkModel->loaded()); + // Both of these can't be `nullptr`. + DCHECK(parentFolder || folder) + << "parentFolder: " << parentFolder << ", folder: " << folder; + if (folder) { + DCHECK(!bookmarkModel->is_permanent_node(folder)); + } DCHECK(browser); + UITableViewStyle style = ChromeTableViewStyle(); self = [super initWithStyle:style]; if (self) { _bookmarkModel = bookmarkModel; + _folder = folder; + _parentFolder = parentFolder ? parentFolder : _folder->parent(); + _editingExistingFolder = _folder != nullptr; _browser = browser->AsWeakPtr(); + _browserState = browser->GetBrowserState()->GetOriginalChromeBrowserState(); // Set up the bookmark model oberver. _modelBridge.reset(new BookmarkModelBridge(self, _bookmarkModel)); _syncObserverModelBridge.reset(new SyncObserverBridge(self, syncService)); @@ -179,19 +120,21 @@ return self; } -- (void)dealloc { - _titleItem.delegate = nil; -} - - (void)disconnect { - _modelBridge = nil; - _syncObserverModelBridge = nil; + _browserState = nullptr; + _bookmarkModel = nullptr; + _modelBridge = nullptr; + _folder = nullptr; + _parentFolder = nullptr; + _syncObserverModelBridge = nullptr; + _syncSetupService = nullptr; + _titleItem.delegate = nil; } #pragma mark - Public - (void)presentationControllerDidAttemptToDismiss { - self.actionSheetCoordinator = [[ActionSheetCoordinator alloc] + _actionSheetCoordinator = [[ActionSheetCoordinator alloc] initWithBaseViewController:self browser:_browser.get() title:nil @@ -199,14 +142,14 @@ barButtonItem:self.navigationItem.leftBarButtonItem]; __weak __typeof(self) weakSelf = self; - [self.actionSheetCoordinator + [_actionSheetCoordinator addItemWithTitle:l10n_util::GetNSString( IDS_IOS_VIEW_CONTROLLER_DISMISS_SAVE_CHANGES) action:^{ [weakSelf saveFolder]; } style:UIAlertActionStyleDefault]; - [self.actionSheetCoordinator + [_actionSheetCoordinator addItemWithTitle:l10n_util::GetNSString( IDS_IOS_VIEW_CONTROLLER_DISMISS_DISCARD_CHANGES) action:^{ @@ -214,7 +157,7 @@ } style:UIAlertActionStyleDestructive]; // IDS_IOS_NAVIGATION_BAR_CANCEL_BUTTON - [self.actionSheetCoordinator + [_actionSheetCoordinator addItemWithTitle:l10n_util::GetNSString( IDS_IOS_VIEW_CONTROLLER_DISMISS_CANCEL_CHANGES) action:^{ @@ -225,17 +168,17 @@ self.navigationItem.leftBarButtonItem.enabled = NO; self.navigationItem.rightBarButtonItem.enabled = NO; - [self.actionSheetCoordinator start]; + [_actionSheetCoordinator start]; } // Whether the bookmarks folder editor can be dismissed. - (BOOL)canDismiss { - return !self.edited; + return !_edited; } -- (void)updateParentFolder:(const bookmarks::BookmarkNode*)parent { +- (void)updateParentFolder:(const BookmarkNode*)parent { DCHECK(parent); - self.parentFolder = parent; + _parentFolder = parent; [self updateParentFolderState]; } @@ -260,9 +203,9 @@ doneItem.accessibilityIdentifier = kBookmarkFolderEditNavigationBarDoneButtonIdentifier; self.navigationItem.rightBarButtonItem = doneItem; - self.doneItem = doneItem; + _doneItem = doneItem; - if (self.editingExistingFolder) { + if (_editingExistingFolder) { // Add Cancel Button. UIBarButtonItem* cancelItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel @@ -280,7 +223,7 @@ - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self updateSaveButtonState]; - if (self.editingExistingFolder) { + if (_editingExistingFolder) { self.navigationController.toolbarHidden = NO; } else { self.navigationController.toolbarHidden = YES; @@ -311,61 +254,60 @@ } - (void)deleteFolder { - DCHECK(self.editingExistingFolder); - DCHECK(self.folder); + DCHECK(_editingExistingFolder); + DCHECK(_folder); base::RecordAction( base::UserMetricsAction("MobileBookmarksFolderEditorDeletedFolder")); std::set<const BookmarkNode*> editedNodes; - editedNodes.insert(self.folder); + editedNodes.insert(_folder); [self.snackbarCommandsHandler showSnackbarMessage:bookmark_utils_ios::DeleteBookmarksWithUndoToast( - editedNodes, self.bookmarkModel, - self.browserState)]; + editedNodes, _bookmarkModel, _browserState)]; [self.delegate bookmarksFolderEditorDidDeleteEditedFolder:self]; } - (void)saveFolder { - DCHECK(self.parentFolder); + DCHECK(_parentFolder); base::RecordAction( base::UserMetricsAction("MobileBookmarksFolderEditorSaved")); - NSString* folderString = self.titleItem.text; + NSString* folderString = _titleItem.text; DCHECK(folderString.length > 0); std::u16string folderTitle = base::SysNSStringToUTF16(folderString); - if (self.editingExistingFolder) { - DCHECK(self.folder); + if (_editingExistingFolder) { + DCHECK(_folder); // Tell delegate if folder title has been changed. - if (self.folder->GetTitle() != folderTitle) { + if (_folder->GetTitle() != folderTitle) { [self.delegate bookmarksFolderEditorWillCommitTitleChange:self]; } - self.bookmarkModel->SetTitle(self.folder, folderTitle, - bookmarks::metrics::BookmarkEditSource::kUser); - if (self.folder->parent() != self.parentFolder) { + _bookmarkModel->SetTitle(_folder, folderTitle, + bookmarks::metrics::BookmarkEditSource::kUser); + if (_folder->parent() != _parentFolder) { base::AutoReset<BOOL> autoReset(&_ignoresOwnMove, YES); [self.snackbarCommandsHandler showSnackbarMessage:bookmark_utils_ios::MoveBookmarksWithUndoToast( - std::set<const BookmarkNode*>{self.folder}, - self.bookmarkModel, self.parentFolder, - self.browserState)]; + std::set<const BookmarkNode*>{_folder}, + _bookmarkModel, _parentFolder, + _browserState)]; } } else { - DCHECK(!self.folder); - self.folder = self.bookmarkModel->AddFolder( - self.parentFolder, self.parentFolder->children().size(), folderTitle); + DCHECK(!_folder); + _folder = _bookmarkModel->AddFolder( + _parentFolder, _parentFolder->children().size(), folderTitle); } [self.view endEditing:YES]; - [self.delegate bookmarksFolderEditor:self didFinishEditingFolder:self.folder]; + [self.delegate bookmarksFolderEditor:self didFinishEditingFolder:_folder]; } - (void)changeParentFolder { base::RecordAction(base::UserMetricsAction( "MobileBookmarksFolderEditorOpenedFolderChooser")); std::set<const BookmarkNode*> hiddenNodes; - if (self.folder) { - hiddenNodes.insert(self.folder); + if (_folder) { + hiddenNodes.insert(_folder); } - [self.delegate showBookmarksFolderChooserWithParentFolder:self.parentFolder + [self.delegate showBookmarksFolderChooserWithParentFolder:_parentFolder hiddenNodes:hiddenNodes]; } @@ -378,7 +320,7 @@ - (void)bookmarkModel:(bookmarks::BookmarkModel*)model didChangeNode:(const bookmarks::BookmarkNode*)bookmarkNode { - if (bookmarkNode == self.parentFolder) { + if (bookmarkNode == _parentFolder) { [self updateParentFolderState]; } } @@ -395,9 +337,9 @@ if (_ignoresOwnMove) { return; } - if (bookmarkNode == self.folder) { - DCHECK(oldParent == self.parentFolder); - self.parentFolder = newParent; + if (bookmarkNode == _folder) { + DCHECK(oldParent == _parentFolder); + _parentFolder = newParent; [self updateParentFolderState]; } } @@ -405,31 +347,31 @@ - (void)bookmarkModel:(bookmarks::BookmarkModel*)model didDeleteNode:(const bookmarks::BookmarkNode*)node fromFolder:(const bookmarks::BookmarkNode*)folder { - if (node == self.parentFolder) { - self.parentFolder = NULL; + if (node == _parentFolder) { + _parentFolder = NULL; [self updateParentFolderState]; return; } - if (node == self.folder) { - self.folder = NULL; - self.editingExistingFolder = NO; + if (node == _folder) { + _folder = NULL; + _editingExistingFolder = NO; [self updateEditingState]; } } - (void)bookmarkModelRemovedAllNodes:(bookmarks::BookmarkModel*)model { - if (self.bookmarkModel->is_permanent_node(self.parentFolder)) { + if (_bookmarkModel->is_permanent_node(_parentFolder)) { return; // The current parent folder is still valid. } - self.parentFolder = NULL; + _parentFolder = NULL; [self updateParentFolderState]; } #pragma mark - BookmarkTextFieldItemDelegate - (void)textDidChangeForItem:(BookmarkTextFieldItem*)item { - self.edited = YES; + _edited = YES; [self updateSaveButtonState]; } @@ -459,21 +401,16 @@ #pragma mark - Private -- (void)setParentFolder:(const BookmarkNode*)parentFolder { - DCHECK(parentFolder); - _parentFolder = parentFolder; -} - - (void)updateEditingState { if (![self isViewLoaded]) { return; } self.view.accessibilityIdentifier = - (self.folder) ? kBookmarkFolderEditViewContainerIdentifier - : kBookmarkFolderCreateViewContainerIdentifier; + (_folder) ? kBookmarkFolderEditViewContainerIdentifier + : kBookmarkFolderCreateViewContainerIdentifier; - [self setTitle:(self.folder) + [self setTitle:(_folder) ? l10n_util::GetNSString( IDS_IOS_BOOKMARK_NEW_GROUP_EDITOR_EDIT_TITLE) : l10n_util::GetNSString( @@ -484,19 +421,18 @@ NSIndexPath* folderSelectionIndexPath = [self.tableViewModel indexPathForItemType:ItemTypeParentFolder sectionIdentifier:SectionIdentifierInfo]; - self.parentFolderItem.title = - bookmark_utils_ios::TitleForBookmarkNode(self.parentFolder); - self.parentFolderItem.shouldDisplayCloudSlashIcon = + _parentFolderItem.title = + bookmark_utils_ios::TitleForBookmarkNode(_parentFolder); + _parentFolderItem.shouldDisplayCloudSlashIcon = bookmark_utils_ios::ShouldDisplayCloudSlashIcon(_syncSetupService); [self.tableView reloadRowsAtIndexPaths:@[ folderSelectionIndexPath ] withRowAnimation:UITableViewRowAnimationNone]; - if (self.editingExistingFolder && self.navigationController.isToolbarHidden) { + if (_editingExistingFolder && self.navigationController.isToolbarHidden) { [self addToolbar]; } - if (!self.editingExistingFolder && - !self.navigationController.isToolbarHidden) { + if (!_editingExistingFolder && !self.navigationController.isToolbarHidden) { self.navigationController.toolbarHidden = YES; } } @@ -506,26 +442,25 @@ [self.tableViewModel addSectionWithIdentifier:SectionIdentifierInfo]; - self.titleItem = - [[BookmarkTextFieldItem alloc] initWithType:ItemTypeFolderTitle]; - self.titleItem.text = - (self.folder) - ? bookmark_utils_ios::TitleForBookmarkNode(self.folder) + _titleItem = [[BookmarkTextFieldItem alloc] initWithType:ItemTypeFolderTitle]; + _titleItem.text = + (_folder) + ? bookmark_utils_ios::TitleForBookmarkNode(_folder) : l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_GROUP_DEFAULT_NAME); - self.titleItem.placeholder = + _titleItem.placeholder = l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_EDITOR_NAME_LABEL); - self.titleItem.accessibilityIdentifier = @"Title"; - [self.tableViewModel addItem:self.titleItem + _titleItem.accessibilityIdentifier = @"Title"; + [self.tableViewModel addItem:_titleItem toSectionWithIdentifier:SectionIdentifierInfo]; - self.titleItem.delegate = self; + _titleItem.delegate = self; - self.parentFolderItem = + _parentFolderItem = [[BookmarkParentFolderItem alloc] initWithType:ItemTypeParentFolder]; - self.parentFolderItem.title = - bookmark_utils_ios::TitleForBookmarkNode(self.parentFolder); - self.parentFolderItem.shouldDisplayCloudSlashIcon = + _parentFolderItem.title = + bookmark_utils_ios::TitleForBookmarkNode(_parentFolder); + _parentFolderItem.shouldDisplayCloudSlashIcon = bookmark_utils_ios::ShouldDisplayCloudSlashIcon(_syncSetupService); - [self.tableViewModel addItem:self.parentFolderItem + [self.tableViewModel addItem:_parentFolderItem toSectionWithIdentifier:SectionIdentifierInfo]; } @@ -550,13 +485,13 @@ } - (void)updateSaveButtonState { - self.doneItem.enabled = (self.titleItem.text.length > 0); + _doneItem.enabled = (_titleItem.text.length > 0); } #pragma mark - SyncObserverModelBridge - (void)onSyncStateChanged { - self.parentFolderItem.shouldDisplayCloudSlashIcon = + _parentFolderItem.shouldDisplayCloudSlashIcon = bookmark_utils_ios::ShouldDisplayCloudSlashIcon(_syncSetupService); NSIndexPath* indexPath = [self.tableViewModel indexPathForItemType:ItemTypeParentFolder
diff --git a/ios/chrome/browser/ui/browser_container/browser_container_coordinator.mm b/ios/chrome/browser/ui/browser_container/browser_container_coordinator.mm index 83104a59..65d5d618 100644 --- a/ios/chrome/browser/ui/browser_container/browser_container_coordinator.mm +++ b/ios/chrome/browser/ui/browser_container/browser_container_coordinator.mm
@@ -89,7 +89,6 @@ self.browserEditMenuHandler = [[BrowserEditMenuHandler alloc] init]; self.viewController.browserEditMenuHandler = self.browserEditMenuHandler; - self.browserEditMenuHandler.rootView = self.viewController.view; self.browserEditMenuHandler.linkToTextDelegate = self.linkToTextMediator; if (base::FeatureList::IsEnabled(kIOSEditMenuPartialTranslate)) { @@ -113,6 +112,7 @@ self.partialTranslateMediator; } + self.browserEditMenuHandler.rootView = self.viewController.view; [self.webContentAreaOverlayContainerCoordinator start]; self.viewController.webContentsOverlayContainerViewController = self.webContentAreaOverlayContainerCoordinator.viewController;
diff --git a/ios/chrome/browser/ui/browser_container/browser_edit_menu_handler.mm b/ios/chrome/browser/ui/browser_container/browser_edit_menu_handler.mm index 9ad226578..82384e1 100644 --- a/ios/chrome/browser/ui/browser_container/browser_edit_menu_handler.mm +++ b/ios/chrome/browser/ui/browser_container/browser_edit_menu_handler.mm
@@ -32,14 +32,14 @@ } - (void)buildMenuWithBuilder:(id<UIMenuBuilder>)builder { + if (!base::FeatureList::IsEnabled(kIOSCustomBrowserEditMenu)) { + return; + } [self addLinkToText:builder]; [self addPartialTranslate:builder]; } - (void)addLinkToText:(id<UIMenuBuilder>)builder { - if (!base::FeatureList::IsEnabled(kIOSCustomBrowserEditMenu)) { - return; - } NSString* title = l10n_util::GetNSString(IDS_IOS_SHARE_LINK_TO_TEXT); NSString* linkToTextId = @"chromecommand.linktotext"; UICommand* menuCommand = [UICommand
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm index 0a2b99b..17404dd 100644 --- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm +++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -535,15 +535,22 @@ ->SetEnabled(active); } self.webUsageEnabled = active; - self.viewController.active = active; - - // Stop the NTP on web usage toggle. This happens when clearing browser - // data, and forces the NTP to be recreated the next time it is needed. - // TODO(crbug.com/906199): Move this to the NewTabPageTabHelper when - // WebStateObserver has a webUsage callback. - if (!active) { + if (active) { + // If the NTP was stopped because of a -setActive:NO call, then the NTP + // needs to be restarted when -setActive:YES is called subsequently (i.e. + // clear browsing data). This should not be needed for any other use case, + // but on initial startup this is inevitably called after restoring tabs, so + // cannot assert that it has not been started. + web::WebState* webState = + self.browser->GetWebStateList()->GetActiveWebState(); + if (webState && NewTabPageTabHelper::FromWebState(webState)->IsActive() && + !self.NTPCoordinator.started) { + [self.NTPCoordinator start]; + } + } else { [self.NTPCoordinator stop]; } + self.viewController.active = active; } - (void)clearPresentedStateWithCompletion:(ProceduralBlock)completion
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index d8c48c0..bb8cf008 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -1878,9 +1878,6 @@ NewTabPageTabHelper::FromWebState(webState); if (NTPHelper && NTPHelper->IsActive()) { NewTabPageCoordinator* NTPCoordinator = self.ntpCoordinator; - // TODO(crbug.com/1411808): The NTP should be started by the mediator or - // coordinator layer. - [NTPCoordinator start]; UIViewController* viewController = NTPCoordinator.viewController; viewController.view.frame = [self ntpFrameForWebState:webState]; [viewController.view layoutIfNeeded];
diff --git a/ios/chrome/browser/ui/browser_view/tab_events_mediator.mm b/ios/chrome/browser/ui/browser_view/tab_events_mediator.mm index 417c5ef2..a345c898 100644 --- a/ios/chrome/browser/ui/browser_view/tab_events_mediator.mm +++ b/ios/chrome/browser/ui/browser_view/tab_events_mediator.mm
@@ -111,6 +111,16 @@ } - (void)webStateList:(WebStateList*)webStateList + didDetachWebState:(web::WebState*)webState + atIndex:(int)atIndex { + NewTabPageTabHelper* NTPTabHelper = + NewTabPageTabHelper::FromWebState(webState); + if (NTPTabHelper->IsActive()) { + [self stopNTPIfNeeded]; + } +} + +- (void)webStateList:(WebStateList*)webStateList didInsertWebState:(web::WebState*)webState atIndex:(int)index activating:(BOOL)activating { @@ -136,6 +146,12 @@ // NOTE: webStateSelected expects to always be called with a // non-null WebState. if (newWebState) { + // Activating without inserting an NTP requires starting it in two + // scenarios: 1) After doing a batch tab restore (i.e. undo tab removals, + // initial startup). 2) After re-activating the Browser and a non-active + // WebState is showing the NTP. BrowserCoordinator's -setActive: only starts + // the NTP if it is the active view. + [self startNTPIfNeededForActiveWebState:newWebState]; [self.consumer webStateSelected:newWebState]; } } @@ -145,6 +161,12 @@ didReplaceWebState:(web::WebState*)oldWebState withWebState:(web::WebState*)newWebState atIndex:(int)atIndex { + NewTabPageTabHelper* NTPTabHelper = + NewTabPageTabHelper::FromWebState(oldWebState); + if (NTPTabHelper->IsActive()) { + [self stopNTPIfNeeded]; + } + web::WebState* currentWebState = _webStateList->GetActiveWebState(); // Add `newTab`'s view to the hierarchy if it's the current Tab. if (currentWebState == newWebState) { @@ -157,6 +179,24 @@ #pragma mark - WebStateListObserving helpers (Private) +- (void)startNTPIfNeededForActiveWebState:(web::WebState*)webState { + NewTabPageTabHelper* NTPHelper = NewTabPageTabHelper::FromWebState(webState); + if (NTPHelper && NTPHelper->IsActive() && !_ntpCoordinator.started) { + [_ntpCoordinator start]; + } +} + +- (void)stopNTPIfNeeded { + for (int i = 0; i < _webStateList->count(); i++) { + NewTabPageTabHelper* iterNtpHelper = + NewTabPageTabHelper::FromWebState(_webStateList->GetWebStateAt(i)); + if (iterNtpHelper->IsActive()) { + return; + } + } + [_ntpCoordinator stop]; +} + - (void)didInsertActiveWebState:(web::WebState*)newWebState { DCHECK(newWebState); if (_sessionRestorationBrowserAgent->IsRestoringSession()) {
diff --git a/ios/chrome/browser/ui/browser_view/tab_lifecycle_mediator.mm b/ios/chrome/browser/ui/browser_view/tab_lifecycle_mediator.mm index 34f229b..7523091 100644 --- a/ios/chrome/browser/ui/browser_view/tab_lifecycle_mediator.mm +++ b/ios/chrome/browser/ui/browser_view/tab_lifecycle_mediator.mm
@@ -197,7 +197,6 @@ if (priceNotificationsTabHelper) { priceNotificationsTabHelper->SetPriceNotificationsIPHPresenter(nil); } - [self.NTPCoordinator stopIfNeeded]; } @end
diff --git a/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm b/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm index e7a8f46..87d0dc4 100644 --- a/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm +++ b/ios/chrome/browser/ui/infobars/test/test_infobar_password_delegate.mm
@@ -10,6 +10,7 @@ #import "components/password_manager/core/browser/fake_form_fetcher.h" #import "components/password_manager/core/browser/password_form.h" #import "components/password_manager/core/browser/password_form_manager_for_ui.h" +#import "components/password_manager/core/browser/password_manager_metrics_util.h" #import "components/password_manager/core/browser/stub_form_saver.h" #import "components/password_manager/core/browser/stub_password_manager_client.h" #import "ios/chrome/browser/infobars/infobar_utils.h" @@ -83,9 +84,12 @@ TestInfobarPasswordDelegate::TestInfobarPasswordDelegate( NSString* infobar_message) - : IOSChromeSavePasswordInfoBarDelegate("foobar@gmail.com", - false, - CreateFormManager()), + : IOSChromeSavePasswordInfoBarDelegate( + "foobar@gmail.com", + false, + password_manager::metrics_util::PasswordAccountStorageUserState:: + kSyncUser, + CreateFormManager()), infobar_message_(infobar_message) {} bool TestInfobarPasswordDelegate::Create(
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm index 9ddf027f..30125ee 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
@@ -294,6 +294,7 @@ self.webState = self.browser->GetWebStateList()->GetActiveWebState(); DCHECK(self.webState); + DCHECK(NewTabPageTabHelper::FromWebState(self.webState)->IsActive()); // Start observing WebStateList changes. _webStateListObserver = std::make_unique<WebStateListObserverBridge>(self); @@ -317,11 +318,8 @@ return; } - NewTabPageTabHelper* NTPHelper = - NewTabPageTabHelper::FromWebState(self.webState); - if (NTPHelper) { - self.selectedFeed = NTPHelper->GetNextNTPFeedType(); - } + self.selectedFeed = + NewTabPageTabHelper::FromWebState(self.webState)->GetNextNTPFeedType(); // NOTE: anything that executes below WILL NOT execute for OffTheRecord // browsers!
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator_unittest.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator_unittest.mm index 47989bf..6e3660b 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator_unittest.mm +++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator_unittest.mm
@@ -125,6 +125,17 @@ return std::move(web_state); } + // Simulates loading the NTP in `web_state_`. + void SetNTPAsCurrentURL() { + web::FakeNavigationContext navigation_context; + navigation_context.SetUrl(GURL("chrome://newtab")); + web::FakeWebState* fake_web_state = + static_cast<web::FakeWebState*>(web_state_); + fake_web_state->SetVisibleURL(GURL("chrome://newtab")); + fake_web_state->OnNavigationStarted(&navigation_context); + fake_web_state->OnPageLoaded(web::PageLoadCompletionStatus::SUCCESS); + } + void SetupCommandHandlerMocks() { omnibox_commands_handler_mock = OCMProtocolMock(@protocol(OmniboxCommands)); snackbar_commands_handler_mock = @@ -285,6 +296,7 @@ // `-ShouldShowStartSurface` is false. NewTabPageTabHelper::FromWebState(web_state_)->SetShowStartSurface(false); [[coordinator_mock reject] configureStartSurfaceIfNeeded]; + SetNTPAsCurrentURL(); [coordinator_ start]; EXPECT_OCMOCK_VERIFY(coordinator_mock); [coordinator_ stop]; @@ -315,6 +327,7 @@ ->OnNavigationStarted(&navigation_context); [coordinator_ didNavigateAwayFromNTP]; ASSERT_FALSE(coordinator_.started); + SetNTPAsCurrentURL(); [coordinator_ start]; histogram_tester_->ExpectUniqueSample( "IOS.ContentSuggestions.ActionOnStartSurface",
diff --git a/ios/chrome/browser/ui/omnibox/keyboard_assist/BUILD.gn b/ios/chrome/browser/ui/omnibox/keyboard_assist/BUILD.gn index b04ac23..d8c67be5 100644 --- a/ios/chrome/browser/ui/omnibox/keyboard_assist/BUILD.gn +++ b/ios/chrome/browser/ui/omnibox/keyboard_assist/BUILD.gn
@@ -33,7 +33,6 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/elements", "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/browser/shared/ui/util:util_swift", "//ios/chrome/browser/ui/lens:lens_availability", "//ios/chrome/browser/ui/lens:lens_entrypoint", "//ios/chrome/browser/ui/location_bar:constants",
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm index 67a679aa..0f73517 100644 --- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm +++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_view_controller.mm
@@ -57,7 +57,7 @@ /// Leading and trailing padding for table view headers. const CGFloat kHeaderPadding = 2.0f; /// Top padding for table view headers. -const CGFloat kHeaderTopPadding = 10.0f; +const CGFloat kHeaderTopPadding = 16.0f; /// Returns whether the keyboard is dismissed when scrolling suggestions. BOOL ShouldDismissKeyboardOnScroll() {
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 9deadb1b..0b5ed11 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
@@ -125,7 +125,7 @@ // Observer for browsing data removal events and associated // base::ScopedObservation used to track registration with // BrowsingDataRemover. - std::unique_ptr<BrowsingDataRemoverObserver> _observer; + std::unique_ptr<BrowsingDataRemoverObserver> _browsingDataRemoverObserver; std::unique_ptr< base::ScopedObservation<BrowsingDataRemover, BrowsingDataRemoverObserver>> _scoped_observation; @@ -187,9 +187,12 @@ _timeRangePref.Init(browsing_data::prefs::kDeleteTimePeriod, _browserState->GetPrefs()); - _observer = std::make_unique<BrowsingDataRemoverObserverBridge>(self); - _scoped_observation = std::make_unique<base::ScopedObservation< - BrowsingDataRemover, BrowsingDataRemoverObserver>>(_observer.get()); + _browsingDataRemoverObserver = + std::make_unique<BrowsingDataRemoverObserverBridge>(self); + _scoped_observation = + std::make_unique<base::ScopedObservation<BrowsingDataRemover, + BrowsingDataRemoverObserver>>( + _browsingDataRemoverObserver.get()); _scoped_observation->Observe(remover); _prefChangeRegistrar.Init(_browserState->GetPrefs()); @@ -244,7 +247,12 @@ } - (void)disconnect { + _timeRangePref.Destroy(); + _prefObserverBridge.reset(); _prefChangeRegistrar.RemoveAll(); + _browsingDataRemoverObserver.reset(); + _scoped_observation.reset(); + _countersByMasks.clear(); } // Add items for types of browsing data to clear.
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/BUILD.gn b/ios/chrome/browser/ui/settings/password/password_checkup/BUILD.gn index 0b69b94..c6e7260 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/BUILD.gn +++ b/ios/chrome/browser/ui/settings/password/password_checkup/BUILD.gn
@@ -67,6 +67,7 @@ deps = [ "//base", "//components/password_manager/core/browser", + "//components/password_manager/core/common:features", "//ios/chrome/app/strings", "//ui/base", ]
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_mediator.mm b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_mediator.mm index 454a350..edffefa 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_mediator.mm +++ b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_mediator.mm
@@ -179,7 +179,8 @@ - (NSString*)formattedElapsedTimeSinceLastCheck { absl::optional<base::Time> lastCompletedCheck = _passwordCheckManager->GetLastPasswordCheckTime(); - return password_manager::FormatElapsedTimeSinceLastCheck(lastCompletedCheck); + return password_manager::FormatElapsedTimeSinceLastCheck( + lastCompletedCheck, /*use_title_case=*/true); } // Computes the error message to display in the error dialog.
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.h b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.h index bfe129a..dd62f2f 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.h +++ b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.h
@@ -70,12 +70,14 @@ const std::vector<password_manager::CredentialUIEntry>& insecure_credentials); -// Returns string containing the timestamp of the `last_completed_check`. If the -// check finished less than 1 minute ago string will look "Last check just -// now.", otherwise "Last check X minutes/hours... ago.". If check never run -// string will be "Check never run.". +// Returns string containing the timestamp of the `last_completed_check`. +// `use_title_case` indicates whether the returned string should be in title +// case or in sentence case. If the check finished less than 1 minute ago string +// will look like "Last check just now.", otherwise "Last check X +// minutes/hours... ago.". If check never run string will be "Check never run.". NSString* FormatElapsedTimeSinceLastCheck( - absl::optional<base::Time> last_completed_check); + absl::optional<base::Time> last_completed_check, + bool use_title_case = false); } // namespace password_manager
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.mm b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.mm index b716d76..f10eeefd 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.mm +++ b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.mm
@@ -9,6 +9,7 @@ #import "base/strings/utf_string_conversions.h" #import "base/time/time.h" #import "components/password_manager/core/browser/ui/credential_ui_entry.h" +#import "components/password_manager/core/common/password_manager_features.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h" #import "ui/base/l10n/l10n_util_mac.h" @@ -114,11 +115,14 @@ } } -// TODO(crbug.com/1406540): Title case and update returned string for Password -// Checkup homepage. NSString* FormatElapsedTimeSinceLastCheck( - absl::optional<base::Time> last_completed_check) { + absl::optional<base::Time> last_completed_check, + bool use_title_case) { if (!last_completed_check.has_value()) { + // The title case format is only used in the Password Checkup Homepage as of + // now and it is currently not possible to reach this page if no check has + // yet been completed. There is therefore no need for now to have a title + // case version of "Check never run." return l10n_util::GetNSString(IDS_IOS_CHECK_NEVER_RUN); } @@ -129,14 +133,20 @@ // If check finished in less than `kJustCheckedTimeThreshold` show // "just now" instead of timestamp. if (elapsed_time < kJustCheckedTimeThreshold) { - timestamp = l10n_util::GetStringUTF16(IDS_IOS_CHECK_FINISHED_JUST_NOW); + timestamp = l10n_util::GetStringUTF16( + use_title_case ? IDS_IOS_CHECK_FINISHED_JUST_NOW_TITLE_CASE + : IDS_IOS_CHECK_FINISHED_JUST_NOW); } else { timestamp = ui::TimeFormat::SimpleWithMonthAndYear( - ui::TimeFormat::FORMAT_ELAPSED, ui::TimeFormat::LENGTH_LONG, - elapsed_time, true); + use_title_case ? ui::TimeFormat::FORMAT_TITLE_CASE_ELAPSED + : ui::TimeFormat::FORMAT_ELAPSED, + ui::TimeFormat::LENGTH_LONG, elapsed_time, true); } - return l10n_util::GetNSStringF(IDS_IOS_LAST_COMPLETED_CHECK, timestamp); + return features::IsPasswordCheckupEnabled() + ? l10n_util::GetNSStringF( + IDS_IOS_PASSWORD_CHECKUP_LAST_COMPLETED_CHECK, timestamp) + : l10n_util::GetNSStringF(IDS_IOS_LAST_COMPLETED_CHECK, timestamp); } std::vector<CredentialUIEntry> GetPasswordsForWarningType(
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils_unittest.mm b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils_unittest.mm index b5fdccb9..1e37e7bf 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils_unittest.mm +++ b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils_unittest.mm
@@ -121,8 +121,7 @@ // Tests that the correct warning type is returned. TEST_F(PasswordCheckupUtilsTest, CheckHighestPriorityWarningType) { // Enable Password Checkup feature. - base::test::ScopedFeatureList featureList; - featureList.InitAndEnableFeature( + base::test::ScopedFeatureList feature_list( password_manager::features::kIOSPasswordCheckup); std::vector<CredentialUIEntry> insecure_credentials = @@ -177,8 +176,7 @@ // warning type of highest priority. TEST_F(PasswordCheckupUtilsTest, CheckPasswordCountForWarningType) { // Enable Password Checkup feature. - base::test::ScopedFeatureList featureList; - featureList.InitAndEnableFeature( + base::test::ScopedFeatureList feature_list( password_manager::features::kIOSPasswordCheckup); std::vector<CredentialUIEntry> insecure_credentials = @@ -252,8 +250,15 @@ 4); } -// Tests that the correct string is returned with the right timestamp. -TEST_F(PasswordCheckupUtilsTest, ElapsedTimeSinceLastCheck) { +// Tests that the correct string is returned with the right timestamp when +// kIOSPasswordCheckup feature is disabled. +TEST_F(PasswordCheckupUtilsTest, + ElapsedTimeSinceLastCheckWithoutkIOSPasswordCheckup) { + // Disable Password Checkup feature. + base::test::ScopedFeatureList feature_list; + feature_list.InitAndDisableFeature( + password_manager::features::kIOSPasswordCheckup); + EXPECT_NSEQ(@"Check never run.", FormatElapsedTimeSinceLastCheck( manager().GetLastPasswordCheckTime())); @@ -276,6 +281,62 @@ FormatElapsedTimeSinceLastCheck(manager().GetLastPasswordCheckTime())); } +// Tests that the correct string is returned with the right timestamp when +// kIOSPasswordCheckup feature is enabled. +TEST_F(PasswordCheckupUtilsTest, + ElapsedTimeSinceLastCheckWithkIOSPasswordCheckup) { + // Enable Password Checkup feature. + base::test::ScopedFeatureList feature_list( + password_manager::features::kIOSPasswordCheckup); + + EXPECT_NSEQ(@"Check never run.", FormatElapsedTimeSinceLastCheck( + manager().GetLastPasswordCheckTime())); + + base::Time expected1 = base::Time::Now() - base::Seconds(10); + browser_state()->GetPrefs()->SetDouble( + password_manager::prefs::kLastTimePasswordCheckCompleted, + expected1.ToDoubleT()); + + EXPECT_NSEQ(@"Checked just now", FormatElapsedTimeSinceLastCheck( + manager().GetLastPasswordCheckTime())); + + base::Time expected2 = base::Time::Now() - base::Minutes(5); + browser_state()->GetPrefs()->SetDouble( + password_manager::prefs::kLastTimePasswordCheckCompleted, + expected2.ToDoubleT()); + + EXPECT_NSEQ( + @"Checked 5 minutes ago", + FormatElapsedTimeSinceLastCheck(manager().GetLastPasswordCheckTime())); +} + +// Verifies the title case format of elapsed time string with the +// kIOSPasswordCheckup feature enabled. +TEST_F(PasswordCheckupUtilsTest, ElapsedTimeSinceLastCheckInTitleCase) { + // Enable Password Checkup feature. + base::test::ScopedFeatureList feature_list( + password_manager::features::kIOSPasswordCheckup); + + base::Time expected1 = base::Time::Now() - base::Seconds(10); + browser_state()->GetPrefs()->SetDouble( + password_manager::prefs::kLastTimePasswordCheckCompleted, + expected1.ToDoubleT()); + + EXPECT_NSEQ(@"Checked Just Now", FormatElapsedTimeSinceLastCheck( + manager().GetLastPasswordCheckTime(), + /*use_title_case=*/true)); + + base::Time expected2 = base::Time::Now() - base::Minutes(5); + browser_state()->GetPrefs()->SetDouble( + password_manager::prefs::kLastTimePasswordCheckCompleted, + expected2.ToDoubleT()); + + EXPECT_NSEQ( + @"Checked 5 Minutes Ago", + FormatElapsedTimeSinceLastCheck(manager().GetLastPasswordCheckTime(), + /*use_title_case=*/true)); +} + // Tests that the correct passwords are returned for each warning type. TEST_F(PasswordCheckupUtilsTest, CheckPasswordsForWarningType) { // Add a muted password.
diff --git a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_view_controller.mm index 10f632c..bbc94cb 100644 --- a/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_view_controller.mm +++ b/ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_view_controller.mm
@@ -423,15 +423,15 @@ static_cast<ItemType>([model itemTypeForIndexPath:indexPath]); switch (itemType) { case ItemTypeCompromisedPasswords: - [self.handler showPasswordIssuesWithWarningType: - WarningType::kCompromisedPasswordsWarning]; + [self showPasswordIssuesWithWarningType:WarningType:: + kCompromisedPasswordsWarning]; break; case ItemTypeReusedPasswords: - [self.handler showPasswordIssuesWithWarningType: - WarningType::kReusedPasswordsWarning]; + [self showPasswordIssuesWithWarningType:WarningType:: + kReusedPasswordsWarning]; break; case ItemTypeWeakPasswords: - [self.handler + [self showPasswordIssuesWithWarningType:WarningType::kWeakPasswordsWarning]; break; case ItemTypePasswordCheckupTimestamp: @@ -670,4 +670,12 @@ [self updateCheckPasswordsButtonItem]; } +// Opens the Password Issues list for the given `warningType` and resets the +// navigation bar background color to what it was before getting to the +// PasswordCheckupViewController. +- (void)showPasswordIssuesWithWarningType:(WarningType)warningType { + [self.handler showPasswordIssuesWithWarningType:warningType]; + [self updateNavigationBarBackgroundColorForDismissal:YES]; +} + @end
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_coordinator.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_coordinator.mm index d410d7b..d915696 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_coordinator.mm +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_coordinator.mm
@@ -10,6 +10,7 @@ #import "base/metrics/histogram_macros.h" #import "base/metrics/user_metrics.h" #import "base/strings/sys_string_conversions.h" +#import "components/password_manager/core/common/password_manager_features.h" #import "components/safe_browsing/core/common/features.h" #import "ios/chrome/browser/application_context/application_context.h" #import "ios/chrome/browser/browser_state/chrome_browser_state.h" @@ -27,6 +28,7 @@ #import "ios/chrome/browser/sync/sync_setup_service.h" #import "ios/chrome/browser/sync/sync_setup_service_factory.h" #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h" +#import "ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_coordinator.h" #import "ios/chrome/browser/ui/settings/password/password_checkup/password_checkup_utils.h" #import "ios/chrome/browser/ui/settings/password/password_issues/password_issues_coordinator.h" #import "ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_coordinator.h" @@ -46,6 +48,7 @@ using password_manager::WarningType; @interface SafetyCheckCoordinator () < + PasswordCheckupCoordinatorDelegate, PasswordIssuesCoordinatorDelegate, PopoverLabelViewControllerDelegate, PrivacySafeBrowsingCoordinatorDelegate, @@ -58,6 +61,10 @@ // The container view controller. @property(nonatomic, strong) SafetyCheckTableViewController* viewController; +// Coordinator for Password Checkup. +@property(nonatomic, strong) + PasswordCheckupCoordinator* passwordCheckupCoordinator; + // Coordinator for passwords issues screen. @property(nonatomic, strong) PasswordIssuesCoordinator* passwordIssuesCoordinator; @@ -168,7 +175,20 @@ #pragma mark - SafetyCheckNavigationCommands +- (void)showPasswordCheckupPage { + CHECK(password_manager::features::IsPasswordCheckupEnabled()); + CHECK(!self.passwordCheckupCoordinator); + self.passwordCheckupCoordinator = [[PasswordCheckupCoordinator alloc] + initWithBaseNavigationController:self.baseNavigationController + browser:self.browser + reauthModule:nil]; + self.passwordCheckupCoordinator.delegate = self; + [self.passwordCheckupCoordinator start]; +} + - (void)showPasswordIssuesPage { + CHECK(!password_manager::features::IsPasswordCheckupEnabled()); + CHECK(!self.passwordIssuesCoordinator); self.passwordIssuesCoordinator = [[PasswordIssuesCoordinator alloc] initForWarningType:WarningType::kCompromisedPasswordsWarning baseNavigationController:self.baseNavigationController @@ -241,6 +261,18 @@ UIPopoverArrowDirectionAny; } +#pragma mark - PasswordCheckupCoordinatorDelegate + +- (void)passwordCheckupCoordinatorDidRemove: + (PasswordCheckupCoordinator*)coordinator { + DCHECK_EQ(self.passwordCheckupCoordinator, coordinator); + [self.passwordCheckupCoordinator stop]; + self.passwordCheckupCoordinator.delegate = nil; + self.passwordCheckupCoordinator = nil; +} + +// TODO(crbug.com/1406871): Remove when kIOSPasswordCheckup is enabled by +// default. #pragma mark - PasswordIssuesCoordinatorDelegate - (void)passwordIssuesCoordinatorDidRemove:
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm index c82ce42f..ff5f6767 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
@@ -454,18 +454,18 @@ switch (self.passwordCheckRowState) { case PasswordCheckRowStateDefault: // No tap action. case PasswordCheckRowStateRunning: // No tap action. - case PasswordCheckRowStateSafe: // No tap action. case PasswordCheckRowStateDisabled: // i tap: Show error popover. case PasswordCheckRowStateError: // i tap: Show error popover. break; - // TODO(crbug.com/1406540): Handle the new states (reused, weak and - // dismissed). + case PasswordCheckRowStateSafe: case PasswordCheckRowStateReusedPasswords: case PasswordCheckRowStateWeakPasswords: case PasswordCheckRowStateDismissedWarnings: case PasswordCheckRowStateUnmutedCompromisedPasswords: // Go to // password - // issues page. + // issues or + // password + // checkup page. base::RecordAction( base::UserMetricsAction("Settings.SafetyCheck.ManagePasswords")); base::UmaHistogramEnumeration( @@ -473,7 +473,12 @@ SafetyCheckInteractions::kPasswordsManage); password_manager::LogPasswordCheckReferrer( password_manager::PasswordCheckReferrer::kSafetyCheck); - [self.handler showPasswordIssuesPage]; + + if (IsPasswordCheckupEnabled()) { + [self.handler showPasswordCheckupPage]; + } else { + [self.handler showPasswordIssuesPage]; + } break; } break; @@ -507,7 +512,7 @@ case UpdateItemType: return self.updateCheckRowState == UpdateCheckRowStateOutOfDate; case PasswordItemType: - return FoundInsecurePasswords(self.passwordCheckRowState); + return IsPasswordCheckItemTappable(self.passwordCheckRowState); case CheckStartItemType: return YES; case SafeBrowsingItemType:
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm index e2f891d5..4b62e09 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator_unittest.mm
@@ -790,7 +790,7 @@ EXPECT_FALSE([mediator_ isItemClickable:updateItem]); } -TEST_F(SafetyCheckMediatorTest, PasswordClickableUnsafe) { +TEST_F(SafetyCheckMediatorTest, PasswordClickableUnmutedCompromisedPasswords) { mediator_.passwordCheckRowState = PasswordCheckRowStateUnmutedCompromisedPasswords; [mediator_ reconfigurePasswordCheckItem]; @@ -799,7 +799,14 @@ EXPECT_TRUE([mediator_ isItemClickable:passwordItem]); } +// When in safe state, the password check item is non clickable when the +// kIOSPasswordCheckup feature is disabled. TEST_F(SafetyCheckMediatorTest, PasswordNonclickableSafe) { + // Disable Password Checkup feature. + base::test::ScopedFeatureList feature_list; + feature_list.InitAndDisableFeature( + password_manager::features::kIOSPasswordCheckup); + mediator_.passwordCheckRowState = PasswordCheckRowStateSafe; [mediator_ reconfigurePasswordCheckItem]; TableViewItem* passwordItem = [[TableViewItem alloc] @@ -807,6 +814,62 @@ EXPECT_FALSE([mediator_ isItemClickable:passwordItem]); } +// When in safe state, the password check item is clickable when the +// kIOSPasswordCheckup feature is enabled. +TEST_F(SafetyCheckMediatorTest, PasswordClickableSafe) { + // Enable Password Checkup feature. + base::test::ScopedFeatureList feature_list( + password_manager::features::kIOSPasswordCheckup); + + mediator_.passwordCheckRowState = PasswordCheckRowStateSafe; + [mediator_ reconfigurePasswordCheckItem]; + TableViewItem* passwordItem = [[TableViewItem alloc] + initWithType:SafetyCheckItemType::PasswordItemType]; + EXPECT_TRUE([mediator_ isItemClickable:passwordItem]); +} + +// Reused passwords are only available when the kIOSPasswordCheckup feature is +// enabled. +TEST_F(SafetyCheckMediatorTest, PasswordClickableReusedPasswords) { + // Enable Password Checkup feature. + base::test::ScopedFeatureList feature_list( + password_manager::features::kIOSPasswordCheckup); + + mediator_.passwordCheckRowState = PasswordCheckRowStateReusedPasswords; + [mediator_ reconfigurePasswordCheckItem]; + TableViewItem* passwordItem = [[TableViewItem alloc] + initWithType:SafetyCheckItemType::PasswordItemType]; + EXPECT_TRUE([mediator_ isItemClickable:passwordItem]); +} + +// Weak passwords are only available when the kIOSPasswordCheckup feature is +// enabled. +TEST_F(SafetyCheckMediatorTest, PasswordClickableWeakPasswords) { + // Enable Password Checkup feature. + base::test::ScopedFeatureList feature_list( + password_manager::features::kIOSPasswordCheckup); + + mediator_.passwordCheckRowState = PasswordCheckRowStateWeakPasswords; + [mediator_ reconfigurePasswordCheckItem]; + TableViewItem* passwordItem = [[TableViewItem alloc] + initWithType:SafetyCheckItemType::PasswordItemType]; + EXPECT_TRUE([mediator_ isItemClickable:passwordItem]); +} + +// Dismissed warnings are only available when the kIOSPasswordCheckup feature is +// enabled. +TEST_F(SafetyCheckMediatorTest, PasswordClickableDismissedWarnings) { + // Enable Password Checkup feature. + base::test::ScopedFeatureList feature_list( + password_manager::features::kIOSPasswordCheckup); + + mediator_.passwordCheckRowState = PasswordCheckRowStateDismissedWarnings; + [mediator_ reconfigurePasswordCheckItem]; + TableViewItem* passwordItem = [[TableViewItem alloc] + initWithType:SafetyCheckItemType::PasswordItemType]; + EXPECT_TRUE([mediator_ isItemClickable:passwordItem]); +} + TEST_F(SafetyCheckMediatorTest, SafeBrowsingNonClickableDefault) { mediator_.safeBrowsingCheckRowState = SafeBrowsingCheckRowStateDefault; [mediator_ reconfigureSafeBrowsingCheckItem];
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_navigation_commands.h b/ios/chrome/browser/ui/settings/safety_check/safety_check_navigation_commands.h index 057343a..a1659f9d 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_navigation_commands.h +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_navigation_commands.h
@@ -9,6 +9,9 @@ // controller. @protocol SafetyCheckNavigationCommands +// Shows the Password Checkup page. +- (void)showPasswordCheckupPage; + // Shows password issues page. - (void)showPasswordIssuesPage;
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn index 568ca65..91ab2c6c 100644 --- a/ios/chrome/test/BUILD.gn +++ b/ios/chrome/test/BUILD.gn
@@ -292,6 +292,7 @@ "//ios/chrome/browser/ui/bookmarks:unit_tests", "//ios/chrome/browser/ui/bookmarks/cells:unit_tests", "//ios/chrome/browser/ui/bookmarks/editor:unit_tests", + "//ios/chrome/browser/ui/bookmarks/folder_chooser:unit_tests", "//ios/chrome/browser/ui/bookmarks/home:unit_tests", "//ios/chrome/browser/ui/bring_android_tabs:unit_tests", "//ios/chrome/browser/ui/broadcaster:unit_tests",
diff --git a/ios/web/navigation/crw_wk_navigation_handler.mm b/ios/web/navigation/crw_wk_navigation_handler.mm index b50d0797..e365a370 100644 --- a/ios/web/navigation/crw_wk_navigation_handler.mm +++ b/ios/web/navigation/crw_wk_navigation_handler.mm
@@ -740,8 +740,6 @@ } if (context) { - if (self.pendingNavigationInfo.MIMEType) - context->SetMimeType(self.pendingNavigationInfo.MIMEType); if (self.pendingNavigationInfo.HTTPHeaders) context->SetResponseHeaders(self.pendingNavigationInfo.HTTPHeaders); } @@ -754,17 +752,34 @@ web::NavigationManager* navigationManager = self.webStateImpl->GetNavigationManager(); GURL pendingURL; + web::NavigationItem* pendingItem = nullptr; if (navigationManager->GetPendingItemIndex() == -1) { - if (context->GetItem()) { - // Item may not exist if navigation was stopped (see - // crbug.com/969915). - pendingURL = context->GetItem()->GetURL(); - } + // Item may not exist if navigation was stopped (see + // crbug.com/969915). + pendingItem = context->GetItem(); } else { - if (navigationManager->GetPendingItem()) { - pendingURL = navigationManager->GetPendingItem()->GetURL(); - } + pendingItem = navigationManager->GetPendingItem(); } + + if (pendingItem) { + pendingURL = pendingItem->GetURL(); + } + + if (self.pendingNavigationInfo.MIMEType) { + context->SetMimeType(self.pendingNavigationInfo.MIMEType); + } else if (pendingItem && !context->GetMimeType()) { + // For navigations handled directly by WebKit's back/forward cache, such + // as swipe-triggered navigations, `pendingNavigationInfo` will not get + // populated since there is no `decidePolicyForNavigationResponse` + // callback. The context's MIME type will also not get set when creating + // the navigation, since swipe-triggered navigations are directly + // initiated by WebKit. In this case, use the MIME type stored with the + // navigation item. + context->SetMimeType( + web::WKBackForwardListItemHolder::FromNavigationItem(pendingItem) + ->mime_type()); + } + if ((pendingURL == webViewURL) || (context->IsLoadingHtmlString())) { // Commit navigation if at least one of these is true: // - Navigation has pending item (this should always be true, but
diff --git a/ios/web/public/thread/web_task_traits.h b/ios/web/public/thread/web_task_traits.h index 0e3fdec8..53927e6 100644 --- a/ios/web/public/thread/web_task_traits.h +++ b/ios/web/public/thread/web_task_traits.h
@@ -6,104 +6,13 @@ #define IOS_WEB_PUBLIC_THREAD_WEB_TASK_TRAITS_H_ #include "base/task/task_traits.h" -#include "base/task/task_traits_extension.h" #include "ios/web/public/thread/web_thread.h" namespace web { -// Tasks with this trait will not be executed inside a nested RunLoop. -// -// Note: This should rarely be required. Drivers of nested loops should instead -// make sure to be reentrant when allowing nested application tasks (also rare). -// -// TODO(crbug.com/876272): Investigate removing this trait -- and any logic for -// deferred tasks in MessageLoop. -struct NonNestable {}; - -// TaskTraits for running tasks on a WebThread. -// -// To post a task to the UI thread (analogous for IO thread): -// web::GetUIThreadTaskRunner({})->PostTask(FROM_HERE, task); -// -// To obtain a TaskRunner for the UI thread (analogous for the IO thread): -// web::GetUIThreadTaskRunner({}); -// -// Tasks posted to the same WebThread with the same traits will be executed -// in the order they were posted, regardless of the TaskRunners they were -// posted via. -// -// Posting to a WebThread must only be done after it was initialized (ref. -// WebMainLoop::CreateThreads() phase). -class WebTaskTraitsExtension { - public: - static constexpr uint8_t kExtensionId = - base::TaskTraitsExtensionStorage::kFirstEmbedderExtensionId; - - struct ValidTrait : public base::TaskTraits::ValidTrait { - using base::TaskTraits::ValidTrait::ValidTrait; - - ValidTrait(WebThread::ID); - ValidTrait(NonNestable); - }; - - template < - class... ArgTypes, - class CheckArgumentsAreValid = std::enable_if_t< - base::trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> - constexpr WebTaskTraitsExtension(ArgTypes... args) - : web_thread_( - base::trait_helpers::GetEnum<WebThread::ID, WebThread::ID_COUNT>( - args...)), - nestable_(!base::trait_helpers::HasTrait<NonNestable, ArgTypes...>()) {} - - constexpr base::TaskTraitsExtensionStorage Serialize() const { - static_assert(8 == sizeof(WebTaskTraitsExtension), - "Update Serialize() and Parse() when changing " - "WebTaskTraitsExtension"); - return { - kExtensionId, - {static_cast<uint8_t>(web_thread_), static_cast<uint8_t>(nestable_)}}; - } - - static const WebTaskTraitsExtension Parse( - const base::TaskTraitsExtensionStorage& extension) { - return WebTaskTraitsExtension(static_cast<WebThread::ID>(extension.data[0]), - static_cast<bool>(extension.data[1])); - } - - constexpr WebThread::ID web_thread() const { - // TODO(crbug.com/1026641): Migrate to WebTaskTraits under which WebThread - // is not a trait. Until then, only code that knows traits have explicitly - // set the WebThread trait should check this field. - DCHECK_NE(web_thread_, WebThread::ID_COUNT); - return web_thread_; - } - - // Returns true if tasks with these traits may run in a nested RunLoop. - constexpr bool nestable() const { return nestable_; } - - private: - WebTaskTraitsExtension(WebThread::ID web_thread, bool nestable) - : web_thread_(web_thread), nestable_(nestable) {} - - WebThread::ID web_thread_; - bool nestable_; -}; - -template <class... ArgTypes, - class = std::enable_if_t<base::trait_helpers::AreValidTraits< - WebTaskTraitsExtension::ValidTrait, - ArgTypes...>::value>> -constexpr base::TaskTraitsExtensionStorage MakeTaskTraitsExtension( - ArgTypes&&... args) { - return WebTaskTraitsExtension(std::forward<ArgTypes>(args)...).Serialize(); -} - class WebTaskTraits : public base::TaskTraits { public: struct ValidTrait : public base::TaskTraits::ValidTrait { - ValidTrait(NonNestable); - // TODO(crbug.com/1304248): iOS never supported TaskPriority, but some // callers are providing it... Add support? ValidTrait(base::TaskPriority); @@ -115,25 +24,13 @@ ValidTrait(base::TaskShutdownBehavior); }; - // TODO(crbug.com/1026641): Get rid of WebTaskTraitsExtension and store its - // members (`nestable_`) directly in WebTaskTraits. template < class... ArgTypes, class CheckArgumentsAreValid = std::enable_if_t< base::trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>::value>> constexpr WebTaskTraits(ArgTypes... args) : base::TaskTraits(args...) {} - - // Returns true if tasks with these traits may run in a nested RunLoop. - bool nestable() const { - return GetExtension<WebTaskTraitsExtension>().nestable(); - } }; -static_assert(sizeof(WebTaskTraits) == sizeof(base::TaskTraits), - "During the migration away from WebTasktraitsExtension, " - "WebTaskTraits must only use base::TaskTraits for storage " - "to prevent slicing."); - } // namespace web #endif // IOS_WEB_PUBLIC_THREAD_WEB_TASK_TRAITS_H_
diff --git a/ios/web/thread/BUILD.gn b/ios/web/thread/BUILD.gn index 7915e25..4124b33d 100644 --- a/ios/web/thread/BUILD.gn +++ b/ios/web/thread/BUILD.gn
@@ -16,8 +16,5 @@ deps += [ "//ios/web/content:threads" ] } - sources = [ - "web_task_traits.cc", - "web_thread.cc", - ] + sources = [ "web_thread.cc" ] }
diff --git a/ios/web/thread/web_task_traits.cc b/ios/web/thread/web_task_traits.cc deleted file mode 100644 index 15197c1..0000000 --- a/ios/web/thread/web_task_traits.cc +++ /dev/null
@@ -1,12 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ios/web/public/thread/web_task_traits.h" - -namespace web { - -// static -constexpr uint8_t WebTaskTraitsExtension::kExtensionId; - -} // namespace web
diff --git a/ios/web/web_thread_impl.cc b/ios/web/web_thread_impl.cc index dde1802..41382d8 100644 --- a/ios/web/web_thread_impl.cc +++ b/ios/web/web_thread_impl.cc
@@ -177,28 +177,6 @@ } private: - WebThread::ID GetWebThreadIdentifier(const base::TaskTraits& traits) { - DCHECK_EQ(traits.extension_id(), WebTaskTraitsExtension::kExtensionId); - const WebThread::ID id = - traits.GetExtension<WebTaskTraitsExtension>().web_thread(); - DCHECK_LT(id, WebThread::ID_COUNT); - - // TODO(crbug.com/872372): Support shutdown behavior on UI/IO threads. - if (traits.shutdown_behavior_set_explicitly()) { - if (id == WebThread::UI) { - DCHECK_EQ(base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, - traits.shutdown_behavior()) - << "Only SKIP_ON_SHUTDOWN is supported on UI thread."; - } else if (id == WebThread::IO) { - DCHECK_EQ(base::TaskShutdownBehavior::BLOCK_SHUTDOWN, - traits.shutdown_behavior()) - << "Only BLOCK_SHUTDOWN is supported on IO thread."; - } - } - - return id; - } - static WebThreadTaskExecutor* g_instance; scoped_refptr<WebThreadTaskRunner> ui_thread_task_runner_ =
diff --git a/ipc/ipc_channel_mojo_unittest.cc b/ipc/ipc_channel_mojo_unittest.cc index 00a7cd0..7ebcf30e 100644 --- a/ipc/ipc_channel_mojo_unittest.cc +++ b/ipc/ipc_channel_mojo_unittest.cc
@@ -1216,9 +1216,9 @@ // Now make a classical sync IPC request to the client. It will send a // sync associated interface message to us while we wait. received_value = 0; - std::unique_ptr<IPC::SyncMessage> request( - new IPC::SyncMessage(0, 0, IPC::Message::PRIORITY_NORMAL, - new SyncReplyReader(&received_value))); + auto request = std::make_unique<IPC::SyncMessage>( + 0, 0, IPC::Message::PRIORITY_NORMAL, + std::make_unique<SyncReplyReader>(&received_value)); EXPECT_TRUE(proxy()->Send(request.release())); EXPECT_EQ(42, received_value); @@ -1255,8 +1255,9 @@ void RequestValue(RequestValueCallback callback) override { int32_t response = 0; if (use_sync_sender_) { - std::unique_ptr<IPC::SyncMessage> reply(new IPC::SyncMessage( - 0, 0, IPC::Message::PRIORITY_NORMAL, new SyncReplyReader(&response))); + auto reply = std::make_unique<IPC::SyncMessage>( + 0, 0, IPC::Message::PRIORITY_NORMAL, + std::make_unique<SyncReplyReader>(&response)); EXPECT_TRUE(sync_sender_->Send(reply.release())); } else { DCHECK(driver_);
diff --git a/ipc/ipc_message_templates_impl.h b/ipc/ipc_message_templates_impl.h index 6770c7ef..3f2e2ac 100644 --- a/ipc/ipc_message_templates_impl.h +++ b/ipc/ipc_message_templates_impl.h
@@ -58,7 +58,7 @@ routing.id, ID, PRIORITY_NORMAL, - new ParamDeserializer<Outs...>(std::tie(*outs...))) { + std::make_unique<ParamDeserializer<Outs...>>(std::tie(*outs...))) { WriteParam(this, std::tie(ins...)); }
diff --git a/ipc/ipc_sync_channel.cc b/ipc/ipc_sync_channel.cc index 9c974c6c..426acde 100644 --- a/ipc/ipc_sync_channel.cc +++ b/ipc/ipc_sync_channel.cc
@@ -310,11 +310,12 @@ base::AutoLock auto_lock(deserializers_lock_); if (reject_new_deserializers_) return false; + PendingSyncMsg pending( - SyncMessage::GetMessageId(*sync_msg), sync_msg->GetReplyDeserializer(), + SyncMessage::GetMessageId(*sync_msg), sync_msg->TakeReplyDeserializer(), new base::WaitableEvent(base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent::InitialState::NOT_SIGNALED)); - deserializers_.push_back(pending); + deserializers_.push_back(std::move(pending)); return true; } @@ -323,7 +324,6 @@ { base::AutoLock auto_lock(deserializers_lock_); PendingSyncMsg& msg = deserializers_.back(); - msg.deserializer.ClearAndDelete(); msg.done_event.ClearAndDelete(); result = msg.send_result; deserializers_.pop_back();
diff --git a/ipc/ipc_sync_message.cc b/ipc/ipc_sync_message.cc index 344ceb64..6df221c 100644 --- a/ipc/ipc_sync_message.cc +++ b/ipc/ipc_sync_message.cc
@@ -24,9 +24,9 @@ SyncMessage::SyncMessage(int32_t routing_id, uint32_t type, PriorityValue priority, - MessageReplyDeserializer* deserializer) + std::unique_ptr<MessageReplyDeserializer> deserializer) : Message(routing_id, type, priority), - deserializer_(deserializer) { + deserializer_(std::move(deserializer)) { set_sync(); set_unblock(true); @@ -38,9 +38,9 @@ SyncMessage::~SyncMessage() = default; -MessageReplyDeserializer* SyncMessage::GetReplyDeserializer() { - DCHECK(deserializer_.get()); - return deserializer_.release(); +std::unique_ptr<MessageReplyDeserializer> SyncMessage::TakeReplyDeserializer() { + DCHECK(deserializer_); + return std::move(deserializer_); } bool SyncMessage::IsMessageReplyTo(const Message& msg, int request_id) { @@ -114,4 +114,13 @@ return SerializeOutputParameters(msg, SyncMessage::GetDataIterator(&msg)); } +PendingSyncMsg::PendingSyncMsg(int id, + std::unique_ptr<MessageReplyDeserializer> d, + base::WaitableEvent* e) + : id(id), deserializer(std::move(d)), done_event(e) {} + +PendingSyncMsg::PendingSyncMsg(PendingSyncMsg&& that) = default; + +PendingSyncMsg::~PendingSyncMsg() = default; + } // namespace IPC
diff --git a/ipc/ipc_sync_message.h b/ipc/ipc_sync_message.h index 8191715..0dfdf117 100644 --- a/ipc/ipc_sync_message.h +++ b/ipc/ipc_sync_message.h
@@ -7,6 +7,8 @@ #include <stdint.h> +#include <memory> + #include "base/memory/raw_ptr.h" #include "build/build_config.h" @@ -34,13 +36,13 @@ SyncMessage(int32_t routing_id, uint32_t type, PriorityValue priority, - MessageReplyDeserializer* deserializer); + std::unique_ptr<MessageReplyDeserializer> deserializer); ~SyncMessage() override; // Call this to get a deserializer for the output parameters. - // Note that this can only be called once, and the caller is responsible - // for deleting the deserializer when they're done. - MessageReplyDeserializer* GetReplyDeserializer(); + // Note that this can only be called once, and the caller is takes + // ownership of the deserializer.. + std::unique_ptr<MessageReplyDeserializer> TakeReplyDeserializer(); // Returns true if the message is a reply to the given request id. static bool IsMessageReplyTo(const Message& msg, int request_id); @@ -81,13 +83,16 @@ // When sending a synchronous message, this structure contains an object // that knows how to deserialize the response. -struct PendingSyncMsg { - PendingSyncMsg(int id, MessageReplyDeserializer* d, base::WaitableEvent* e) - : id(id), deserializer(d), done_event(e) {} +struct IPC_MESSAGE_SUPPORT_EXPORT PendingSyncMsg { + PendingSyncMsg(int id, + std::unique_ptr<MessageReplyDeserializer> d, + base::WaitableEvent* e); + PendingSyncMsg(PendingSyncMsg&& that); + ~PendingSyncMsg(); int id; bool send_result = false; - raw_ptr<MessageReplyDeserializer> deserializer; + std::unique_ptr<MessageReplyDeserializer> deserializer; raw_ptr<base::WaitableEvent> done_event; };
diff --git a/ipc/ipc_sync_message_filter.cc b/ipc/ipc_sync_message_filter.cc index 0a0469b..a05fd56 100644 --- a/ipc/ipc_sync_message_filter.cc +++ b/ipc/ipc_sync_message_filter.cc
@@ -49,8 +49,7 @@ base::WaitableEvent::InitialState::NOT_SIGNALED); PendingSyncMsg pending_message( SyncMessage::GetMessageId(*message), - static_cast<SyncMessage*>(message)->GetReplyDeserializer(), - &done_event); + static_cast<SyncMessage*>(message)->TakeReplyDeserializer(), &done_event); { base::AutoLock auto_lock(lock_); @@ -95,7 +94,6 @@ { base::AutoLock auto_lock(lock_); - pending_message.deserializer.ClearAndDelete(); pending_sync_messages_.erase(&pending_message); }
diff --git a/ipc/ipc_sync_message_unittest.cc b/ipc/ipc_sync_message_unittest.cc index c080a92..66f20a1 100644 --- a/ipc/ipc_sync_message_unittest.cc +++ b/ipc/ipc_sync_message_unittest.cc
@@ -168,8 +168,9 @@ void Send(IPC::SyncMessage* msg) { static TestMessageReceiver receiver; - IPC::MessageReplyDeserializer* reply_serializer = msg->GetReplyDeserializer(); - DCHECK(reply_serializer != NULL); + std::unique_ptr<IPC::MessageReplyDeserializer> reply_serializer = + msg->TakeReplyDeserializer(); + DCHECK(reply_serializer); // "send" the message receiver.OnMessageReceived(*msg); @@ -182,7 +183,6 @@ DCHECK(result); delete g_reply; g_reply = NULL; - delete reply_serializer; } TEST(IPCSyncMessageTest, Main) {
diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn index f1b4cd5..609c60d9 100644 --- a/media/audio/BUILD.gn +++ b/media/audio/BUILD.gn
@@ -168,6 +168,8 @@ sources += [ "mac/audio_auhal_mac.cc", "mac/audio_auhal_mac.h", + "mac/audio_input_mac.cc", + "mac/audio_input_mac.h", "mac/core_audio_util_mac.cc", "mac/core_audio_util_mac.h", "mac/scoped_audio_unit.cc", @@ -184,8 +186,6 @@ sources += [ "mac/audio_device_listener_mac.cc", "mac/audio_device_listener_mac.h", - "mac/audio_input_mac.cc", - "mac/audio_input_mac.h", "mac/audio_low_latency_input_mac.cc", "mac/audio_low_latency_input_mac.h", "mac/audio_manager_mac.cc", @@ -201,7 +201,11 @@ "ios/audio_manager_ios.cc", "ios/audio_manager_ios.h", "ios/audio_private_api.h", + "ios/audio_session_manager_ios.h", + "ios/audio_session_manager_ios.mm", ] + + frameworks += [ "AVFoundation.framework" ] } if (is_win) { @@ -447,9 +451,12 @@ deps += [ "//ui/gl" ] } + if (is_apple) { + sources += [ "mac/audio_auhal_mac_unittest.cc" ] + } + if (is_mac) { sources += [ - "mac/audio_auhal_mac_unittest.cc", "mac/audio_device_listener_mac_unittest.cc", "mac/audio_low_latency_input_mac_unittest.cc", "mac/audio_manager_mac_unittest.cc",
diff --git a/media/audio/audio_input_unittest.cc b/media/audio/audio_input_unittest.cc index 8f01ee5..709e576 100644 --- a/media/audio/audio_input_unittest.cc +++ b/media/audio/audio_input_unittest.cc
@@ -260,7 +260,13 @@ // Test a normal recording sequence using an AudioInputStream. // Very simple test which starts capturing and verifies that recording starts. -TEST_F(AudioInputTest, Record) { +// TODO(crbug.com/1429490): This test is failing on ios-blink-dbg-fyi bot. +#if BUILDFLAG(IS_IOS) +#define MAYBE_Record DISABLED_Record +#else +#define MAYBE_Record Record +#endif +TEST_F(AudioInputTest, MAYBE_Record) { ABORT_AUDIO_TEST_IF_NOT(InputDevicesAvailable()); MakeAudioInputStreamOnAudioThread();
diff --git a/media/audio/ios/audio_manager_ios.cc b/media/audio/ios/audio_manager_ios.cc index fb42414..1553444 100644 --- a/media/audio/ios/audio_manager_ios.cc +++ b/media/audio/ios/audio_manager_ios.cc
@@ -6,10 +6,15 @@ #include <memory> +#include "media/audio/ios/audio_session_manager_ios.h" #include "media/audio/mac/audio_auhal_mac.h" +#include "media/audio/mac/audio_input_mac.h" namespace media { +// Default buffer size. +constexpr int kDefaultInputBufferSize = 1024; + std::unique_ptr<media::AudioManager> CreateAudioManager( std::unique_ptr<AudioThread> audio_thread, AudioLogFactory* audio_log_factory) { @@ -19,10 +24,50 @@ AudioManagerIOS::AudioManagerIOS(std::unique_ptr<AudioThread> audio_thread, AudioLogFactory* audio_log_factory) - : FakeAudioManager(std::move(audio_thread), audio_log_factory) {} + : AudioManagerBase(std::move(audio_thread), audio_log_factory) { + audio_session_manager_ = std::make_unique<AudioSessionManagerIOS>(); +} AudioManagerIOS::~AudioManagerIOS() = default; +bool AudioManagerIOS::HasAudioOutputDevices() { + return audio_session_manager_->HasAudioHardware(/*is_input=*/false); +} + +bool AudioManagerIOS::HasAudioInputDevices() { + return audio_session_manager_->HasAudioHardware(/*is_input=*/true); +} + +void AudioManagerIOS::GetAudioInputDeviceNames(AudioDeviceNames* device_names) { + DCHECK(device_names->empty()); + audio_session_manager_->GetAudioDeviceInfo(true, device_names); +} + +void AudioManagerIOS::GetAudioOutputDeviceNames( + AudioDeviceNames* device_names) { + DCHECK(device_names->empty()); + audio_session_manager_->GetAudioDeviceInfo(false, device_names); +} + +AudioParameters AudioManagerIOS::GetInputStreamParameters( + const std::string& input_device_id) { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + int sample_rate = audio_session_manager_->HardwareSampleRate(); + return AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, + ChannelLayoutConfig::Stereo(), sample_rate, + kDefaultInputBufferSize); +} + +std::string AudioManagerIOS::GetAssociatedOutputDeviceID( + const std::string& input_device_unique_id) { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + return std::string(); +} + +const char* media::AudioManagerIOS::GetName() { + return "iOS"; +} + void AudioManagerIOS::ReleaseOutputStreamUsingRealDevice( AudioOutputStream* stream, AudioDeviceID device_id) { @@ -31,15 +76,15 @@ AudioManagerBase::ReleaseOutputStream(stream); } -const char* media::AudioManagerIOS::GetName() { - return "iOS"; -} +void AudioManagerIOS::ReleaseInputStreamUsingRealDevice( + AudioInputStream* stream) { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + auto stream_it = base::ranges::find(basic_input_streams_, stream); + if (stream_it != basic_input_streams_.end()) { + basic_input_streams_.erase(stream_it); + } -bool AudioManagerIOS::MaybeChangeBufferSize(AudioDeviceID device_id, - AudioUnit audio_unit, - AudioUnitElement element, - size_t desired_buffer_size) { - return true; + AudioManagerBase::ReleaseInputStream(stream); } AudioOutputStream* AudioManagerIOS::MakeLinearOutputStream( @@ -61,4 +106,53 @@ return stream; } +AudioInputStream* AudioManagerIOS::MakeLinearInputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + AudioInputStream* stream = new PCMQueueInAudioInputStream(this, params); + basic_input_streams_.push_back(stream); + return stream; +} + +AudioInputStream* AudioManagerIOS::MakeLowLatencyInputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + // TODO: Replace PCMQueueInAudioInputStream with AUAudioInputStream to use + // low-latency implementation. + return MakeLinearInputStream(params, device_id, log_callback); +} + +std::string AudioManagerIOS::GetDefaultInputDeviceID() { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + return audio_session_manager_->GetDefaultInputDeviceID(); +} + +std::string AudioManagerIOS::GetDefaultOutputDeviceID() { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + return audio_session_manager_->GetDefaultOutputDeviceID(); +} + +bool AudioManagerIOS::MaybeChangeBufferSize(AudioDeviceID device_id, + AudioUnit audio_unit, + AudioUnitElement element, + size_t desired_buffer_size) { + // TODO: Add IO buffer size handling based on `desired_buffer_size`. Refer + // comments at audio_manager_mac.h for more information. + return true; +} + +AudioParameters AudioManagerIOS::GetPreferredOutputStreamParameters( + const std::string& output_device_id, + const AudioParameters& input_params) { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + int sample_rate = audio_session_manager_->HardwareSampleRate(); + return AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, + ChannelLayoutConfig::Stereo(), sample_rate, + kDefaultInputBufferSize); +} + } // namespace media
diff --git a/media/audio/ios/audio_manager_ios.h b/media/audio/ios/audio_manager_ios.h index 51e8298a..4486d3f 100644 --- a/media/audio/ios/audio_manager_ios.h +++ b/media/audio/ios/audio_manager_ios.h
@@ -22,13 +22,14 @@ namespace media { class AUHALStream; +class AudioSessionManagerIOS; // iOS implementation of the AudioManager singleton. This class is internal // to the audio output and only internal users can call methods not exposed by // the AudioManager class. // TODO(crbug.com/1413450): Fill this implementation out. -class MEDIA_EXPORT AudioManagerIOS : public FakeAudioManager, - public AUHALStreamClient { +class MEDIA_EXPORT AudioManagerIOS : public AudioManagerBase, + public AudioIOStreamClient { public: AudioManagerIOS(std::unique_ptr<AudioThread> audio_thread, AudioLogFactory* audio_log_factory); @@ -39,16 +40,17 @@ ~AudioManagerIOS() override; // Implementation of AudioManager. + bool HasAudioOutputDevices() override; + bool HasAudioInputDevices() override; + void GetAudioInputDeviceNames(AudioDeviceNames* device_names) override; + void GetAudioOutputDeviceNames(AudioDeviceNames* device_names) override; + AudioParameters GetInputStreamParameters( + const std::string& input_device_id) override; + std::string GetAssociatedOutputDeviceID( + const std::string& input_device_id) override; const char* GetName() override; - // Implementation of AUHALStreamClient. - void ReleaseOutputStreamUsingRealDevice(AudioOutputStream* stream, - AudioDeviceID device_id) override; - bool MaybeChangeBufferSize(AudioDeviceID device_id, - AudioUnit audio_unit, - AudioUnitElement element, - size_t desired_buffer_size) override; - + // Implementation of AudioManagerBase. AudioOutputStream* MakeLinearOutputStream( const AudioParameters& params, const LogCallback& log_callback) override; @@ -56,9 +58,38 @@ const AudioParameters& params, const std::string& device_id, const LogCallback& log_callback) override; + AudioInputStream* MakeLinearInputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) override; + AudioInputStream* MakeLowLatencyInputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) override; + + std::string GetDefaultInputDeviceID() override; + std::string GetDefaultOutputDeviceID() override; + + // Implementation of AudioIOStreamClient. + void ReleaseOutputStreamUsingRealDevice(AudioOutputStream* stream, + AudioDeviceID device_id) override; + void ReleaseInputStreamUsingRealDevice(AudioInputStream* stream) override; + bool MaybeChangeBufferSize(AudioDeviceID device_id, + AudioUnit audio_unit, + AudioUnitElement element, + size_t desired_buffer_size) override; + + protected: + AudioParameters GetPreferredOutputStreamParameters( + const std::string& output_device_id, + const AudioParameters& input_params) override; private: + std::unique_ptr<AudioSessionManagerIOS> audio_session_manager_; + + // Tracks all constructed input and output streams. std::list<AUHALStream*> output_streams_; + std::list<AudioInputStream*> basic_input_streams_; }; } // namespace media
diff --git a/media/audio/ios/audio_session_manager_ios.h b/media/audio/ios/audio_session_manager_ios.h new file mode 100644 index 0000000..5eed1a9 --- /dev/null +++ b/media/audio/ios/audio_session_manager_ios.h
@@ -0,0 +1,34 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_AUDIO_IOS_AUDIO_SESSION_MANAGER_IOS_H_ +#define MEDIA_AUDIO_IOS_AUDIO_SESSION_MANAGER_IOS_H_ + +#include "media/audio/audio_device_name.h" + +namespace media { + +class AudioSessionManagerIOS { + public: + AudioSessionManagerIOS(const AudioSessionManagerIOS&) = delete; + AudioSessionManagerIOS& operator=(const AudioSessionManagerIOS&) = delete; + + ~AudioSessionManagerIOS() = default; + AudioSessionManagerIOS(); + + // Methods to support AudioManagerIOS + bool HasAudioHardware(bool is_input); + void GetAudioDeviceInfo(bool is_input, media::AudioDeviceNames* device_names); + std::string GetDefaultOutputDeviceID(); + std::string GetDefaultInputDeviceID(); + int HardwareSampleRate(); + + private: + void GetAudioInputDeviceInfo(media::AudioDeviceNames* device_names); + void GetAudioOutputDeviceInfo(media::AudioDeviceNames* device_names); +}; + +} // namespace media + +#endif // MEDIA_AUDIO_IOS_AUDIO_SESSION_MANAGER_IOS_H_
diff --git a/media/audio/ios/audio_session_manager_ios.mm b/media/audio/ios/audio_session_manager_ios.mm new file mode 100644 index 0000000..471dfe2 --- /dev/null +++ b/media/audio/ios/audio_session_manager_ios.mm
@@ -0,0 +1,157 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/audio/ios/audio_session_manager_ios.h" + +#import <AVFoundation/AVFoundation.h> +#import <Foundation/Foundation.h> + +#include "base/strings/sys_string_conversions.h" + +namespace media { + +AudioSessionManagerIOS::AudioSessionManagerIOS() { + AVAudioSession* audio_session = [AVAudioSession sharedInstance]; + + NSError* error = nil; + auto options = AVAudioSessionCategoryOptionAllowBluetooth | + AVAudioSessionCategoryOptionAllowBluetoothA2DP | + AVAudioSessionCategoryOptionMixWithOthers; + [audio_session setCategory:AVAudioSessionCategoryPlayAndRecord + mode:AVAudioSessionModeDefault + options:options + error:&error]; + if (error) { + NSLog(@"Failed to set audio session category with error: %@.", + error.localizedDescription); + } + + // Find the desired input port + NSArray* inputs = [audio_session availableInputs]; + AVAudioSessionPortDescription* builtInMic = nil; + for (AVAudioSessionPortDescription* port in inputs) { + if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) { + builtInMic = port; + break; + } + } + + // Find the desired microphone + for (AVAudioSessionDataSourceDescription* source in builtInMic.dataSources) { + if ([source.orientation isEqual:AVAudioSessionOrientationFront]) { + [builtInMic setPreferredDataSource:source error:nil]; + [audio_session setPreferredInput:builtInMic error:nil]; + break; + } + } + + // Find the desired audio output device + AVAudioSessionRouteDescription* currentRoute = [audio_session currentRoute]; + if ([currentRoute.outputs count] > 0) { + AVAudioSessionPortDescription* output = currentRoute.outputs.firstObject; + if ([output.portType isEqualToString:AVAudioSessionPortBuiltInReceiver] || + [output.portType isEqualToString:AVAudioSessionPortBuiltInSpeaker]) { + [audio_session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker + error:&error]; + if (error) { + NSLog(@"Error overriding output audio port: %@", + [error localizedDescription]); + } else { + NSLog(@"Set default output device to Speaker"); + } + } else { + [audio_session overrideOutputAudioPort:AVAudioSessionPortOverrideNone + error:&error]; + if (error) { + NSLog(@"Error overriding output audio port: %@", + [error localizedDescription]); + } else { + NSLog(@"Using System choosen default audio output device"); + } + } + } + + [audio_session setActive:YES error:nil]; +} + +bool AudioSessionManagerIOS::HasAudioHardware(bool is_input) { + AVAudioSession* audio_session = [AVAudioSession sharedInstance]; + AVAudioSessionRouteDescription* route = [audio_session currentRoute]; + if (is_input) { + // Seach for a audio input hardware. + NSArray* inputs = [route inputs]; + return [inputs count]; + } + + // Seach for a audio output hardware. + NSArray* outputs = [route outputs]; + return [outputs count]; +} + +void AudioSessionManagerIOS::GetAudioDeviceInfo( + bool is_input, + media::AudioDeviceNames* device_names) { + if (is_input) { + GetAudioInputDeviceInfo(device_names); + } else { + GetAudioOutputDeviceInfo(device_names); + } +} + +std::string AudioSessionManagerIOS::GetDefaultOutputDeviceID() { + AVAudioSession* audio_session = [AVAudioSession sharedInstance]; + AVAudioSessionPortDescription* currentOutput = + [audio_session currentRoute].outputs.firstObject; + return base::SysNSStringToUTF8([currentOutput portName]); +} + +std::string AudioSessionManagerIOS::GetDefaultInputDeviceID() { + AVAudioSession* audio_session = [AVAudioSession sharedInstance]; + AVAudioSessionPortDescription* currentInput = + [audio_session currentRoute].inputs.firstObject; + return base::SysNSStringToUTF8([currentInput portName]); +} + +void AudioSessionManagerIOS::GetAudioInputDeviceInfo( + media::AudioDeviceNames* device_names) { + AVAudioSession* audio_session = [AVAudioSession sharedInstance]; + // Find the desired input port + NSArray* inputs = [audio_session availableInputs]; + for (AVAudioSessionPortDescription* port in inputs) { + device_names->emplace_back( + std::string(base::SysNSStringToUTF8([port portName])), + std::string(base::SysNSStringToUTF8([port UID]))); + } + + if (!device_names->empty()) { + // Prepend the default device to the list since we always want it to be + // on the top of the list for all platforms. There is no duplicate + // counting here since the default device has been abstracted out before. + device_names->push_front(media::AudioDeviceName::CreateDefault()); + } +} + +void AudioSessionManagerIOS::GetAudioOutputDeviceInfo( + media::AudioDeviceNames* device_names) { + AVAudioSession* audio_session = [AVAudioSession sharedInstance]; + AVAudioSessionPortDescription* currentOutput = + [audio_session currentRoute].outputs.firstObject; + device_names->emplace_back( + std::string(base::SysNSStringToUTF8([currentOutput portName])), + std::string(base::SysNSStringToUTF8([currentOutput UID]))); + + if (!device_names->empty()) { + // Prepend the default device to the list since we always want it to be + // on the top of the list for all platforms. There is no duplicate + // counting here since the default device has been abstracted out before. + device_names->push_front(media::AudioDeviceName::CreateDefault()); + } +} + +int AudioSessionManagerIOS::HardwareSampleRate() { + AVAudioSession* audio_session = [AVAudioSession sharedInstance]; + return static_cast<int>(audio_session.sampleRate); +} + +} // namespace media
diff --git a/media/audio/mac/audio_auhal_mac.cc b/media/audio/mac/audio_auhal_mac.cc index 859f06d..2c62bde5 100644 --- a/media/audio/mac/audio_auhal_mac.cc +++ b/media/audio/mac/audio_auhal_mac.cc
@@ -162,7 +162,7 @@ } // namespace -AUHALStream::AUHALStream(AUHALStreamClient* client, +AUHALStream::AUHALStream(AudioIOStreamClient* client, const AudioParameters& params, AudioDeviceID device, const AudioManager::LogCallback& log_callback) @@ -279,7 +279,7 @@ #if BUILDFLAG(IS_MAC) peak_detector_ = std::make_unique<AmplitudePeakDetector>(base::BindRepeating( - &AUHALStreamClient::StopAmplitudePeakTrace, base::Unretained(client_))); + &AudioIOStreamClient::StopAmplitudePeakTrace, base::Unretained(client_))); #endif OSStatus result = AudioOutputUnitStart(audio_unit_->audio_unit());
diff --git a/media/audio/mac/audio_auhal_mac.h b/media/audio/mac/audio_auhal_mac.h index 9dd09759..217fa7a 100644 --- a/media/audio/mac/audio_auhal_mac.h +++ b/media/audio/mac/audio_auhal_mac.h
@@ -50,10 +50,11 @@ // A callback implementation for allowing this code to be used by both // AudioManagerIOS and AudioManagerMac. -class AUHALStreamClient { +class AudioIOStreamClient { public: virtual void ReleaseOutputStreamUsingRealDevice(AudioOutputStream* stream, AudioDeviceID device_id) = 0; + virtual void ReleaseInputStreamUsingRealDevice(AudioInputStream* stream) = 0; virtual bool MaybeChangeBufferSize(AudioDeviceID device_id, AudioUnit audio_unit, AudioUnitElement element, @@ -99,7 +100,7 @@ // |client| creates this object. // |device| is the CoreAudio device to use for the stream. // It will often be the default output device. - AUHALStream(AUHALStreamClient* client, + AUHALStream(AudioIOStreamClient* client, const AudioParameters& params, AudioDeviceID device, const AudioManager::LogCallback& log_callback); @@ -158,7 +159,7 @@ void UpdatePlayoutTimestamp(const AudioTimeStamp* timestamp); // Our creator, the audio manager needs to be notified when we close. - const raw_ptr<AUHALStreamClient> client_; + const raw_ptr<AudioIOStreamClient> client_; const AudioParameters params_;
diff --git a/media/audio/mac/audio_input_mac.cc b/media/audio/mac/audio_input_mac.cc index d05afb4..4edeb5a 100644 --- a/media/audio/mac/audio_input_mac.cc +++ b/media/audio/mac/audio_input_mac.cc
@@ -15,8 +15,12 @@ #include "base/metrics/sparse_histogram.h" #include "base/time/time.h" #include "base/trace_event/trace_event.h" + +#if BUILDFLAG(IS_MAC) #include "media/audio/mac/audio_manager_mac.h" -#include "media/base/audio_bus.h" +#else +#include "media/audio/ios/audio_manager_ios.h" +#endif namespace media { @@ -31,9 +35,9 @@ } // namespace PCMQueueInAudioInputStream::PCMQueueInAudioInputStream( - AudioManagerMac* manager, + AudioIOStreamClient* client, const AudioParameters& params) - : manager_(manager), + : client_(client), callback_(nullptr), audio_queue_(NULL), buffer_size_bytes_(0), @@ -41,7 +45,7 @@ input_callback_is_active_(false), audio_bus_(media::AudioBus::Create(params)) { // We must have a manager. - DCHECK(manager_); + DCHECK(client_); const SampleFormat kSampleFormat = kSampleFormatS16; @@ -89,17 +93,19 @@ if (callback_ || !audio_queue_) return; +#if BUILDFLAG(IS_MAC) // Check if we should defer Start() for http://crbug.com/160920. - if (manager_->ShouldDeferStreamStart()) { + base::TimeDelta defer_start = client_->GetDeferStreamStartTimeout(); + if (!defer_start.is_zero()) { // Use a cancellable closure so that if Stop() is called before Start() // actually runs, we can cancel the pending start. deferred_start_cb_.Reset(base::BindOnce(&PCMQueueInAudioInputStream::Start, base::Unretained(this), callback)); - manager_->GetTaskRunner()->PostDelayedTask( - FROM_HERE, deferred_start_cb_.callback(), - base::Seconds(AudioManagerMac::kStartDelayInSecsForPowerEvents)); + client_->GetTaskRunner()->PostDelayedTask( + FROM_HERE, deferred_start_cb_.callback(), defer_start); return; } +#endif callback_ = callback; OSStatus err = AudioQueueStart(audio_queue_, NULL); @@ -152,36 +158,36 @@ HandleError(err); } - manager_->ReleaseInputStream(this); + client_->ReleaseInputStreamUsingRealDevice(this); // CARE: This object may now be destroyed. } double PCMQueueInAudioInputStream::GetMaxVolume() { - NOTREACHED() << "Only supported for low-latency mode."; - return 0.0; + NOTIMPLEMENTED(); + return 1.0; } void PCMQueueInAudioInputStream::SetVolume(double volume) { - NOTREACHED() << "Only supported for low-latency mode."; + NOTIMPLEMENTED(); } double PCMQueueInAudioInputStream::GetVolume() { - NOTREACHED() << "Only supported for low-latency mode."; - return 0.0; + NOTIMPLEMENTED(); + return 1.0; } bool PCMQueueInAudioInputStream::IsMuted() { - NOTREACHED() << "Only supported for low-latency mode."; + NOTIMPLEMENTED(); return false; } bool PCMQueueInAudioInputStream::SetAutomaticGainControl(bool enabled) { - NOTREACHED() << "Only supported for low-latency mode."; + NOTIMPLEMENTED(); return false; } bool PCMQueueInAudioInputStream::GetAutomaticGainControl() { - NOTREACHED() << "Only supported for low-latency mode."; + NOTIMPLEMENTED(); return false; }
diff --git a/media/audio/mac/audio_input_mac.h b/media/audio/mac/audio_input_mac.h index 93f90bb7..74a5d0c 100644 --- a/media/audio/mac/audio_input_mac.h +++ b/media/audio/mac/audio_input_mac.h
@@ -23,14 +23,14 @@ namespace media { class AudioBus; -class AudioManagerMac; +class AudioIOStreamClient; // Implementation of AudioInputStream for macOS using the Audio Queue service // in Audio Toolbox. Design reflects PCMQueueOutAudioOutputStream. class PCMQueueInAudioInputStream : public AudioInputStream { public: // Parameters as per AudioManager::MakeAudioInputStream. - PCMQueueInAudioInputStream(AudioManagerMac* manager, + PCMQueueInAudioInputStream(AudioIOStreamClient* client, const AudioParameters& params); PCMQueueInAudioInputStream(const PCMQueueInAudioInputStream&) = delete; @@ -90,7 +90,7 @@ void CheckInputStartupSuccess(); // Manager that owns this stream, used for closing down. - raw_ptr<AudioManagerMac> manager_; + raw_ptr<AudioIOStreamClient> client_; // We use the callback mostly to periodically supply the recorded audio data. raw_ptr<AudioInputCallback> callback_; // Structure that holds the stream format details such as bitrate.
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc index d6e09152..2f7b9f4 100644 --- a/media/audio/mac/audio_manager_mac.cc +++ b/media/audio/mac/audio_manager_mac.cc
@@ -1240,6 +1240,18 @@ AudioManagerBase::ReleaseOutputStream(stream); } +void AudioManagerMac::ReleaseInputStream(AudioInputStream* stream) { + DCHECK(GetTaskRunner()->BelongsToCurrentThread()); + auto stream_it = base::ranges::find(basic_input_streams_, stream); + if (stream_it == basic_input_streams_.end()) { + low_latency_input_streams_.remove(static_cast<AUAudioInputStream*>(stream)); + } else { + basic_input_streams_.erase(stream_it); + } + + AudioManagerBase::ReleaseInputStream(stream); +} + void AudioManagerMac::ReleaseOutputStreamUsingRealDevice( AudioOutputStream* stream, AudioDeviceID device_id) { @@ -1253,7 +1265,8 @@ AudioManagerBase::ReleaseOutputStream(stream); } -void AudioManagerMac::ReleaseInputStream(AudioInputStream* stream) { +void AudioManagerMac::ReleaseInputStreamUsingRealDevice( + AudioInputStream* stream) { DCHECK(GetTaskRunner()->BelongsToCurrentThread()); auto stream_it = base::ranges::find(basic_input_streams_, stream); if (stream_it == basic_input_streams_.end())
diff --git a/media/audio/mac/audio_manager_mac.h b/media/audio/mac/audio_manager_mac.h index 7cb7d85..6355b7e9 100644 --- a/media/audio/mac/audio_manager_mac.h +++ b/media/audio/mac/audio_manager_mac.h
@@ -29,7 +29,7 @@ // to the audio output and only internal users can call methods not exposed by // the AudioManager class. class MEDIA_EXPORT AudioManagerMac : public AudioManagerBase, - public AUHALStreamClient { + public AudioIOStreamClient { public: AudioManagerMac(std::unique_ptr<AudioThread> audio_thread, AudioLogFactory* audio_log_factory); @@ -80,6 +80,7 @@ // for real streams and not for fake or mocked streams. void ReleaseOutputStreamUsingRealDevice(AudioOutputStream* stream, AudioDeviceID device_id) override; + void ReleaseInputStreamUsingRealDevice(AudioInputStream* stream) override; // Changes the I/O buffer size for |device_id| if |desired_buffer_size| is // lower than the current device buffer size. The buffer size can also be
diff --git a/media/capture/video/mac/video_capture_device_avfoundation_mac.h b/media/capture/video/mac/video_capture_device_avfoundation_mac.h index 115bbf9..998d4b1e 100644 --- a/media/capture/video/mac/video_capture_device_avfoundation_mac.h +++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.h
@@ -89,8 +89,6 @@ AVCapturePhotoCaptureDelegate> { @private // The following attributes are set via -setCaptureHeight:width:frameRate:. - int _frameWidth; - int _frameHeight; float _frameRate; // The capture format that best matches the above attributes.
diff --git a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm index 3f2ea0d5..23b3743 100644 --- a/media/capture/video/mac/video_capture_device_avfoundation_mac.mm +++ b/media/capture/video/mac/video_capture_device_avfoundation_mac.mm
@@ -306,8 +306,6 @@ DCHECK(![_captureSession isRunning]); DCHECK(_mainThreadTaskRunner->BelongsToCurrentThread()); - _frameWidth = width; - _frameHeight = height; _frameRate = frameRate; _bestCaptureFormat.reset( media::FindBestCaptureFormat([_captureDevice formats], width, height,
diff --git a/media/gpu/chromeos/oop_video_decoder.cc b/media/gpu/chromeos/oop_video_decoder.cc index a3f7a5b3..aae68c0 100644 --- a/media/gpu/chromeos/oop_video_decoder.cc +++ b/media/gpu/chromeos/oop_video_decoder.cc
@@ -98,6 +98,31 @@ return configs_; } + VideoDecoderType GetDecoderType() { + base::AutoLock lock(lock_); + // This method should only be called in the initialization path of an + // OOPVideoDecoder instance. OOPVideoDecoder instances are initialized only + // after higher layers check that a VideoDecoderConfig is supported. If + // |decoder_type_| is not initialized to non-nullopt, it means that we're in + // one of two cases: + // + // a) We didn't try to get the supported configurations before initializing + // OOPVideoDecoder instances. This should be impossible as higher layers + // should guarantee that we know the supported configurations before + // creating MojoVideoDecoderService instances (and therefore + // OOPVideoDecoder instances). See, e.g., the logic in + // InterfaceFactoryImpl::CreateVideoDecoder(). + // + // b) We did try to get the supported configurations but an error occurred. + // This case reduces to no supported configurations in which case, a + // higher layer should reject any initialization attempt. + // + // Therefore, GetDecoderType() should only be reached when |decoder_type_| + // is known. + CHECK(decoder_type_.has_value()); + return *decoder_type_; + } + void NotifySupportKnown( mojo::PendingRemote<stable::mojom::StableVideoDecoder> oop_video_decoder, base::OnceCallback< @@ -152,10 +177,20 @@ ~OOPVideoDecoderSupportedConfigsManager() = default; void OnGetSupportedConfigs(const SupportedVideoDecoderConfigs& configs, - VideoDecoderType /*decoder_type*/) { + VideoDecoderType decoder_type) { base::AutoLock lock(lock_); DCHECK(!configs_); - configs_ = configs; + DCHECK(!decoder_type_); + + if (decoder_type == VideoDecoderType::kVda || + decoder_type == VideoDecoderType::kVaapi || + decoder_type == VideoDecoderType::kV4L2) { + configs_ = configs; + decoder_type_ = decoder_type; + } else { + // The remote decoder is of an unexpected type, so let's assume it's bad. + configs_ = {}; + } while (!waiting_callbacks_.empty()) { WaitingCallbackContext waiting_callback = @@ -189,8 +224,9 @@ // once the supported configurations are known. mojo::Remote<stable::mojom::StableVideoDecoder> oop_video_decoder_; - // The cached supported video decoder configurations. + // The cached supported video decoder configurations and decoder type. absl::optional<SupportedVideoDecoderConfigs> configs_ GUARDED_BY(lock_); + absl::optional<VideoDecoderType> decoder_type_ GUARDED_BY(lock_); // This tracks everything that's needed to call a callback passed to // NotifySupportKnown() that had to be queued because there was a query in @@ -404,10 +440,10 @@ CHECK(!has_error_); - if (!status.is_ok() || - (decoder_type != VideoDecoderType::kVda && - decoder_type != VideoDecoderType::kVaapi && - decoder_type != VideoDecoderType::kV4L2) || + const VideoDecoderType expected_decoder_type = + OOPVideoDecoderSupportedConfigsManager::Instance().GetDecoderType(); + + if (!status.is_ok() || decoder_type != expected_decoder_type || (remote_decoder_type_ != VideoDecoderType::kUnknown && remote_decoder_type_ != decoder_type)) { Stop();
diff --git a/media/gpu/vaapi/BUILD.gn b/media/gpu/vaapi/BUILD.gn index d44f285..6881291 100644 --- a/media/gpu/vaapi/BUILD.gn +++ b/media/gpu/vaapi/BUILD.gn
@@ -38,6 +38,8 @@ sources = [ "av1_vaapi_video_decoder_delegate.cc", "av1_vaapi_video_decoder_delegate.h", + "av1_vaapi_video_encoder_delegate.cc", + "av1_vaapi_video_encoder_delegate.h", "h264_vaapi_video_decoder_delegate.cc", "h264_vaapi_video_decoder_delegate.h", "h264_vaapi_video_encoder_delegate.cc",
diff --git a/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.cc b/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.cc new file mode 100644 index 0000000..bac8e57 --- /dev/null +++ b/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.cc
@@ -0,0 +1,927 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/gpu/vaapi/av1_vaapi_video_encoder_delegate.h" + +#include <utility> + +#include "base/bits.h" +#include "base/logging.h" +#include "media/gpu/vaapi/vaapi_common.h" +#include "media/gpu/vaapi/vaapi_wrapper.h" +#include "third_party/libgav1/src/src/utils/constants.h" + +namespace media { +namespace { + +// Values from +// third_party/webrtc/modules/video_coding/codecs/av1/libaom_av1_encoder.cc +// TODO(b/267521747): We might need to adjust these when we actually implement +// rate control. +constexpr int kKFPeriod = 3000; +constexpr int kMinQP = 10; +constexpr int kMaxQP = 205; + +// This needs to be 64, not 16, because of superblocks. +// TODO: Look into whether or not we can reduce alignment to 16. +constexpr gfx::Size kAV1AlignmentSize(64, 64); +constexpr int kCDEFStrengthDivisor = 4; +constexpr int kPrimaryReferenceNone = 7; + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) + +// TODO: Do we need other reference modes? +enum AV1ReferenceMode { + kSingleReference = 0, + kCompoundReference = 1, + kReferenceModeSelect = 2, +}; + +struct { + int level_idx; + int max_width; + int max_height; + uint64_t max_sample_rate; +} kAV1LevelSpecs[] = { + { + .level_idx = 0, + .max_width = 2048, + .max_height = 1152, + .max_sample_rate = 5529600, + }, + { + .level_idx = 1, + .max_width = 2816, + .max_height = 1152, + .max_sample_rate = 10454400, + }, + { + .level_idx = 4, + .max_width = 4352, + .max_height = 2448, + .max_sample_rate = 24969600, + }, + { + .level_idx = 5, + .max_width = 5504, + .max_height = 3096, + .max_sample_rate = 39938400, + }, + { + .level_idx = 8, + .max_width = 6144, + .max_height = 3456, + .max_sample_rate = 77856768, + }, + { + .level_idx = 9, + .max_width = 6144, + .max_height = 3456, + .max_sample_rate = 155713536, + }, + { + .level_idx = 12, + .max_width = 8192, + .max_height = 4352, + .max_sample_rate = 273715200, + }, + { + .level_idx = 13, + .max_width = 8192, + .max_height = 4352, + .max_sample_rate = 547430400, + }, + { + .level_idx = 14, + .max_width = 8192, + .max_height = 4352, + .max_sample_rate = 1094860800, + }, + { + .level_idx = 15, + .max_width = 8192, + .max_height = 4352, + .max_sample_rate = 1176502272, + }, + { + .level_idx = 16, + .max_width = 16384, + .max_height = 8704, + .max_sample_rate = 1176502272, + }, + { + .level_idx = 17, + .max_width = 16384, + .max_height = 8704, + .max_sample_rate = 2189721600, + }, + { + .level_idx = 18, + .max_width = 16384, + .max_height = 8704, + .max_sample_rate = 4379443200, + }, + { + .level_idx = 19, + .max_width = 16384, + .max_height = 8704, + .max_sample_rate = 4706009088, + }, +}; + +// Computes the "level" of the bitstream based on resolution and framerate. +// In the AV1 specifications, Annex A section A.3 provides a table for computing +// the appropriate "level" based on the samples (pixels) per second and +// resolution. +// Returns -1 when the given resolution and framerate are invalid. +int ComputeLevel(const gfx::Size& coded_size, uint32_t framerate) { + const uint64_t samples_per_second = coded_size.GetArea() * framerate; + + for (auto& level_spec : kAV1LevelSpecs) { + if (coded_size.width() <= level_spec.max_width && + coded_size.height() <= level_spec.max_height && + samples_per_second < level_spec.max_sample_rate) { + return level_spec.level_idx; + } + } + + return -1; +} + +// Helper class for writing packed bitstream data. +class PackedData { + public: + void Write(uint64_t val, int num_bits); + void WriteBool(bool val); + void WriteOBUHeader(libgav1::ObuType type, + bool extension_flag, + bool has_size); + void EncodeLeb128(uint32_t value, + absl::optional<int> fixed_size = absl::nullopt); + std::vector<uint8_t> Flush(); + size_t OutstandingBits() { return total_outstanding_bits_; } + + private: + std::vector<std::pair<uint64_t, int>> queued_writes_; + size_t total_outstanding_bits_ = 0; +}; + +void PackedData::Write(uint64_t val, int num_bits) { + queued_writes_.push_back(std::make_pair(val, num_bits)); + total_outstanding_bits_ += num_bits; +} + +void PackedData::WriteBool(bool val) { + Write(val, 1); +} + +std::vector<uint8_t> PackedData::Flush() { + std::vector<uint8_t> ret; + uint8_t curr_byte = 0; + int rem_bits_in_byte = 8; + for (auto queued_write : queued_writes_) { + uint64_t val = queued_write.first; + int outstanding_bits = queued_write.second; + while (outstanding_bits) { + if (rem_bits_in_byte >= outstanding_bits) { + curr_byte |= val << (rem_bits_in_byte - outstanding_bits); + rem_bits_in_byte -= outstanding_bits; + outstanding_bits = 0; + } else { + curr_byte |= (val >> (outstanding_bits - rem_bits_in_byte)) & + ((1 << rem_bits_in_byte) - 1); + outstanding_bits -= rem_bits_in_byte; + rem_bits_in_byte = 0; + } + if (!rem_bits_in_byte) { + ret.push_back(curr_byte); + curr_byte = 0; + rem_bits_in_byte = 8; + } + } + } + + if (rem_bits_in_byte != 8) { + ret.push_back(curr_byte); + } + + queued_writes_.clear(); + total_outstanding_bits_ = 0; + + return ret; +} + +// See section 5.3.2 of the AV1 specification. +void PackedData::WriteOBUHeader(libgav1::ObuType type, + bool extension_flag, + bool has_size) { + DCHECK_LE(1, type); + DCHECK_LE(type, 8); + WriteBool(false); // forbidden bit + Write(base::checked_cast<uint64_t>(type), 4); + WriteBool(extension_flag); + WriteBool(has_size); + WriteBool(false); // reserved bit +} + +// Encode a variable length unsigned integer of up to 4 bytes. +// Most significant bit of each byte indicates if parsing should continue, and +// the 7 least significant bits hold the actual data. So the encoded length +// may be 5 bytes under some circumstances. +// This function also has a fixed size mode where we pass in a fixed size for +// the data and the function zero pads up to that size. +// See section 4.10.5 of the AV1 specification. +void PackedData::EncodeLeb128(uint32_t value, absl::optional<int> fixed_size) { + for (int i = 0; i < fixed_size.value_or(5); i++) { + uint8_t curr_byte = value & 0x7F; + value >>= 7; + if (value || fixed_size) { + curr_byte |= 0x80; + Write(curr_byte, 8); + } else { + Write(curr_byte, 8); + break; + } + } +} + +scoped_refptr<AV1Picture> GetAV1Picture( + const VaapiVideoEncoderDelegate::EncodeJob& job) { + return base::WrapRefCounted( + reinterpret_cast<AV1Picture*>(job.picture().get())); +} +} // namespace + +AV1VaapiVideoEncoderDelegate::EncodeParams::EncodeParams() + : intra_period(kKFPeriod), framerate(0), min_qp(kMinQP), max_qp(kMaxQP) {} + +AV1VaapiVideoEncoderDelegate::AV1VaapiVideoEncoderDelegate( + scoped_refptr<VaapiWrapper> vaapi_wrapper, + base::RepeatingClosure error_cb) + : VaapiVideoEncoderDelegate(std::move(vaapi_wrapper), error_cb) {} + +bool AV1VaapiVideoEncoderDelegate::Initialize( + const VideoEncodeAccelerator::Config& config, + const VaapiVideoEncoderDelegate::Config& ave_config) { + // TODO(b/267521747): Implement rate control + + if (config.output_profile != VideoCodecProfile::AV1PROFILE_PROFILE_MAIN) { + LOG(ERROR) << "Invalid profile: " << GetProfileName(config.output_profile); + return false; + } + + if (config.input_visible_size.IsEmpty()) { + LOG(ERROR) << "Input visible size cannot be empty"; + return false; + } + + visible_size_ = config.input_visible_size; + coded_size_ = gfx::Size( + base::bits::AlignUp(visible_size_.width(), kAV1AlignmentSize.width()), + base::bits::AlignUp(visible_size_.height(), kAV1AlignmentSize.height())); + + current_params_.framerate = config.initial_framerate.value_or( + VideoEncodeAccelerator::kDefaultFramerate); + + level_idx_ = ComputeLevel(coded_size_, current_params_.framerate); + if (level_idx_ < 0) { + LOG(ERROR) << "Could not compute level index"; + return false; + } + + frame_num_ = current_params_.intra_period; + + return true; +} + +AV1VaapiVideoEncoderDelegate::~AV1VaapiVideoEncoderDelegate() = default; + +bool AV1VaapiVideoEncoderDelegate::UpdateRates( + const VideoBitrateAllocation& bitrate_allocation, + uint32_t framerate) { + // TODO(b/267521747): Implement rate control + + current_params_.framerate = framerate; + + return true; +} + +gfx::Size AV1VaapiVideoEncoderDelegate::GetCodedSize() const { + return coded_size_; +} + +size_t AV1VaapiVideoEncoderDelegate::GetMaxNumOfRefFrames() const { + return libgav1::kNumReferenceFrameTypes; +} + +std::vector<gfx::Size> AV1VaapiVideoEncoderDelegate::GetSVCLayerResolutions() { + return {visible_size_}; +} + +BitstreamBufferMetadata AV1VaapiVideoEncoderDelegate::GetMetadata( + const EncodeJob& encode_job, + size_t payload_size) { + auto metadata = + VaapiVideoEncoderDelegate::GetMetadata(encode_job, payload_size); + auto picture = GetAV1Picture(encode_job); + // Revisit populating metadata.av1 if we need SVC. + metadata.qp = + base::strict_cast<int32_t>(picture->frame_header.quantizer.base_index); + + return metadata; +} + +// We produce a bitstream with the following OBUs in order: +// 1. Temporal Delimiter OBU (section 5.6) to signal new frame. +// 2. If we're transmitting keyframe, a sequence header OBU (section 5.5). +// 3. Frame OBU (section 5.10), which consists of a FrameHeader (5.9) and +// compressed data. +bool AV1VaapiVideoEncoderDelegate::PrepareEncodeJob(EncodeJob& encode_job) { + PicParamOffsets offsets; + + if (frame_num_ == current_params_.intra_period) { + encode_job.ProduceKeyframe(); + } + + if (!SubmitTemporalDelimiter(offsets)) { + LOG(ERROR) << "Failed to submit temporal delimiter"; + return false; + } + + if (encode_job.IsKeyframeRequested()) { + frame_num_ = 0; + if (!SubmitSequenceHeader(offsets)) { + return false; + } + } + + // TODO(b/267521747): Rate control buffers go here + + if (!SubmitFrame(encode_job, offsets)) { + LOG(ERROR) << "Failed to submit frame"; + return false; + } + + if (!SubmitTileGroup()) { + LOG(ERROR) << "Failed to submit file group"; + return false; + } + + frame_num_++; + + return true; +} + +void AV1VaapiVideoEncoderDelegate::BitrateControlUpdate( + const BitstreamBufferMetadata& metadata) { + // TODO(b:267521747): Implement proper bitrate control. +} + +// See section 5.6 of the AV1 specification. +bool AV1VaapiVideoEncoderDelegate::SubmitTemporalDelimiter( + PicParamOffsets& offsets) { + PackedData temporal_delimiter_obu; + temporal_delimiter_obu.WriteOBUHeader( + /*type=*/libgav1::ObuType::kObuTemporalDelimiter, + /*extension_flag=*/false, + /*has_size=*/true); + temporal_delimiter_obu.EncodeLeb128(0); + + std::vector<uint8_t> temporal_delimiter_obu_data = + temporal_delimiter_obu.Flush(); + offsets.frame_hdr_obu_size_byte_offset = temporal_delimiter_obu_data.size(); + + return SubmitPackedData(temporal_delimiter_obu_data); +} + +bool AV1VaapiVideoEncoderDelegate::SubmitSequenceHeader( + PicParamOffsets& offsets) { + if (!SubmitSequenceParam()) { + LOG(ERROR) << "Failed to submit sequence header"; + return false; + } + if (!SubmitSequenceHeaderOBU(offsets)) { + LOG(ERROR) << "Failed to submit packed sequence header"; + return false; + } + + return true; +} + +// TODO(b:274756117): Consider tuning these parameters. +bool AV1VaapiVideoEncoderDelegate::SubmitSequenceParam() { + memset(&seq_param_, 0, sizeof(VAEncSequenceParameterBufferAV1)); + + // The only known hardware that supports AV1 encoding only uses profile 0. + seq_param_.seq_profile = 0; + seq_param_.seq_level_idx = level_idx_; + seq_param_.seq_tier = 0; + seq_param_.hierarchical_flag = 0; + + // Period between keyframes. + seq_param_.intra_period = current_params_.intra_period; + // Period between an I or P frame and the next I or P frame. B frames aren't + // enabled by default, so this parameter is generally 1. + seq_param_.ip_period = 1; + + seq_param_.bits_per_second = current_params_.bitrate_allocation.GetSumBps(); + + seq_param_.order_hint_bits_minus_1 = 7; + + seq_param_.seq_fields.bits.still_picture = 0; + seq_param_.seq_fields.bits.use_128x128_superblock = 0; + seq_param_.seq_fields.bits.enable_filter_intra = 0; + seq_param_.seq_fields.bits.enable_intra_edge_filter = 0; + seq_param_.seq_fields.bits.enable_interintra_compound = 0; + seq_param_.seq_fields.bits.enable_masked_compound = 0; + seq_param_.seq_fields.bits.enable_warped_motion = 0; + seq_param_.seq_fields.bits.enable_dual_filter = 0; + seq_param_.seq_fields.bits.enable_order_hint = 1; + seq_param_.seq_fields.bits.enable_jnt_comp = 0; + seq_param_.seq_fields.bits.enable_ref_frame_mvs = 0; + seq_param_.seq_fields.bits.enable_superres = 0; + seq_param_.seq_fields.bits.enable_cdef = 1; + seq_param_.seq_fields.bits.enable_restoration = 0; + seq_param_.seq_fields.bits.bit_depth_minus8 = 0; + seq_param_.seq_fields.bits.subsampling_x = 1; + seq_param_.seq_fields.bits.subsampling_y = 1; + + return vaapi_wrapper_->SubmitBuffer(VAEncSequenceParameterBufferType, + sizeof(VAEncSequenceParameterBufferAV1), + &seq_param_); +} + +bool AV1VaapiVideoEncoderDelegate::SubmitSequenceHeaderOBU( + PicParamOffsets& offsets) { + PackedData sequence_header_obu; + + sequence_header_obu.WriteOBUHeader( + /*type=*/libgav1::ObuType::kObuSequenceHeader, + /*extension_flag=*/false, + /*has_size=*/true); + std::vector<uint8_t> packed_sequence_data = PackSequenceHeader(); + + sequence_header_obu.EncodeLeb128(packed_sequence_data.size()); + + std::vector<uint8_t> sequence_header_obu_data = sequence_header_obu.Flush(); + sequence_header_obu_data.insert( + sequence_header_obu_data.end(), + std::make_move_iterator(packed_sequence_data.begin()), + std::make_move_iterator(packed_sequence_data.end())); + + offsets.frame_hdr_obu_size_byte_offset += sequence_header_obu_data.size(); + + return SubmitPackedData(sequence_header_obu_data); +} + +// See AV1 specification 5.5.1 +std::vector<uint8_t> AV1VaapiVideoEncoderDelegate::PackSequenceHeader() const { + PackedData ret; + + ret.Write(seq_param_.seq_profile, 3); + ret.WriteBool(seq_param_.seq_fields.bits.still_picture); + ret.WriteBool(false); // Disable reduced still picture. + ret.WriteBool(false); // No timing info present. + ret.WriteBool(false); // No initial display delay. + ret.Write(0, 5); // One operating point. + ret.Write(0, 12); // No scalability information (operating_point_idc[0] = 0) + ret.Write(level_idx_, 5); + if (level_idx_ > 7) { + ret.WriteBool(seq_param_.seq_tier); + } + + ret.Write(15, 4); // Width bits minus 1 + ret.Write(15, 4); // Height bits minus 1 + ret.Write(visible_size_.width() - 1, 16); // Max frame width minus 1 + ret.Write(visible_size_.height() - 1, 16); // Max frame height minus 1 + + ret.WriteBool(false); // No frame IDs present + ret.WriteBool(seq_param_.seq_fields.bits.use_128x128_superblock); + ret.WriteBool(seq_param_.seq_fields.bits.enable_filter_intra); + ret.WriteBool(seq_param_.seq_fields.bits.enable_intra_edge_filter); + ret.WriteBool(seq_param_.seq_fields.bits.enable_interintra_compound); + ret.WriteBool(seq_param_.seq_fields.bits.enable_masked_compound); + ret.WriteBool(seq_param_.seq_fields.bits.enable_warped_motion); + ret.WriteBool(seq_param_.seq_fields.bits.enable_dual_filter); + ret.WriteBool(seq_param_.seq_fields.bits.enable_order_hint); + ret.WriteBool(seq_param_.seq_fields.bits.enable_jnt_comp); + ret.WriteBool(seq_param_.seq_fields.bits.enable_ref_frame_mvs); + ret.WriteBool(true); // Enable sequence choose screen content tools + + ret.WriteBool(false); // Disable sequence choose integer MV + ret.WriteBool(false); // Disable sequence force integer MV + + ret.Write(seq_param_.order_hint_bits_minus_1, 3); + + ret.WriteBool(seq_param_.seq_fields.bits.enable_superres); + ret.WriteBool(seq_param_.seq_fields.bits.enable_cdef); + ret.WriteBool(seq_param_.seq_fields.bits.enable_restoration); + + ret.WriteBool(false); // Disable high bit depth. + + ret.WriteBool(false); // Disable monochrome + ret.WriteBool(false); // No color description present + ret.WriteBool(false); // No color range + ret.Write(0, 2); // Chroma sample position = 0 + + ret.WriteBool(true); // Separate UV delta Q + + ret.WriteBool(false); // Disable film grain + + ret.WriteBool(true); // Trailing bit must be 1 per 5.3.4 + + return ret.Flush(); +} + +bool AV1VaapiVideoEncoderDelegate::SubmitFrame(EncodeJob& job, + PicParamOffsets& offsets) { + VAEncPictureParameterBufferAV1 pic_param{}; + scoped_refptr<AV1Picture> pic = GetAV1Picture(job); + + if (!FillPictureParam(pic_param, job, *pic)) { + LOG(ERROR) << "Failed to fill PPS"; + return false; + } + if (!SubmitFrameOBU(pic_param, offsets)) { + LOG(ERROR) << "Failed to submit packed picture header"; + return false; + } + if (!SubmitPictureParam(pic_param, offsets)) { + LOG(ERROR) << "Failed to submit picture header"; + return false; + } + + last_frame_ = pic; + + return true; +} + +// Fill the Picture Parameter struct. +// Sensible default values for most parameters taken from +// https://github.com/intel/libva-utils/blob/master/encode/av1encode.c +// TODO(b:274756117): Tune these parameters +bool AV1VaapiVideoEncoderDelegate::FillPictureParam( + VAEncPictureParameterBufferAV1& pic_param, + const EncodeJob& job, + const AV1Picture& pic) const { + const bool is_keyframe = job.IsKeyframeRequested(); + + pic_param.frame_height_minus_1 = visible_size_.height() - 1; + pic_param.frame_width_minus_1 = visible_size_.width() - 1; + + pic_param.coded_buf = job.coded_buffer_id(); + pic_param.reconstructed_frame = reinterpret_cast<const VaapiAV1Picture*>(&pic) + ->reconstruct_va_surface() + ->id(); + for (int i = 0; i < libgav1::kNumReferenceFrameTypes; i++) { + pic_param.reference_frames[i] = VA_INVALID_ID; + } + for (int i = 0; i < libgav1::kNumInterReferenceFrameTypes; i++) { + pic_param.ref_frame_idx[i] = 0; + } + pic_param.hierarchical_level_plus1 = 0; + pic_param.primary_ref_frame = is_keyframe ? kPrimaryReferenceNone : 0; + + pic_param.order_hint = frame_num_ & 0xFF; + + pic_param.ref_frame_ctrl_l0.value = 0; + pic_param.ref_frame_ctrl_l1.value = 0; + + if (!is_keyframe) { + if (!last_frame_) { + LOG(ERROR) << "Tried to produce interframe but have no reference frame"; + return false; + } + // AV1 supports up to 8 reference frames, but we're only using the most + // recent frame. + pic_param.reference_frames[0] = + reinterpret_cast<VaapiAV1Picture*>(last_frame_.get()) + ->reconstruct_va_surface() + ->id(); + pic_param.ref_frame_ctrl_l0.fields.search_idx0 = + libgav1::kReferenceFrameLast; + pic_param.ref_frame_ctrl_l1.fields.search_idx0 = + libgav1::kReferenceFrameIntra; + } + + pic_param.picture_flags.bits.frame_type = + is_keyframe ? libgav1::FrameType::kFrameKey + : libgav1::FrameType::kFrameInter; + // TODO(b/275080119): Turn on error resilient mode once driver bug is fixed. + pic_param.picture_flags.bits.error_resilient_mode = 0; + pic_param.picture_flags.bits.disable_cdf_update = 0; + pic_param.picture_flags.bits.use_superres = 0; + pic_param.picture_flags.bits.allow_high_precision_mv = 0; + pic_param.picture_flags.bits.use_ref_frame_mvs = 0; + pic_param.picture_flags.bits.disable_frame_end_update_cdf = 0; + pic_param.picture_flags.bits.reduced_tx_set = 1; + pic_param.picture_flags.bits.enable_frame_obu = 1; + pic_param.picture_flags.bits.long_term_reference = 0; + pic_param.picture_flags.bits.disable_frame_recon = 0; + pic_param.picture_flags.bits.allow_intrabc = 0; + pic_param.picture_flags.bits.palette_mode_enable = 0; + + pic_param.seg_id_block_size = 0; + + pic_param.num_tile_groups_minus1 = 0; + + pic_param.temporal_id = 0; + + pic_param.filter_level[0] = 15; + pic_param.filter_level[1] = 15; + pic_param.filter_level_u = 8; + pic_param.filter_level_v = 8; + + pic_param.loop_filter_flags.bits.sharpness_level = 0; + pic_param.loop_filter_flags.bits.mode_ref_delta_enabled = 0; + pic_param.loop_filter_flags.bits.mode_ref_delta_update = 0; + + pic_param.superres_scale_denominator = 0; + + pic_param.interpolation_filter = 0; + + for (int i = 0; i < libgav1::kNumReferenceFrameTypes; i++) { + pic_param.ref_deltas[i] = 0; + } + + pic_param.mode_deltas[0] = 0; + pic_param.mode_deltas[0] = 0; + + pic_param.base_qindex = 128; // TODO(b/267521747): replace this fake value + // with real rate control logic. + pic_param.y_dc_delta_q = 0; + pic_param.u_dc_delta_q = 0; + pic_param.u_ac_delta_q = 0; + pic_param.v_dc_delta_q = 0; + pic_param.v_ac_delta_q = 0; + + pic_param.min_base_qindex = kMinQP; + pic_param.max_base_qindex = kMaxQP; + + pic_param.qmatrix_flags.bits.using_qmatrix = 0; + pic_param.qmatrix_flags.bits.qm_y = 0; + pic_param.qmatrix_flags.bits.qm_u = 0; + pic_param.qmatrix_flags.bits.qm_v = 0; + + pic_param.mode_control_flags.bits.delta_q_present = 0; + pic_param.mode_control_flags.bits.delta_q_res = 0; + pic_param.mode_control_flags.bits.delta_lf_res = 0; + pic_param.mode_control_flags.bits.delta_lf_present = 1; + pic_param.mode_control_flags.bits.delta_lf_multi = 1; + pic_param.mode_control_flags.bits.tx_mode = libgav1::TxMode::kTxModeSelect; + pic_param.mode_control_flags.bits.reference_mode = 0; + pic_param.mode_control_flags.bits.skip_mode_present = 0; + + pic_param.tile_cols = 1; + pic_param.tile_rows = 1; + + pic_param.width_in_sbs_minus_1[0] = + (coded_size_.width() / kAV1AlignmentSize.width()) - 1; + pic_param.height_in_sbs_minus_1[0] = + (coded_size_.height() / kAV1AlignmentSize.height()) - 1; + + pic_param.context_update_tile_id = 0; + + pic_param.cdef_damping_minus_3 = 5 - 3; + pic_param.cdef_bits = 3; + for (size_t i = 0; i < ARRAY_SIZE(current_params_.cdef_y_pri_strength); i++) { + pic_param.cdef_y_strengths[i] = + current_params_.cdef_y_pri_strength[i] * kCDEFStrengthDivisor + + current_params_.cdef_y_sec_strength[i]; + pic_param.cdef_uv_strengths[i] = + current_params_.cdef_uv_pri_strength[i] * kCDEFStrengthDivisor + + current_params_.cdef_uv_sec_strength[i]; + } + + pic_param.loop_restoration_flags.bits.yframe_restoration_type = 0; + pic_param.loop_restoration_flags.bits.cbframe_restoration_type = 0; + pic_param.loop_restoration_flags.bits.crframe_restoration_type = 0; + pic_param.loop_restoration_flags.bits.lr_unit_shift = 0; + pic_param.loop_restoration_flags.bits.lr_uv_shift = 0; + + memset(&pic_param.wm, 0, sizeof(pic_param.wm)); + + // The following are initialized in SubmitPictureParam because we need to + // generate the rest of the bitstream to compute their value: + // bit_offset_qindex + // bit_offset_segmentation + // bit_offset_loopfilter_params + // bit_offset_cdef_params + // size_in_bits_cdef_params + // byte_offset_frame_hdr_obu_size + // size_in_bits_frame_hdr_obu + + pic_param.tile_group_obu_hdr_info.bits.obu_extension_flag = 0; + pic_param.tile_group_obu_hdr_info.bits.obu_has_size_field = 1; + pic_param.tile_group_obu_hdr_info.bits.temporal_id = 0; + pic_param.tile_group_obu_hdr_info.bits.spatial_id = 0; + + pic_param.number_skip_frames = 0; + pic_param.skip_frames_reduced_size = 0; + + return true; +} + +// See section 5.9 of the AV1 Specification +// AV1 is somewhat confusing in that there is both a standalone FrameHeader OBU, +// and a "sub-OBU" FrameHeader that's part of the Frame OBU. The former appears +// to be optional, while the latter does not. +bool AV1VaapiVideoEncoderDelegate::SubmitFrameOBU( + const VAEncPictureParameterBufferAV1& pic_param, + PicParamOffsets& offsets) { + PackedData frame_obu; + + frame_obu.WriteOBUHeader(/*type=*/libgav1::ObuType::kObuFrame, + /*extension_flag=*/false, + /*has_size=*/true); + + std::vector<uint8_t> frame_header_data = PackFrameHeader(pic_param, offsets); + + offsets.frame_hdr_obu_size_byte_offset += frame_obu.OutstandingBits() / 8; + + frame_obu.EncodeLeb128(frame_header_data.size(), 4); + + offsets.q_idx_bit_offset += frame_obu.OutstandingBits(); + offsets.segmentation_bit_offset += frame_obu.OutstandingBits(); + offsets.loop_filter_params_bit_offset += frame_obu.OutstandingBits(); + offsets.cdef_params_bit_offset += frame_obu.OutstandingBits(); + offsets.frame_hdr_obu_size_bits += frame_obu.OutstandingBits(); + + std::vector<uint8_t> frame_obu_data = frame_obu.Flush(); + frame_obu_data.insert(frame_obu_data.end(), + std::make_move_iterator(frame_header_data.begin()), + std::make_move_iterator(frame_header_data.end())); + + return SubmitPackedData(frame_obu_data); +} + +// See AV1 specification 5.9.2 +// Sensible default values for most parameters taken from +// https://github.com/intel/libva-utils/blob/master/encode/av1encode.c +std::vector<uint8_t> AV1VaapiVideoEncoderDelegate::PackFrameHeader( + const VAEncPictureParameterBufferAV1& pic_param, + PicParamOffsets& offsets) const { + PackedData ret; + libgav1::FrameType frame_type = + static_cast<libgav1::FrameType>(pic_param.picture_flags.bits.frame_type); + + ret.WriteBool(false); // Disable show existing frame + + ret.Write(frame_type, 2); // Frame type + + ret.WriteBool(true); // Enable show frame + + if (frame_type != libgav1::FrameType::kFrameKey) { + ret.WriteBool(pic_param.picture_flags.bits.error_resilient_mode); + } + + ret.Write(pic_param.picture_flags.bits.disable_cdf_update, 1); + ret.WriteBool(false); // Disable allow screen content tools + ret.WriteBool(false); // Disable frame size override flag + + ret.Write(pic_param.order_hint, 8); + + if (frame_type != libgav1::FrameType::kFrameKey) { + // TODO(b:274756117): We may want to tune the reference frames + if (!pic_param.picture_flags.bits.error_resilient_mode) { + ret.Write(0, 3); // Set primary reference frame to index 0 + } + ret.Write(1 << (libgav1::kReferenceFrameLast - 1), + libgav1::kNumReferenceFrameTypes); // Refresh frame flags for + // last frame + + if (pic_param.picture_flags.bits.error_resilient_mode) { + // Set order hint for each reference frame. + // Since we only use the last keyframe as the reference, these should + // always be 0. + ret.Write(frame_num_ - 1, 8); + for (int i = 1; i < libgav1::kNumReferenceFrameTypes; i++) { + ret.Write(0, 8); + } + } + + ret.WriteBool(false); // Disable frame reference short signaling + for (int i = 0; i < libgav1::kNumInterReferenceFrameTypes; i++) { + ret.Write(0, 3); // Set all reference frame indices to 0 + } + ret.WriteBool(false); // Render and frame size are the same + ret.WriteBool(false); // No allow high precision MV + ret.WriteBool(false); // Filter not switchable + ret.Write(0, 2); // Set interpolation filter to 0 + ret.WriteBool(false); // Motion not switchable + } else { + ret.WriteBool(false); // Render and frame size are the same + } + + ret.Write(pic_param.picture_flags.bits.disable_frame_end_update_cdf, 1); + + // Pack tile info + ret.WriteBool(true); // Uniform tile spacing + ret.WriteBool(false); // Don't increment log2 of tile cols + ret.WriteBool(false); // Don't increment log2 of tile rows + + // Pack quantization parameters. + offsets.q_idx_bit_offset = ret.OutstandingBits(); + ret.Write(pic_param.base_qindex, 8); + ret.WriteBool(false); // No DC Y delta Q + ret.WriteBool(false); // U and V delta Q is same + ret.WriteBool(false); // No DC U delta Q + ret.WriteBool(false); // No AC U delta Q + ret.WriteBool(false); // No Qmatrix + + // Pack segmentation parameters + offsets.segmentation_bit_offset = ret.OutstandingBits(); + ret.WriteBool(false); // Disable segmentation + offsets.segmentation_bit_size = + ret.OutstandingBits() - offsets.segmentation_bit_offset; + + ret.WriteBool(false); // No delta q present + + // Pack loop filter parameters + offsets.loop_filter_params_bit_offset = ret.OutstandingBits(); + ret.Write(pic_param.filter_level[0], 6); + ret.Write(pic_param.filter_level[1], 6); + ret.Write(pic_param.filter_level_u, 6); + ret.Write(pic_param.filter_level_v, 6); + ret.Write(pic_param.loop_filter_flags.bits.sharpness_level, + 3); // Set loop filter sharpness to 0 + ret.Write(pic_param.loop_filter_flags.bits.mode_ref_delta_enabled, + 1); // Disable loop filter delta + + // Pack CDEF parameters + offsets.cdef_params_bit_offset = ret.OutstandingBits(); + ret.Write(2, 2); // Set CDEF damping minus 3 to 5 - 3 + ret.Write(3, 2); // Set CDEF bits to 3 + for (size_t i = 0; i < ARRAY_SIZE(current_params_.cdef_y_pri_strength); i++) { + ret.Write(current_params_.cdef_y_pri_strength[i], 4); + ret.Write(current_params_.cdef_y_sec_strength[i], 2); + ret.Write(current_params_.cdef_uv_pri_strength[i], 4); + ret.Write(current_params_.cdef_uv_sec_strength[i], 2); + } + offsets.cdef_params_size_bits = + ret.OutstandingBits() - offsets.cdef_params_bit_offset; + + ret.WriteBool(true); // TxMode TX_MODE_SELECT + + if (frame_type != libgav1::FrameType::kFrameKey) { + ret.WriteBool(false); // Disable reference select + } + + ret.WriteBool(true); // Enabled reduced TX + + if (frame_type != libgav1::FrameType::kFrameKey) { + for (int i = libgav1::kReferenceFrameLast; + i <= libgav1::kReferenceFrameAlternate; i++) { + ret.WriteBool(false); // Set is_global[] to all zeros + } + } + + offsets.frame_hdr_obu_size_bits = ret.OutstandingBits(); + + return ret.Flush(); +} + +bool AV1VaapiVideoEncoderDelegate::SubmitPictureParam( + VAEncPictureParameterBufferAV1& pic_param, + const PicParamOffsets& offsets) { + // TODO(b/275711269): These should actually be 0 in CQP mode, but that results + // in a corrupt bitstream. + pic_param.bit_offset_qindex = offsets.q_idx_bit_offset; + pic_param.bit_offset_segmentation = offsets.segmentation_bit_offset; + pic_param.bit_offset_loopfilter_params = + offsets.loop_filter_params_bit_offset; + pic_param.bit_offset_cdef_params = offsets.cdef_params_bit_offset; + pic_param.size_in_bits_cdef_params = offsets.cdef_params_size_bits; + pic_param.byte_offset_frame_hdr_obu_size = + offsets.frame_hdr_obu_size_byte_offset; + pic_param.size_in_bits_frame_hdr_obu = offsets.frame_hdr_obu_size_bits; + + return vaapi_wrapper_->SubmitBuffer(VAEncPictureParameterBufferType, + sizeof(VAEncPictureParameterBufferAV1), + &pic_param); +} + +bool AV1VaapiVideoEncoderDelegate::SubmitTileGroup() { + VAEncTileGroupBufferAV1 tile_group_buffer{}; + + return vaapi_wrapper_->SubmitBuffer(VAEncSliceParameterBufferType, + sizeof(VAEncTileGroupBufferAV1), + &tile_group_buffer); +} + +bool AV1VaapiVideoEncoderDelegate::SubmitPackedData( + const std::vector<uint8_t>& data) { + VAEncPackedHeaderParameterBuffer packed_header_param_buffer; + + packed_header_param_buffer.type = VAEncPackedHeaderPicture; + packed_header_param_buffer.bit_length = data.size() * 8; + packed_header_param_buffer.has_emulation_bytes = 0; + + return vaapi_wrapper_->SubmitBuffers( + {{VAEncPackedHeaderParameterBufferType, + sizeof(VAEncPackedHeaderParameterBuffer), &packed_header_param_buffer}, + {VAEncPackedHeaderDataBufferType, data.size(), data.data()}}); +} + +} // namespace media
diff --git a/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.h b/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.h new file mode 100644 index 0000000..51c463f7 --- /dev/null +++ b/media/gpu/vaapi/av1_vaapi_video_encoder_delegate.h
@@ -0,0 +1,104 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_GPU_VAAPI_AV1_VAAPI_VIDEO_ENCODER_DELEGATE_H_ +#define MEDIA_GPU_VAAPI_AV1_VAAPI_VIDEO_ENCODER_DELEGATE_H_ + +#include <vector> + +#include "media/base/video_bitrate_allocation.h" +#include "media/gpu/av1_picture.h" +#include "media/gpu/vaapi/vaapi_video_encoder_delegate.h" + +namespace media { + +class AV1VaapiVideoEncoderDelegate : public VaapiVideoEncoderDelegate { + public: + struct EncodeParams { + EncodeParams(); + + size_t intra_period = 0; // Period between keyframes + VideoBitrateAllocation bitrate_allocation; + uint32_t framerate = 0; + uint8_t min_qp = 0; + uint8_t max_qp = 0; + // Sensible default values for CDEF taken from + // https://github.com/intel/libva-utils/blob/master/encode/av1encode.c + // TODO: we may want to tune these parameters. + uint8_t cdef_y_pri_strength[8] = {9, 12, 0, 6, 2, 4, 1, 2}; + uint8_t cdef_y_sec_strength[8] = {0, 2, 0, 0, 0, 1, 0, 1}; + uint8_t cdef_uv_pri_strength[8] = {9, 12, 0, 6, 2, 4, 1, 2}; + uint8_t cdef_uv_sec_strength[8] = {0, 2, 0, 0, 0, 1, 0, 1}; + }; + + struct PicParamOffsets { + uint32_t q_idx_bit_offset = 0; + uint32_t segmentation_bit_offset = 0; + uint32_t segmentation_bit_size = 0; + uint32_t loop_filter_params_bit_offset = 0; + uint32_t frame_hdr_obu_size_bits = 0; + uint32_t frame_hdr_obu_size_byte_offset = 0; // Tell the driver where to + // put the frame size + uint32_t uncompressed_hdr_byte_offset = 0; + uint32_t cdef_params_bit_offset = 0; + uint32_t cdef_params_size_bits = 0; + }; + + AV1VaapiVideoEncoderDelegate(scoped_refptr<VaapiWrapper> vaapi_wrapper, + base::RepeatingClosure error_cb); + + AV1VaapiVideoEncoderDelegate(const AV1VaapiVideoEncoderDelegate&) = delete; + AV1VaapiVideoEncoderDelegate& operator=(const AV1VaapiVideoEncoderDelegate&) = + delete; + + ~AV1VaapiVideoEncoderDelegate() override; + + // VaapiVideoEncoderDelegate implementation + bool Initialize(const VideoEncodeAccelerator::Config& config, + const VaapiVideoEncoderDelegate::Config& ave_config) override; + bool UpdateRates(const VideoBitrateAllocation& bitrate_allocation, + uint32_t framerate) override; + gfx::Size GetCodedSize() const override; + size_t GetMaxNumOfRefFrames() const override; + std::vector<gfx::Size> GetSVCLayerResolutions() override; + + private: + BitstreamBufferMetadata GetMetadata(const EncodeJob& encode_job, + size_t payload_size) override; + bool PrepareEncodeJob(EncodeJob& encode_job) override; + void BitrateControlUpdate(const BitstreamBufferMetadata& metadata) override; + + bool SubmitTemporalDelimiter(PicParamOffsets& offsets); + bool SubmitSequenceHeader(PicParamOffsets& offsets); + bool SubmitSequenceParam(); + bool SubmitSequenceHeaderOBU(PicParamOffsets& offsets); + std::vector<uint8_t> PackSequenceHeader() const; + bool SubmitFrame(EncodeJob& job, PicParamOffsets& offsets); + bool FillPictureParam(VAEncPictureParameterBufferAV1& pic_param, + const EncodeJob& job, + const AV1Picture& pic) const; + bool SubmitFrameOBU(const VAEncPictureParameterBufferAV1& pic_param, + PicParamOffsets& offsets); + std::vector<uint8_t> PackFrameHeader( + const VAEncPictureParameterBufferAV1& pic_param, + PicParamOffsets& offsets) const; + bool SubmitPictureParam(VAEncPictureParameterBufferAV1& pic_param, + const PicParamOffsets& offsets); + bool SubmitTileGroup(); + bool SubmitPackedData(const std::vector<uint8_t>& data); + + int level_idx_; + uint64_t frame_num_ = 0; + EncodeParams current_params_; + gfx::Size visible_size_; + gfx::Size coded_size_; + // TODO(b:274756117): In tuning this encoder, we may decide we want multiple + // reference frames, not just the most recent. + scoped_refptr<AV1Picture> last_frame_ = nullptr; + VAEncSequenceParameterBufferAV1 seq_param_; +}; + +} // namespace media + +#endif // MEDIA_GPU_VAAPI_AV1_VAAPI_VIDEO_ENCODER_DELEGATE_H_
diff --git a/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.cc b/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.cc index d180f83..dd0c5daa 100644 --- a/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.cc +++ b/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.cc
@@ -1146,11 +1146,19 @@ media::SupportedVideoDecoderConfig>:: Read(media::stable::mojom::SupportedVideoDecoderConfigDataView input, media::SupportedVideoDecoderConfig* output) { - if (!input.ReadProfileMin(&output->profile_min)) + if (!input.ReadProfileMin(&output->profile_min) || + output->profile_min == media::VIDEO_CODEC_PROFILE_UNKNOWN) { return false; + } - if (!input.ReadProfileMax(&output->profile_max)) + if (!input.ReadProfileMax(&output->profile_max) || + output->profile_max == media::VIDEO_CODEC_PROFILE_UNKNOWN) { return false; + } + + if (output->profile_max < output->profile_min) { + return false; + } if (!input.ReadCodedSizeMin(&output->coded_size_min)) return false; @@ -1158,6 +1166,11 @@ if (!input.ReadCodedSizeMax(&output->coded_size_max)) return false; + if (output->coded_size_max.width() <= output->coded_size_min.width() || + output->coded_size_max.height() <= output->coded_size_min.height()) { + return false; + } + if (input.require_encrypted() && !input.allow_encrypted()) { // Inconsistent information. return false;
diff --git a/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits_unittest.cc b/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits_unittest.cc index 94e4fa1..d2bff28 100644 --- a/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits_unittest.cc +++ b/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits_unittest.cc
@@ -69,4 +69,160 @@ serialized_decoder_buffer, &deserialized_decoder_buffer)); } +TEST(StableVideoDecoderTypesMojomTraitsTest, ValidSupportedVideoDecoderConfig) { + stable::mojom::SupportedVideoDecoderConfigPtr + mojom_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::New(); + mojom_supported_video_decoder_config->profile_min = + VideoCodecProfile::AV1PROFILE_MIN; + mojom_supported_video_decoder_config->profile_max = + VideoCodecProfile::AV1PROFILE_MAX; + mojom_supported_video_decoder_config->coded_size_min = gfx::Size(16, 32); + mojom_supported_video_decoder_config->coded_size_max = gfx::Size(1280, 720); + mojom_supported_video_decoder_config->allow_encrypted = true; + mojom_supported_video_decoder_config->require_encrypted = false; + + std::vector<uint8_t> serialized_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::Serialize( + &mojom_supported_video_decoder_config); + + SupportedVideoDecoderConfig deserialized_supported_video_decoder_config; + ASSERT_TRUE(stable::mojom::SupportedVideoDecoderConfig::Deserialize( + serialized_supported_video_decoder_config, + &deserialized_supported_video_decoder_config)); + + EXPECT_EQ(deserialized_supported_video_decoder_config.profile_min, + mojom_supported_video_decoder_config->profile_min); + EXPECT_EQ(deserialized_supported_video_decoder_config.profile_max, + mojom_supported_video_decoder_config->profile_max); + EXPECT_EQ(deserialized_supported_video_decoder_config.coded_size_min, + mojom_supported_video_decoder_config->coded_size_min); + EXPECT_EQ(deserialized_supported_video_decoder_config.coded_size_max, + mojom_supported_video_decoder_config->coded_size_max); + EXPECT_EQ(deserialized_supported_video_decoder_config.allow_encrypted, + mojom_supported_video_decoder_config->allow_encrypted); + EXPECT_EQ(deserialized_supported_video_decoder_config.require_encrypted, + mojom_supported_video_decoder_config->require_encrypted); +} + +TEST(StableVideoDecoderTypesMojomTraitsTest, + SupportedVideoConfigWithUnknownMinProfile) { + stable::mojom::SupportedVideoDecoderConfigPtr + mojom_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::New(); + mojom_supported_video_decoder_config->profile_min = + VideoCodecProfile::VIDEO_CODEC_PROFILE_UNKNOWN; + mojom_supported_video_decoder_config->profile_max = + VideoCodecProfile::AV1PROFILE_MAX; + mojom_supported_video_decoder_config->coded_size_min = gfx::Size(16, 32); + mojom_supported_video_decoder_config->coded_size_max = gfx::Size(1280, 720); + mojom_supported_video_decoder_config->allow_encrypted = true; + mojom_supported_video_decoder_config->require_encrypted = false; + + std::vector<uint8_t> serialized_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::Serialize( + &mojom_supported_video_decoder_config); + + SupportedVideoDecoderConfig deserialized_supported_video_decoder_config; + ASSERT_FALSE(stable::mojom::SupportedVideoDecoderConfig::Deserialize( + serialized_supported_video_decoder_config, + &deserialized_supported_video_decoder_config)); +} + +TEST(StableVideoDecoderTypesMojomTraitsTest, + SupportedVideoConfigWithUnknownMaxProfile) { + stable::mojom::SupportedVideoDecoderConfigPtr + mojom_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::New(); + mojom_supported_video_decoder_config->profile_min = + VideoCodecProfile::AV1PROFILE_MIN; + mojom_supported_video_decoder_config->profile_max = + VideoCodecProfile::VIDEO_CODEC_PROFILE_UNKNOWN; + mojom_supported_video_decoder_config->coded_size_min = gfx::Size(16, 32); + mojom_supported_video_decoder_config->coded_size_max = gfx::Size(1280, 720); + mojom_supported_video_decoder_config->allow_encrypted = true; + mojom_supported_video_decoder_config->require_encrypted = false; + + std::vector<uint8_t> serialized_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::Serialize( + &mojom_supported_video_decoder_config); + + SupportedVideoDecoderConfig deserialized_supported_video_decoder_config; + ASSERT_FALSE(stable::mojom::SupportedVideoDecoderConfig::Deserialize( + serialized_supported_video_decoder_config, + &deserialized_supported_video_decoder_config)); +} + +TEST(StableVideoDecoderTypesMojomTraitsTest, + SupportedVideoConfigWithMaxProfileLessThanMinProfile) { + stable::mojom::SupportedVideoDecoderConfigPtr + mojom_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::New(); + mojom_supported_video_decoder_config->profile_min = + VideoCodecProfile::AV1PROFILE_MAX; + mojom_supported_video_decoder_config->profile_max = + VideoCodecProfile::AV1PROFILE_MIN; + mojom_supported_video_decoder_config->coded_size_min = gfx::Size(16, 32); + mojom_supported_video_decoder_config->coded_size_max = gfx::Size(1280, 720); + mojom_supported_video_decoder_config->allow_encrypted = true; + mojom_supported_video_decoder_config->require_encrypted = false; + + std::vector<uint8_t> serialized_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::Serialize( + &mojom_supported_video_decoder_config); + + SupportedVideoDecoderConfig deserialized_supported_video_decoder_config; + ASSERT_FALSE(stable::mojom::SupportedVideoDecoderConfig::Deserialize( + serialized_supported_video_decoder_config, + &deserialized_supported_video_decoder_config)); +} + +TEST(StableVideoDecoderTypesMojomTraitsTest, + SupportedVideoConfigWithMaxCodedSizeLessThanMinCodedSize) { + stable::mojom::SupportedVideoDecoderConfigPtr + mojom_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::New(); + mojom_supported_video_decoder_config->profile_min = + VideoCodecProfile::AV1PROFILE_MIN; + mojom_supported_video_decoder_config->profile_max = + VideoCodecProfile::AV1PROFILE_MAX; + mojom_supported_video_decoder_config->coded_size_min = gfx::Size(1280, 720); + mojom_supported_video_decoder_config->coded_size_max = gfx::Size(16, 32); + mojom_supported_video_decoder_config->allow_encrypted = true; + mojom_supported_video_decoder_config->require_encrypted = false; + + std::vector<uint8_t> serialized_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::Serialize( + &mojom_supported_video_decoder_config); + + SupportedVideoDecoderConfig deserialized_supported_video_decoder_config; + ASSERT_FALSE(stable::mojom::SupportedVideoDecoderConfig::Deserialize( + serialized_supported_video_decoder_config, + &deserialized_supported_video_decoder_config)); +} + +TEST(StableVideoDecoderTypesMojomTraitsTest, + SupportedVideoDecoderConfigWithInconsistentEncryptionFields) { + stable::mojom::SupportedVideoDecoderConfigPtr + mojom_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::New(); + mojom_supported_video_decoder_config->profile_min = + VideoCodecProfile::AV1PROFILE_MIN; + mojom_supported_video_decoder_config->profile_max = + VideoCodecProfile::AV1PROFILE_MAX; + mojom_supported_video_decoder_config->coded_size_min = gfx::Size(16, 32); + mojom_supported_video_decoder_config->coded_size_max = gfx::Size(1280, 720); + mojom_supported_video_decoder_config->allow_encrypted = false; + mojom_supported_video_decoder_config->require_encrypted = true; + + std::vector<uint8_t> serialized_supported_video_decoder_config = + stable::mojom::SupportedVideoDecoderConfig::Serialize( + &mojom_supported_video_decoder_config); + + SupportedVideoDecoderConfig deserialized_supported_video_decoder_config; + ASSERT_FALSE(stable::mojom::SupportedVideoDecoderConfig::Deserialize( + serialized_supported_video_decoder_config, + &deserialized_supported_video_decoder_config)); +} + } // namespace media
diff --git a/media/renderers/video_frame_yuv_mailboxes_holder.cc b/media/renderers/video_frame_yuv_mailboxes_holder.cc index cba9e3e..67e80ac 100644 --- a/media/renderers/video_frame_yuv_mailboxes_holder.cc +++ b/media/renderers/video_frame_yuv_mailboxes_holder.cc
@@ -162,9 +162,10 @@ SkYUVAPixmaps::DataType::kUnorm8, num_channels); SkImageInfo info = SkImageInfo::Make(plane_sizes_[plane], color_type, kUnknown_SkAlphaType); - ri->WritePixels(holders_[plane].mailbox, /*dst_x_offset=*/0, - /*dst_y_offset=*/0, /*dst_plane_index=*/0, GL_TEXTURE_2D, - video_frame->stride(plane), info, video_frame->data(plane)); + ri->WritePixels( + holders_[plane].mailbox, /*dst_x_offset=*/0, + /*dst_y_offset=*/0, /*dst_plane_index=*/0, GL_TEXTURE_2D, + SkPixmap(info, video_frame->data(plane), video_frame->stride(plane))); mailboxes[plane] = holders_[plane].mailbox; } }
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index d245fe5..f177620 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: 2023-04-05 12:54 UTC +# Last updated: 2023-04-06 12:53 UTC PinsListTimestamp -1680699281 +1680785634 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/ppapi/proxy/resource_message_test_sink.cc b/ppapi/proxy/resource_message_test_sink.cc index ef56af7..8e5ab061 100644 --- a/ppapi/proxy/resource_message_test_sink.cc +++ b/ppapi/proxy/resource_message_test_sink.cc
@@ -49,8 +49,8 @@ int message_id = 0; std::unique_ptr<IPC::MessageReplyDeserializer> reply_deserializer; if (msg->is_sync()) { - reply_deserializer.reset( - static_cast<IPC::SyncMessage*>(msg)->GetReplyDeserializer()); + reply_deserializer = + static_cast<IPC::SyncMessage*>(msg)->TakeReplyDeserializer(); message_id = IPC::SyncMessage::GetMessageId(*msg); } bool result = IPC::TestSink::Send(msg); // Deletes |msg|.
diff --git a/printing/printing_context_linux.cc b/printing/printing_context_linux.cc index 63af3dd9..4f219a5d 100644 --- a/printing/printing_context_linux.cc +++ b/printing/printing_context_linux.cc
@@ -142,7 +142,9 @@ if (abort_printing_) return mojom::ResultCode::kCanceled; DCHECK(in_print_job_); - DCHECK(print_dialog_); + if (!print_dialog_) { + return mojom::ResultCode::kFailed; + } // TODO(crbug.com/1252685) Plumb error code back from // `PrintDialogLinuxInterface`. print_dialog_->PrintDocument(metafile, document_name_);
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc index 014767e..71eade24 100644 --- a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc +++ b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
@@ -203,7 +203,7 @@ #endif // BUILDFLAG(IS_ANDROID) }, Allow()) -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_ANDROID) .Cases({PR_SET_VMA}, If(arg == PR_SET_VMA_ANON_NAME, Allow()).Else(CrashSIGSYSPrctl())) #endif
diff --git a/sandbox/linux/system_headers/linux_prctl.h b/sandbox/linux/system_headers/linux_prctl.h index bf4971c..c08cee91 100644 --- a/sandbox/linux/system_headers/linux_prctl.h +++ b/sandbox/linux/system_headers/linux_prctl.h
@@ -15,19 +15,14 @@ #define PR_SET_TIMERSLACK 29 #endif -// The PR_SET_VMA* symbols are originally from +#if BUILDFLAG(IS_ANDROID) + // https://android.googlesource.com/platform/bionic/+/lollipop-release/libc/private/bionic_prctl.h -// and were subsequently added to mainline Linux in Jan 2022. -// -// We conditionally define these symbols here to support older -// GNU/Linux operating systems that may not have these symbols yet. #if !defined(PR_SET_VMA) #define PR_SET_VMA 0x53564d41 #endif -#if !defined(PR_SET_VMA_ANON_NAME) -#define PR_SET_VMA_ANON_NAME 0 -#endif +#endif // BUILDFLAG(IS_ANDROID) #if !defined(PR_SET_PTRACER) #define PR_SET_PTRACER 0x59616d61
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index ee2fe0b..3421c16 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -6150,6 +6150,112 @@ "14c18", "--xctest" ], + "isolate_name": "angle_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "angle_unittests iPad Pro (12.9-inch) (3rd generation) 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/", + "use_isolated_scripts_api": true, + "variant_id": "iPad Pro (12.9-inch) (3rd generation) 16.2" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "angle_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "angle_unittests iPhone X 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/", + "use_isolated_scripts_api": true, + "variant_id": "iPhone X 16.2" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch) (3rd generation)", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], "isolate_name": "base_unittests", "merge": { "args": [], @@ -6982,6 +7088,214 @@ "14c18", "--xctest" ], + "isolate_name": "capture_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "capture_unittests iPad Pro (12.9-inch) (3rd generation) 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://media/capture:capture_unittests/", + "variant_id": "iPad Pro (12.9-inch) (3rd generation) 16.2" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "capture_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "capture_unittests iPhone X 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://media/capture:capture_unittests/", + "variant_id": "iPhone X 16.2" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch) (3rd generation)", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "cast_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "cast_unittests iPad Pro (12.9-inch) (3rd generation) 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://media/cast:cast_unittests/", + "variant_id": "iPad Pro (12.9-inch) (3rd generation) 16.2" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "cast_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "cast_unittests iPhone X 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://media/cast:cast_unittests/", + "variant_id": "iPhone X 16.2" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch) (3rd generation)", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], "isolate_name": "cc_unittests", "merge": { "args": [], @@ -7710,6 +8024,110 @@ "14c18", "--xctest" ], + "isolate_name": "events_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "events_unittests iPad Pro (12.9-inch) (3rd generation) 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://ui/events:events_unittests/", + "variant_id": "iPad Pro (12.9-inch) (3rd generation) 16.2" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "events_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "events_unittests iPhone X 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://ui/events:events_unittests/", + "variant_id": "iPhone X 16.2" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch) (3rd generation)", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], "isolate_name": "gcm_unit_tests", "merge": { "args": [], @@ -7918,6 +8336,110 @@ "14c18", "--xctest" ], + "isolate_name": "gin_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gin_unittests iPad Pro (12.9-inch) (3rd generation) 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://gin:gin_unittests/", + "variant_id": "iPad Pro (12.9-inch) (3rd generation) 16.2" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "gin_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "gin_unittests iPhone X 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://gin:gin_unittests/", + "variant_id": "iPhone X 16.2" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch) (3rd generation)", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], "isolate_name": "gl_unittests", "merge": { "args": [], @@ -8334,6 +8856,110 @@ "14c18", "--xctest" ], + "isolate_name": "ipc_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ipc_tests iPad Pro (12.9-inch) (3rd generation) 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://ipc:ipc_tests/", + "variant_id": "iPad Pro (12.9-inch) (3rd generation) 16.2" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "ipc_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "ipc_tests iPhone X 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://ipc:ipc_tests/", + "variant_id": "iPhone X 16.2" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch) (3rd generation)", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], "isolate_name": "latency_unittests", "merge": { "args": [], @@ -9064,6 +9690,214 @@ "14c18", "--xctest" ], + "isolate_name": "perfetto_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "perfetto_unittests iPad Pro (12.9-inch) (3rd generation) 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/", + "variant_id": "iPad Pro (12.9-inch) (3rd generation) 16.2" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "perfetto_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "perfetto_unittests iPhone X 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/", + "variant_id": "iPhone X 16.2" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch) (3rd generation)", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "services_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "services_unittests iPad Pro (12.9-inch) (3rd generation) 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://services:services_unittests/", + "variant_id": "iPad Pro (12.9-inch) (3rd generation) 16.2" + }, + { + "args": [ + "--platform", + "iPhone X", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], + "isolate_name": "services_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "services_unittests iPhone X 16.2", + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "cipd_packages": [ + { + "cipd_package": "infra/tools/mac_toolchain/${platform}", + "location": ".", + "revision": "git_revision:5468d28877d7106d8ab4f7e23b784578ffc86aff" + } + ], + "dimension_sets": [ + { + "cpu": "arm64", + "os": "Mac-12" + } + ], + "named_caches": [ + { + "name": "xcode_ios_14c18", + "path": "Xcode.app" + }, + { + "name": "runtime_ios_16_2", + "path": "Runtime-ios-16.2" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://services:services_unittests/", + "variant_id": "iPhone X 16.2" + }, + { + "args": [ + "--platform", + "iPad Pro (12.9-inch) (3rd generation)", + "--version", + "16.2", + "--out-dir", + "${ISOLATED_OUTDIR}", + "--xcode-build-version", + "14c18", + "--xctest" + ], "isolate_name": "shell_dialogs_unittests", "merge": { "args": [],
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 3ab36234f..b0112935a 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -3764,6 +3764,9 @@ 'ios_blink_tests': { 'absl_hardening_tests': {}, + 'angle_unittests': { + 'use_isolated_scripts_api': True, + }, 'base_unittests': {}, 'blink_common_unittests': {}, 'blink_fuzzer_unittests': {}, @@ -3772,6 +3775,8 @@ 'blink_unittests': {}, 'boringssl_crypto_tests': {}, 'boringssl_ssl_tests': {}, + 'capture_unittests': {}, + 'cast_unittests': {}, 'cc_unittests': {}, 'color_unittests': {}, 'content_unittests': {}, @@ -3779,12 +3784,15 @@ 'crypto_unittests': {}, 'device_unittests': {}, 'display_unittests': {}, + 'events_unittests': {}, 'gcm_unit_tests': {}, 'gfx_unittests': {}, + 'gin_unittests': {}, 'gl_unittests': {}, 'google_apis_unittests': {}, 'gpu_unittests': {}, 'gwp_asan_unittests': {}, + 'ipc_tests': {}, 'latency_unittests': {}, 'libjingle_xmpp_unittests': {}, 'liburlpattern_unittests': {}, @@ -3796,6 +3804,8 @@ '--gtest_filter=-*WebSocket*', ], }, + 'perfetto_unittests': {}, + 'services_unittests': {}, 'shell_dialogs_unittests': {}, 'skia_unittests': {}, 'sql_unittests': {},
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 2cfcc77..0a02923 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -6106,11 +6106,11 @@ ], "experiments": [ { - "name": "Enabled_20230322", + "name": "Enabled_20230406", "params": { "prob": "0.05", "survey_cycle_length": "60", - "survey_start_date_ms": "1679486400000", + "survey_start_date_ms": "1681214400000", "trigger_id": "askDPDDTd0jBnuKU19R0RihHsFy6" }, "enable_features": [ @@ -7837,6 +7837,28 @@ ] } ], + "MainRepaintScrollPrefersNewContent": [ + { + "platforms": [ + "android", + "android_weblayer", + "chromeos", + "chromeos_lacros", + "fuchsia", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "MainRepaintScrollPrefersNewContent" + ] + } + ] + } + ], "MainThreadCompositingPriority": [ { "platforms": [
diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn index 5aed432..3002cdbad7 100644 --- a/third_party/android_deps/BUILD.gn +++ b/third_party/android_deps/BUILD.gn
@@ -1450,7 +1450,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_jetbrains_kotlin_kotlin_stdlib_jdk7_java") { - jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/kotlin-stdlib-jdk7-1.8.0.jar" + jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/kotlin-stdlib-jdk7-1.8.20.jar" output_name = "org_jetbrains_kotlin_kotlin_stdlib_jdk7" supports_android = true deps = [ "//third_party/kotlin_stdlib:kotlin_stdlib_java" ] @@ -1458,7 +1458,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_jetbrains_kotlin_kotlin_stdlib_jdk8_java") { - jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/kotlin-stdlib-jdk8-1.8.0.jar" + jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/kotlin-stdlib-jdk8-1.8.20.jar" output_name = "org_jetbrains_kotlin_kotlin_stdlib_jdk8" supports_android = true deps = [ @@ -1469,7 +1469,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_jetbrains_kotlinx_kotlinx_coroutines_android_java") { - jar_path = "libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/kotlinx-coroutines-android-1.6.1.jar" + jar_path = "libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/kotlinx-coroutines-android-1.6.4.jar" output_name = "org_jetbrains_kotlinx_kotlinx_coroutines_android" supports_android = true deps = [ @@ -1481,7 +1481,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_java") { - jar_path = "libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/kotlinx-coroutines-core-jvm-1.6.1.jar" + jar_path = "libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/kotlinx-coroutines-core-jvm-1.6.4.jar" output_name = "org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm" supports_android = true deps = [
diff --git a/third_party/android_deps/build.gradle b/third_party/android_deps/build.gradle index 49c94501..5708312 100644 --- a/third_party/android_deps/build.gradle +++ b/third_party/android_deps/build.gradle
@@ -117,10 +117,10 @@ // Needed by androidx and by doubledown targets. // Note: These have version overrides set in ChromiumDepGraph.groovy. - compile "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1" - compile "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1" - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0" - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0" + compile "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4" + compile "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4" + compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20" + compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20" // Needed by androidx.macrobenchmarks androidTestCompile "com.squareup.wire:wire-runtime-jvm:4.4.3"
diff --git a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy index 655b39483..76de876 100644 --- a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy +++ b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
@@ -252,17 +252,17 @@ licenseName: 'MIT'), // Prevent version changing ~weekly. https://crbug.com/1257197 org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm: new PropertyOverride( - resolveVersion: '1.6.1'), + resolveVersion: '1.6.4'), org_jetbrains_kotlinx_kotlinx_coroutines_android: new PropertyOverride( - resolveVersion: '1.6.1'), + resolveVersion: '1.6.4'), org_jetbrains_kotlin_kotlin_stdlib_jdk8: new PropertyOverride( - resolveVersion: '1.6.20'), + resolveVersion: '1.8.20'), org_jetbrains_kotlin_kotlin_stdlib_jdk7: new PropertyOverride( - resolveVersion: '1.6.20'), + resolveVersion: '1.8.20'), org_jetbrains_kotlin_kotlin_stdlib: new PropertyOverride( - resolveVersion: '1.7.10'), + resolveVersion: '1.8.20'), org_jetbrains_kotlin_kotlin_stdlib_common: new PropertyOverride( - resolveVersion: '1.7.10'), + resolveVersion: '1.8.20'), io_grpc_grpc_binder: new PropertyOverride( licenseUrl: 'https://www.apache.org/licenses/LICENSE-2.0.txt', licenseName: 'Apache 2.0'),
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/README.chromium b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/README.chromium index 63ff4a9..228c997 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/README.chromium +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/README.chromium
@@ -1,7 +1,7 @@ Name: Kotlin Stdlib Jdk7 Short Name: kotlin-stdlib-jdk7 URL: https://kotlinlang.org/ -Version: 1.8.0 +Version: 1.8.20 License: Apache Version 2.0 License File: LICENSE CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/cipd.yaml b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/cipd.yaml index 48d37972..0e35665 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/cipd.yaml +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@1.8.0.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@1.8.20.cr1 package: chromium/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk7 description: "Kotlin Stdlib Jdk7" data: -- file: kotlin-stdlib-jdk7-1.8.0.jar +- file: kotlin-stdlib-jdk7-1.8.20.jar
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/README.chromium b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/README.chromium index 97d58c87..791bf1f 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/README.chromium +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/README.chromium
@@ -1,7 +1,7 @@ Name: Kotlin Stdlib Jdk8 Short Name: kotlin-stdlib-jdk8 URL: https://kotlinlang.org/ -Version: 1.8.0 +Version: 1.8.20 License: Apache Version 2.0 License File: LICENSE CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/cipd.yaml b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/cipd.yaml index 0090313..036c5ed 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/cipd.yaml +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@1.8.0.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@1.8.20.cr1 package: chromium/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_jdk8 description: "Kotlin Stdlib Jdk8" data: -- file: kotlin-stdlib-jdk8-1.8.0.jar +- file: kotlin-stdlib-jdk8-1.8.20.jar
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/README.chromium b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/README.chromium index c09fa8c4..7c3cbeb 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/README.chromium +++ b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/README.chromium
@@ -1,7 +1,7 @@ Name: kotlinx-coroutines-android Short Name: kotlinx-coroutines-android URL: https://github.com/Kotlin/kotlinx.coroutines -Version: 1.6.1 +Version: 1.6.4 License: Apache Version 2.0 License File: LICENSE CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/cipd.yaml b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/cipd.yaml index f34baed..d2f0ef0 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/cipd.yaml +++ b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@1.6.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@1.6.4.cr1 package: chromium/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_android description: "kotlinx-coroutines-android" data: -- file: kotlinx-coroutines-android-1.6.1.jar +- file: kotlinx-coroutines-android-1.6.4.jar
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/README.chromium b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/README.chromium index dd9b97f..645ea89 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/README.chromium +++ b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/README.chromium
@@ -1,7 +1,7 @@ Name: kotlinx-coroutines-core Short Name: kotlinx-coroutines-core-jvm URL: https://github.com/Kotlin/kotlinx.coroutines -Version: 1.6.1 +Version: 1.6.4 License: Apache Version 2.0 License File: LICENSE CPEPrefix: unknown
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/cipd.yaml b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/cipd.yaml index 7eef617e..db868290a 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/cipd.yaml +++ b/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@1.6.1.cr1 +# cipd create --pkg-def cipd.yaml -tag version:2@1.6.4.cr1 package: chromium/third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm description: "kotlinx-coroutines-core" data: -- file: kotlinx-coroutines-core-jvm-1.6.1.jar +- file: kotlinx-coroutines-core-jvm-1.6.4.jar
diff --git a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom index 0346e8c..ca73cc1 100644 --- a/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom +++ b/third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom
@@ -3879,6 +3879,7 @@ kGamepadTouchSurfaceId = 4538, kGamepadTouchPosition = 4539, kGamepadTouchSurfaceDimension = 4540, + kSandboxViaFencedFrame = 4541, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/strings/translations/blink_strings_th.xtb b/third_party/blink/public/strings/translations/blink_strings_th.xtb index 62e840a..0d9e2ad 100644 --- a/third_party/blink/public/strings/translations/blink_strings_th.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_th.xtb
@@ -112,7 +112,7 @@ <translation id="6310801910862476708">ออกจากการแสดงภาพซ้อนภาพ</translation> <translation id="6398862346408813489">แสดงแผงการเลือกเดือน</translation> <translation id="6404546809543547843">ตัวควบคุมเวลาของเสียง</translation> -<translation id="6443871981718447451">แสดงเมนูคำอธิบายภาพ</translation> +<translation id="6443871981718447451">แสดงเมนูคำบรรยายแทนเสียง</translation> <translation id="6550675742724504774">ตัวเลือก</translation> <translation id="6572309429103589720">ไวยากรณ์ไม่ถูกต้อง</translation> <translation id="658823671542763450">เข้าสู่โหมดเต็มหน้าจอ</translation>
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index ac788b7..b2c5219 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -255,7 +255,6 @@ #include "third_party/blink/renderer/core/layout/hit_test_canvas_result.h" #include "third_party/blink/renderer/core/layout/hit_test_result.h" #include "third_party/blink/renderer/core/layout/layout_embedded_content.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/ng/layout_ng_view.h" #include "third_party/blink/renderer/core/layout/text_autosizer.h" #include "third_party/blink/renderer/core/loader/anchor_element_interaction_tracker.h"
diff --git a/third_party/blink/renderer/core/dom/first_letter_pseudo_element.cc b/third_party/blink/renderer/core/dom/first_letter_pseudo_element.cc index b7305aa..14fe3f77 100644 --- a/third_party/blink/renderer/core/dom/first_letter_pseudo_element.cc +++ b/third_party/blink/renderer/core/dom/first_letter_pseudo_element.cc
@@ -31,7 +31,6 @@ #include "third_party/blink/renderer/core/dom/node_computed_style.h" #include "third_party/blink/renderer/core/layout/generated_children.h" #include "third_party/blink/renderer/core/layout/layout_object.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/layout_object_inlines.h" #include "third_party/blink/renderer/core/layout/layout_text.h" #include "third_party/blink/renderer/core/layout/layout_text_fragment.h" @@ -337,7 +336,7 @@ LayoutObject* FirstLetterPseudoElement::CreateLayoutObject( const ComputedStyle& style) { if (UNLIKELY(!style.InitialLetter().IsNormal())) { - return LayoutObjectFactory::CreateBlockFlow(*this, style); + return LayoutObject::CreateBlockFlowOrListItem(this, style); } return PseudoElement::CreateLayoutObject(style);
diff --git a/third_party/blink/renderer/core/fileapi/blob.cc b/third_party/blink/renderer/core/fileapi/blob.cc index 3ba1dfff..356c2193 100644 --- a/third_party/blink/renderer/core/fileapi/blob.cc +++ b/third_party/blink/renderer/core/fileapi/blob.cc
@@ -41,15 +41,14 @@ #include "third_party/blink/renderer/core/fetch/blob_bytes_consumer.h" #include "third_party/blink/renderer/core/fetch/body_stream_buffer.h" #include "third_party/blink/renderer/core/fileapi/file_read_type.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/core/frame/web_feature.h" #include "third_party/blink/renderer/core/url/dom_url.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" #include "third_party/blink/renderer/platform/blob/blob_url.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" -#include "third_party/blink/renderer/platform/heap/self_keep_alive.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" #include "third_party/blink/renderer/platform/wtf/functional.h" @@ -65,41 +64,36 @@ // Helper class to asynchronously read from a Blob using a FileReaderLoader. // Each client is only good for one Blob read operation. -// Each instance owns itself and will delete itself in the callbacks. // This class is not thread-safe. class BlobFileReaderClient : public GarbageCollected<BlobFileReaderClient>, - public blink::FileReaderLoaderClient { + public FileReaderAccumulator { public: BlobFileReaderClient( const scoped_refptr<BlobDataHandle> blob_data_handle, const scoped_refptr<base::SingleThreadTaskRunner> task_runner, const FileReadType read_type, ScriptPromiseResolver* resolver) - : loader_(MakeGarbageCollected<FileReaderLoader>(read_type, - this, + : loader_(MakeGarbageCollected<FileReaderLoader>(this, std::move(task_runner))), resolver_(resolver), - read_type_(read_type), - keep_alive_(this) { + read_type_(read_type) { loader_->Start(std::move(blob_data_handle)); } void Trace(Visitor* visitor) const override { visitor->Trace(loader_); visitor->Trace(resolver_); - blink::FileReaderLoaderClient::Trace(visitor); + FileReaderAccumulator::Trace(visitor); } ~BlobFileReaderClient() override = default; - void DidStartLoading() override {} - void DidReceiveData() override {} void DidFail(FileErrorCode error_code) override { + FileReaderAccumulator::DidFail(error_code); resolver_->Reject(file_error::CreateDOMException(error_code)); - keep_alive_.Clear(); + Done(); } - void DidFinishLoading() override { - FileReaderData contents = loader_->TakeContents(); + void DidFinishLoading(FileReaderData contents) override { if (read_type_ == FileReadType::kReadAsText) { String result = std::move(contents).AsText("UTF-8"); resolver_->Resolve(result); @@ -109,14 +103,18 @@ } else { NOTREACHED() << "Unknown ReadType supplied to BlobFileReaderClient"; } - keep_alive_.Clear(); + Done(); } private: + void Done() { + // FileReaderLoader holds us as a member, so clearing it will trigger our + // own garbage collection. + loader_ = nullptr; + } Member<FileReaderLoader> loader_; Member<ScriptPromiseResolver> resolver_; const FileReadType read_type_; - SelfKeepAlive<BlobFileReaderClient> keep_alive_; }; Blob::Blob(scoped_refptr<BlobDataHandle> data_handle)
diff --git a/third_party/blink/renderer/core/fileapi/build.gni b/third_party/blink/renderer/core/fileapi/build.gni index 4ab90aa..ee57332b 100644 --- a/third_party/blink/renderer/core/fileapi/build.gni +++ b/third_party/blink/renderer/core/fileapi/build.gni
@@ -18,7 +18,8 @@ "file_reader_data.h", "file_reader_loader.cc", "file_reader_loader.h", - "file_reader_loader_client.h", + "file_reader_client.cc", + "file_reader_client.h", "file_reader_sync.cc", "file_reader_sync.h", "public_url_manager.cc",
diff --git a/third_party/blink/renderer/core/fileapi/file_read_type.h b/third_party/blink/renderer/core/fileapi/file_read_type.h index 661a6a62..21f8ecd2 100644 --- a/third_party/blink/renderer/core/fileapi/file_read_type.h +++ b/third_party/blink/renderer/core/fileapi/file_read_type.h
@@ -11,8 +11,7 @@ kReadAsArrayBuffer, kReadAsBinaryString, kReadAsText, - kReadAsDataURL, - kReadByClient + kReadAsDataURL }; } // namespace blink
diff --git a/third_party/blink/renderer/core/fileapi/file_reader.cc b/third_party/blink/renderer/core/fileapi/file_reader.cc index 56b8183..9010da3a 100644 --- a/third_party/blink/renderer/core/fileapi/file_reader.cc +++ b/third_party/blink/renderer/core/fileapi/file_reader.cc
@@ -317,8 +317,7 @@ loading_state_ = kLoadingStateLoading; loader_ = MakeGarbageCollected<FileReaderLoader>( - read_type_, this, - GetExecutionContext()->GetTaskRunner(TaskType::kFileReading)); + this, GetExecutionContext()->GetTaskRunner(TaskType::kFileReading)); loader_->Start(blob_data_handle_); blob_data_handle_ = nullptr; } @@ -380,12 +379,13 @@ loading_state_ = kLoadingStateNone; } -void FileReader::DidStartLoading() { +FileErrorCode FileReader::DidStartLoading() { base::AutoReset<bool> firing_events(&still_firing_events_, true); FireEvent(event_type_names::kLoadstart); + return FileErrorCode::kOK; } -void FileReader::DidReceiveData() { +FileErrorCode FileReader::DidReceiveData() { // Fire the progress event at least every 50ms. if (!last_progress_notification_time_) { last_progress_notification_time_ = base::ElapsedTimer(); @@ -395,21 +395,21 @@ FireEvent(event_type_names::kProgress); last_progress_notification_time_ = base::ElapsedTimer(); } + return FileErrorCode::kOK; } -void FileReader::DidFinishLoading() { +void FileReader::DidFinishLoading(FileReaderData contents) { if (loading_state_ == kLoadingStateAborted) return; DCHECK_EQ(loading_state_, kLoadingStateLoading); if (read_type_ == FileReadType::kReadAsArrayBuffer) { result_ = MakeGarbageCollected<V8UnionArrayBufferOrString>( - loader_->TakeContents().AsDOMArrayBuffer()); + std::move(contents).AsDOMArrayBuffer()); } else { result_ = MakeGarbageCollected<V8UnionArrayBufferOrString>( - loader_->TakeContents().AsString(read_type_, encoding_, blob_type_)); + std::move(contents).AsString(read_type_, encoding_, blob_type_)); } - // When we set m_state to DONE below, we still need to fire // the load and loadend events. To avoid GC to collect this FileReader, we // use this separate variable to keep the wrapper of this FileReader alive. @@ -441,6 +441,7 @@ } void FileReader::DidFail(FileErrorCode error_code) { + FileReaderAccumulator::DidFail(error_code); if (loading_state_ == kLoadingStateAborted) return; @@ -488,7 +489,7 @@ visitor->Trace(result_); EventTargetWithInlineData::Trace(visitor); ExecutionContextLifecycleObserver::Trace(visitor); - FileReaderLoaderClient::Trace(visitor); + FileReaderAccumulator::Trace(visitor); } } // namespace blink
diff --git a/third_party/blink/renderer/core/fileapi/file_reader.h b/third_party/blink/renderer/core/fileapi/file_reader.h index 79c598cc..205d1ce 100644 --- a/third_party/blink/renderer/core/fileapi/file_reader.h +++ b/third_party/blink/renderer/core/fileapi/file_reader.h
@@ -36,9 +36,10 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/dom/events/event_target.h" #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" +#include "third_party/blink/renderer/core/fileapi/file_error.h" #include "third_party/blink/renderer/core/fileapi/file_read_type.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/core/probe/async_task_context.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/wtf/forward.h" @@ -54,7 +55,7 @@ class CORE_EXPORT FileReader final : public EventTargetWithInlineData, public ActiveScriptWrappable<FileReader>, public ExecutionContextLifecycleObserver, - public FileReaderLoaderClient { + public FileReaderAccumulator { DEFINE_WRAPPERTYPEINFO(); public: @@ -89,10 +90,10 @@ return ExecutionContextLifecycleObserver::GetExecutionContext(); } - // FileReaderLoaderClient - void DidStartLoading() override; - void DidReceiveData() override; - void DidFinishLoading() override; + // FileReaderClient + FileErrorCode DidStartLoading() override; + FileErrorCode DidReceiveData() override; + void DidFinishLoading(FileReaderData contents) override; void DidFail(FileErrorCode) override; DEFINE_ATTRIBUTE_EVENT_LISTENER(loadstart, kLoadstart)
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_client.cc b/third_party/blink/renderer/core/fileapi/file_reader_client.cc new file mode 100644 index 0000000..e87ea791 --- /dev/null +++ b/third_party/blink/renderer/core/fileapi/file_reader_client.cc
@@ -0,0 +1,69 @@ +// Copyright 2023 The Chromium Authors +// 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/fileapi/file_reader_client.h" +#include "third_party/blink/renderer/core/fileapi/file_read_type.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" +#include "third_party/blink/renderer/core/html/parser/text_resource_decoder.h" +#include "third_party/blink/renderer/platform/wtf/text/base64.h" +#include "third_party/blink/renderer/platform/wtf/text/string_builder.h" + +namespace blink { + +FileErrorCode FileReaderAccumulator::DidStartLoading(uint64_t size, + uint64_t total_bytes) { + bytes_loaded_ = 0; + raw_data_ = ArrayBufferContents(static_cast<unsigned>(total_bytes), 1, + ArrayBufferContents::kNotShared, + ArrayBufferContents::kDontInitialize); + if (!raw_data_.IsValid()) { + return FileErrorCode::kNotReadableErr; + } + return DidStartLoading(); +} + +FileErrorCode FileReaderAccumulator::DidReceiveData(const char* data, + unsigned data_length) { + // Fill out the buffer + if (bytes_loaded_ + data_length > raw_data_.DataLength()) { + raw_data_.Reset(); + bytes_loaded_ = 0; + return FileErrorCode::kNotReadableErr; + } + memcpy(static_cast<char*>(raw_data_.Data()) + bytes_loaded_, data, + data_length); + bytes_loaded_ += data_length; + return DidReceiveData(); +} + +void FileReaderAccumulator::DidFinishLoading() { + DCHECK_EQ(bytes_loaded_, raw_data_.DataLength()); + CHECK(raw_data_.IsValid()); + DidFinishLoading(FileReaderData(std::move(raw_data_))); +} + +void FileReaderAccumulator::DidFail(FileErrorCode) { + bytes_loaded_ = 0; + raw_data_.Reset(); +} + +std::pair<FileErrorCode, FileReaderData> SyncedFileReaderAccumulator::Load( + scoped_refptr<BlobDataHandle> handle, + scoped_refptr<base::SingleThreadTaskRunner> task_runner) { + auto* client = MakeGarbageCollected<SyncedFileReaderAccumulator>(); + auto* file_reader = + MakeGarbageCollected<FileReaderLoader>(client, std::move(task_runner)); + + file_reader->StartSync(std::move(handle)); + return {client->error_code_, std::move(client->stored_)}; +} + +void SyncedFileReaderAccumulator::DidFail(FileErrorCode error_code) { + error_code_ = error_code; +} +void SyncedFileReaderAccumulator::DidFinishLoading(FileReaderData obj) { + stored_ = std::move(obj); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_client.h b/third_party/blink/renderer/core/fileapi/file_reader_client.h new file mode 100644 index 0000000..37850a03 --- /dev/null +++ b/third_party/blink/renderer/core/fileapi/file_reader_client.h
@@ -0,0 +1,141 @@ +/* + * Copyright (C) 2010 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_CLIENT_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_CLIENT_H_ + +#include "base/task/single_thread_task_runner.h" +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/core/fileapi/file_error.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_data.h" +#include "third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.h" +#include "third_party/blink/renderer/platform/blob/blob_data.h" +#include "third_party/blink/renderer/platform/heap/garbage_collected.h" + +namespace blink { + +enum class FileErrorCode; + +// FileReaderClient is used by the FileReaderLoader to read a given blob's raw +// data. For a more convenient way to read blobs that matches the different +// FileReadType's, see FileReaderAccumulator below. +// For more information on how to read Blobs in your specific situation, see: +// https://chromium.googlesource.com/chromium/src/+/HEAD/storage/browser/blob/README.md#how-to-use-blobs-blink-accessing-reading +class CORE_EXPORT FileReaderClient : public GarbageCollectedMixin { + public: + virtual ~FileReaderClient() = default; + + // Clients must implement this method to be informed about when the loading + // actually started. + // If an error occurred while processing the data, a FileErrorCode can be + // returned. In such case, the blob's processing will end a DidFail will be + // called with the returned error. + // Clients must not make re-entrant calls to the FileReaderLoader in this + // method. + virtual FileErrorCode DidStartLoading(uint64_t total_size, + uint64_t content_size) = 0; + // Clients must implement this method to receive the blob's data. + // If an error occurred while processing the data, a FileErrorCode can be + // returned. In such case, the blob's processing will end a DidFail will be + // called with the returned error. + // Clients must not make re-entrant calls to the FileReaderLoader in this + // method. + virtual FileErrorCode DidReceiveData(const char* data, + unsigned data_length) = 0; + // Clients must implement this method to be informed about when the loading + // ended. + virtual void DidFinishLoading() = 0; + // Clients must implement this method to be informed about any failures that + // occurred. + virtual void DidFail(FileErrorCode) = 0; + + void Trace(Visitor*) const override {} +}; + +// FileReaderAccumulator helps aggregating the data received from +// FileReaderLoader. This class implements a regular FileReaderClient and +// reads the file' chunks until completion. On completion, it provides a +// convenient way to convert the received data to the FileReadType types via +// the FileReaderData class helper. +class CORE_EXPORT FileReaderAccumulator : public FileReaderClient { + public: + // Clients might implement this method if they want to know when the loading + // process started. The client can also choose the loader behaviour by + // returning whether to continue or stop the loader. + virtual FileErrorCode DidStartLoading() { return FileErrorCode::kOK; } + // Clients might implement this method if they want to know when the loader + // received some data. The client can also choose the loader behaviour by + // returning whether to continue or stop the loader. + virtual FileErrorCode DidReceiveData() { return FileErrorCode::kOK; } + // Clients must implement this method to receive the aggregated file data. + virtual void DidFinishLoading(FileReaderData) = 0; + // Clients might implement this method to known whether the loading failed. + // If this method is implemented, it is recommended to call the parent + // implementation as well for early cleanup. + void DidFail(FileErrorCode) override; + void Trace(Visitor* visitor) const override { + FileReaderClient::Trace(visitor); + } + + private: + FileErrorCode DidStartLoading(uint64_t size, uint64_t total_bytes) final; + FileErrorCode DidReceiveData(const char* data, unsigned data_length) final; + void DidFinishLoading() final; + + uint64_t bytes_loaded_ = 0; + ArrayBufferContents raw_data_; +}; + +// The class acts similar to the FileReaderAccumulator, except that it +// works synchronously. This provides a few handy methods to help wait for the +// aggregated result. +class CORE_EXPORT SyncedFileReaderAccumulator + : public GarbageCollected<SyncedFileReaderAccumulator>, + public FileReaderAccumulator { + public: + static std::pair<FileErrorCode, FileReaderData> Load( + scoped_refptr<BlobDataHandle> handle, + scoped_refptr<base::SingleThreadTaskRunner>); + + void Trace(Visitor* visitor) const override { + FileReaderAccumulator::Trace(visitor); + } + + private: + void DidFail(FileErrorCode error_code) final; + void DidFinishLoading(FileReaderData obj) final; + + FileReaderData stored_; + FileErrorCode error_code_ = FileErrorCode::kOK; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_CLIENT_H_
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_loader.cc b/third_party/blink/renderer/core/fileapi/file_reader_loader.cc index deafb74d..dab1fbd 100644 --- a/third_party/blink/renderer/core/fileapi/file_reader_loader.cc +++ b/third_party/blink/renderer/core/fileapi/file_reader_loader.cc
@@ -34,6 +34,7 @@ #include <memory> #include <utility> +#include "base/auto_reset.h" #include "base/memory/scoped_refptr.h" #include "base/numerics/safe_conversions.h" #include "base/task/single_thread_task_runner.h" @@ -42,7 +43,7 @@ #include "third_party/blink/public/platform/web_url_request.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/fileapi/blob.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/platform/blob/blob_url.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/wtf/functional.h" @@ -50,26 +51,37 @@ namespace blink { FileReaderLoader::FileReaderLoader( - FileReadType read_type, - FileReaderLoaderClient* client, + FileReaderClient* client, scoped_refptr<base::SingleThreadTaskRunner> task_runner) - : read_type_(read_type), - client_(client), + : client_(client), handle_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC, task_runner), task_runner_(std::move(task_runner)) { + CHECK(client); DCHECK(task_runner_); } FileReaderLoader::~FileReaderLoader() = default; void FileReaderLoader::Start(scoped_refptr<BlobDataHandle> blob_data) { + StartInternal(std::move(blob_data), /*is_sync=*/false); +} + +void FileReaderLoader::StartSync(scoped_refptr<BlobDataHandle> blob_data) { + StartInternal(std::move(blob_data), /*is_sync=*/true); +} + +void FileReaderLoader::StartInternal(scoped_refptr<BlobDataHandle> blob_data, + bool is_sync) { #if DCHECK_IS_ON() DCHECK(!started_loading_) << "FileReaderLoader can only be used once"; started_loading_ = true; #endif // DCHECK_IS_ON() + // This sets up the `IsSyncLoad` mechanism for the lifetime of this method. + base::AutoReset<bool> scoped_is_sync(&is_sync_, is_sync); + MojoCreateDataPipeOptions options; options.struct_size = sizeof(MojoCreateDataPipeOptions); options.flags = MOJO_CREATE_DATA_PIPE_FLAG_NONE; @@ -111,25 +123,10 @@ Cleanup(); } -FileReaderData FileReaderLoader::TakeContents() { - // Let's prevent any API misusage here. Clients are definitely not supposed to - // extract some contents in case an error occurred. For partial contents, - // clients should be using FileReadType::kReadByClient. - CHECK(raw_data_.IsValid() && error_code_ == FileErrorCode::kOK && - finished_loading_); - - return FileReaderData(std::move(raw_data_)); -} - void FileReaderLoader::Cleanup() { handle_watcher_.Cancel(); consumer_handle_.reset(); receiver_.reset(); - - // If we get any error, we do not need to keep a buffer around. - if (error_code_ != FileErrorCode::kOK) { - raw_data_.Reset(); - } } void FileReaderLoader::Failed(FileErrorCode error_code) { @@ -138,92 +135,24 @@ return; error_code_ = error_code; Cleanup(); - if (client_) - client_->DidFail(error_code_); -} - -void FileReaderLoader::OnStartLoading(uint64_t total_bytes) { - total_bytes_ = total_bytes; - - DCHECK(!raw_data_.IsValid()); - - if (read_type_ != FileReadType::kReadByClient) { - // Check that we can cast to unsigned since we have to do - // so to call ArrayBuffer's create function. - // FIXME: Support reading more than the current size limit of ArrayBuffer. - if (total_bytes > std::numeric_limits<unsigned>::max()) { - Failed(FileErrorCode::kNotReadableErr); - return; - } - - raw_data_ = ArrayBufferContents(static_cast<unsigned>(total_bytes), 1, - ArrayBufferContents::kNotShared, - ArrayBufferContents::kDontInitialize); - if (!raw_data_.IsValid()) { - Failed(FileErrorCode::kNotReadableErr); - return; - } - } - - if (client_) - client_->DidStartLoading(); -} - -void FileReaderLoader::OnReceivedData(const char* data, unsigned data_length) { - DCHECK(data); - - // Bail out if we already encountered an error. - if (error_code_ != FileErrorCode::kOK) - return; - - if (read_type_ == FileReadType::kReadByClient) { - bytes_loaded_ += data_length; - - if (client_) - client_->DidReceiveDataForClient(data, data_length); - return; - } - - // Receiving more data than expected would indicate a bug in the - // implementation of the mojom Blob interface. However there is no guarantee - // that the Blob is actually backed by a "real" blob, so to - // defend against compromised renderer processes we still need to carefully - // validate anything received. So return an error if we received too much - // data. - if (bytes_loaded_ + data_length > raw_data_.DataLength()) { - raw_data_.Reset(); - bytes_loaded_ = 0; - Failed(FileErrorCode::kNotReadableErr); - return; - } - memcpy(static_cast<char*>(raw_data_.Data()) + bytes_loaded_, data, - data_length); - bytes_loaded_ += data_length; - - if (client_) - client_->DidReceiveData(); + client_->DidFail(error_code_); } void FileReaderLoader::OnFinishLoading() { - if (read_type_ != FileReadType::kReadByClient && raw_data_.IsValid()) { - DCHECK_EQ(bytes_loaded_, raw_data_.DataLength()); - } - finished_loading_ = true; - Cleanup(); - if (client_) - client_->DidFinishLoading(); + client_->DidFinishLoading(); } void FileReaderLoader::OnCalculatedSize(uint64_t total_size, uint64_t expected_content_size) { - auto weak_this = WrapWeakPersistent(this); - OnStartLoading(expected_content_size); - // OnStartLoading calls out to our client, which could delete |this|, so bail - // out if that happened. - if (!weak_this) + total_bytes_ = expected_content_size; + + if (auto err = client_->DidStartLoading(total_size, expected_content_size); + err != FileErrorCode::kOK) { + Failed(err); return; + } if (expected_content_size == 0) { received_all_data_ = true; @@ -291,12 +220,17 @@ return; } - auto weak_this = WrapWeakPersistent(this); - OnReceivedData(static_cast<const char*>(buffer), num_bytes); - // OnReceivedData calls out to our client, which could delete |this|, so - // bail out if that happened. - if (!weak_this) + const char* data = static_cast<const char*>(buffer); + DCHECK(data); + DCHECK_EQ(error_code_, FileErrorCode::kOK); + + bytes_loaded_ += num_bytes; + + if (auto err = client_->DidReceiveData(data, num_bytes); + err != FileErrorCode::kOK) { + Failed(err); return; + } consumer_handle_->EndReadData(num_bytes); if (BytesLoaded() >= total_bytes_) {
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_loader.h b/third_party/blink/renderer/core/fileapi/file_reader_loader.h index e1284d9..8e2c0ed 100644 --- a/third_party/blink/renderer/core/fileapi/file_reader_loader.h +++ b/third_party/blink/renderer/core/fileapi/file_reader_loader.h
@@ -39,9 +39,7 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/fileapi/file_error.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_data.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/member.h" @@ -52,8 +50,7 @@ namespace blink { class BlobDataHandle; - -// Reads a Blob's content into memory. +// Reads a Blob's content and forwards it to the FileReaderClient. // // Blobs are typically stored on disk, and should be read asynchronously // whenever possible. Synchronous loading is implemented to support Web Platform @@ -67,16 +64,14 @@ public: // If client is given, do the loading asynchronously. Otherwise, load // synchronously. - FileReaderLoader(FileReadType, - FileReaderLoaderClient*, + FileReaderLoader(FileReaderClient*, scoped_refptr<base::SingleThreadTaskRunner>); ~FileReaderLoader() override; void Start(scoped_refptr<BlobDataHandle>); + void StartSync(scoped_refptr<BlobDataHandle>); void Cancel(); - FileReaderData TakeContents(); - // Returns the total bytes received. Bytes ignored by m_rawData won't be // counted. // @@ -97,14 +92,13 @@ void Trace(Visitor* visitor) const { visitor->Trace(client_); } private: + void StartInternal(scoped_refptr<BlobDataHandle>, bool is_sync); void Cleanup(); void Failed(FileErrorCode); - void OnStartLoading(uint64_t total_bytes); - void OnReceivedData(const char* data, unsigned data_length); - void OnFinishLoading(); + bool IsSyncLoad() { return is_sync_; } - bool IsSyncLoad() const { return !client_; } + void OnFinishLoading(); // BlobReaderClient: void OnCalculatedSize(uint64_t total_size, @@ -112,10 +106,7 @@ void OnComplete(int32_t status, uint64_t data_length) override; void OnDataPipeReadable(MojoResult); - FileReadType read_type_; - WeakMember<FileReaderLoaderClient> client_; - - ArrayBufferContents raw_data_; + Member<FileReaderClient> client_; bool finished_loading_ = false; uint64_t bytes_loaded_ = 0; @@ -137,6 +128,8 @@ bool started_loading_ = false; #endif // DCHECK_IS_ON() + bool is_sync_ = false; + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; };
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_loader_client.h b/third_party/blink/renderer/core/fileapi/file_reader_loader_client.h deleted file mode 100644 index dfd6a80..0000000 --- a/third_party/blink/renderer/core/fileapi/file_reader_loader_client.h +++ /dev/null
@@ -1,65 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_LOADER_CLIENT_H_ -#define THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_LOADER_CLIENT_H_ - -#include "base/notreached.h" -#include "third_party/blink/renderer/core/core_export.h" -#include "third_party/blink/renderer/platform/heap/garbage_collected.h" - -namespace blink { - -enum class FileErrorCode; - -// For more information on how to read Blobs in your specific situation, see: -// https://chromium.googlesource.com/chromium/src/+/HEAD/storage/browser/blob/README.md#accessing-reading -class CORE_EXPORT FileReaderLoaderClient : public GarbageCollectedMixin { - public: - virtual ~FileReaderLoaderClient() = default; - - virtual void DidStartLoading() = 0; - // Clients must implement this method if they are using any ReadType except - // ReadByClient. - virtual void DidReceiveData() { NOTREACHED(); } - // Clients must implement this method if they are using the ReadByClient - // ReadType. - virtual void DidReceiveDataForClient(const char* data, unsigned data_length) { - NOTREACHED(); - } - virtual void DidFinishLoading() = 0; - virtual void DidFail(FileErrorCode) = 0; - - void Trace(Visitor*) const override {} -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_LOADER_CLIENT_H_
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_sync.cc b/third_party/blink/renderer/core/fileapi/file_reader_sync.cc index f5755626..1925697 100644 --- a/third_party/blink/renderer/core/fileapi/file_reader_sync.cc +++ b/third_party/blink/renderer/core/fileapi/file_reader_sync.cc
@@ -35,9 +35,7 @@ #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/fileapi/blob.h" #include "third_party/blink/renderer/core/fileapi/file_error.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" @@ -52,26 +50,19 @@ ExceptionState& exception_state) { DCHECK(blob); - FileReaderLoader* loader = MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadAsArrayBuffer, nullptr, task_runner_); - StartLoading(*loader, *blob, exception_state); - if (loader->GetErrorCode() != FileErrorCode::kOK) { - return nullptr; - } - return loader->TakeContents().AsDOMArrayBuffer(); + absl::optional<FileReaderData> res = Load(*blob, exception_state); + return !res ? nullptr : std::move(res).value().AsDOMArrayBuffer(); } String FileReaderSync::readAsBinaryString(Blob* blob, ExceptionState& exception_state) { DCHECK(blob); - FileReaderLoader* loader = MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadAsBinaryString, nullptr, task_runner_); - StartLoading(*loader, *blob, exception_state); - if (loader->GetErrorCode() != FileErrorCode::kOK) { + absl::optional<FileReaderData> res = Load(*blob, exception_state); + if (!res) { return ""; } - return loader->TakeContents().AsBinaryString(); + return std::move(res).value().AsBinaryString(); } String FileReaderSync::readAsText(Blob* blob, @@ -79,34 +70,34 @@ ExceptionState& exception_state) { DCHECK(blob); - FileReaderLoader* loader = MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadAsText, nullptr, task_runner_); - StartLoading(*loader, *blob, exception_state); - if (loader->GetErrorCode() != FileErrorCode::kOK) { + absl::optional<FileReaderData> res = Load(*blob, exception_state); + if (!res) { return ""; } - return loader->TakeContents().AsText(encoding); + return std::move(res).value().AsText(encoding); } String FileReaderSync::readAsDataURL(Blob* blob, ExceptionState& exception_state) { DCHECK(blob); - FileReaderLoader* loader = MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadAsDataURL, nullptr, task_runner_); - StartLoading(*loader, *blob, exception_state); - if (loader->GetErrorCode() != FileErrorCode::kOK) { + absl::optional<FileReaderData> res = Load(*blob, exception_state); + if (!res) { return ""; } - return loader->TakeContents().AsDataURL(blob->type()); + return std::move(res).value().AsDataURL(blob->type()); } -void FileReaderSync::StartLoading(FileReaderLoader& loader, - const Blob& blob, - ExceptionState& exception_state) { - loader.Start(blob.GetBlobDataHandle()); - if (loader.GetErrorCode() != FileErrorCode::kOK) - file_error::ThrowDOMException(exception_state, loader.GetErrorCode()); +absl::optional<FileReaderData> FileReaderSync::Load( + const Blob& blob, + ExceptionState& exception_state) { + auto res = + SyncedFileReaderAccumulator::Load(blob.GetBlobDataHandle(), task_runner_); + if (res.first != FileErrorCode::kOK) { + file_error::ThrowDOMException(exception_state, res.first); + return absl::nullopt; + } + return std::move(res.second); } } // namespace blink
diff --git a/third_party/blink/renderer/core/fileapi/file_reader_sync.h b/third_party/blink/renderer/core/fileapi/file_reader_sync.h index 15712197..ff6f96c 100644 --- a/third_party/blink/renderer/core/fileapi/file_reader_sync.h +++ b/third_party/blink/renderer/core/fileapi/file_reader_sync.h
@@ -32,6 +32,9 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_FILEAPI_FILE_READER_SYNC_H_ #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_data.h" +#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -46,7 +49,6 @@ class DOMArrayBuffer; class ExceptionState; class ExecutionContext; -class FileReaderLoader; class FileReaderSync final : public ScriptWrappable { DEFINE_WRAPPERTYPEINFO(); @@ -71,7 +73,7 @@ } private: - void StartLoading(FileReaderLoader&, const Blob&, ExceptionState&); + absl::optional<FileReaderData> Load(const Blob&, ExceptionState&); scoped_refptr<base::SingleThreadTaskRunner> task_runner_; };
diff --git a/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.cc b/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.cc index 69e5fbc..ae0ffaa 100644 --- a/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.cc +++ b/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.cc
@@ -124,7 +124,8 @@ } // namespace HTMLFencedFrameElement::HTMLFencedFrameElement(Document& document) - : HTMLFrameOwnerElement(html_names::kFencedframeTag, document) { + : HTMLFrameOwnerElement(html_names::kFencedframeTag, document), + sandbox_(MakeGarbageCollected<HTMLIFrameElementSandbox>(this)) { DCHECK(RuntimeEnabledFeatures::FencedFramesEnabled(GetExecutionContext())); UseCounter::Count(document, WebFeature::kHTMLFencedFrameElement); StartResizeObserver(); @@ -137,6 +138,11 @@ visitor->Trace(frame_delegate_); visitor->Trace(resize_observer_); visitor->Trace(config_); + visitor->Trace(sandbox_); +} + +DOMTokenList* HTMLFencedFrameElement::sandbox() const { + return sandbox_.Get(); } void HTMLFencedFrameElement::DisconnectContentFrame() { @@ -422,6 +428,32 @@ KURL url = GetNonEmptyURLAttribute(html_names::kSrcAttr); Navigate(url); + } else if (params.name == html_names::kSandboxAttr) { + sandbox_->DidUpdateAttributeValue(params.old_value, params.new_value); + + network::mojom::blink::WebSandboxFlags current_flags = + network::mojom::blink::WebSandboxFlags::kNone; + if (!params.new_value.IsNull()) { + using network::mojom::blink::WebSandboxFlags; + WebSandboxFlags ignored_flags = + !RuntimeEnabledFeatures::StorageAccessAPIEnabled() + ? WebSandboxFlags::kStorageAccessByUserActivation + : WebSandboxFlags::kNone; + + auto parsed = network::ParseWebSandboxPolicy(sandbox_->value().Utf8(), + ignored_flags); + current_flags = parsed.flags; + if (!parsed.error_message.empty()) { + GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>( + mojom::blink::ConsoleMessageSource::kOther, + mojom::blink::ConsoleMessageLevel::kError, + WebString::FromUTF8( + "Error while parsing the 'sandbox' attribute: " + + parsed.error_message))); + } + } + SetSandboxFlags(current_flags); + UseCounter::Count(GetDocument(), WebFeature::kSandboxViaFencedFrame); } else if (params.name == html_names::kAllowAttr) { if (allow_ != params.new_value) { allow_ = params.new_value; @@ -524,6 +556,24 @@ return; } + // Cannot perform an embedder-initiated navigation in a fenced frame when the + // sandbox attribute restricts any of the mandatory unsandboxed features. + if (static_cast<int>(GetFramePolicy().sandbox_flags) & + static_cast<int>(blink::kFencedFrameMandatoryUnsandboxedFlags)) { + GetDocument().AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>( + mojom::blink::ConsoleMessageSource::kJavaScript, + mojom::blink::ConsoleMessageLevel::kWarning, + "Can't navigate the fenced frame. A sandboxed fenced frame can " + "only be navigated by its embedder when all of the following " + "flags are set: allow-same-origin, allow-forms, allow-scripts, " + "allow-popups, allow-popups-to-escape-sandbox, and " + "allow-top-navigation-by-user-activation.")); + RecordFencedFrameCreationOutcome( + FencedFrameCreationOutcome::kSandboxFlagsNotSet); + RecordFencedFrameUnsandboxedFlags(GetFramePolicy().sandbox_flags); + return; + } + UpdateContainerPolicy(); frame_delegate_->Navigate(url, embedder_shared_storage_context);
diff --git a/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.h b/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.h index b2c84f5a..14be157e 100644 --- a/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.h +++ b/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.h
@@ -12,6 +12,7 @@ #include "third_party/blink/renderer/core/dom/node.h" #include "third_party/blink/renderer/core/html/fenced_frame/fenced_frame_config.h" #include "third_party/blink/renderer/core/html/html_frame_owner_element.h" +#include "third_party/blink/renderer/core/html/html_iframe_element_sandbox.h" #include "third_party/blink/renderer/core/resize_observer/resize_observer.h" #include "third_party/blink/renderer/platform/wtf/casting.h" @@ -72,6 +73,8 @@ ~HTMLFencedFrameElement() override; void Trace(Visitor* visitor) const override; + DOMTokenList* sandbox() const; + // HTMLFrameOwnerElement overrides. void DisconnectContentFrame() override; FrameOwnerElementType OwnerType() const override { @@ -208,6 +211,7 @@ bool size_set_after_freeze_ = false; // Attributes that are modeled off of their iframe equivalents AtomicString allow_; + Member<HTMLIFrameElementSandbox> sandbox_; friend class FencedFrameMPArchDelegate; friend class FencedFrameShadowDOMDelegate;
diff --git a/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.idl b/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.idl index df32977..9b493b4 100644 --- a/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.idl +++ b/third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.idl
@@ -13,4 +13,5 @@ [CallWith=ScriptState] static boolean canLoadOpaqueURL(); // Feature Policy [CEReactions, Reflect, RuntimeEnabled=FencedFramesAPIChanges] attribute DOMString allow; + [PutForwards=value] readonly attribute DOMTokenList sandbox; };
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc index 64ef5d7b..91c2b40 100644 --- a/third_party/blink/renderer/core/html/forms/html_select_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -60,10 +60,9 @@ #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/layout/hit_test_request.h" #include "third_party/blink/renderer/core/layout/hit_test_result.h" -#include "third_party/blink/renderer/core/layout/layout_block_flow.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/layout_theme.h" #include "third_party/blink/renderer/core/layout/ng/flex/layout_ng_flexible_box.h" +#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h" #include "third_party/blink/renderer/core/page/chrome_client.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/page/spatial_navigation.h" @@ -401,7 +400,7 @@ if (UsesMenuList()) { return MakeGarbageCollected<LayoutNGFlexibleBox>(this); } - return LayoutObjectFactory::CreateBlockFlow(*this, style); + return MakeGarbageCollected<LayoutNGBlockFlow>(this); } HTMLCollection* HTMLSelectElement::selectedOptions() {
diff --git a/third_party/blink/renderer/core/html/forms/image_input_type.cc b/third_party/blink/renderer/core/html/forms/image_input_type.cc index 5887c77d..d09f745 100644 --- a/third_party/blink/renderer/core/html/forms/image_input_type.cc +++ b/third_party/blink/renderer/core/html/forms/image_input_type.cc
@@ -39,7 +39,6 @@ #include "third_party/blink/renderer/core/layout/layout_block_flow.h" #include "third_party/blink/renderer/core/layout/layout_image.h" #include "third_party/blink/renderer/core/layout/layout_inline.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" namespace blink {
diff --git a/third_party/blink/renderer/core/html/forms/slider_thumb_element.cc b/third_party/blink/renderer/core/html/forms/slider_thumb_element.cc index 8bff827fe..c4c72d8 100644 --- a/third_party/blink/renderer/core/html/forms/slider_thumb_element.cc +++ b/third_party/blink/renderer/core/html/forms/slider_thumb_element.cc
@@ -43,10 +43,9 @@ #include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h" #include "third_party/blink/renderer/core/html/shadow/shadow_element_names.h" #include "third_party/blink/renderer/core/input/event_handler.h" -#include "third_party/blink/renderer/core/layout/layout_block_flow.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/layout_theme.h" #include "third_party/blink/renderer/core/layout/ng/flex/layout_ng_flexible_box.h" +#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h" #include "ui/base/ui_base_features.h" namespace blink { @@ -74,7 +73,7 @@ LayoutObject* SliderThumbElement::CreateLayoutObject( const ComputedStyle& style) { - return LayoutObjectFactory::CreateBlockFlow(*this, style); + return MakeGarbageCollected<LayoutNGBlockFlow>(this); } bool SliderThumbElement::IsDisabledFormControl() const {
diff --git a/third_party/blink/renderer/core/html/html_details_element.cc b/third_party/blink/renderer/core/html/html_details_element.cc index 737a34a9..4e96b0c9 100644 --- a/third_party/blink/renderer/core/html/html_details_element.cc +++ b/third_party/blink/renderer/core/html/html_details_element.cc
@@ -37,8 +37,7 @@ #include "third_party/blink/renderer/core/html/html_summary_element.h" #include "third_party/blink/renderer/core/html/shadow/shadow_element_names.h" #include "third_party/blink/renderer/core/html_names.h" -#include "third_party/blink/renderer/core/layout/layout_block_flow.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" +#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" @@ -79,7 +78,7 @@ LayoutObject* HTMLDetailsElement::CreateLayoutObject( const ComputedStyle& style) { - return LayoutObjectFactory::CreateBlockFlow(*this, style); + return LayoutObject::CreateBlockFlowOrListItem(this, style); } // Creates shadow DOM:
diff --git a/third_party/blink/renderer/core/html/html_iframe_element_sandbox.cc b/third_party/blink/renderer/core/html/html_iframe_element_sandbox.cc index d9876b2..061f2ae 100644 --- a/third_party/blink/renderer/core/html/html_iframe_element_sandbox.cc +++ b/third_party/blink/renderer/core/html/html_iframe_element_sandbox.cc
@@ -4,6 +4,8 @@ #include "third_party/blink/renderer/core/html/html_iframe_element_sandbox.h" +#include "third_party/blink/renderer/core/html/fenced_frame/html_fenced_frame_element.h" +#include "third_party/blink/renderer/core/html/html_frame_owner_element.h" #include "third_party/blink/renderer/core/html/html_iframe_element.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" @@ -52,8 +54,12 @@ } // namespace -HTMLIFrameElementSandbox::HTMLIFrameElementSandbox(HTMLIFrameElement* element) - : DOMTokenList(*element, html_names::kSandboxAttr) {} +HTMLIFrameElementSandbox::HTMLIFrameElementSandbox( + HTMLFrameOwnerElement* element) + : DOMTokenList(*element, html_names::kSandboxAttr) { + DCHECK(IsA<HTMLIFrameElement>(element) || + IsA<HTMLFencedFrameElement>(element)); +} bool HTMLIFrameElementSandbox::ValidateTokenValue( const AtomicString& token_value,
diff --git a/third_party/blink/renderer/core/html/html_iframe_element_sandbox.h b/third_party/blink/renderer/core/html/html_iframe_element_sandbox.h index bc1673d..3dfefee 100644 --- a/third_party/blink/renderer/core/html/html_iframe_element_sandbox.h +++ b/third_party/blink/renderer/core/html/html_iframe_element_sandbox.h
@@ -9,11 +9,11 @@ namespace blink { -class HTMLIFrameElement; +class HTMLFrameOwnerElement; class HTMLIFrameElementSandbox final : public DOMTokenList { public: - explicit HTMLIFrameElementSandbox(HTMLIFrameElement*); + explicit HTMLIFrameElementSandbox(HTMLFrameOwnerElement*); private: bool ValidateTokenValue(const AtomicString&, ExceptionState&) const override;
diff --git a/third_party/blink/renderer/core/html/html_image_element.cc b/third_party/blink/renderer/core/html/html_image_element.cc index 99047a2..3e939b03 100644 --- a/third_party/blink/renderer/core/html/html_image_element.cc +++ b/third_party/blink/renderer/core/html/html_image_element.cc
@@ -57,7 +57,6 @@ #include "third_party/blink/renderer/core/layout/adjust_for_absolute_zoom.h" #include "third_party/blink/renderer/core/layout/layout_block_flow.h" #include "third_party/blink/renderer/core/layout/layout_image.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h" #include "third_party/blink/renderer/core/loader/resource/image_resource_content.h" #include "third_party/blink/renderer/core/media_type_names.h" @@ -468,7 +467,7 @@ switch (layout_disposition_) { case LayoutDisposition::kFallbackContent: - return LayoutObjectFactory::CreateBlockFlow(*this, style); + return LayoutObject::CreateBlockFlowOrListItem(this, style); case LayoutDisposition::kPrimaryContent: { LayoutImage* image = MakeGarbageCollected<LayoutImage>(this); image->SetImageResource(MakeGarbageCollected<LayoutImageResource>());
diff --git a/third_party/blink/renderer/core/html/html_summary_element.cc b/third_party/blink/renderer/core/html/html_summary_element.cc index 8731882..d7564df 100644 --- a/third_party/blink/renderer/core/html/html_summary_element.cc +++ b/third_party/blink/renderer/core/html/html_summary_element.cc
@@ -24,7 +24,6 @@ #include "third_party/blink/renderer/core/html/html_details_element.h" #include "third_party/blink/renderer/core/html_names.h" #include "third_party/blink/renderer/core/layout/layout_block_flow.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" @@ -45,7 +44,7 @@ display == EDisplay::kLayoutCustom || display == EDisplay::kInlineLayoutCustom) return LayoutObject::CreateObject(this, style); - return LayoutObjectFactory::CreateBlockFlow(*this, style); + return LayoutObject::CreateBlockFlowOrListItem(this, style); } HTMLDetailsElement* HTMLSummaryElement::DetailsElement() const {
diff --git a/third_party/blink/renderer/core/html/track/text_track_container.cc b/third_party/blink/renderer/core/html/track/text_track_container.cc index bfb630d..5540132 100644 --- a/third_party/blink/renderer/core/html/track/text_track_container.cc +++ b/third_party/blink/renderer/core/html/track/text_track_container.cc
@@ -33,9 +33,8 @@ #include "third_party/blink/renderer/core/html/media/html_video_element.h" #include "third_party/blink/renderer/core/html/track/cue_timeline.h" #include "third_party/blink/renderer/core/html/track/text_track.h" -#include "third_party/blink/renderer/core/layout/layout_block_flow.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/layout_video.h" +#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h" #include "third_party/blink/renderer/core/resize_observer/resize_observer.h" #include "third_party/blink/renderer/core/resize_observer/resize_observer_entry.h" #include "ui/accessibility/accessibility_features.h" @@ -106,7 +105,7 @@ LayoutObject* TextTrackContainer::CreateLayoutObject( const ComputedStyle& style) { - return LayoutObjectFactory::CreateBlockFlow(*this, style); + return MakeGarbageCollected<LayoutNGBlockFlow>(this); } void TextTrackContainer::ObserveSizeChanges(Element& element) {
diff --git a/third_party/blink/renderer/core/html/track/vtt/vtt_cue_box.cc b/third_party/blink/renderer/core/html/track/vtt/vtt_cue_box.cc index 4aeb1145..ccb32da5 100644 --- a/third_party/blink/renderer/core/html/track/vtt/vtt_cue_box.cc +++ b/third_party/blink/renderer/core/html/track/vtt/vtt_cue_box.cc
@@ -34,8 +34,7 @@ #include "third_party/blink/renderer/core/html/track/text_track_container.h" #include "third_party/blink/renderer/core/html/track/vtt/vtt_cue.h" #include "third_party/blink/renderer/core/html/track/vtt/vtt_cue_layout_algorithm.h" -#include "third_party/blink/renderer/core/layout/layout_block_flow.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" +#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h" #include "third_party/blink/renderer/core/resize_observer/resize_observer.h" #include "third_party/blink/renderer/core/resize_observer/resize_observer_entry.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" @@ -160,7 +159,7 @@ // We create a standard block-flow container. // See the comment in vtt_cue_layout_algorithm.h about how we adjust // VTTCueBox positions. - return LayoutObjectFactory::CreateBlockFlow(*this, style); + return MakeGarbageCollected<LayoutNGBlockFlow>(this); } Node::InsertionNotificationRequest VTTCueBox::InsertedInto(
diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc index fd33b14..7f3a18dd 100644 --- a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc
@@ -59,9 +59,8 @@ #include "third_party/blink/renderer/bindings/core/v8/capture_source_location.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/scriptable_document_parser.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/html/html_frame_owner_element.h" @@ -193,7 +192,7 @@ class InspectorFileReaderLoaderClient final : public GarbageCollected<InspectorFileReaderLoaderClient>, - public FileReaderLoaderClient { + public FileReaderClient { public: InspectorFileReaderLoaderClient( scoped_refptr<BlobDataHandle> blob, @@ -202,10 +201,8 @@ : blob_(std::move(blob)), callback_(std::move(callback)), loader_( - MakeGarbageCollected<FileReaderLoader>(FileReadType::kReadByClient, - this, - std::move(task_runner))), - keep_alive_(this) {} + MakeGarbageCollected<FileReaderLoader>(this, + std::move(task_runner))) {} InspectorFileReaderLoaderClient(const InspectorFileReaderLoaderClient&) = delete; @@ -219,13 +216,16 @@ loader_->Start(blob_); } - void DidStartLoading() override {} + FileErrorCode DidStartLoading(uint64_t, uint64_t) override { + return FileErrorCode::kOK; + } - void DidReceiveDataForClient(const char* data, + FileErrorCode DidReceiveData(const char* data, unsigned data_length) override { if (!data_length) - return; + return FileErrorCode::kOK; raw_data_->Append(data, data_length); + return FileErrorCode::kOK; } void DidFinishLoading() override { Done(raw_data_); } @@ -233,14 +233,16 @@ void DidFail(FileErrorCode) override { Done(nullptr); } void Trace(Visitor* visitor) const override { - FileReaderLoaderClient::Trace(visitor); + FileReaderClient::Trace(visitor); visitor->Trace(loader_); } private: void Done(scoped_refptr<SharedBuffer> output) { std::move(callback_).Run(output); - keep_alive_.Clear(); + // FileReaderLoader holds `this` as a member, so clearing it here will + // trigger both its garbage collection and ours. + loader_ = nullptr; } scoped_refptr<BlobDataHandle> blob_; @@ -249,7 +251,6 @@ base::OnceCallback<void(scoped_refptr<SharedBuffer>)> callback_; Member<FileReaderLoader> loader_; scoped_refptr<SharedBuffer> raw_data_; - SelfKeepAlive<InspectorFileReaderLoaderClient> keep_alive_; }; static void ResponseBodyFileReaderLoaderDone(
diff --git a/third_party/blink/renderer/core/layout/build.gni b/third_party/blink/renderer/core/layout/build.gni index 4907c67..ed0e7c25d 100644 --- a/third_party/blink/renderer/core/layout/build.gni +++ b/third_party/blink/renderer/core/layout/build.gni
@@ -128,8 +128,6 @@ "layout_object.h", "layout_object_child_list.cc", "layout_object_child_list.h", - "layout_object_factory.cc", - "layout_object_factory.h", "layout_object_inlines.h", "layout_progress.cc", "layout_progress.h", @@ -711,7 +709,6 @@ "layout_media_test.cc", "layout_multi_column_flow_thread_test.cc", "layout_multi_column_set_test.cc", - "layout_object_factory_test.cc", "layout_object_test.cc", "layout_progress_test.cc", "layout_quote_test.cc",
diff --git a/third_party/blink/renderer/core/layout/layout_block.cc b/third_party/blink/renderer/core/layout/layout_block.cc index 7eb2ee1..a3a04df3 100644 --- a/third_party/blink/renderer/core/layout/layout_block.cc +++ b/third_party/blink/renderer/core/layout/layout_block.cc
@@ -48,11 +48,11 @@ #include "third_party/blink/renderer/core/layout/hit_test_location.h" #include "third_party/blink/renderer/core/layout/hit_test_result.h" #include "third_party/blink/renderer/core/layout/layout_inline.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/layout_object_inlines.h" #include "third_party/blink/renderer/core/layout/layout_theme.h" #include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/layout/ng/flex/layout_ng_flexible_box.h" +#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h" #include "third_party/blink/renderer/core/layout/ng/legacy_layout_tree_walking.h" #include "third_party/blink/renderer/core/layout/ng/mathml/layout_ng_mathml_block.h" #include "third_party/blink/renderer/core/layout/ng/ng_constraint_space.h" @@ -1335,8 +1335,7 @@ } else { DCHECK(new_display == EDisplay::kBlock || new_display == EDisplay::kFlowRoot); - layout_block = - LayoutObjectFactory::CreateBlockFlow(parent->GetDocument(), *new_style); + layout_block = MakeGarbageCollected<LayoutNGBlockFlow>(nullptr); } layout_block->SetDocumentForAnonymous(&parent->GetDocument()); layout_block->SetStyle(std::move(new_style));
diff --git a/third_party/blink/renderer/core/layout/layout_block_flow.cc b/third_party/blink/renderer/core/layout/layout_block_flow.cc index 790307e..e9ae872 100644 --- a/third_party/blink/renderer/core/layout/layout_block_flow.cc +++ b/third_party/blink/renderer/core/layout/layout_block_flow.cc
@@ -47,7 +47,6 @@ #include "third_party/blink/renderer/core/layout/layout_inline.h" #include "third_party/blink/renderer/core/layout/layout_multi_column_flow_thread.h" #include "third_party/blink/renderer/core/layout/layout_multi_column_spanner_placeholder.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/layout_object_inlines.h" #include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h" @@ -89,8 +88,7 @@ LayoutBlockFlow* LayoutBlockFlow::CreateAnonymous( Document* document, scoped_refptr<const ComputedStyle> style) { - LayoutBlockFlow* layout_block_flow = - LayoutObjectFactory::CreateBlockFlow(*document, *style); + auto* layout_block_flow = MakeGarbageCollected<LayoutNGBlockFlow>(nullptr); layout_block_flow->SetDocumentForAnonymous(document); layout_block_flow->SetStyle(style); return layout_block_flow;
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index 449d145..f488df7 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -129,7 +129,6 @@ struct SameSizeAsLayoutBox : public LayoutBoxModelObject { LayoutRect frame_rect; LayoutSize previous_size; - LayoutUnit intrinsic_content_logical_height; LayoutRectOutsets margin_box_outsets; MinMaxSizes intrinsic_logical_widths; LayoutUnit intrinsic_logical_widths_initial_block_size; @@ -476,7 +475,6 @@ LayoutBox::LayoutBox(ContainerNode* node) : LayoutBoxModelObject(node), - intrinsic_content_logical_height_(-1), intrinsic_logical_widths_initial_block_size_(LayoutUnit::Min()) { SetIsBox(); if (blink::IsA<HTMLLegendElement>(node)) @@ -4146,12 +4144,6 @@ DISABLE_CFI_PERF void LayoutBox::UpdateLogicalHeight() { NOT_DESTROYED(); - if (!HasOverrideLogicalHeight()) { - // If we have an override height, our children will have sized themselves - // relative to our override height, which would make our intrinsic size - // incorrect (too big). - intrinsic_content_logical_height_ = ContentLogicalHeight(); - } LogicalExtentComputedValues computed_values; ComputeLogicalHeight(computed_values); @@ -4178,11 +4170,6 @@ if (!IsTextArea()) { height += ComputeLogicalScrollbars().BlockSum(); } - // FIXME: The logical height of the inner editor box should have been - // added before calling ComputeLogicalHeight to avoid this hack. - if (IsTextControl()) { - SetIntrinsicContentLogicalHeight(default_height); - } } else if (ShouldApplySizeContainment()) { height = BorderAndPaddingLogicalHeight() + ComputeLogicalScrollbars().BlockSum();
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h index cadd9891..f60bee6 100644 --- a/third_party/blink/renderer/core/layout/layout_box.h +++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -1311,12 +1311,6 @@ return StyleRef().IsHorizontalWritingMode() ? IntrinsicSize().Height() : IntrinsicSize().Width(); } - // TODO(1229581): Remove this function, and intrinsic_content_logical_height_. - virtual LayoutUnit IntrinsicContentLogicalHeight() const { - NOT_DESTROYED(); - NOTREACHED(); - return LayoutUnit(); - } // Whether or not the element shrinks to its intrinsic width (rather than // filling the width of a containing block). HTML4 buttons, <select>s, @@ -1734,12 +1728,6 @@ RemoveFloatingOrPositionedChildFromBlockLists(); } - void SetIntrinsicContentLogicalHeight( - LayoutUnit intrinsic_content_logical_height) const { - NOT_DESTROYED(); - intrinsic_content_logical_height_ = intrinsic_content_logical_height; - } - bool CanRenderBorderImage() const; // For snap areas, returns the snap container that owns us. @@ -2219,11 +2207,6 @@ // Previous value of frame_size_, updated after paint invalidation. LayoutSize previous_size_; - // Our intrinsic height, used for min-height: min-content etc. Maintained by - // updateLogicalHeight. This is logicalHeight() before it is clamped to - // min/max. - mutable LayoutUnit intrinsic_content_logical_height_; - protected: MinMaxSizes intrinsic_logical_widths_; LayoutUnit intrinsic_logical_widths_initial_block_size_;
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index 32d1a94..8f5a5e5 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -80,7 +80,6 @@ #include "third_party/blink/renderer/core/layout/layout_image_resource_style_image.h" #include "third_party/blink/renderer/core/layout/layout_inline.h" #include "third_party/blink/renderer/core/layout/layout_multi_column_spanner_placeholder.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/layout_object_inl.h" #include "third_party/blink/renderer/core/layout/layout_object_inlines.h" #include "third_party/blink/renderer/core/layout/layout_text_fragment.h" @@ -379,7 +378,7 @@ case EDisplay::kFlowRoot: case EDisplay::kInlineBlock: case EDisplay::kListItem: - return LayoutObjectFactory::CreateBlockFlow(*element, style); + return CreateBlockFlowOrListItem(element, style); case EDisplay::kTable: case EDisplay::kInlineTable: return MakeGarbageCollected<LayoutNGTable>(element); @@ -424,6 +423,22 @@ return nullptr; } +// static +LayoutBlockFlow* LayoutObject::CreateBlockFlowOrListItem( + Element* element, + const ComputedStyle& style) { + if (style.Display() == EDisplay::kListItem && element && + element->GetPseudoId() != kPseudoIdBackdrop) { + // Create a LayoutBlockFlow with a ListItemOrdinal and maybe a ::marker. + // ::backdrop is excluded since it's not tree-abiding, and ListItemOrdinal + // needs to traverse the tree. + return MakeGarbageCollected<LayoutNGListItem>(element); + } + + // Create a plain LayoutBlockFlow + return MakeGarbageCollected<LayoutNGBlockFlow>(element); +} + LayoutObject::LayoutObject(Node* node) : full_paint_invalidation_reason_( static_cast<unsigned>(PaintInvalidationReason::kNone)),
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 7fb77c6..0db14249 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -845,6 +845,8 @@ // and its renderer (e.g. <iframe> creates a LayoutIFrame even if the // initial 'display' value is inline). static LayoutObject* CreateObject(Element*, const ComputedStyle&); + static LayoutBlockFlow* CreateBlockFlowOrListItem(Element* element, + const ComputedStyle& style); bool IsPseudoElement() const { NOT_DESTROYED();
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory.cc b/third_party/blink/renderer/core/layout/layout_object_factory.cc deleted file mode 100644 index 5636dd8..0000000 --- a/third_party/blink/renderer/core/layout/layout_object_factory.cc +++ /dev/null
@@ -1,60 +0,0 @@ -// Copyright 2018 The Chromium Authors -// 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/layout_object_factory.h" - -#include "third_party/blink/renderer/core/css/resolver/style_resolver.h" -#include "third_party/blink/renderer/core/dom/element.h" -#include "third_party/blink/renderer/core/dom/node_computed_style.h" -#include "third_party/blink/renderer/core/frame/web_feature.h" -#include "third_party/blink/renderer/core/html/html_li_element.h" -#include "third_party/blink/renderer/core/layout/layout_block_flow.h" -#include "third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.h" -#include "third_party/blink/renderer/core/layout/ng/layout_ng_ruby_as_block.h" -#include "third_party/blink/renderer/core/layout/ng/layout_ng_view.h" -#include "third_party/blink/renderer/core/layout/ng/list/layout_ng_list_item.h" -#include "third_party/blink/renderer/core/layout/ng/mathml/layout_ng_mathml_block.h" -#include "third_party/blink/renderer/core/layout/ng/mathml/layout_ng_mathml_block_flow.h" -#include "third_party/blink/renderer/core/mathml/mathml_element.h" -#include "third_party/blink/renderer/core/mathml/mathml_token_element.h" -#include "third_party/blink/renderer/core/style/computed_style.h" -#include "third_party/blink/renderer/platform/runtime_enabled_features.h" - -namespace blink { - -namespace { - -inline Element* GetElementForLayoutObject(Node& node) { - if (auto* element = DynamicTo<Element>(node)) - return element; - // If |node| is a Document, the layout object is going to be anonymous. - DCHECK(node.IsDocumentNode()); - return nullptr; -} - -template <typename BaseType, typename NGType, typename LegacyType = BaseType> -inline BaseType* CreateObject(Node& node, bool disable_ng_for_type = false) { - Element* element = GetElementForLayoutObject(node); - return MakeGarbageCollected<NGType>(element); -} - -} // anonymous namespace - -LayoutBlockFlow* LayoutObjectFactory::CreateBlockFlow( - Node& node, - const ComputedStyle& style) { - if (style.Display() == EDisplay::kListItem && - node.GetPseudoId() != kPseudoIdBackdrop) { - // Create a LayoutBlockFlow with a ListItemOrdinal and maybe a ::marker. - // ::backdrop is excluded since it's not tree-abiding, and ListItemOrdinal - // needs to traverse the tree. - return MakeGarbageCollected<LayoutNGListItem>( - GetElementForLayoutObject(node)); - } - - // Create a plain LayoutBlockFlow - return CreateObject<LayoutBlockFlow, LayoutNGBlockFlow>(node); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory.h b/third_party/blink/renderer/core/layout/layout_object_factory.h deleted file mode 100644 index 7cc40d8a..0000000 --- a/third_party/blink/renderer/core/layout/layout_object_factory.h +++ /dev/null
@@ -1,37 +0,0 @@ -// Copyright 2018 The Chromium Authors -// 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_LAYOUT_OBJECT_FACTORY_H_ -#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_LAYOUT_OBJECT_FACTORY_H_ - -#include "base/memory/scoped_refptr.h" -#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" -#include "third_party/blink/renderer/platform/wtf/forward.h" - -namespace blink { - -class ComputedStyle; -class LayoutBlock; -class LayoutBlockFlow; -class LayoutObject; -class Node; - -// Helper class for creation of certain LayoutObject-derived objects that may -// need to be of different types, depending on whether or not LayoutNG is to be -// used in the given context. -class LayoutObjectFactory { - STATIC_ONLY(LayoutObjectFactory); - - public: - // The following methods will create and return some LayoutObject-derived - // object. If |node| is of type Element, it will be associated with the new - // LayoutObject. Otherwise it will be assumed to be a Document node, in which - // case the LayoutObject created will be anonymous. The |style| reference - // passed will only be used to determine which object type to create. - static LayoutBlockFlow* CreateBlockFlow(Node&, const ComputedStyle&); -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_LAYOUT_OBJECT_FACTORY_H_
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory_test.cc b/third_party/blink/renderer/core/layout/layout_object_factory_test.cc deleted file mode 100644 index bd3f15d..0000000 --- a/third_party/blink/renderer/core/layout/layout_object_factory_test.cc +++ /dev/null
@@ -1,82 +0,0 @@ -// Copyright 2021 The Chromium Authors -// 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/layout_object_factory.h" - -#include "third_party/blink/renderer/core/dom/pseudo_element.h" -#include "third_party/blink/renderer/core/layout/layout_counter.h" -#include "third_party/blink/renderer/core/testing/core_unit_test_helper.h" -#include "third_party/blink/renderer/platform/runtime_enabled_features.h" -#include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h" - -namespace blink { - -class LayoutObjectFactoryTest : public RenderingTest {}; - -TEST_F(LayoutObjectFactoryTest, BR) { - SetBodyInnerHTML("<br id=sample>"); - const auto& layout_object = *GetLayoutObjectByElementId("sample"); - - EXPECT_TRUE(layout_object.IsLayoutNGObject()); -} - -// http://crbug.com/1060007 -TEST_F(LayoutObjectFactoryTest, Counter) { - InsertStyleElement( - "li::before { content: counter(i, upper-roman); }" - "ol { list-style: none; "); - SetBodyInnerHTML("<ol><li id=sample>one</li></ol>"); - const auto& sample_layout_object = *GetLayoutObjectByElementId("sample"); - const auto& sample = *GetElementById("sample"); - const auto& psedo = *sample.GetPseudoElement(kPseudoIdBefore); - const auto& counter_layout_object = - *To<LayoutCounter>(psedo.GetLayoutObject()->SlowFirstChild()); - - EXPECT_EQ(R"DUMP( -LayoutNGListItem LI id="sample" - +--LayoutInline ::before - | +--LayoutCounter (anonymous) "0" - +--LayoutText #text "one" -)DUMP", - ToSimpleLayoutTree(sample_layout_object)); - EXPECT_TRUE(counter_layout_object.IsLayoutNGObject()); -} - -TEST_F(LayoutObjectFactoryTest, TextCombineInHorizontal) { - InsertStyleElement( - "div { writing-mode: horizontal-tb; }" - "tcy { text-combine-upright: all; }"); - SetBodyInnerHTML("<div><tcy id=sample>ab</tcy></div>"); - const auto& sample_layout_object = *GetLayoutObjectByElementId("sample"); - - EXPECT_EQ(R"DUMP( -LayoutInline TCY id="sample" - +--LayoutText #text "ab" -)DUMP", - ToSimpleLayoutTree(sample_layout_object)); -} - -TEST_F(LayoutObjectFactoryTest, TextCombineInVertical) { - InsertStyleElement( - "div { writing-mode: vertical-rl; }" - "tcy { text-combine-upright: all; }"); - SetBodyInnerHTML("<div><tcy id=sample>ab</tcy></div>"); - const auto& sample_layout_object = *GetLayoutObjectByElementId("sample"); - - EXPECT_EQ(R"DUMP( -LayoutInline TCY id="sample" - +--LayoutNGTextCombine (anonymous) - | +--LayoutText #text "ab" -)DUMP", - ToSimpleLayoutTree(sample_layout_object)); -} - -TEST_F(LayoutObjectFactoryTest, WordBreak) { - SetBodyInnerHTML("<wbr id=sample>"); - const auto& layout_object = *GetLayoutObjectByElementId("sample"); - - EXPECT_TRUE(layout_object.IsLayoutNGObject()); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_replaced.h b/third_party/blink/renderer/core/layout/layout_replaced.h index b8f8f0bf..2dfb6c3c 100644 --- a/third_party/blink/renderer/core/layout/layout_replaced.h +++ b/third_party/blink/renderer/core/layout/layout_replaced.h
@@ -181,11 +181,6 @@ const NGPhysicalBoxStrut& border_padding, const LayoutSize* overridden_intrinsic_size = nullptr) const; - LayoutUnit IntrinsicContentLogicalHeight() const override { - NOT_DESTROYED(); - return IntrinsicLogicalHeight(); - } - void StyleDidChange(StyleDifference, const ComputedStyle* old_style) override; void SetIntrinsicSize(const LayoutSize& intrinsic_size) {
diff --git a/third_party/blink/renderer/core/layout/layout_text_fragment.cc b/third_party/blink/renderer/core/layout/layout_text_fragment.cc index a62c318..eb2933e 100644 --- a/third_party/blink/renderer/core/layout/layout_text_fragment.cc +++ b/third_party/blink/renderer/core/layout/layout_text_fragment.cc
@@ -29,7 +29,6 @@ #include "third_party/blink/renderer/core/dom/text.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/layout/hit_test_result.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping.h" namespace blink {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_combine_test.cc b/third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_combine_test.cc index c3d93f1..0e7217f 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_combine_test.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_combine_test.cc
@@ -1542,4 +1542,33 @@ ToSimpleLayoutTree(*GetLayoutObjectByElementId("root"))); } +TEST_F(LayoutNGTextCombineTest, InHorizontal) { + InsertStyleElement( + "div { writing-mode: horizontal-tb; }" + "tcy { text-combine-upright: all; }"); + SetBodyInnerHTML("<div><tcy id=sample>ab</tcy></div>"); + const auto& sample_layout_object = *GetLayoutObjectByElementId("sample"); + + EXPECT_EQ(R"DUMP( +LayoutInline TCY id="sample" + +--LayoutText #text "ab" +)DUMP", + ToSimpleLayoutTree(sample_layout_object)); +} + +TEST_F(LayoutNGTextCombineTest, InVertical) { + InsertStyleElement( + "div { writing-mode: vertical-rl; }" + "tcy { text-combine-upright: all; }"); + SetBodyInnerHTML("<div><tcy id=sample>ab</tcy></div>"); + const auto& sample_layout_object = *GetLayoutObjectByElementId("sample"); + + EXPECT_EQ(R"DUMP( +LayoutInline TCY id="sample" + +--LayoutNGTextCombine (anonymous) + | +--LayoutText #text "ab" +)DUMP", + ToSimpleLayoutTree(sample_layout_object)); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.cc index f174542..64c97cb 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_fieldset.cc
@@ -6,7 +6,6 @@ #include "third_party/blink/renderer/core/css/properties/longhands.h" #include "third_party/blink/renderer/core/dom/layout_tree_builder_traversal.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" namespace blink {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc index 8b7363a4..59778db 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
@@ -1250,11 +1250,6 @@ if (!RuntimeEnabledFeatures::LayoutNGNoCopyBackEnabled()) { NGBoxFragment fragment(constraint_space.GetWritingDirection(), physical_fragment); - NGBoxStrut borders = fragment.Borders(); - NGBoxStrut scrollbars = ComputeScrollbars(constraint_space, *this); - NGBoxStrut padding = fragment.Padding(); - NGBoxStrut border_scrollbar_padding = borders + scrollbars + padding; - // For each fragment we process, we'll accumulate the block-size. We reset // it at the first fragment, and accumulate at each method call for // fragments belonging to the same layout object. Inline-size will only be @@ -1268,20 +1263,6 @@ if (LIKELY(physical_fragment.IsFirstForNode())) { box_->SetSize(LayoutSize(physical_fragment.Size().width, physical_fragment.Size().height)); - // If this is a fragment from a node that didn't break into multiple - // fragments, write back the intrinsic size. We skip this if the node has - // fragmented, since intrinsic block-size is rather meaningless in that - // case, because the block-size may have been affected by something on - // the outside (i.e. the fragmentainer). - // - // If we had a fixed block size, our children will have sized themselves - // relative to the fixed size, which would make our intrinsic size - // incorrect (too big). So skip the write-back in that case, too. - if (LIKELY(is_last_fragment && !constraint_space.IsFixedBlockSize())) { - box_->SetIntrinsicContentLogicalHeight( - layout_result.IntrinsicBlockSize() - - border_scrollbar_padding.BlockSum()); - } } else { // Update logical height, unless this fragment is past the block-end of // the generating node (happens with overflow).
diff --git a/third_party/blink/renderer/core/style/content_data.cc b/third_party/blink/renderer/core/style/content_data.cc index ddc6b0a4..f80ad0d3 100644 --- a/third_party/blink/renderer/core/style/content_data.cc +++ b/third_party/blink/renderer/core/style/content_data.cc
@@ -29,7 +29,6 @@ #include "third_party/blink/renderer/core/layout/layout_image.h" #include "third_party/blink/renderer/core/layout/layout_image_resource.h" #include "third_party/blink/renderer/core/layout/layout_image_resource_style_image.h" -#include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/layout/layout_quote.h" #include "third_party/blink/renderer/core/layout/layout_text_fragment.h" #include "third_party/blink/renderer/core/style/computed_style.h"
diff --git a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc index bbca152c..c648e963 100644 --- a/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc +++ b/third_party/blink/renderer/core/xmlhttprequest/xml_http_request.cc
@@ -54,9 +54,8 @@ #include "third_party/blink/renderer/core/fetch/trust_token_to_mojom.h" #include "third_party/blink/renderer/core/fileapi/blob.h" #include "third_party/blink/renderer/core/fileapi/file.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/core/fileapi/public_url_manager.h" #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h" #include "third_party/blink/renderer/core/frame/deprecation/deprecation.h" @@ -244,23 +243,25 @@ class XMLHttpRequest::BlobLoader final : public GarbageCollected<XMLHttpRequest::BlobLoader>, - public FileReaderLoaderClient { + public FileReaderClient { public: BlobLoader(XMLHttpRequest* xhr, scoped_refptr<BlobDataHandle> handle) : xhr_(xhr), loader_(MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadByClient, this, xhr->GetExecutionContext()->GetTaskRunner( TaskType::kFileReading))) { loader_->Start(std::move(handle)); } - // FileReaderLoaderClient functions. - void DidStartLoading() override {} - void DidReceiveDataForClient(const char* data, unsigned length) override { + // FileReaderClient functions. + FileErrorCode DidStartLoading(uint64_t, uint64_t) override { + return FileErrorCode::kOK; + } + FileErrorCode DidReceiveData(const char* data, unsigned length) override { DCHECK_LE(length, static_cast<unsigned>(INT_MAX)); xhr_->DidReceiveData(data, length); + return FileErrorCode::kOK; } void DidFinishLoading() override { xhr_->DidFinishLoadingFromBlob(); } void DidFail(FileErrorCode error) override { xhr_->DidFailLoadingFromBlob(); } @@ -268,7 +269,7 @@ void Cancel() { loader_->Cancel(); } void Trace(Visitor* visitor) const override { - FileReaderLoaderClient::Trace(visitor); + FileReaderClient::Trace(visitor); visitor->Trace(xhr_); visitor->Trace(loader_); }
diff --git a/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc b/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc index 28ae65a..e000329 100644 --- a/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc +++ b/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc
@@ -20,9 +20,8 @@ #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/inspector/inspected_frames.h" @@ -449,7 +448,7 @@ class CachedResponseFileReaderLoaderClient final : public GarbageCollected<CachedResponseFileReaderLoaderClient>, - public FileReaderLoaderClient { + public FileReaderClient { public: static void Load(scoped_refptr<base::SingleThreadTaskRunner> task_runner, scoped_refptr<BlobDataHandle> blob, @@ -463,7 +462,9 @@ CachedResponseFileReaderLoaderClient& operator=( const CachedResponseFileReaderLoaderClient&) = delete; - void DidStartLoading() override {} + FileErrorCode DidStartLoading(uint64_t, uint64_t) override { + return FileErrorCode::kOK; + } void DidFinishLoading() override { std::unique_ptr<CachedResponse> response = @@ -482,13 +483,14 @@ dispose(); } - void DidReceiveDataForClient(const char* data, + FileErrorCode DidReceiveData(const char* data, unsigned data_length) override { data_->Append(data, data_length); + return FileErrorCode::kOK; } void Trace(Visitor* visitor) const override { - FileReaderLoaderClient::Trace(visitor); + FileReaderClient::Trace(visitor); visitor->Trace(loader_); } @@ -496,25 +498,21 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner, scoped_refptr<BlobDataHandle>&& blob, std::unique_ptr<RequestCachedResponseCallback>&& callback) - : loader_( - MakeGarbageCollected<FileReaderLoader>(FileReadType::kReadByClient, - this, - std::move(task_runner))), + : loader_(MakeGarbageCollected<FileReaderLoader>(this, + std::move(task_runner))), callback_(std::move(callback)), - data_(SharedBuffer::Create()), - keep_alive_(this) { + data_(SharedBuffer::Create()) { loader_->Start(std::move(blob)); } ~CachedResponseFileReaderLoaderClient() override = default; private: - void dispose() { keep_alive_.Clear(); } + void dispose() { loader_ = nullptr; } Member<FileReaderLoader> loader_; std::unique_ptr<RequestCachedResponseCallback> callback_; scoped_refptr<SharedBuffer> data_; - SelfKeepAlive<CachedResponseFileReaderLoaderClient> keep_alive_; }; } // namespace
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc index 5ba91856..20d95536 100644 --- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc +++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
@@ -43,7 +43,6 @@ #include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/fileapi/blob.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" #include "third_party/blink/renderer/core/frame/deprecation/deprecation.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/html/canvas/html_canvas_element.h" @@ -278,7 +277,6 @@ const ImageBitmapOptions* options) : ExecutionContextLifecycleObserver(ExecutionContext::From(script_state)), loader_(MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadAsArrayBuffer, this, GetExecutionContext()->GetTaskRunner(TaskType::kFileReading))), factory_(&factory), @@ -339,8 +337,9 @@ } } -void ImageBitmapFactories::ImageBitmapLoader::DidFinishLoading() { - auto contents = loader_->TakeContents().AsArrayBufferContents(); +void ImageBitmapFactories::ImageBitmapLoader::DidFinishLoading( + FileReaderData data) { + auto contents = std::move(data).AsArrayBufferContents(); loader_.Clear(); if (!contents.IsValid()) { RejectPromise(kAllocationFailureImageBitmapRejectionReason); @@ -349,7 +348,9 @@ ScheduleAsyncImageBitmapDecoding(std::move(contents)); } -void ImageBitmapFactories::ImageBitmapLoader::DidFail(FileErrorCode) { +void ImageBitmapFactories::ImageBitmapLoader::DidFail( + FileErrorCode error_code) { + FileReaderAccumulator::DidFail(error_code); RejectPromise(kUndecodableImageBitmapRejectionReason); } @@ -428,7 +429,7 @@ void ImageBitmapFactories::ImageBitmapLoader::Trace(Visitor* visitor) const { ExecutionContextLifecycleObserver::Trace(visitor); - FileReaderLoaderClient::Trace(visitor); + FileReaderAccumulator::Trace(visitor); visitor->Trace(factory_); visitor->Trace(resolver_); visitor->Trace(options_);
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h index afad69f4..420db36 100644 --- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h +++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h
@@ -37,8 +37,8 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_image_bitmap_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_typedefs.h" #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/workers/worker_global_scope.h" #include "third_party/blink/renderer/modules/modules_export.h" @@ -144,7 +144,7 @@ class ImageBitmapLoader final : public GarbageCollected<ImageBitmapLoader>, public ExecutionContextLifecycleObserver, - public FileReaderLoaderClient { + public FileReaderAccumulator { public: static ImageBitmapLoader* Create(ImageBitmapFactories& factory, absl::optional<gfx::Rect> crop_rect, @@ -183,10 +183,8 @@ // ExecutionContextLifecycleObserver void ContextDestroyed() override; - // FileReaderLoaderClient - void DidStartLoading() override {} - void DidReceiveData() override {} - void DidFinishLoading() override; + // FileReaderClient + void DidFinishLoading(FileReaderData) override; void DidFail(FileErrorCode) override; Member<FileReaderLoader> loader_;
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc b/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc index 4132e20..1e5c40d 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc +++ b/third_party/blink/renderer/modules/clipboard/clipboard_writer.cc
@@ -12,7 +12,6 @@ #include "third_party/blink/renderer/core/dom/document_fragment.h" #include "third_party/blink/renderer/core/editing/serializers/serialization.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/web_feature.h" @@ -344,34 +343,31 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!file_reader_); file_reader_ = MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadAsArrayBuffer, this, - std::move(file_reading_task_runner_)); + this, std::move(file_reading_task_runner_)); file_reader_->Start(blob->GetBlobDataHandle()); } -// FileReaderLoaderClient implementation. - -void ClipboardWriter::DidStartLoading() {} -void ClipboardWriter::DidReceiveData() {} - -void ClipboardWriter::DidFinishLoading() { +// FileReaderClient implementation. +void ClipboardWriter::DidFinishLoading(FileReaderData contents) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DOMArrayBuffer* array_buffer = - file_reader_->TakeContents().AsDOMArrayBuffer(); + DOMArrayBuffer* array_buffer = std::move(contents).AsDOMArrayBuffer(); DCHECK(array_buffer); self_keep_alive_.Clear(); + file_reader_ = nullptr; StartWrite(array_buffer, clipboard_task_runner_); } void ClipboardWriter::DidFail(FileErrorCode error_code) { + FileReaderAccumulator::DidFail(error_code); self_keep_alive_.Clear(); + file_reader_ = nullptr; promise_->RejectFromReadOrDecodeFailure(); } void ClipboardWriter::Trace(Visitor* visitor) const { - FileReaderLoaderClient::Trace(visitor); + FileReaderAccumulator::Trace(visitor); visitor->Trace(promise_); visitor->Trace(system_clipboard_); visitor->Trace(file_reader_);
diff --git a/third_party/blink/renderer/modules/clipboard/clipboard_writer.h b/third_party/blink/renderer/modules/clipboard/clipboard_writer.h index 980255e..2d24f95c 100644 --- a/third_party/blink/renderer/modules/clipboard/clipboard_writer.h +++ b/third_party/blink/renderer/modules/clipboard/clipboard_writer.h
@@ -8,7 +8,7 @@ #include "base/sequence_checker.h" #include "base/task/single_thread_task_runner.h" #include "third_party/blink/renderer/core/fileapi/blob.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/modules/clipboard/clipboard_promise.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/self_keep_alive.h" @@ -52,7 +52,7 @@ // SelfKeepAlive, and keeps itself alive afterwards during cross-thread // operations by using WrapCrossThreadPersistent. class ClipboardWriter : public GarbageCollected<ClipboardWriter>, - public FileReaderLoaderClient { + public FileReaderAccumulator { public: // For writing sanitized and custom MIME types. // IsValidType() must return true on types passed into `mime_type`. @@ -74,10 +74,8 @@ // Begins the sequence of writing the Blob to the system clipbaord. void WriteToSystem(Blob* blob); - // FileReaderLoaderClient. - void DidStartLoading() override; - void DidReceiveData() override; - void DidFinishLoading() override; + // FileReaderClient. + void DidFinishLoading(FileReaderData) override; void DidFail(FileErrorCode) override; void Trace(Visitor*) const override; @@ -115,7 +113,6 @@ Member<FileReaderLoader> file_reader_; // Access to the global sanitized system clipboard. Member<SystemClipboard> system_clipboard_; - // Oilpan: ClipboardWriter must remain alive until Member<T>::Clear() is // called, to keep the FileReaderLoader alive and avoid unexpected UaPs. SelfKeepAlive<ClipboardWriter> self_keep_alive_{this};
diff --git a/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.cc b/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.cc index bafb788..fb9831c 100644 --- a/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.cc +++ b/third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.cc
@@ -5,6 +5,7 @@ #include "third_party/blink/renderer/modules/exported/web_shared_storage_worklet_thread_impl.h" #include "third_party/blink/public/mojom/shared_storage/shared_storage_worklet_service.mojom.h" +#include "third_party/blink/renderer/core/workers/threaded_worklet_object_proxy.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" namespace blink {
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_request_loader.cc b/third_party/blink/renderer/modules/indexeddb/idb_request_loader.cc index 6895e76..815ae37a 100644 --- a/third_party/blink/renderer/modules/indexeddb/idb_request_loader.cc +++ b/third_party/blink/renderer/modules/indexeddb/idb_request_loader.cc
@@ -9,7 +9,6 @@ #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/core/dom/dom_exception.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" #include "third_party/blink/renderer/modules/indexeddb/idb_request.h" #include "third_party/blink/renderer/modules/indexeddb/idb_request_queue_item.h" @@ -28,9 +27,7 @@ DCHECK(IDBValueUnwrapper::IsWrapped(values_)); } -IDBRequestLoader::~IDBRequestLoader() { - // TODO(pwnall): Do we need to call loader_->Cancel() here? -} +IDBRequestLoader::~IDBRequestLoader() {} void IDBRequestLoader::Start() { #if DCHECK_IS_ON() @@ -87,19 +84,21 @@ file_reader_loading_ = true; #endif // DCHECK_IS_ON() loader_ = MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadByClient, this, - exection_context->GetTaskRunner(TaskType::kDatabaseAccess)); + this, exection_context->GetTaskRunner(TaskType::kDatabaseAccess)); loader_->Start(unwrapper.WrapperBlobHandle()); } -void IDBRequestLoader::DidStartLoading() {} +FileErrorCode IDBRequestLoader::DidStartLoading(uint64_t, uint64_t) { + return FileErrorCode::kOK; +} -void IDBRequestLoader::DidReceiveDataForClient(const char* data, +FileErrorCode IDBRequestLoader::DidReceiveData(const char* data, unsigned data_length) { DCHECK_LE(wrapped_data_.size() + data_length, wrapped_data_.capacity()) << "The reader returned more data than we were prepared for"; wrapped_data_.Append(data, data_length); + return FileErrorCode::kOK; } void IDBRequestLoader::DidFinishLoading() {
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_request_loader.h b/third_party/blink/renderer/modules/indexeddb/idb_request_loader.h index 44b571b..feb52f0 100644 --- a/third_party/blink/renderer/modules/indexeddb/idb_request_loader.h +++ b/third_party/blink/renderer/modules/indexeddb/idb_request_loader.h
@@ -8,8 +8,8 @@ #include <memory> #include "base/dcheck_is_on.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/member.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" @@ -31,7 +31,7 @@ // assumes that the overhead of creating and destroying a Vector is much smaller // than the IPC overhead required to load the Blob data into the renderer. class IDBRequestLoader : public GarbageCollected<IDBRequestLoader>, - public FileReaderLoaderClient { + public FileReaderClient { public: // Creates a loader that will unwrap IDBValues received by a IDBRequest. // @@ -50,13 +50,13 @@ // Halt the process of unwrapping values, if possible. void Cancel(); - // FileReaderLoaderClient implementaton. - void DidStartLoading() override; - void DidReceiveDataForClient(const char* data, unsigned data_length) override; + // FileReaderClient implementation. + FileErrorCode DidStartLoading(uint64_t, uint64_t) override; + FileErrorCode DidReceiveData(const char* data, unsigned data_length) override; void DidFinishLoading() override; void DidFail(FileErrorCode) override; void Trace(Visitor* visitor) const override { - FileReaderLoaderClient::Trace(visitor); + FileReaderClient::Trace(visitor); visitor->Trace(loader_); }
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 66a13db7..6a07fe0 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
@@ -1437,18 +1437,18 @@ } MLOperand* MLGraphBuilder::pad(const MLOperand* input, - const Vector<uint32_t>& beginningPadding, - const Vector<uint32_t>& endingPadding, + const Vector<uint32_t>& beginning_padding, + const Vector<uint32_t>& ending_padding, const MLPadOptions* options, ExceptionState& exception_state) { const auto input_rank = input->Dimensions().size(); - if (beginningPadding.size() != input_rank) { + if (beginning_padding.size() != input_rank) { exception_state.ThrowDOMException(DOMExceptionCode::kDataError, "The length of beginningPadding must be " "equal to the rank of the input tensor."); return nullptr; } - if (endingPadding.size() != input_rank) { + if (ending_padding.size() != input_rank) { exception_state.ThrowDOMException(DOMExceptionCode::kDataError, "The length of endingPadding must be " "equal to the rank of the input tensor."); @@ -1468,7 +1468,7 @@ for (wtf_size_t i = 0; i < input_rank; i++) { auto checked_output_size = base::MakeCheckedNum<uint32_t>(input->Dimensions()[i]) + - beginningPadding[i] + endingPadding[i]; + beginning_padding[i] + ending_padding[i]; if (!checked_output_size.AssignIfValid(&output_shape[i])) { exception_state.ThrowDOMException( DOMExceptionCode::kDataError, @@ -1477,8 +1477,8 @@ } } - auto* pad = MakeGarbageCollected<MLOperator>( - this, MLOperator::OperatorKind::kPad, options); + auto* pad = MakeGarbageCollected<MLPadOperator>(this, beginning_padding, + ending_padding, options); String error_message; // According to WebNN spec // https://www.w3.org/TR/webnn/#api-mlgraphbuilder-pad, the output
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_test.cc b/third_party/blink/renderer/modules/ml/webnn/ml_graph_test.cc index d50a5b0..0cd4199 100644 --- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_test.cc +++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_test.cc
@@ -8,6 +8,7 @@ #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_clamp_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_conv_2d_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_leaky_relu_options.h" +#include "third_party/blink/renderer/bindings/modules/v8/v8_ml_pad_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_pool_2d_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_transpose_options.h" #include "third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.h" @@ -1138,6 +1139,70 @@ } } +template <typename T> +struct PadTester { + OperandInfo<T> input; + Vector<uint32_t> beginning_padding; + Vector<uint32_t> ending_padding; + Vector<T> expected; + + void Test(MLGraphTest& helper, + V8TestingScope& scope, + MLGraphBuilder* builder, + MLPadOptions* options = MLPadOptions::Create()) { + auto* input_operand = BuildInput(builder, "input", input.dimensions, + input.type, scope.GetExceptionState()); + auto* output_operand = BuildPad(scope, builder, input_operand, + beginning_padding, ending_padding, options); + auto [graph, build_exception] = + helper.BuildGraph(scope, builder, {{"output", output_operand}}); + EXPECT_NE(graph, nullptr); + + MLNamedArrayBufferViews inputs( + {{"input", + CreateArrayBufferViewForOperand(input_operand, input.values)}}); + MLNamedArrayBufferViews outputs( + {{"output", CreateArrayBufferViewForOperand(output_operand)}}); + auto* compute_exception = + helper.ComputeGraph(scope, graph, inputs, outputs); + EXPECT_EQ(compute_exception, nullptr); + auto results = GetArrayBufferViewValues<T>(outputs[0].second); + EXPECT_EQ(results, expected); + } +}; + +TEST_P(MLGraphTest, PadTest) { + V8TestingScope scope; + auto* builder = CreateMLGraphBuilder(scope.GetExecutionContext()); + { + // Test pad operator with default options. + auto* options = MLPadOptions::Create(); + PadTester<float>{ + .input = {.type = V8MLOperandType::Enum::kFloat32, + .dimensions = {2, 3}, + .values = {1, 2, 3, 4, 5, 6}}, + .beginning_padding = {1, 2}, + .ending_padding = {1, 2}, + .expected = {0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 3., 0., 0., + 0., 0., 4., 5., 6., 0., 0., 0., 0., 0., 0., 0., 0., 0.}} + .Test(*this, scope, builder, options); + } + { + // Test pad operator with options->value = 8. + auto* options = MLPadOptions::Create(); + options->setValue(8); + PadTester<float>{ + .input = {.type = V8MLOperandType::Enum::kFloat32, + .dimensions = {2, 3}, + .values = {1, 2, 3, 4, 5, 6}}, + .beginning_padding = {1, 2}, + .ending_padding = {1, 2}, + .expected = {8., 8., 8., 8., 8., 8., 8., 8., 8., 1., 2., 3., 8., 8., + 8., 8., 4., 5., 6., 8., 8., 8., 8., 8., 8., 8., 8., 8.}} + .Test(*this, scope, builder, options); + } +} + INSTANTIATE_TEST_SUITE_P( All, MLGraphTest,
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc index 5ab15a8..f4dc631c4f 100644 --- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc +++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_xnnpack.cc
@@ -20,6 +20,7 @@ #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_conv_2d_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_gemm_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_leaky_relu_options.h" +#include "third_party/blink/renderer/bindings/modules/v8/v8_ml_pad_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_pool_2d_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_resample_2d_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_ml_transpose_options.h" @@ -752,6 +753,47 @@ return xnn_status_success; } +xnn_status DefineXnnNodeForPad(xnn_subgraph_t subgraph, + const MLOperator* pad, + const OperandValueIdMap& operand_value_id_map, + String& error_message) { + const MLPadOperator* pad_operator = static_cast<const MLPadOperator*>(pad); + const uint32_t input_id = + GetOperatorInputValueId(pad_operator, operand_value_id_map); + const uint32_t output_id = + GetOperatorOutputValueId(pad_operator, operand_value_id_map); + const MLPadOptions* options = + static_cast<const MLPadOptions*>(pad_operator->Options()); + CHECK(options); + if (options->mode() != V8MLPaddingMode::Enum::kConstant) { + error_message = "XNNPACK only supports constant padding mode."; + return xnn_status_unsupported_parameter; + } + + const Vector<uint32_t> beginning_padding = pad_operator->BeginningPadding(); + Vector<size_t> pre_paddings(beginning_padding.size()); + base::ranges::transform( + beginning_padding, pre_paddings.begin(), + [](uint32_t p) { return base::checked_cast<size_t>(p); }); + const Vector<uint32_t> ending_padding = pad_operator->EndingPadding(); + Vector<size_t> post_paddings(ending_padding.size()); + base::ranges::transform( + ending_padding, post_paddings.begin(), + [](uint32_t p) { return base::checked_cast<size_t>(p); }); + + float padding_value = options->value(); + const uint32_t flags = 0; + // XNNPACK will memcpy the content of `pre_paddings` and `post_paddings` + // vectors to its internal structure, so it is safe to release `pre_paddings` + // and `post_padding` vectors after this call. Please refer to the + // implementation at: + // https://source.chromium.org/chromium/chromium/src/+/main:third_party/xnnpack/src/src/subgraph/static-constant-pad.c;l=245 + XNN_CHECK_STATUS_AND_SET_ERROR_MESSAGE(xnn_define_static_constant_pad( + subgraph, pre_paddings.data(), post_paddings.data(), padding_value, + input_id, output_id, flags)); + return xnn_status_success; +} + xnn_status DefineXnnNodeForPool2d(xnn_subgraph_t subgraph, const MLOperator* pool2d, const OperandValueIdMap& operand_value_id_map, @@ -1108,6 +1150,10 @@ XNN_CHECK_STATUS(DefineXnnNodeForHardSwish( subgraph, ml_operator, operand_value_id_map, error_message)); break; + case MLOperator::OperatorKind::kPad: + XNN_CHECK_STATUS(DefineXnnNodeForPad( + subgraph, ml_operator, operand_value_id_map, error_message)); + break; // Define XNNPACK Node for pool2d operators. case MLOperator::OperatorKind::kAveragePool2d: case MLOperator::OperatorKind::kMaxPool2d: {
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 8b3d536..4295de0 100644 --- a/third_party/blink/renderer/modules/ml/webnn/ml_operator.cc +++ b/third_party/blink/renderer/modules/ml/webnn/ml_operator.cc
@@ -103,4 +103,21 @@ is_connected_ = true; } +MLPadOperator::MLPadOperator(MLGraphBuilder* builder, + const Vector<uint32_t>& beginning_padding, + const Vector<uint32_t>& ending_padding, + const bindings::DictionaryBase* options) + : MLOperator(builder, MLOperator::OperatorKind::kPad, options), + beginning_padding_(beginning_padding), + ending_padding_(ending_padding) {} + +MLPadOperator::~MLPadOperator() = default; + +const Vector<uint32_t>& MLPadOperator::BeginningPadding() const { + return beginning_padding_; +} + +const Vector<uint32_t>& MLPadOperator::EndingPadding() const { + return ending_padding_; +} } // 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 d4d37c57..179d599 100644 --- a/third_party/blink/renderer/modules/ml/webnn/ml_operator.h +++ b/third_party/blink/renderer/modules/ml/webnn/ml_operator.h
@@ -17,7 +17,7 @@ class MLGraphBuilder; class MLOperand; -class MODULES_EXPORT MLOperator final : public GarbageCollected<MLOperator> { +class MODULES_EXPORT MLOperator : public GarbageCollected<MLOperator> { public: enum class OperatorKind { // Keep the order as the same as build methods of MLGraphBuilder. @@ -99,6 +99,25 @@ HeapVector<Member<const MLOperand>> outputs_; }; +class MODULES_EXPORT MLPadOperator : public MLOperator { + public: + MLPadOperator(MLGraphBuilder* builder, + const Vector<uint32_t>& beginning_padding, + const Vector<uint32_t>& ending_padding, + const bindings::DictionaryBase* options = nullptr); + + MLPadOperator(const MLPadOperator&) = delete; + MLPadOperator& operator=(const MLPadOperator&) = delete; + + ~MLPadOperator(); + + const Vector<uint32_t>& BeginningPadding() const; + const Vector<uint32_t>& EndingPadding() const; + + private: + Vector<uint32_t> beginning_padding_; + Vector<uint32_t> ending_padding_; +}; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_ML_WEBNN_ML_OPERATOR_H_
diff --git a/third_party/blink/renderer/modules/presentation/presentation_connection.cc b/third_party/blink/renderer/modules/presentation/presentation_connection.cc index e721ab4d..28480f95 100644 --- a/third_party/blink/renderer/modules/presentation/presentation_connection.cc +++ b/third_party/blink/renderer/modules/presentation/presentation_connection.cc
@@ -12,9 +12,8 @@ #include "third_party/blink/renderer/core/dom/events/event.h" #include "third_party/blink/renderer/core/events/message_event.h" #include "third_party/blink/renderer/core/fileapi/file_error.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h" #include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer_view.h" @@ -119,35 +118,33 @@ class PresentationConnection::BlobLoader final : public GarbageCollected<PresentationConnection::BlobLoader>, - public FileReaderLoaderClient { + public FileReaderAccumulator { public: BlobLoader(scoped_refptr<BlobDataHandle> blob_data_handle, PresentationConnection* presentation_connection, scoped_refptr<base::SingleThreadTaskRunner> task_runner) : presentation_connection_(presentation_connection), - loader_(MakeGarbageCollected<FileReaderLoader>( - FileReadType::kReadAsArrayBuffer, - this, - std::move(task_runner))) { + loader_( + MakeGarbageCollected<FileReaderLoader>(this, + std::move(task_runner))) { loader_->Start(std::move(blob_data_handle)); } ~BlobLoader() override = default; - // FileReaderLoaderClient functions. - void DidStartLoading() override {} - void DidReceiveData() override {} - void DidFinishLoading() override { - presentation_connection_->DidFinishLoadingBlob( - loader_->TakeContents().AsDOMArrayBuffer()); + // FileReaderAccumulator functions. + void DidFinishLoading(FileReaderData contents) override { + auto* buffer = std::move(contents).AsDOMArrayBuffer(); + presentation_connection_->DidFinishLoadingBlob(buffer); } void DidFail(FileErrorCode error_code) override { + FileReaderAccumulator::DidFail(error_code); presentation_connection_->DidFailLoadingBlob(error_code); } void Cancel() { loader_->Cancel(); } void Trace(Visitor* visitor) const override { - FileReaderLoaderClient::Trace(visitor); + FileReaderAccumulator::Trace(visitor); visitor->Trace(presentation_connection_); visitor->Trace(loader_); }
diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc index a99ca90..7a543d0 100644 --- a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc +++ b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc
@@ -52,9 +52,8 @@ #include "third_party/blink/renderer/bindings/core/v8/capture_source_location.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/fileapi/file_error.h" -#include "third_party/blink/renderer/core/fileapi/file_read_type.h" +#include "third_party/blink/renderer/core/fileapi/file_reader_client.h" #include "third_party/blink/renderer/core/fileapi/file_reader_loader.h" -#include "third_party/blink/renderer/core/fileapi/file_reader_loader_client.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/loader/base_fetch_context.h" @@ -130,7 +129,7 @@ class WebSocketChannelImpl::BlobLoader final : public GarbageCollected<WebSocketChannelImpl::BlobLoader>, - public FileReaderLoaderClient { + public FileReaderClient { public: BlobLoader(scoped_refptr<BlobDataHandle>, WebSocketChannelImpl*, @@ -139,14 +138,14 @@ void Cancel(); - // FileReaderLoaderClient functions. - void DidStartLoading() override; - void DidReceiveDataForClient(const char* data, unsigned data_length) override; + // FileReaderClient functions. + FileErrorCode DidStartLoading(uint64_t, uint64_t) override; + FileErrorCode DidReceiveData(const char* data, unsigned data_length) override; void DidFinishLoading() override; void DidFail(FileErrorCode) override; void Trace(Visitor* visitor) const override { - FileReaderLoaderClient::Trace(visitor); + FileReaderClient::Trace(visitor); visitor->Trace(channel_); visitor->Trace(loader_); } @@ -159,6 +158,8 @@ MessageData data_; size_t size_ = 0; size_t offset_ = 0; + + bool blob_too_large_ = false; }; WebSocketChannelImpl::BlobLoader::BlobLoader( @@ -166,10 +167,8 @@ WebSocketChannelImpl* channel, scoped_refptr<base::SingleThreadTaskRunner> task_runner) : channel_(channel), - loader_( - MakeGarbageCollected<FileReaderLoader>(FileReadType::kReadByClient, - this, - std::move(task_runner))) { + loader_(MakeGarbageCollected<FileReaderLoader>(this, + std::move(task_runner))) { loader_->Start(std::move(blob_data_handle)); } @@ -179,29 +178,30 @@ data_ = nullptr; } -void WebSocketChannelImpl::BlobLoader::DidStartLoading() { +FileErrorCode WebSocketChannelImpl::BlobLoader::DidStartLoading(uint64_t, + uint64_t) { const absl::optional<uint64_t> size = loader_->TotalBytes(); DCHECK(size); if (size.value() > std::numeric_limits<size_t>::max()) { - loader_->Cancel(); - loader_ = nullptr; - channel_->BlobTooLarge(); - return; + blob_too_large_ = true; + return FileErrorCode::kAbortErr; } size_ = static_cast<size_t>(size.value()); data_ = WebSocketChannelImpl::CreateMessageData( channel_->execution_context_->GetIsolate(), size_); + return FileErrorCode::kOK; } -void WebSocketChannelImpl::BlobLoader::DidReceiveDataForClient( +FileErrorCode WebSocketChannelImpl::BlobLoader::DidReceiveData( const char* data, unsigned data_length) { const size_t data_to_copy = std::min(size_ - offset_, static_cast<size_t>(data_length)); if (!data_to_copy) - return; + return FileErrorCode::kOK; memcpy(data_.get() + offset_, data, data_to_copy); offset_ += data_to_copy; + return FileErrorCode::kOK; } void WebSocketChannelImpl::BlobLoader::DidFinishLoading() { @@ -212,6 +212,10 @@ } void WebSocketChannelImpl::BlobLoader::DidFail(FileErrorCode error_code) { + if (error_code == FileErrorCode::kAbortErr && blob_too_large_) { + blob_too_large_ = false; + channel_->BlobTooLarge(); + } channel_->DidFailLoadingBlob(error_code); loader_ = nullptr; data_ = nullptr;
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc index 8c3d627..d578c7bd 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -300,7 +300,7 @@ RasterInterface()->WritePixels( GetBackingMailboxForOverwrite(kOrderingBarrier), x, y, /*dst_plane_index=*/0, GetBackingTextureTarget(), - base::checked_cast<GLuint>(row_bytes), orig_info, pixels); + SkPixmap(orig_info, pixels, row_bytes)); // If the overdraw optimization kicked in, we need to indicate that the // pixels do not need to be cleared, otherwise the subsequent @@ -879,8 +879,7 @@ WillDraw(); RasterInterface()->WritePixels( resource_->GetBackBufferMailbox(), x, y, /*dst_plane_index=*/0, - GetBackingTextureTarget(), base::checked_cast<GLuint>(row_bytes), - orig_info, pixels); + GetBackingTextureTarget(), SkPixmap(orig_info, pixels, row_bytes)); return true; }
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 901a97f..d9716a1 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -6687,6 +6687,7 @@ # Sheriff 2023-04-05 crbug.com/1430215 external/wpt/dom/events/scrolling/scrollend-event-fired-to-window.html [ Failure Pass ] +crbug.com/1430986 http/tests/inspector-protocol/tracing/page-load-metrics.js [ Failure Pass Timeout ] # Sheriff 2023-04-06 crbug.com/1362106 [ Linux ] media/video-source-error-no-candidate.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/navigator-storage-estimate.tentative.https.window.js b/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/navigator-storage-estimate.tentative.https.window.js deleted file mode 100644 index af7c8d7..0000000 --- a/third_party/blink/web_tests/external/wpt/html/anonymous-iframe/navigator-storage-estimate.tentative.https.window.js +++ /dev/null
@@ -1,77 +0,0 @@ -// META: timeout=long -// META: script=/common/get-host-info.sub.js -// META: script=/common/utils.js -// META: script=/common/dispatcher/dispatcher.js -// META: script=/html/cross-origin-embedder-policy/credentialless/resources/common.js -// META: script=./resources/common.js - -promise_test(async test => { - // 4 actors: 2 normal iframes and 2 credentialless iframes. - const origin = get_host_info().HTTPS_REMOTE_ORIGIN; - const iframes = [ - newIframe(origin), - newIframe(origin), - newIframeCredentialless(origin), - newIframeCredentialless(origin), - ]; - - // "token()" is used to get unique value for every execution of the test. This - // avoids potential side effects of one run toward the second. - const g_db_store = token(); - const g_db_name = token(); - const g_db_version = 1; - - // 1. Write a different key-value pair from every iframe in IndexedDB. To - // check usage is accounted separately, values of different sizes are used. - await Promise.all(iframes.map(async (iframe, i) => { - const response_channel = token(); - send(iframe, ` - // Open the database: - const request = indexedDB.open("${g_db_name}", "${g_db_version}"); - request.onupgradeneeded = () => { - request.result.createObjectStore("${g_db_store}", {keyPath: "id"}); - }; - await new Promise(r => request.onsuccess = r); - const db = request.result; - - // Write the value: - const transaction_write = db.transaction("${g_db_store}", "readwrite"); - transaction_write.objectStore("${g_db_store}").add({ - id: "${token()}", - value: new Uint8Array(${Math.pow(10, 2+i)}) - }); - await transaction_write.complete; - - db.close(); - send("${response_channel}", "Done"); - `); - - assert_equals(await receive(response_channel), "Done"); - })); - - // 2. Read the quota estimation for every iframes. - const estimates = await Promise.all(iframes.map(async iframe => { - const response_channel = token(); - send(iframe, ` - const {quota, usage} = await navigator.storage.estimate(); - send("${response_channel}", JSON.stringify({quota, usage})); - `); - return JSON.parse(await receive(response_channel)); - })); - - // Two storage bucket must be used: - // - One for the two credentialless iframes, - // - One for the two normal iframes. - assert_equals(estimates[0].usage, estimates[1].usage, - "Normal iframes must share the same bucket"); - assert_equals(estimates[2].usage, estimates[3].usage, - "Credentialless iframes must share the same storage bucket"); - assert_greater_than(estimates[2].usage, 10 * estimates[0].usage, - "Normal and credentialless iframes must not not share the same bucket"); - - // A priori, buckets for credentiallesses and normal iframes have no reasons - // to be assigned different capacities: - assert_equals(estimates[0].quota, estimates[1].quota, "Same quota (0 vs 1)"); - assert_equals(estimates[0].quota, estimates[2].quota, "Same quota (0 vs 2)"); - assert_equals(estimates[0].quota, estimates[3].quota, "Same quota (0 vs 3)"); -})
diff --git a/third_party/blink/web_tests/flag-specific/disable-site-isolation-trials/external/wpt/webnn/pad.https.any-expected.txt b/third_party/blink/web_tests/flag-specific/disable-site-isolation-trials/external/wpt/webnn/pad.https.any-expected.txt new file mode 100644 index 0000000..b35360cb --- /dev/null +++ b/third_party/blink/web_tests/flag-specific/disable-site-isolation-trials/external/wpt/webnn/pad.https.any-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS pad float32 1D tensor default options / async +PASS pad float32 2D tensor default options / async +PASS pad float32 3D tensor default options / async +PASS pad float32 4D tensor default options / async +PASS pad float32 5D tensor default options / async +PASS pad float32 2D tensor explicit options.mode='constant' / async +PASS pad float32 2D tensor options.value default constant mode / async +FAIL pad float32 4D tensor options.mode='edge' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +FAIL pad float32 4D tensor options.mode='reflection' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +FAIL pad float32 4D tensor options.mode='symmetric' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/webnn/pad.https.any-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/webnn/pad.https.any-expected.txt new file mode 100644 index 0000000..b35360cb --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/external/wpt/webnn/pad.https.any-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS pad float32 1D tensor default options / async +PASS pad float32 2D tensor default options / async +PASS pad float32 3D tensor default options / async +PASS pad float32 4D tensor default options / async +PASS pad float32 5D tensor default options / async +PASS pad float32 2D tensor explicit options.mode='constant' / async +PASS pad float32 2D tensor options.value default constant mode / async +FAIL pad float32 4D tensor options.mode='edge' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +FAIL pad float32 4D tensor options.mode='reflection' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +FAIL pad float32 4D tensor options.mode='symmetric' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/webnn/pad.https.any-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/webnn/pad.https.any-expected.txt index 37b60b04..b35360cb 100644 --- a/third_party/blink/web_tests/platform/win/external/wpt/webnn/pad.https.any-expected.txt +++ b/third_party/blink/web_tests/platform/win/external/wpt/webnn/pad.https.any-expected.txt
@@ -1,13 +1,13 @@ This is a testharness.js-based test. -FAIL pad float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 4D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 5D tensor default options / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 2D tensor explicit options.mode='constant' / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 2D tensor options.value default constant mode / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 4D tensor options.mode='edge' / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 4D tensor options.mode='reflection' / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." -FAIL pad float32 4D tensor options.mode='symmetric' / async promise_test: Unhandled rejection with value: object "NotSupportedError: The operator (pad) is not supported." +PASS pad float32 1D tensor default options / async +PASS pad float32 2D tensor default options / async +PASS pad float32 3D tensor default options / async +PASS pad float32 4D tensor default options / async +PASS pad float32 5D tensor default options / async +PASS pad float32 2D tensor explicit options.mode='constant' / async +PASS pad float32 2D tensor options.value default constant mode / async +FAIL pad float32 4D tensor options.mode='edge' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +FAIL pad float32 4D tensor options.mode='reflection' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +FAIL pad float32 4D tensor options.mode='symmetric' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/webnn/pad.https.any.worker-expected.txt b/third_party/blink/web_tests/platform/win/external/wpt/webnn/pad.https.any.worker-expected.txt index 33ca83a..b01565a 100644 --- a/third_party/blink/web_tests/platform/win/external/wpt/webnn/pad.https.any.worker-expected.txt +++ b/third_party/blink/web_tests/platform/win/external/wpt/webnn/pad.https.any.worker-expected.txt
@@ -1,14 +1,14 @@ This is a testharness.js-based test. -FAIL pad float32 1D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 2D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 3D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 4D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 5D tensor default options / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 2D tensor explicit options.mode='constant' / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 2D tensor options.value default constant mode / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 4D tensor options.mode='edge' / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 4D tensor options.mode='reflection' / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. -FAIL pad float32 4D tensor options.mode='symmetric' / sync Failed to execute 'buildSync' on 'MLGraphBuilder': The operator (pad) is not supported. +PASS pad float32 1D tensor default options / sync +PASS pad float32 2D tensor default options / sync +PASS pad float32 3D tensor default options / sync +PASS pad float32 4D tensor default options / sync +PASS pad float32 5D tensor default options / sync +PASS pad float32 2D tensor explicit options.mode='constant' / sync +PASS pad float32 2D tensor options.value default constant mode / sync +FAIL pad float32 4D tensor options.mode='edge' / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK only supports constant padding mode. +FAIL pad float32 4D tensor options.mode='reflection' / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK only supports constant padding mode. +FAIL pad float32 4D tensor options.mode='symmetric' / sync Failed to execute 'buildSync' on 'MLGraphBuilder': XNNPACK only supports constant padding mode. FAIL pad float32 1D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function" FAIL pad float32 2D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function" FAIL pad float32 3D tensor default options / async promise_test: Unhandled rejection with value: object "TypeError: builder.build is not a function"
diff --git a/third_party/blink/web_tests/platform/win10/external/wpt/webnn/pad.https.any-expected.txt b/third_party/blink/web_tests/platform/win10/external/wpt/webnn/pad.https.any-expected.txt new file mode 100644 index 0000000..b35360cb --- /dev/null +++ b/third_party/blink/web_tests/platform/win10/external/wpt/webnn/pad.https.any-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS pad float32 1D tensor default options / async +PASS pad float32 2D tensor default options / async +PASS pad float32 3D tensor default options / async +PASS pad float32 4D tensor default options / async +PASS pad float32 5D tensor default options / async +PASS pad float32 2D tensor explicit options.mode='constant' / async +PASS pad float32 2D tensor options.value default constant mode / async +FAIL pad float32 4D tensor options.mode='edge' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +FAIL pad float32 4D tensor options.mode='reflection' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +FAIL pad float32 4D tensor options.mode='symmetric' / async promise_test: Unhandled rejection with value: object "NotSupportedError: XNNPACK only supports constant padding mode." +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/sandbox-attribute.https.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/sandbox-attribute.https.html new file mode 100644 index 0000000..1458145 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/sandbox-attribute.https.html
@@ -0,0 +1,63 @@ +<!DOCTYPE html> +<title>Test fenced frame sandbox attribute.</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/utils.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="resources/utils.js"></script> + +<body> +<script> + +async function runTest(t, sandbox_flags, success) { + const frame = await attachFencedFrameContext({ + generator_api: 'fledge', resolve_to_config: true, + attributes: [['sandbox', sandbox_flags]]}); + + assert_equals(frame.element.sandbox.value, sandbox_flags); + if (sandbox_flags) { + assert_equals(frame.element.sandbox.length, sandbox_flags.split(' ').length); + } else { + assert_equals(frame.element.sandbox.length, 0); + } + + const result = await Promise.any([ + frame.execute(() => { return 'success';}), + new Promise(resolve => t.step_timeout(() => resolve('failure'), 2000))]); + if (success) { + assert_equals(result, 'success'); + } else { + assert_equals(result, 'failure'); + } +} + +// We omit test cases that lack the sandbox attribute, because that's covered +// by every other test that doesn't explicitly use the `sandbox` attribute. + +promise_test(async t => { + return runTest(t, '', false); +}, 'Navigation fails with no allowed features'); + +promise_test(async t => { + return runTest(t, 'allow-same-origin allow-forms allow-scripts allow-popups allow-popups-to-escape-sandbox allow-top-navigation-by-user-activation', true); +}, 'Navigation succeeds with exactly the required unsandboxed features'); + +promise_test(async t => { + return runTest(t, 'allow-same-origin allow-forms allow-scripts allow-popups allow-popups-to-escape-sandbox allow-top-navigation-by-user-activation allow-pointer-lock', true); +}, 'Navigation succeeds with extra unsandboxed features'); + +promise_test(async t => { + return runTest(t, 'allow-same-origin allow-forms allow-scripts allow-popups allow-popups-to-escape-sandbox', false); +}, 'Navigation fails with too few unsandboxed features'); + +promise_test(async t => { + return runTest(t, 'foo bar baz', false); +}, 'Navigation fails with malformed sandbox flags'); + +promise_test(async t => { + return runTest(t, 'allow-same-origin allow-forms allow-scripts allow-popups allow-popups-to-escape-sandbox allow-top-navigation-by-user-activation allow-foobarbaz', true); +}, 'Navigation fails with the required unsandboxed features, plus some malformed ones'); + +</script> +</body>
diff --git a/tools/mb/mb.py b/tools/mb/mb.py index 8d32e16..611a4c8c5 100755 --- a/tools/mb/mb.py +++ b/tools/mb/mb.py
@@ -1728,7 +1728,7 @@ and not is_fuchsia and not is_cros_device) asan = 'is_asan=true' in vals['gn_args'] - lsan = 'is_asan=true' in vals['gn_args'] + lsan = 'is_lsan=true' in vals['gn_args'] msan = 'is_msan=true' in vals['gn_args'] tsan = 'is_tsan=true' in vals['gn_args'] cfi_diag = 'use_cfi_diag=true' in vals['gn_args']
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 01be3bf9..6ed4d6874 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -60,7 +60,7 @@ <int value="6" label="kNotShownNonGoogleDSE"/> <int value="7" label="kNotShownLocalHost"/> <int value="8" label="kNotShownOptimizationGuideNotAllowed"/> - <int value="9" label="kShownWithoutMsbb"/> + <int value="9" label="kShownWithoutMsbb (deprecated)"/> <int value="10" label="kSameTabNavigation"/> </enum> @@ -35796,6 +35796,8 @@ <int value="1778" label="OS_EVENTS_ISEVENTSUPPORTED"/> <int value="1779" label="OS_EVENTS_STARTCAPTURINGEVENTS"/> <int value="1780" label="OS_EVENTS_STOPCAPTURINGEVENTS"/> + <int value="1781" label="SIDEPANEL_SETPANELBEHAVIOR"/> + <int value="1782" label="SIDEPANEL_GETPANELBEHAVIOR"/> </enum> <enum name="ExtensionIconState"> @@ -42053,6 +42055,7 @@ <int value="4538" label="GamepadTouchSurfaceId"/> <int value="4539" label="GamepadTouchPosition"/> <int value="4540" label="GamepadTouchSurfaceDimension"/> + <int value="4541" label="SandboxViaFencedFrame"/> </enum> <enum name="FeaturePolicyAllowlistType"> @@ -59400,6 +59403,7 @@ <int value="-1385221197" label="AllowSignedHTTPExchangeCertsWithoutExtension:enabled"/> <int value="-1384426209" label="SharingDeviceRegistration:disabled"/> + <int value="-1383674566" label="EnableProtoApiForClassifyUrl:enabled"/> <int value="-1383597259" label="SyncUserConsentSeparateType:disabled"/> <int value="-1383145700" label="AutofillDoNotMigrateUnsupportedLocalCards:enabled"/> @@ -62174,6 +62178,7 @@ <int value="121911155" label="DesktopPWAsElidedExtensionsMenu:enabled"/> <int value="121994167" label="kOmniboxCR23SteadyStateIcons:disabled"/> <int value="122959683" label="WebViewJavaJsBridgeMojo:enabled"/> + <int value="123008918" label="EnableProtoApiForClassifyUrl:disabled"/> <int value="123097915" label="FaviconsFromWebManifest:enabled"/> <int value="124590378" label="LensStandalone:disabled"/> <int value="125581289" label="WebRtcHWVP8Encoding:disabled"/> @@ -85630,6 +85635,12 @@ <int value="1" label="Notification"/> </enum> +<enum name="PrivacyIndicatorsSource"> + <int value="0" label="Apps"/> + <int value="1" label="Linux VM"/> + <int value="2" label="Screen Capture"/> +</enum> + <enum name="PrivacyIndicatorsType"> <int value="2" label="Camera is in use"/> <int value="4" label="Microphone is in use"/>
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml index 4b9624d..b2b59eb9 100644 --- a/tools/metrics/histograms/metadata/ash/histograms.xml +++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -4681,6 +4681,16 @@ </summary> </histogram> +<histogram name="Ash.PrivacyIndicators.Source" enum="PrivacyIndicatorsSource" + expires_after="2023-09-19"> + <owner>leandre@chromium.org</owner> + <owner>cros-status-area-eng@google.com</owner> + <summary> + Record the source that use privacy indicators. Emitted when there's a client + calling into the function that updates the privacy indicators. + </summary> +</histogram> + <histogram name="Ash.PrivacyIndicators.{Icon}.AnimationSmoothness" units="%" expires_after="2023-09-19"> <owner>leandre@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index 9b42af22..f473a54 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -2745,6 +2745,16 @@ </token> </histogram> +<histogram name="Autofill.NewerStreetAddressWithSameStatusIsChosen" + enum="Boolean" expires_after="2023-09-13"> + <owner>jihadghanna@google.com</owner> + <owner>chrome-autofill-alerts@google.com</owner> + <summary> + Logs whether a street address merge operation favored the new or old address + because of the feature `kAutofillConvergeToExtremeLengthStreetAddress`. + </summary> +</histogram> + <histogram name="Autofill.NumberOfAutofilledFieldsAtSubmission.{AcceptanceStatus}" units="fields" expires_after="M120"> @@ -4462,7 +4472,29 @@ it. See the TouchToFillCreditCardMediator.java for details. Note that "Go to payment settings" click is also considered as the outcome, although it doesn't close the Touch To Fill. So in this case there will be a - double count for one bottom sheet showing. + double count for one bottom sheet showing. This histogram contains a bug of + not accounting all users' manual bottom sheet dismissal. It should be + removed after M114 is rolled out. + </summary> +</histogram> + +<histogram name="Autofill.TouchToFill.CreditCard.Outcome2" + enum="TouchToFill.CreditCard.Outcome" expires_after="2023-09-03"> + <owner>atsvirhckova@google.com</owner> + <owner>izuzic@google.com</owner> + <owner>chrome-autofill-team@google.com</owner> + <summary> + Records the outcome with which the bottom sheet was closed: credit card + selected, virtual card selected, go to payment settings, scan new credit + card or dismissed with no action. The metric is recorded right after user + has done the action: the credit card selection or some other option (which + always leads to the bottom sheet being closed) or swiped the sheet to close + it. See the TouchToFillCreditCardMediator.java for details. Note that + "Go to payment settings" click is also considered as the outcome, + although it doesn't close the Touch To Fill. So in this case there will be a + double count for one bottom sheet showing. This fixes the bug introduced in + Autofill.TouchToFill.CreditCard.Outcome and counts all user bottom sheet + dismissals. The old histogram should be removed after M114 is rolled out. </summary> </histogram>
diff --git a/tools/metrics/histograms/metadata/event/histograms.xml b/tools/metrics/histograms/metadata/event/histograms.xml index ba1b4db..169945e 100644 --- a/tools/metrics/histograms/metadata/event/histograms.xml +++ b/tools/metrics/histograms/metadata/event/histograms.xml
@@ -135,25 +135,6 @@ </summary> </histogram> -<histogram - name="Event.InputEventCoalescing.ScrollUpdate.{InputType}UpdatesPerFrame" - units="counts" expires_after="2023-12-18"> - <owner>nuskos@google.com</owner> - <owner>mekk@google.com</owner> - <owner>woa-performance@google.com</owner> - <summary> - Each time a user scrolls the screen, GestureScrollUpdates are handled - serially by chrome to generate frames corresponding to user input, this - metric counts the number of gestures observed in a frame. - - We expect {InputType} per frame on Android, other platforms may vary. - </summary> - <token key="InputType"> - <variant name="Fling" summary="1 fling input"/> - <variant name="Gesture" summary="2 inputs"/> - </token> -</histogram> - <histogram name="Event.InputEventPrediction.Scroll.Frame{ScoreType}" units="pixels" expires_after="2024-03-13"> <owner>flackr@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml index e2f13c6..afb2383 100644 --- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -1905,7 +1905,7 @@ </histogram> <histogram name="SafeBrowsing.RT.Response.VerdictType.{UserPopulation}" - enum="SafeBrowsingRTLookupResponseVerdictType" expires_after="2023-05-09"> + enum="SafeBrowsingRTLookupResponseVerdictType" expires_after="2023-10-06"> <owner>zackhan@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/traffic_annotation/safe_list.txt b/tools/traffic_annotation/safe_list.txt index 34be352..f4a25a9a2 100644 --- a/tools/traffic_annotation/safe_list.txt +++ b/tools/traffic_annotation/safe_list.txt
@@ -36,7 +36,6 @@ missing,chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.cc missing,chrome/browser/android/feedback/connectivity_checker.cc missing,chrome/browser/commerce/subscriptions/android/java/src/org/chromium/chrome/browser/subscriptions/CommerceSubscriptionsServiceProxy.java -missing,chrome/browser/page_annotations/android/java/src/org/chromium/chrome/browser/page_annotations/PageAnnotationsServiceProxy.java missing,chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/StorePersistedTabData.java missing,net/proxy_resolution/proxy_config_service_android.cc @@ -76,7 +75,6 @@ missing_new_fields,chrome/browser/ash/bruschetta/bruschetta_installer.cc missing_new_fields,chrome/browser/ash/customization/customization_document.cc missing_new_fields,chrome/browser/ash/customization/customization_wallpaper_downloader.cc -missing_new_fields,chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc missing_new_fields,chrome/browser/ash/input_method/ime_service_connector.cc missing_new_fields,chrome/browser/ash/login/gaia_reauth_token_fetcher.cc missing_new_fields,chrome/browser/ash/login/marketing_backend_connector.cc
diff --git a/tools/traffic_annotation/scripts/test_data/out/Debug/pyproto/chrome/browser/privacy/traffic_annotation_pb2.py b/tools/traffic_annotation/scripts/test_data/out/Debug/pyproto/chrome/browser/privacy/traffic_annotation_pb2.py index 76d0c70..29e8b16 100644 --- a/tools/traffic_annotation/scripts/test_data/out/Debug/pyproto/chrome/browser/privacy/traffic_annotation_pb2.py +++ b/tools/traffic_annotation/scripts/test_data/out/Debug/pyproto/chrome/browser/privacy/traffic_annotation_pb2.py
@@ -15,7 +15,7 @@ import chrome_device_policy_pb2 as chrome__device__policy__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18traffic_annotation.proto\x12\x12traffic_annotation\x1a\x15\x63hrome_settings.proto\x1a\x1a\x63hrome_device_policy.proto\"\xfe\x0f\n\x18NetworkTrafficAnnotation\x12\x11\n\tunique_id\x18\x01 \x01(\t\x12J\n\x06source\x18\x02 \x01(\x0b\x32:.traffic_annotation.NetworkTrafficAnnotation.TrafficSource\x12P\n\tsemantics\x18\x03 \x01(\x0b\x32=.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics\x12J\n\x06policy\x18\x04 \x01(\x0b\x32:.traffic_annotation.NetworkTrafficAnnotation.TrafficPolicy\x12\x10\n\x08\x63omments\x18\x05 \x01(\t\x1a@\n\rTrafficSource\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x03 \x01(\x05\x12\x13\n\x0b\x63\x61ll_number\x18\x04 \x01(\x05\x1a\xe6\t\n\x10TrafficSemantics\x12\x0e\n\x06sender\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07trigger\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12^\n\x0b\x64\x65stination\x18\x05 \x01(\x0e\x32I.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.Destination\x12\x19\n\x11\x64\x65stination_other\x18\x06 \x01(\t\x12X\n\x08internal\x18\x07 \x01(\x0b\x32\x46.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.Internal\x12Y\n\tuser_data\x18\x08 \x01(\x0b\x32\x46.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.UserData\x12\x15\n\rlast_reviewed\x18\t \x01(\t\x1a\x98\x01\n\x08Internal\x12`\n\x08\x63ontacts\x18\x01 \x03(\x0b\x32N.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.Internal.Contact\x1a*\n\x07\x43ontact\x12\x0f\n\x05\x65mail\x18\x01 \x01(\tH\x00\x42\x0e\n\x0c\x63ontact_type\x1a\xcd\x04\n\x08UserData\x12\x61\n\x04type\x18\x01 \x03(\x0e\x32S.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.UserData.UserDataType\"\xdd\x03\n\x0cUserDataType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x10\n\x0c\x41\x43\x43\x45SS_TOKEN\x10\x01\x12\x0b\n\x07\x41\x44\x44RESS\x10\x02\x12\x0e\n\nANDROID_ID\x10\x03\x12\x07\n\x03\x41GE\x10\x04\x12\x12\n\x0e\x41RBITRARY_DATA\x10\x05\x12\x0e\n\nBIRTH_DATE\x10\x06\x12\x0f\n\x0b\x43REDENTIALS\x10\x07\x12\x14\n\x10\x43REDIT_CARD_DATA\x10\x08\x12\r\n\tDEVICE_ID\x10\t\x12\t\n\x05\x45MAIL\x10\n\x12\r\n\tFILE_DATA\x10\x0b\x12\x0b\n\x07GAIA_ID\x10\x0c\x12\n\n\x06GENDER\x10\r\x12\x11\n\rGOVERNMENT_ID\x10\x0e\x12\t\n\x05IMAGE\x10\x0f\x12\x0e\n\nIP_ADDRESS\x10\x10\x12\x13\n\x0fLOCATION_COARSE\x10\x11\x12\x14\n\x10LOCATION_PRECISE\x10\x12\x12\x08\n\x04NAME\x10\x13\x12\t\n\x05PHONE\x10\x14\x12\x10\n\x0cPROFILE_DATA\x10\x15\x12\x11\n\rSENSITIVE_URL\x10\x16\x12\x0e\n\nSESSION_ID\x10\x17\x12\r\n\tTIMESTAMP\x10\x18\x12\x0e\n\nUSER_AGENT\x10\x19\x12\x10\n\x0cUSER_CONTENT\x10\x1a\x12\x0c\n\x08USERNAME\x10\x1b\x12\n\n\x05OTHER\x10\xe7\x07\x12\t\n\x04NONE\x10\xe8\x07\"\\\n\x0b\x44\x65stination\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07WEBSITE\x10\x01\x12\x18\n\x14GOOGLE_OWNED_SERVICE\x10\x02\x12\t\n\x05LOCAL\x10\x03\x12\n\n\x05OTHER\x10\xe8\x07\x1a\xa7\x03\n\rTrafficPolicy\x12\x62\n\x0f\x63ookies_allowed\x18\x01 \x01(\x0e\x32I.traffic_annotation.NetworkTrafficAnnotation.TrafficPolicy.CookiesAllowed\x12\x15\n\rcookies_store\x18\x02 \x01(\t\x12\x0f\n\x07setting\x18\x03 \x01(\t\x12\x41\n\rchrome_policy\x18\x04 \x03(\x0b\x32*.enterprise_management.ChromeSettingsProto\x12N\n\x14\x63hrome_device_policy\x18\x07 \x03(\x0b\x32\x30.enterprise_management.ChromeDeviceSettingsProto\x12&\n\x1epolicy_exception_justification\x18\x05 \x01(\t\x12\x1b\n\x13\x64\x65precated_policies\x18\x06 \x03(\t\"2\n\x0e\x43ookiesAllowed\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x06\n\x02NO\x10\x01\x12\x07\n\x03YES\x10\x02\"u\n!ExtractedNetworkTrafficAnnotation\x12P\n\x1anetwork_traffic_annotation\x18\x01 \x03(\x0b\x32,.traffic_annotation.NetworkTrafficAnnotation\"x\n$WhitelistedNetworkTrafficAnnotations\x12P\n\x1anetwork_traffic_annotation\x18\x01 \x03(\x0b\x32,.traffic_annotation.NetworkTrafficAnnotation\"\xec\x01\n\x19NetworkTrafficAnnotations\x12\x64\n%extracted_network_traffic_annotations\x18\x01 \x01(\x0b\x32\x35.traffic_annotation.ExtractedNetworkTrafficAnnotation\x12i\n\'whitelisted_network_traffic_annotations\x18\x02 \x01(\x0b\x32\x38.traffic_annotation.WhitelistedNetworkTrafficAnnotationsB\x02H\x03\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18traffic_annotation.proto\x12\x12traffic_annotation\x1a\x15\x63hrome_settings.proto\x1a\x1a\x63hrome_device_policy.proto\"\x8f\x10\n\x18NetworkTrafficAnnotation\x12\x11\n\tunique_id\x18\x01 \x01(\t\x12J\n\x06source\x18\x02 \x01(\x0b\x32:.traffic_annotation.NetworkTrafficAnnotation.TrafficSource\x12P\n\tsemantics\x18\x03 \x01(\x0b\x32=.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics\x12J\n\x06policy\x18\x04 \x01(\x0b\x32:.traffic_annotation.NetworkTrafficAnnotation.TrafficPolicy\x12\x10\n\x08\x63omments\x18\x05 \x01(\t\x1a@\n\rTrafficSource\x12\x0c\n\x04\x66ile\x18\x01 \x01(\t\x12\x0c\n\x04line\x18\x03 \x01(\x05\x12\x13\n\x0b\x63\x61ll_number\x18\x04 \x01(\x05\x1a\xf7\t\n\x10TrafficSemantics\x12\x0e\n\x06sender\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07trigger\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12^\n\x0b\x64\x65stination\x18\x05 \x01(\x0e\x32I.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.Destination\x12\x19\n\x11\x64\x65stination_other\x18\x06 \x01(\t\x12X\n\x08internal\x18\x07 \x01(\x0b\x32\x46.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.Internal\x12Y\n\tuser_data\x18\x08 \x01(\x0b\x32\x46.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.UserData\x12\x15\n\rlast_reviewed\x18\t \x01(\t\x1a\x98\x01\n\x08Internal\x12`\n\x08\x63ontacts\x18\x01 \x03(\x0b\x32N.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.Internal.Contact\x1a*\n\x07\x43ontact\x12\x0f\n\x05\x65mail\x18\x01 \x01(\tH\x00\x42\x0e\n\x0c\x63ontact_type\x1a\xde\x04\n\x08UserData\x12\x61\n\x04type\x18\x01 \x03(\x0e\x32S.traffic_annotation.NetworkTrafficAnnotation.TrafficSemantics.UserData.UserDataType\"\xee\x03\n\x0cUserDataType\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x10\n\x0c\x41\x43\x43\x45SS_TOKEN\x10\x01\x12\x0b\n\x07\x41\x44\x44RESS\x10\x02\x12\x0e\n\nANDROID_ID\x10\x03\x12\x07\n\x03\x41GE\x10\x04\x12\x12\n\x0e\x41RBITRARY_DATA\x10\x05\x12\x0e\n\nBIRTH_DATE\x10\x06\x12\x0f\n\x0b\x43REDENTIALS\x10\x07\x12\x14\n\x10\x43REDIT_CARD_DATA\x10\x08\x12\r\n\tDEVICE_ID\x10\t\x12\t\n\x05\x45MAIL\x10\n\x12\r\n\tFILE_DATA\x10\x0b\x12\x0b\n\x07GAIA_ID\x10\x0c\x12\n\n\x06GENDER\x10\r\x12\x11\n\rGOVERNMENT_ID\x10\x0e\x12\t\n\x05IMAGE\x10\x0f\x12\x0e\n\nIP_ADDRESS\x10\x10\x12\x13\n\x0fLOCATION_COARSE\x10\x11\x12\x14\n\x10LOCATION_PRECISE\x10\x12\x12\x08\n\x04NAME\x10\x13\x12\t\n\x05PHONE\x10\x14\x12\x10\n\x0cPROFILE_DATA\x10\x15\x12\x11\n\rSENSITIVE_URL\x10\x16\x12\x0e\n\nSESSION_ID\x10\x17\x12\r\n\tTIMESTAMP\x10\x18\x12\x0e\n\nUSER_AGENT\x10\x19\x12\x10\n\x0cUSER_CONTENT\x10\x1a\x12\x0c\n\x08USERNAME\x10\x1b\x12\x0f\n\x0bWEB_CONTENT\x10\x1c\x12\n\n\x05OTHER\x10\xe7\x07\x12\t\n\x04NONE\x10\xe8\x07\"\\\n\x0b\x44\x65stination\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x0b\n\x07WEBSITE\x10\x01\x12\x18\n\x14GOOGLE_OWNED_SERVICE\x10\x02\x12\t\n\x05LOCAL\x10\x03\x12\n\n\x05OTHER\x10\xe8\x07\x1a\xa7\x03\n\rTrafficPolicy\x12\x62\n\x0f\x63ookies_allowed\x18\x01 \x01(\x0e\x32I.traffic_annotation.NetworkTrafficAnnotation.TrafficPolicy.CookiesAllowed\x12\x15\n\rcookies_store\x18\x02 \x01(\t\x12\x0f\n\x07setting\x18\x03 \x01(\t\x12\x41\n\rchrome_policy\x18\x04 \x03(\x0b\x32*.enterprise_management.ChromeSettingsProto\x12N\n\x14\x63hrome_device_policy\x18\x07 \x03(\x0b\x32\x30.enterprise_management.ChromeDeviceSettingsProto\x12&\n\x1epolicy_exception_justification\x18\x05 \x01(\t\x12\x1b\n\x13\x64\x65precated_policies\x18\x06 \x03(\t\"2\n\x0e\x43ookiesAllowed\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x06\n\x02NO\x10\x01\x12\x07\n\x03YES\x10\x02\"u\n!ExtractedNetworkTrafficAnnotation\x12P\n\x1anetwork_traffic_annotation\x18\x01 \x03(\x0b\x32,.traffic_annotation.NetworkTrafficAnnotation\"x\n$WhitelistedNetworkTrafficAnnotations\x12P\n\x1anetwork_traffic_annotation\x18\x01 \x03(\x0b\x32,.traffic_annotation.NetworkTrafficAnnotation\"\xec\x01\n\x19NetworkTrafficAnnotations\x12\x64\n%extracted_network_traffic_annotations\x18\x01 \x01(\x0b\x32\x35.traffic_annotation.ExtractedNetworkTrafficAnnotation\x12i\n\'whitelisted_network_traffic_annotations\x18\x02 \x01(\x0b\x32\x38.traffic_annotation.WhitelistedNetworkTrafficAnnotationsB\x02H\x03\x62\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'traffic_annotation_pb2', globals()) @@ -24,29 +24,29 @@ DESCRIPTOR._options = None DESCRIPTOR._serialized_options = b'H\003' _NETWORKTRAFFICANNOTATION._serialized_start=100 - _NETWORKTRAFFICANNOTATION._serialized_end=2146 + _NETWORKTRAFFICANNOTATION._serialized_end=2163 _NETWORKTRAFFICANNOTATION_TRAFFICSOURCE._serialized_start=399 _NETWORKTRAFFICANNOTATION_TRAFFICSOURCE._serialized_end=463 _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS._serialized_start=466 - _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS._serialized_end=1720 + _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS._serialized_end=1737 _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_INTERNAL._serialized_start=882 _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_INTERNAL._serialized_end=1034 _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_INTERNAL_CONTACT._serialized_start=992 _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_INTERNAL_CONTACT._serialized_end=1034 _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_USERDATA._serialized_start=1037 - _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_USERDATA._serialized_end=1626 + _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_USERDATA._serialized_end=1643 _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_USERDATA_USERDATATYPE._serialized_start=1149 - _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_USERDATA_USERDATATYPE._serialized_end=1626 - _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_DESTINATION._serialized_start=1628 - _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_DESTINATION._serialized_end=1720 - _NETWORKTRAFFICANNOTATION_TRAFFICPOLICY._serialized_start=1723 - _NETWORKTRAFFICANNOTATION_TRAFFICPOLICY._serialized_end=2146 - _NETWORKTRAFFICANNOTATION_TRAFFICPOLICY_COOKIESALLOWED._serialized_start=2096 - _NETWORKTRAFFICANNOTATION_TRAFFICPOLICY_COOKIESALLOWED._serialized_end=2146 - _EXTRACTEDNETWORKTRAFFICANNOTATION._serialized_start=2148 - _EXTRACTEDNETWORKTRAFFICANNOTATION._serialized_end=2265 - _WHITELISTEDNETWORKTRAFFICANNOTATIONS._serialized_start=2267 - _WHITELISTEDNETWORKTRAFFICANNOTATIONS._serialized_end=2387 - _NETWORKTRAFFICANNOTATIONS._serialized_start=2390 - _NETWORKTRAFFICANNOTATIONS._serialized_end=2626 + _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_USERDATA_USERDATATYPE._serialized_end=1643 + _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_DESTINATION._serialized_start=1645 + _NETWORKTRAFFICANNOTATION_TRAFFICSEMANTICS_DESTINATION._serialized_end=1737 + _NETWORKTRAFFICANNOTATION_TRAFFICPOLICY._serialized_start=1740 + _NETWORKTRAFFICANNOTATION_TRAFFICPOLICY._serialized_end=2163 + _NETWORKTRAFFICANNOTATION_TRAFFICPOLICY_COOKIESALLOWED._serialized_start=2113 + _NETWORKTRAFFICANNOTATION_TRAFFICPOLICY_COOKIESALLOWED._serialized_end=2163 + _EXTRACTEDNETWORKTRAFFICANNOTATION._serialized_start=2165 + _EXTRACTEDNETWORKTRAFFICANNOTATION._serialized_end=2282 + _WHITELISTEDNETWORKTRAFFICANNOTATIONS._serialized_start=2284 + _WHITELISTEDNETWORKTRAFFICANNOTATIONS._serialized_end=2404 + _NETWORKTRAFFICANNOTATIONS._serialized_start=2407 + _NETWORKTRAFFICANNOTATIONS._serialized_end=2643 # @@protoc_insertion_point(module_scope)
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index 26525a8..e4d0235 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -363,7 +363,7 @@ <item id="chrome_commerce_waa_fetcher" added_in_milestone="107" content_hash_code="016d45fc" os_list="linux,windows,android,chromeos" file_path="components/commerce/core/account_checker.cc" /> <item id="favicon_fetcher_get_favicon" added_in_milestone="106" content_hash_code="0640ce11" os_list="android" file_path="chrome/browser/supervised_user/android/favicon_fetcher.cc" /> <item id="k_anonymity_service_get_token" added_in_milestone="106" content_hash_code="02bc56b0" os_list="linux,windows,android,chromeos" file_path="chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc" /> - <item id="enhanced_network_tts" added_in_milestone="103" content_hash_code="05205941" os_list="chromeos" file_path="chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc" /> + <item id="enhanced_network_tts" added_in_milestone="103" content_hash_code="03c12345" os_list="chromeos" file_path="chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc" /> <item id="shopping_list_ui_image_fetcher" added_in_milestone="107" content_hash_code="0680ae03" os_list="windows,chromeos,linux" file_path="chrome/browser/ui/commerce/price_tracking/shopping_list_ui_tab_helper.cc" /> <item id="chrome_commerce_price_email_pref_fetcher" added_in_milestone="107" content_hash_code="00b3dc73" os_list="linux,windows,android,chromeos" file_path="components/commerce/core/account_checker.cc" /> <item id="chrome_commerce_price_email_pref_sender" added_in_milestone="107" content_hash_code="03f51c85" os_list="linux,windows,android,chromeos" file_path="components/commerce/core/account_checker.cc" />
diff --git a/ui/base/l10n/formatter.cc b/ui/base/l10n/formatter.cc index d147050a..5095c1b 100644 --- a/ui/base/l10n/formatter.cc +++ b/ui/base/l10n/formatter.cc
@@ -61,6 +61,31 @@ static const Pluralities IDS_ELAPSED_YEAR = { IDS_TIME_ELAPSED_YEARS, "one{# year ago}", " other{# years ago}"}; +#if BUILDFLAG(IS_IOS) +static const Pluralities IDS_TITLE_CASE_ELAPSED_LONG_SEC = { + IDS_TIME_TITLE_CASE_ELAPSED_LONG_SECS, "one{# Second Ago}", + " other{# Seconds Ago}"}; + +static const Pluralities IDS_TITLE_CASE_ELAPSED_LONG_MIN = { + IDS_TIME_TITLE_CASE_ELAPSED_LONG_MINS, "one{# Minute Ago}", + " other{# Minutes Ago}"}; + +static const Pluralities IDS_TITLE_CASE_ELAPSED_HOUR = { + IDS_TIME_TITLE_CASE_ELAPSED_HOURS, "one{# Hour Ago}", + " other{# Hours Ago}"}; + +static const Pluralities IDS_TITLE_CASE_ELAPSED_DAY = { + IDS_TIME_TITLE_CASE_ELAPSED_DAYS, "one{# Day Ago}", " other{# Days Ago}"}; + +static const Pluralities IDS_TITLE_CASE_ELAPSED_MONTH = { + IDS_TIME_TITLE_CASE_ELAPSED_MONTHS, "one{# Month Ago}", + " other{# Months Ago}"}; + +static const Pluralities IDS_TITLE_CASE_ELAPSED_YEAR = { + IDS_TIME_TITLE_CASE_ELAPSED_YEARS, "one{# Year Ago}", + " other{# Years Ago}"}; +#endif + static const Pluralities IDS_REMAINING_SHORT_SEC = { IDS_TIME_REMAINING_SECS, "one{# sec left}", @@ -317,6 +342,13 @@ std::make_unique<Formatter>(IDS_ELAPSED_LONG_SEC, IDS_ELAPSED_LONG_MIN, IDS_ELAPSED_HOUR, IDS_ELAPSED_DAY, IDS_ELAPSED_MONTH, IDS_ELAPSED_YEAR); +#if BUILDFLAG(IS_IOS) + formatter_[TimeFormat::FORMAT_TITLE_CASE_ELAPSED][TimeFormat::LENGTH_LONG] = + std::make_unique<Formatter>( + IDS_TITLE_CASE_ELAPSED_LONG_SEC, IDS_TITLE_CASE_ELAPSED_LONG_MIN, + IDS_TITLE_CASE_ELAPSED_HOUR, IDS_TITLE_CASE_ELAPSED_DAY, + IDS_TITLE_CASE_ELAPSED_MONTH, IDS_TITLE_CASE_ELAPSED_YEAR); +#endif formatter_[TimeFormat::FORMAT_REMAINING][TimeFormat::LENGTH_SHORT] = std::make_unique<Formatter>( IDS_REMAINING_SHORT_SEC, IDS_REMAINING_SHORT_MIN, IDS_REMAINING_HOUR,
diff --git a/ui/base/l10n/time_format.h b/ui/base/l10n/time_format.h index da263350..556c241f 100644 --- a/ui/base/l10n/time_format.h +++ b/ui/base/l10n/time_format.h
@@ -8,6 +8,7 @@ #include <string> #include "base/component_export.h" +#include "build/build_config.h" namespace base { class Time; @@ -23,7 +24,11 @@ FORMAT_DURATION, // Plain duration, e.g. in English: "2 minutes". FORMAT_REMAINING, // Remaining time, e.g. in English: "2 minutes left". FORMAT_ELAPSED, // Elapsed time, e.g. in English: "2 minutes ago". - FORMAT_COUNT // Enum size counter, not a format. Must be last. +#if BUILDFLAG(IS_IOS) + FORMAT_TITLE_CASE_ELAPSED, // Elapsed time in title case, e.g. in English: + // "2 Minutes Ago". +#endif + FORMAT_COUNT // Enum size counter, not a format. Must be last. }; enum Length {
diff --git a/ui/base/user_activity/user_activity_observer.h b/ui/base/user_activity/user_activity_observer.h index 1c262530..8a1a4ef4 100644 --- a/ui/base/user_activity/user_activity_observer.h +++ b/ui/base/user_activity/user_activity_observer.h
@@ -22,7 +22,9 @@ // Invoked periodically while the user is active (i.e. generating input // events). |event| is the event that triggered the notification; it may - // be NULL in some cases (e.g. testing or synthetic invocations). + // be NULL in some cases (e.g. testing, synthetic invocations or external user + // activities reported by Chrome extensions). The Imprivata extension reports + // external user activities (with NULL events) via the chrome.login API. virtual void OnUserActivity(const ui::Event* event) = 0; protected:
diff --git a/ui/chromeos/translations/ui_chromeos_strings_as.xtb b/ui/chromeos/translations/ui_chromeos_strings_as.xtb index ca1a840..1c25e17 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_as.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">গ্ৰহ</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> সুৰক্ষিতভাৱে গুচোৱা হ’ল।</translation> <translation id="2307462900900812319">নেটৱৰ্ক কনফিগাৰ কৰক</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{<ph name="BEGIN_LIST" /><ph name="END_LIST" /> আইডিৰ এক্সেটেনশ্বনৰ অৱস্থান নিৰ্ধাৰণ কৰিব পৰা নগ’ল। আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।}one{<ph name="BEGIN_LIST" /><ph name="END_LIST" /> আইডিৰ এক্সেটেনশ্বনসমূহৰ অৱস্থান নিৰ্ধাৰণ কৰিব পৰা নগ’ল। আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।}other{<ph name="BEGIN_LIST" /><ph name="END_LIST" /> আইডিৰ এক্সেটেনশ্বনসমূহৰ অৱস্থান নিৰ্ধাৰণ কৰিব পৰা নগ’ল। আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।}}</translation> <translation id="2325650632570794183">এইধৰণৰ ফাইল সমৰ্থিত নহয়। অনুগ্ৰহ কৰি Chrome Web Storeত গৈ এইধৰণৰ ফাইল খুলিব পৰা কোনো এপ্ বিচাৰক।</translation> <translation id="2326539130272988168">বুলগেৰিয়ান</translation> <translation id="2337715497728194187">Bruschettaৰ সৈতে শ্বেয়াৰ কৰক</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">অসুৰক্ষিত</translation> <translation id="3291218047831493686">ছিম লকৰ ছেটিং সলনি কৰিবলৈ এই নেটৱৰ্কটোৰ সৈতে সংযোগ কৰক</translation> <translation id="3293023191599135697">WEP নেটৱৰ্ক সমৰ্থিত নহয়</translation> +<translation id="3295006446256079333">এই ভলিউমটো</translation> <translation id="3295357220137379386">ডিভাইচটো ব্যস্ত আছে</translation> <translation id="3296763833017966289">জর্জিয়ান</translation> <translation id="3307875152560779385">ইউক্ৰেনিয়ান</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_az.xtb b/ui/chromeos/translations/ui_chromeos_strings_az.xtb index ea9121de2..025f8ea 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_az.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planet</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> çıxarılıb.</translation> <translation id="2307462900900812319">Şəbəkəni konfiqurasiya edin</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Bu məlumat ilə artırmanın yerini tapmaq olmur: <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Admin ilə əlaqə saxlayın.}other{Bu məlumat ilə artırmaların yerini tapmaq olmur: <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Admin ilə əlaqə saxlayın.}}</translation> <translation id="2325650632570794183">Bu fayl növü dəstəklənmir. Bu faylı aça bilən tətbiqi tapmaq üçün Chrome Veb Marketə daxil olun.</translation> <translation id="2326539130272988168">Bolqar</translation> <translation id="2337715497728194187">Bruschetta ilə paylaşın</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Güvənsiz</translation> <translation id="3291218047831493686">SIM kilidi ayarını dəyişdirmək üçün bu şəbəkəyə qoşulun</translation> <translation id="3293023191599135697">WEP şəbəkələri dəstəklənmir</translation> +<translation id="3295006446256079333">Bu disk</translation> <translation id="3295357220137379386">Cihaz məşğuldur</translation> <translation id="3296763833017966289">Gürcü Dili</translation> <translation id="3307875152560779385">Ukrayna</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_be.xtb b/ui/chromeos/translations/ui_chromeos_strings_be.xtb index 1e17cdc2..011dc2c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_be.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Планета</translation> <translation id="2305020378527873881">Носьбіт <ph name="VOLUME_NAME" /> выняты.</translation> <translation id="2307462900900812319">Наладзіць сетку</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Пашырэнне з ідэнтыфікатарам <ph name="BEGIN_LIST" /><ph name="END_LIST" /> знайсці не ўдалося. Звярніцеся да адміністратара.}one{Пашырэнні з ідэнтыфікатарам <ph name="BEGIN_LIST" /><ph name="END_LIST" /> знайсці не ўдалося. Звярніцеся да адміністратара.}few{Пашырэнні з ідэнтыфікатарам <ph name="BEGIN_LIST" /><ph name="END_LIST" /> знайсці не ўдалося. Звярніцеся да адміністратара.}many{Пашырэнні з ідэнтыфікатарам <ph name="BEGIN_LIST" /><ph name="END_LIST" /> знайсці не ўдалося. Звярніцеся да адміністратара.}other{Пашырэнні з ідэнтыфікатарам <ph name="BEGIN_LIST" /><ph name="END_LIST" /> знайсці не ўдалося. Звярніцеся да адміністратара.}}</translation> <translation id="2325650632570794183">Гэты тып файла не падтрымліваецца. Знайсці праграму для адкрыцця файлаў такога тыпу можна ў Вэб-краме Chrome.</translation> <translation id="2326539130272988168">Балгарская</translation> <translation id="2337715497728194187">Абагуліць з Bruschetta</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Не абаронена</translation> <translation id="3291218047831493686">Каб змяніць налады блакіроўкі SIM-карты, падключыцеся да гэтай сеткі</translation> <translation id="3293023191599135697">Сеткі WEP не падтрымліваюцца</translation> +<translation id="3295006446256079333">Гэты том</translation> <translation id="3295357220137379386">Прылада занятая</translation> <translation id="3296763833017966289">Грузінская</translation> <translation id="3307875152560779385">Украінская</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb index a836572..ce07622 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Планета</translation> <translation id="2305020378527873881">Изваждането на „<ph name="VOLUME_NAME" />“ завърши.</translation> <translation id="2307462900900812319">Конфигуриране на мрежата</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Не може да се намери разширение с идентификатор <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Обърнете се към администратора си.}other{Не могат да се намерят разширения с идентификатори <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Обърнете се към администратора си.}}</translation> <translation id="2325650632570794183">Този файлов тип не се поддържа. Моля, посетете уеб магазина на Chrome, за да намерите приложение, което може да отвори съответния тип.</translation> <translation id="2326539130272988168">Български</translation> <translation id="2337715497728194187">Споделяне с Bruschetta</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb index 5a672f0..5913320 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">No segura</translation> <translation id="3291218047831493686">Connecta amb aquesta xarxa per canviar la configuració del bloqueig de la SIM</translation> <translation id="3293023191599135697">No s'admeten les xarxes WEP</translation> +<translation id="3295006446256079333">Aquest volum</translation> <translation id="3295357220137379386">El dispositiu està ocupat</translation> <translation id="3296763833017966289">Georgià</translation> <translation id="3307875152560779385">Ucraïnès</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb index 09ff3e1..7639dc2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planeta</translation> <translation id="2305020378527873881">Svazek <ph name="VOLUME_NAME" /> byl odpojen.</translation> <translation id="2307462900900812319">Konfigurovat síť</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Rozšíření s ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nelze najít. Kontaktujte svého administrátora.}few{Rozšíření s ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nelze najít. Kontaktujte svého administrátora.}many{Rozšíření s ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nelze najít. Kontaktujte svého administrátora.}other{Rozšíření s ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nelze najít. Kontaktujte svého administrátora.}}</translation> <translation id="2325650632570794183">Tento typ souboru není podporován. Navštivte prosím Internetový obchod Chrome, kde najdete aplikaci, ve které lze otevřít tento typ souboru.</translation> <translation id="2326539130272988168">bulharština</translation> <translation id="2337715497728194187">Sdílet s Bruschettou</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Nezabezpečeno</translation> <translation id="3291218047831493686">Pokud chcete změnit nastavení zablokování SIM karty, připojte se k této síti</translation> <translation id="3293023191599135697">Sítě WEP nejsou podporovány</translation> +<translation id="3295006446256079333">Tento svazek</translation> <translation id="3295357220137379386">Zařízení je zaneprázdněné</translation> <translation id="3296763833017966289">gruzínština</translation> <translation id="3307875152560779385">ukrajinština</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cy.xtb b/ui/chromeos/translations/ui_chromeos_strings_cy.xtb index b4f7a63b..c41fff1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_cy.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_cy.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planed</translation> <translation id="2305020378527873881">Mae <ph name="VOLUME_NAME" /> wedi'i dynnu.</translation> <translation id="2307462900900812319">Ffurfweddu rhwydwaith</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Ni ellir dod o hyd i estyniad gyda'r rhif adnabod <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Cysylltwch â'ch gweinyddwr.}zero{Ni ellir dod o hyd i estyniadau gyda'r rhifau adnabod <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Cysylltwch â'ch gweinyddwr.}two{Ni ellir dod o hyd i estyniadau gyda'r rhifau adnabod <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Cysylltwch â'ch gweinyddwr.}few{Ni ellir dod o hyd i estyniadau gyda'r rhifau adnabod <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Cysylltwch â'ch gweinyddwr.}many{Ni ellir dod o hyd i estyniadau gyda'r rhifau adnabod <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Cysylltwch â'ch gweinyddwr.}other{Ni ellir dod o hyd i estyniadau gyda'r rhifau adnabod <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Cysylltwch â'ch gweinyddwr.}}</translation> <translation id="2325650632570794183">Ni chefnogir y math hwn o ffeil. Ewch i Chrome Web Store i ddod o hyd i ap a all agor y math hwn o ffeil.</translation> <translation id="2326539130272988168">Bwlgareg</translation> <translation id="2337715497728194187">Rhannu â Bruschetta</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Heb ei ddiogelu</translation> <translation id="3291218047831493686">Cysylltwch â'r rhwydwaith hwn i newid y gosodiad clo SIM</translation> <translation id="3293023191599135697">Ni chefnogir rhwydweithiau WEP</translation> +<translation id="3295006446256079333">Y storfa hon</translation> <translation id="3295357220137379386">Mae'r ddyfais yn brysur</translation> <translation id="3296763833017966289">Georgian</translation> <translation id="3307875152560779385">Wcreineg</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb index 4260068..28ab349 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planet</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> er skubbet ud.</translation> <translation id="2307462900900812319">Konfigurer netværk</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{En udvidelse med id'et <ph name="BEGIN_LIST" /><ph name="END_LIST" /> blev ikke fundet. Kontakt din administrator.}one{En udvidelse med id'et <ph name="BEGIN_LIST" /><ph name="END_LIST" /> blev ikke fundet. Kontakt din administrator.}other{Udvidelser med id'erne <ph name="BEGIN_LIST" /><ph name="END_LIST" /> blev ikke fundet. Kontakt din administrator.}}</translation> <translation id="2325650632570794183">Denne filtype understøttes ikke. Gå til Chrome Webshop for at finde en app, der kan åbne denne filtype.</translation> <translation id="2326539130272988168">Bulgarsk</translation> <translation id="2337715497728194187">Del med Bruschetta</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb index f4d70b9..f9b0c12 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">Ungesichert</translation> <translation id="3291218047831493686">Mit diesem Netzwerk verbinden, um die Einstellung zum Sperren der SIM-Karte zu ändern</translation> <translation id="3293023191599135697">WEP-Netzwerke werden nicht unterstützt</translation> +<translation id="3295006446256079333">Dieses Volumen</translation> <translation id="3295357220137379386">Gerät ist beschäftigt</translation> <translation id="3296763833017966289">Georgisch</translation> <translation id="3307875152560779385">Ukrainisch</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb index 2a37a8f..2b8dde07 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">Unsecured</translation> <translation id="3291218047831493686">Connect to this network to change SIM lock setting</translation> <translation id="3293023191599135697">WEP networks are not supported</translation> +<translation id="3295006446256079333">This volume</translation> <translation id="3295357220137379386">Device is busy</translation> <translation id="3296763833017966289">Georgian</translation> <translation id="3307875152560779385">Ukrainian</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb index ce6735c..cf9ebc3 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planeta</translation> <translation id="2305020378527873881">Se ha expulsado <ph name="VOLUME_NAME" />.</translation> <translation id="2307462900900812319">Configurar red</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{No se puede encontrar ninguna extensión con el ID: <ph name="BEGIN_LIST" /><ph name="END_LIST" /> Ponte en contacto con tu administrador.}other{No se pueden encontrar extensiones con los IDs: <ph name="BEGIN_LIST" /><ph name="END_LIST" /> Ponte en contacto con tu administrador.}}</translation> <translation id="2325650632570794183">No se admite este tipo de archivo. Accede a Chrome Web Store para buscar una aplicación que pueda abrir este tipo de archivo.</translation> <translation id="2326539130272988168">Búlgaro</translation> <translation id="2337715497728194187">Compartir con Bruschetta</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">No segura</translation> <translation id="3291218047831493686">Debes conectarte a esta red para cambiar el ajuste de bloqueo de la SIM</translation> <translation id="3293023191599135697">Las redes WEP no son compatibles</translation> +<translation id="3295006446256079333">Este volumen</translation> <translation id="3295357220137379386">Dispositivo ocupado</translation> <translation id="3296763833017966289">Georgiano</translation> <translation id="3307875152560779385">Ucraniano</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb index eb0abd83..6e0765c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planeta</translation> <translation id="2305020378527873881">Kanporatu da <ph name="VOLUME_NAME" />.</translation> <translation id="2307462900900812319">Konfiguratu sarea</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Ezin da aurkitu <ph name="BEGIN_LIST" /><ph name="END_LIST" /> identifikatzailearekin lotutako luzapenik. Jarri administratzailearekin harremanetan.}other{Ezin da aurkitu <ph name="BEGIN_LIST" /><ph name="END_LIST" /> identifikatzaileekin lotutako luzapenik. Jarri administratzailearekin harremanetan.}}</translation> <translation id="2325650632570794183">Ez dira mota horretako fitxategiak onartzen. Horrelako fitxategiak ireki ditzaketen aplikazioak aurkitzeko, zoaz Chrome Web Store dendara.</translation> <translation id="2326539130272988168">Bulgariarra</translation> <translation id="2337715497728194187">Partekatu Bruschetta-rekin</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb index b559663e..b952575 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -197,7 +197,7 @@ <translation id="2579959351793446050">اوریه</translation> <translation id="2587195714949534472">درحال آماده شدن برای همگامسازی <ph name="FILE_NAME" />…</translation> <translation id="2602810353103180630">شبکه <ph name="NETWORK_INDEX" /> از <ph name="NETWORK_COUNT" />، <ph name="NETWORK_NAME" />، <ph name="CONNECTION_STATUS" />، قدرت سیگنال <ph name="SIGNAL_STRENGTH" />٪، سرپرستتان آن را مسدود کرده است، جزئیات</translation> -<translation id="2614589611416690597">ویدیوی <ph name="VIDEO_TYPE" /></translation> +<translation id="2614589611416690597">ویدیو <ph name="VIDEO_TYPE" /></translation> <translation id="2620090360073999360">دسترسی به Google Drive در حال حاضر ممکن نیست.</translation> <translation id="2621713457727696555">ایمن شد</translation> <translation id="2638942478653899953">دسترسی به Google Drive امکانپذیر نیست. لطفاً <ph name="BEGIN_LINK" />از سیستم خارج شوید<ph name="END_LINK" /> و دوباره وارد شوید.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb index 5df8ee00..dc129de 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planeetta</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> on poistettu.</translation> <translation id="2307462900900812319">Määritä verkko</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Laajennusta, jonka tunnus on <ph name="BEGIN_LIST" /><ph name="END_LIST" />, ei löydy. Ota yhteyttä järjestelmänvalvojaan.}other{Laajennuksia, joiden tunnukset ovat <ph name="BEGIN_LIST" /><ph name="END_LIST" />, ei löydy. Ota yhteyttä järjestelmänvalvojaan.}}</translation> <translation id="2325650632570794183">Tätä tiedostotyyppiä ei tueta. Etsi tämäntyyppisiä tiedostoja avaava sovellus Chrome Web Storesta.</translation> <translation id="2326539130272988168">bulgaria</translation> <translation id="2337715497728194187">Jaa Bruschettalle</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Suojaamaton</translation> <translation id="3291218047831493686">Yhdistä tähän verkkoon vaihtaaksesi SIM-lukituksen asetuksia</translation> <translation id="3293023191599135697">WEP-verkkoja ei tueta</translation> +<translation id="3295006446256079333">Tämä määrä</translation> <translation id="3295357220137379386">Laite on varattu</translation> <translation id="3296763833017966289">gruusia</translation> <translation id="3307875152560779385">ukraina</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb index 694f364..8ec86745 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planète</translation> <translation id="2305020378527873881">Le volume <ph name="VOLUME_NAME" /> a été éjecté.</translation> <translation id="2307462900900812319">Configurer le réseau</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Une extension avec la pièce d'identité <ph name="BEGIN_LIST" /><ph name="END_LIST" /> est introuvable. Communiquez avec votre administrateur.}one{Des extensions associées aux pièces d'identité <ph name="BEGIN_LIST" /><ph name="END_LIST" /> sont introuvables. Communiquez avec votre administrateur.}other{Des extensions associées aux pièces d'identité <ph name="BEGIN_LIST" /><ph name="END_LIST" /> sont introuvables. Communiquez avec votre administrateur.}}</translation> <translation id="2325650632570794183">Ce type de fichier n'est pas pris en charge. Veuillez visiter la boutique Chrome Web Store pour trouver une application permettant de l'ouvrir.</translation> <translation id="2326539130272988168">Bulgare</translation> <translation id="2337715497728194187">Partager avec Bruschetta</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Non sécurisé</translation> <translation id="3291218047831493686">Connectez-vous à ce réseau pour modifier le paramètre de verrouillage de la carte SIM</translation> <translation id="3293023191599135697">Les réseaux WEP ne sont pas pris en charge</translation> +<translation id="3295006446256079333">Ce volume</translation> <translation id="3295357220137379386">L'appareil est en cours d'utilisation</translation> <translation id="3296763833017966289">Géorgien</translation> <translation id="3307875152560779385">Ukrainien</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb index 92f48fa..9aeb46c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planète</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> a été éjecté.</translation> <translation id="2307462900900812319">Configurer le réseau</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Impossible de trouver l'extension associée à l'ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> Contactez votre administrateur.}one{Impossible de trouver l'extension associée à l'ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> Contactez votre administrateur.}other{Impossible de trouver les extensions associées aux ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> Contactez votre administrateur.}}</translation> <translation id="2325650632570794183">Ce type de fichier n'est pas compatible. Veuillez accéder au Chrome Web Store pour trouver une application pouvant l'ouvrir.</translation> <translation id="2326539130272988168">Bulgare</translation> <translation id="2337715497728194187">Partager avec Bruschetta</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb index f9faa9ab..6e386d79 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">અસુરક્ષિત</translation> <translation id="3291218047831493686">સિમ લૉક સેટિંગમાં ફેરફાર કરવા માટે આ નેટવર્ક સાથે કનેક્ટ કરો</translation> <translation id="3293023191599135697">WEP નેટવર્કને સપોર્ટ આપવામાં આવતો નથી</translation> +<translation id="3295006446256079333">આ વૉલ્યૂમ</translation> <translation id="3295357220137379386">ડિવાઇસ વ્યસ્ત છે</translation> <translation id="3296763833017966289">જ્યોર્જિઅન</translation> <translation id="3307875152560779385">યુક્રેનિયન</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb index 9442f4c..89e98939 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planet</translation> <translation id="2305020378527873881">Stavka <ph name="VOLUME_NAME" /> izbačena je.</translation> <translation id="2307462900900812319">Konfiguriraj mrežu</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Proširenje s ID-jem <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nije moguće pronaći. Obratite se administratoru.}one{Proširenja s ID-jevima <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nije moguće pronaći. Obratite se administratoru.}few{Proširenja s ID-jevima <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nije moguće pronaći. Obratite se administratoru.}other{Proširenja s ID-jevima <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nije moguće pronaći. Obratite se administratoru.}}</translation> <translation id="2325650632570794183">Ta vrsta datoteke nije podržana. Posjetite Chrome web-trgovinu da biste pronašli aplikaciju koja može otvoriti tu vrstu datoteke.</translation> <translation id="2326539130272988168">bugarski</translation> <translation id="2337715497728194187">Podijeli s Bruschettom</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb index 4967a3f..b5af156 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Մոլորակ</translation> <translation id="2305020378527873881">Չհաջողվեց առբերել <ph name="VOLUME_NAME" /> պանակը։</translation> <translation id="2307462900900812319">Կազմաձևել ցանցը</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Հետևյալ ID-ով ընդլայնում չհաջողվեց գտնել՝ <ph name="BEGIN_LIST" /><ph name="END_LIST" />։ Դիմեք ձեր ադմինիստրատորին։}one{Հետևյալ ID-ներով ընդլայնումներ չհաջողվեց գտնել՝ <ph name="BEGIN_LIST" /><ph name="END_LIST" />։ Դիմեք ձեր ադմինիստրատորին։}other{Հետևյալ ID-ներով ընդլայնումներ չհաջողվեց գտնել՝ <ph name="BEGIN_LIST" /><ph name="END_LIST" />։ Դիմեք ձեր ադմինիստրատորին։}}</translation> <translation id="2325650632570794183">Ֆայլի այս տեսակը չի աջակցվում: Այցելեք Chrome Web Store, որպեսզի գտնեք համապատասխան հավելված, որը կարող է բացել այս տեսակի ֆայլը:</translation> <translation id="2326539130272988168">բուլղարերեն</translation> <translation id="2337715497728194187">Կիսվել Bruschetta-ի հետ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb index 01a20f6..181c419 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">Non protetta</translation> <translation id="3291218047831493686">Connettiti a questa rete per modificare l'impostazione del blocco SIM</translation> <translation id="3293023191599135697">Le reti WEP non sono supportate</translation> +<translation id="3295006446256079333">Questo volume</translation> <translation id="3295357220137379386">Il dispositivo è occupato</translation> <translation id="3296763833017966289">Georgiano</translation> <translation id="3307875152560779385">Ucraino</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb index b69bf6ab..3dff1a4 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -219,7 +219,7 @@ <translation id="2820957248982571256">ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ…</translation> <translation id="2830077785865012357">ಚೈನೀಸ್ ಜುಯೆನ್</translation> <translation id="2843806747483486897">ಡಿಫಾಲ್ಟ್ ಅನ್ನು ಬದಲಾಯಿಸಿ...</translation> -<translation id="2873951654529031587">ಅನುಪಯುಕ್ತ</translation> +<translation id="2873951654529031587">ಟ್ರ್ಯಾಶ್</translation> <translation id="288024221176729610">ಜೆಕ್</translation> <translation id="2887525882758501333">PDF ಡಾಕ್ಯುಮೆಂಟ್</translation> <translation id="2888807692577297075"><b>"<ph name="SEARCH_STRING" />"</b> ಗೆ ಯಾವ ಐಟಂಗಳೂ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ</translation> @@ -385,7 +385,7 @@ <translation id="421017592316736757">ಈ ಫೈಲ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ನೀವು ಆನ್ಲೈನ್ನಲ್ಲಿರಬೇಕು.</translation> <translation id="4212740939091998969">"<ph name="FOLDER_NAME" />" ಹೆಸರಿನ ಫೋಲ್ಡರ್ ಈಗಾಗಲೇ ಇದೆ. ಬೇರೊಂದು ಹೆಸರನ್ನು ಆಯ್ಕೆಮಾಡಿ.</translation> <translation id="4218274196133425560"><ph name="HOST_NAME" /> ಗಾಗಿ ವಿನಾಯಿತಿಯನ್ನು ತೆಗೆದುಹಾಕಿ</translation> -<translation id="4261901459838235729">Google ಪ್ರಸ್ತುತಿ</translation> +<translation id="4261901459838235729">Google ಪ್ರೆಸೆಂಟೇಷನ್</translation> <translation id="4277536868133419688"><ph name="FILTER_NAME" /> ಫಿಲ್ಟರ್ ಆನ್ ಆಗಿದೆ.</translation> <translation id="4290535918735525311">Linux ಮೂಲಕ 1 ಫೋಲ್ಡರ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ</translation> <translation id="4299729908419173967">ಬ್ರೆಜಿಲಿಯನ್</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb index e933b1c..21fa144 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">비보안</translation> <translation id="3291218047831493686">SIM 잠금 설정을 변경하려면 이 네트워크에 연결하세요.</translation> <translation id="3293023191599135697">WEP 네트워크는 지원되지 않습니다.</translation> +<translation id="3295006446256079333">이 볼륨</translation> <translation id="3295357220137379386">기기 사용량이 많습니다.</translation> <translation id="3296763833017966289">그루지야어</translation> <translation id="3307875152560779385">우크라이나어</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb index b750afb..ca55c63 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planēta</translation> <translation id="2305020378527873881">Sējums <ph name="VOLUME_NAME" /> ir noņemts.</translation> <translation id="2307462900900812319">Konfigurēt tīklu</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Nevar atrast paplašinājumu ar tālāk norādīto ID: <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Sazinieties ar administratoru.}zero{Nevar atrast paplašinājumus ar tālāk norādītajiem ID: <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Sazinieties ar administratoru.}one{Nevar atrast paplašinājumus ar tālāk norādītajiem ID: <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Sazinieties ar administratoru.}other{Nevar atrast paplašinājumus ar tālāk norādītajiem ID: <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Sazinieties ar administratoru.}}</translation> <translation id="2325650632570794183">Šī tipa fails netiek atbalstīts. Lūdzu, apmeklējiet Chrome interneta veikalu, lai atrastu lietotni, kas var atvērt šī tipa failus.</translation> <translation id="2326539130272988168">Bulgāru</translation> <translation id="2337715497728194187">Kopīgošana ar virtuālo mašīnu Bruschetta</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Nav aizsargāts</translation> <translation id="3291218047831493686">Izveidojiet savienojumu ar šo tīklu, lai mainītu SIM kartes bloķēšanas iestatījumu.</translation> <translation id="3293023191599135697">WEP tīkli netiek atbalstīti.</translation> +<translation id="3295006446256079333">Šis sējums</translation> <translation id="3295357220137379386">Ierīce ir aizņemta</translation> <translation id="3296763833017966289">Gruzīnu valoda</translation> <translation id="3307875152560779385">Ukraiņu</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb index 790033b..15fc8c2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Планета</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> е отстранет.</translation> <translation id="2307462900900812319">Конфигурирај мрежа</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Не може да се лоцира екстензија со ID-бројот <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Контактирајте со администраторот.}one{Не може да се лоцираат екстензии со ID-броевите <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Контактирајте со администраторот.}other{Не може да се лоцираат екстензии со ID-броевите <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Контактирајте со администраторот.}}</translation> <translation id="2325650632570794183">Овој тип датотека не е поддржан. Посетете ја веб-продавницата на Chrome за да најдете апликација што може да го отвори овој тип датотека.</translation> <translation id="2326539130272988168">бугарски</translation> <translation id="2337715497728194187">Споделете со Bruschetta</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Незаштитена</translation> <translation id="3291218047831493686">Поврзете се на мрежава за да ја промените поставката за заклучување на SIM-картичката</translation> <translation id="3293023191599135697">WEP-мрежите не се поддржани</translation> +<translation id="3295006446256079333">Овој диск</translation> <translation id="3295357220137379386">Уредот е зафатен</translation> <translation id="3296763833017966289">грузиски</translation> <translation id="3307875152560779385">украински</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb index a55b7d71..4911a49 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">ഗ്രഹം</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> ഒഴിവാക്കി.</translation> <translation id="2307462900900812319">നെറ്റ്വർക്ക് കോൺഫിഗർ ചെയ്യുക</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{<ph name="BEGIN_LIST" /><ph name="END_LIST" /> ഐഡിയിൽ ഉള്ള വിപുലീകരണം കണ്ടെത്താനായില്ല. നിങ്ങളുടെ അഡ്മിനെ ബന്ധപ്പെടുക.}other{<ph name="BEGIN_LIST" /><ph name="END_LIST" /> ഐഡികളിൽ ഉള്ള വിപുലീകരണങ്ങൾ കണ്ടെത്താനായില്ല. നിങ്ങളുടെ അഡ്മിനെ ബന്ധപ്പെടുക.}}</translation> <translation id="2325650632570794183">ഈ ഫയൽ തരം പിന്തുണയ്ക്കുന്നില്ല. ഈ ഫയൽ തരം തുറക്കാൻ കഴിയുന്ന ഒരു ആപ്പ് കണ്ടെത്തുന്നതിന് ഒരു Chrome വെബ് സ്റ്റോർ കണ്ടെത്തുക.</translation> <translation id="2326539130272988168">ബൾഗേറിയൻ</translation> <translation id="2337715497728194187">Bruschetta-യുമായി പങ്കിടുക</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb index 8c2ad59..614ff4b9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">असुरक्षित</translation> <translation id="3291218047831493686">SIM लकसम्बन्धी सेटिङ बदल्न यो नेटवर्कमा कनेक्ट गर्नुहोस्</translation> <translation id="3293023191599135697">WEP नेटवर्कमा कनेक्ट गर्न मिल्दैन</translation> +<translation id="3295006446256079333">यो भोल्युम</translation> <translation id="3295357220137379386">डिभाइस व्यस्त छ</translation> <translation id="3296763833017966289">जोर्जियन</translation> <translation id="3307875152560779385">युक्रेनियाली</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_or.xtb b/ui/chromeos/translations/ui_chromeos_strings_or.xtb index 1ea921d5..908fe65 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_or.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">ଗ୍ରହ</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> ବାହାର କରାଯାଇଛି</translation> <translation id="2307462900900812319">ନେଟ୍ୱର୍କ କନ୍ଫିଗର୍ କରନ୍ତୁ</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{ଏହି ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> ସହ କୌଣସି ଏକ୍ସଟେନସନ ମିଳିଲା ନାହିଁ। ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।}other{ଏହି IDଗୁଡ଼ିକ <ph name="BEGIN_LIST" /><ph name="END_LIST" /> ସହ ଏକ୍ସଟେନସନଗୁଡ଼ିକ ମିଳିଲା ନାହିଁ। ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।}}</translation> <translation id="2325650632570794183">ଏହି ଫାଇଲ୍ ପ୍ରକାର ସମର୍ଥିତ ନୁହେଁ। ଏହି ପ୍ରକାରର ଫାଇଲ୍ ଖୋଲିବା ପାଇଁ ଗୋଟିଏ ଆପ୍ ଖୋଜିବାକୁ ଦୟାକରି Chrome ୱେବ୍ ଷ୍ଟୋର୍କୁ ଯାଆନ୍ତୁ।</translation> <translation id="2326539130272988168">ବୁଲଗେରିଆନ୍</translation> <translation id="2337715497728194187">Bruschetta ସହ ସେୟାର କରନ୍ତୁ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb index 56808eae..b708fd48 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planeta</translation> <translation id="2305020378527873881">O volume <ph name="VOLUME_NAME" /> foi ejetado.</translation> <translation id="2307462900900812319">Configurar rede</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Não foi possível localizar uma extensão com o ID <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Entre em contato com o administrador.}one{Não foi possível localizar uma extensão com o ID <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Entre em contato com o administrador.}other{Não foi possível localizar extensões com os IDs <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Entre em contato com o administrador.}}</translation> <translation id="2325650632570794183">Este tipo de arquivo não é suportado. Visite a Chrome Web Store para encontrar um aplicativo que possa abrir este tipo de arquivo.</translation> <translation id="2326539130272988168">Búlgaro</translation> <translation id="2337715497728194187">Compartilhar com a Bruschetta</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb index 85828fc4..7001b1e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">Не защищена</translation> <translation id="3291218047831493686">Чтобы изменить настройки блокировки SIM-карты, подключитесь к этой сети</translation> <translation id="3293023191599135697">Сети WEP не поддерживаются</translation> +<translation id="3295006446256079333">В этой области</translation> <translation id="3295357220137379386">Устройство занято.</translation> <translation id="3296763833017966289">Грузинский</translation> <translation id="3307875152560779385">Украинский</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_si.xtb b/ui/chromeos/translations/ui_chromeos_strings_si.xtb index dcac73c4..15c8999 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_si.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">ග්රහලෝකය</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> ඉවත් කර ඇත.</translation> <translation id="2307462900900812319">ජාලය සකසන්න</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{ID <ph name="BEGIN_LIST" /><ph name="END_LIST" /> සහිත දිගුවක් ස්ථානගත කළ නොහැක. ඔබේ පරිපාලක සම්බන්ධ කර ගන්න.}one{IDs <ph name="BEGIN_LIST" /><ph name="END_LIST" /> සහිත දිගු ස්ථානගත කළ නොහැක. ඔබේ පරිපාලක සම්බන්ධ කර ගන්න.}other{IDs <ph name="BEGIN_LIST" /><ph name="END_LIST" /> සහිත දිගු ස්ථානගත කළ නොහැක. ඔබේ පරිපාලක සම්බන්ධ කර ගන්න.}}</translation> <translation id="2325650632570794183">මෙම ගොනු ආකාරය සහාය නොදක්වයි. මෙම ආකාරයේ ගොනුව විවෘත කළ හැකි යෙදුමක් සොයා ගැනීමට Chrome වෙබ් අලෙවිසැල වෙත යන්න.</translation> <translation id="2326539130272988168">බල්ගේරියානු</translation> <translation id="2337715497728194187">Bruschetta සමග බෙදා ගන්න</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">අනාරක්ෂිතයි</translation> <translation id="3291218047831493686">SIM අගුලු සැකසීම වෙනස් කිරීමට මෙම ජාලයට සම්බන්ධ වන්න</translation> <translation id="3293023191599135697">WEP ජාල සහාය නොදක්වයි</translation> +<translation id="3295006446256079333">මෙම වෙළුම</translation> <translation id="3295357220137379386">උපාංගය කාර්යබහුලයි</translation> <translation id="3296763833017966289">ජොර්ජියානු</translation> <translation id="3307875152560779385">යුක්රේනියානු</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb index 64a0a7e..7f241e46 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Planet</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> është nxjerrë.</translation> <translation id="2307462900900812319">Konfiguro rrjetin</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Një shtesë me ID-në <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nuk mund të lokalizohet. Kontakto me administratorin tënd.}other{Shtesat me ID-të <ph name="BEGIN_LIST" /><ph name="END_LIST" /> nuk mund të lokalizohen. Kontakto me administratorin tënd.}}</translation> <translation id="2325650632570794183">Ky lloj skedari nuk mbështetet. Vizito Dyqanin e uebit të Chrome për të gjetur një aplikacion që mund të hapë këtë lloj skedari.</translation> <translation id="2326539130272988168">Bullgarisht</translation> <translation id="2337715497728194187">Ndaj me Bruschetta</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">I pasiguruar</translation> <translation id="3291218047831493686">Lidhu me këtë rrjet për të ndryshuar cilësimin e kyçjes së kartës SIM</translation> <translation id="3293023191599135697">Rrjetet WEP nuk mbështeten</translation> +<translation id="3295006446256079333">Këtë volum</translation> <translation id="3295357220137379386">Pajisja është e zënë</translation> <translation id="3296763833017966289">Gjeorgjisht</translation> <translation id="3307875152560779385">Ukrainisht</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb index f2d1d32..c6f5997 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">Inte skyddat</translation> <translation id="3291218047831493686">Anslut till det här nätverket för att ändra låsinställning för SIM-kortet</translation> <translation id="3293023191599135697">WEP-nätverk stöds inte</translation> +<translation id="3295006446256079333">Den här volymen</translation> <translation id="3295357220137379386">Enheten är upptagen</translation> <translation id="3296763833017966289">georgiska</translation> <translation id="3307875152560779385">ukrainska</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb index adc80579..d8ef54a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Sayari</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> imeondolewa.</translation> <translation id="2307462900900812319">Sanidi mtandao</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{Huwezi kutambua mahali kilipo kiendelezi chenye kitambulisho <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Wasiliana na msimamizi wako.}other{Huwezi kufahamu vilipo viendelezi vyenye vitambulisho vya <ph name="BEGIN_LIST" /><ph name="END_LIST" />. Wasiliana na msimamizi wako.}}</translation> <translation id="2325650632570794183">Aina hii ya faili haihimiliwi. Tafadhali tembelea Duka la Wavuti la Chrome ili kupata programu ambayo inaweza kufungua aina hii ya faili.</translation> <translation id="2326539130272988168">Kibulgaria</translation> <translation id="2337715497728194187">Shiriki na Bruschetta</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb index e4044cc1..f28480c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -159,6 +159,7 @@ <translation id="2304820083631266885">Gezegen</translation> <translation id="2305020378527873881"><ph name="VOLUME_NAME" /> çıkarıldı.</translation> <translation id="2307462900900812319">Ağı yapılandır</translation> +<translation id="2312704192806647271">{COUNT,plural, =1{<ph name="BEGIN_LIST" /><ph name="END_LIST" /> kimliğine sahip bir uzantı bulunamadı. Yöneticinizle iletişime geçin.}other{<ph name="BEGIN_LIST" /><ph name="END_LIST" /> kimliklerine sahip uzantılar bulunamadı. Yöneticinizle iletişime geçin.}}</translation> <translation id="2325650632570794183">Bu dosya türü desteklenmiyor. Bu dosya türünü açabilecek bir uygulama bulmak için lütfen Chrome Web Mağazası'nı ziyaret edin.</translation> <translation id="2326539130272988168">Bulgarca</translation> <translation id="2337715497728194187">Bruschetta ile paylaşın</translation> @@ -274,6 +275,7 @@ <translation id="3290356915286466215">Güvenli değil</translation> <translation id="3291218047831493686">SIM kilit ayarını değiştirmek için bu ağa bağlanın</translation> <translation id="3293023191599135697">WEP ağları desteklenmez</translation> +<translation id="3295006446256079333">Bu birim</translation> <translation id="3295357220137379386">Cihaz meşgul</translation> <translation id="3296763833017966289">Gürcüce</translation> <translation id="3307875152560779385">Ukraynaca</translation> @@ -976,7 +978,7 @@ <translation id="8688591111840995413">Yanlış şifre</translation> <translation id="8698464937041809063">Google çizimler</translation> <translation id="8698877009525468705">Bu dosya gizli olup yönetici politikasından kaynaklı kısıtlamalara tabidir.</translation> -<translation id="8712637175834984815">Anlaşıldı</translation> +<translation id="8712637175834984815">Anladım</translation> <translation id="8713112442029511308">Maltaca</translation> <translation id="8714406895390098252">Bisiklet</translation> <translation id="8719721339511222681"><ph name="ENTRY_NAME" /> seçildi.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb index 5f61f69..a2aa50d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -275,6 +275,7 @@ <translation id="3290356915286466215">غیر محفوظ</translation> <translation id="3291218047831493686">SIM لاک کی ترتیب تبدیل کرنے کے لیے اس نیٹ ورک سے منسلک ہوں</translation> <translation id="3293023191599135697">WEP نیٹ ورکس تعاون یافتہ نہیں ہیں</translation> +<translation id="3295006446256079333">یہ والیوم</translation> <translation id="3295357220137379386">آلہ مصروف ہے</translation> <translation id="3296763833017966289">جارجی</translation> <translation id="3307875152560779385">يُوکرينی</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb index afe4635..a060516 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
@@ -275,7 +275,7 @@ <translation id="3290356915286466215">不安全</translation> <translation id="3291218047831493686">連接此網絡即可變更 SIM 卡鎖定設定</translation> <translation id="3293023191599135697">系統不支援 WEP 網絡</translation> -<translation id="3295006446256079333">這個磁碟區</translation> +<translation id="3295006446256079333">此磁碟區</translation> <translation id="3295357220137379386">裝置忙碌中</translation> <translation id="3296763833017966289">喬治亞文</translation> <translation id="3307875152560779385">烏克蘭文</translation>
diff --git a/ui/ozone/platform/wayland/host/wayland_data_drag_controller_unittest.cc b/ui/ozone/platform/wayland/host/wayland_data_drag_controller_unittest.cc index 1ee4153..690895b5 100644 --- a/ui/ozone/platform/wayland/host/wayland_data_drag_controller_unittest.cc +++ b/ui/ozone/platform/wayland/host/wayland_data_drag_controller_unittest.cc
@@ -390,6 +390,7 @@ wl::TestWaylandServerThread* server) { // HiDPI server->output()->SetScale(2); + server->output()->SetDeviceScaleFactor(2); server->output()->Flush(); // Place the window onto the output. @@ -465,6 +466,7 @@ } else { output->SetScale(kTripleScale); } + server->output()->SetDeviceScaleFactor(kTripleScale); output->Flush(); auto* data_offer = server->data_device_manager() @@ -1190,7 +1192,10 @@ INSTANTIATE_TEST_SUITE_P( XdgVersionStableTestWithAuraShell, WaylandDataDragControllerTest, - Values(wl::ServerConfig{ - .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled})); + Values(wl::ServerConfig{.enable_aura_shell = + wl::EnableAuraShellProtocol::kEnabled}, + wl::ServerConfig{ + .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled, + .use_aura_output_manager = true})); } // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc b/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc index 204f373..ef0f120 100644 --- a/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc +++ b/ui/ozone/platform/wayland/host/wayland_screen_unittest.cc
@@ -488,6 +488,7 @@ // Update scale. PostToServerAndWait([](wl::TestWaylandServerThread* server) { server->output()->SetScale(2); + server->output()->SetDeviceScaleFactor(2); server->output()->Flush(); }); @@ -917,6 +918,7 @@ // get the new scale and update scale of their buffers. The default UI // scale equals the output scale. output->SetScale(kTripleScale); + server->output()->SetDeviceScaleFactor(kTripleScale); output->Flush(); }); @@ -938,6 +940,7 @@ EXPECT_NE(kForcedUIScale, kDoubleScale); PostToServerAndWait([](wl::TestWaylandServerThread* server) { server->output()->SetScale(kDoubleScale); + server->output()->SetDeviceScaleFactor(kDoubleScale); server->output()->Flush(); }); @@ -977,6 +980,7 @@ // accordingly. PostToServerAndWait([](wl::TestWaylandServerThread* server) { server->output()->SetScale(2); + server->output()->SetDeviceScaleFactor(2); server->output()->Flush(); }); @@ -1087,7 +1091,6 @@ const gfx::Insets expected_inset = kExpectedBounds.InsetsFrom(kNewWorkArea); PostToServerAndWait([expected_inset](wl::TestWaylandServerThread* server) { auto* output = server->output(); - ASSERT_TRUE(output->GetAuraOutput()); output->SetLogicalInsets(expected_inset); output->Flush(); }); @@ -1107,6 +1110,7 @@ PostToServerAndWait([&](wl::TestWaylandServerThread* server) { auto* output = server->output(); output->SetLogicalSize(scaled_logical_size); + output->SetDeviceScaleFactor(kNewScaleValue); output->Flush(); }); @@ -1181,8 +1185,8 @@ gfx::ScaleToRoundedSize(kPhysicalSize, 0.5); PostToServerAndWait([&](wl::TestWaylandServerThread* server) { auto* output = server->output(); - ASSERT_TRUE(output->GetAuraOutput()); output->SetLogicalSize(scaled_logical_size); + output->SetDeviceScaleFactor(2); output->SetLogicalInsets(kInsets); // Display panel's natural orientation is in portrait, so it needs a // transform of 90 degrees to be in landscape. @@ -1271,6 +1275,7 @@ wl::TestOutputMetrics({GetRightX(output1), 0, 800, 600})); // Scale Factor 2. output2->SetLogicalSize({400, 300}); + output2->SetDeviceScaleFactor(2); ASSERT_TRUE(output2); }); @@ -1300,13 +1305,19 @@ INSTANTIATE_TEST_SUITE_P( XdgVersionStableTestWithAuraShell, WaylandScreenTest, - Values(wl::ServerConfig{ - .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled})); + Values(wl::ServerConfig{.enable_aura_shell = + wl::EnableAuraShellProtocol::kEnabled}, + wl::ServerConfig{ + .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled, + .use_aura_output_manager = true})); INSTANTIATE_TEST_SUITE_P( XdgVersionStableTest, WaylandAuraShellScreenTest, - Values(wl::ServerConfig{ - .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled})); + Values(wl::ServerConfig{.enable_aura_shell = + wl::EnableAuraShellProtocol::kEnabled}, + wl::ServerConfig{ + .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled, + .use_aura_output_manager = true})); } // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_surface_unittest.cc b/ui/ozone/platform/wayland/host/wayland_surface_unittest.cc index a3ff54b..d2f197c 100644 --- a/ui/ozone/platform/wayland/host/wayland_surface_unittest.cc +++ b/ui/ozone/platform/wayland/host/wayland_surface_unittest.cc
@@ -54,8 +54,12 @@ INSTANTIATE_TEST_SUITE_P( XdgVersionStableTestWithAuraShell, WaylandSurfaceTest, - ::testing::Values(wl::ServerConfig{ - .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled})); + ::testing::Values( + wl::ServerConfig{ + .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled}, + wl::ServerConfig{ + .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled, + .use_aura_output_manager = true})); } // namespace } // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc index 10e1f4b..6733a7e 100644 --- a/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc +++ b/ui/ozone/platform/wayland/host/wayland_window_drag_controller_unittest.cc
@@ -1293,6 +1293,7 @@ auto* output2 = server->CreateAndInitializeOutput(wl::TestOutputMetrics(kOutputBounds)); output2->SetScale(2); + output2->SetDeviceScaleFactor(2); }); WaitForAllDisplaysReady(); @@ -1671,7 +1672,10 @@ INSTANTIATE_TEST_SUITE_P( XdgVersionStableTestWithAuraShell, WaylandWindowDragControllerTest, - Values(wl::ServerConfig{ - .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled})); + Values(wl::ServerConfig{.enable_aura_shell = + wl::EnableAuraShellProtocol::kEnabled}, + wl::ServerConfig{ + .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled, + .use_aura_output_manager = true})); } // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc index 72f2f58c..9ed85c80 100644 --- a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc +++ b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
@@ -474,6 +474,7 @@ PostToServerAndWait([](wl::TestWaylandServerThread* server) { auto* output = server->output(); output->SetScale(kHiDpiScale); + output->SetDeviceScaleFactor(kHiDpiScale); output->Flush(); }); @@ -2362,6 +2363,7 @@ auto* output2 = server->CreateAndInitializeOutput(wl::TestOutputMetrics({1920, 1080})); output2->SetScale(2); + output2->SetDeviceScaleFactor(2); }); WaitForAllDisplaysReady(); @@ -2422,6 +2424,7 @@ auto* output2 = server->CreateAndInitializeOutput( wl::TestOutputMetrics({1920, 0, 1920, 1080})); output2->SetScale(2); + output2->SetDeviceScaleFactor(2); }); WaitForAllDisplaysReady(); @@ -2560,7 +2563,9 @@ server->GetObject<wl::TestOutput>(secondary_output_id); // Update scale factors first. main_output->SetScale(main_output_scale); + main_output->SetDeviceScaleFactor(main_output_scale); secondary_output->SetScale(secondary_output_scale); + secondary_output->SetDeviceScaleFactor(secondary_output_scale); main_output->Flush(); secondary_output->Flush(); @@ -2619,6 +2624,7 @@ auto* output2 = server->CreateAndInitializeOutput( wl::TestOutputMetrics({1921, 0, 1920, 1080})); output2->SetScale(2); + output2->SetDeviceScaleFactor(2); }); WaitForAllDisplaysReady(); @@ -2753,6 +2759,7 @@ wl::TestOutput* output2 = server->GetObject<wl::TestOutput>(wl_output2_id); // Pretend that the output2 has scale factor equals to 2 now. output2->SetScale(2); + output2->SetDeviceScaleFactor(2); output2->Flush(); }); @@ -2772,6 +2779,7 @@ wl::TestOutput* output1 = server->GetObject<wl::TestOutput>(wl_output1_id); // Now, the output1 changes its scale factor to 2 as well. output1->SetScale(2); + output1->SetDeviceScaleFactor(2); output1->Flush(); }); @@ -2782,6 +2790,7 @@ wl::TestOutput* output1 = server->GetObject<wl::TestOutput>(wl_output1_id); // Now, the output1 changes its scale factor back to 1. output1->SetScale(1); + output1->SetDeviceScaleFactor(1); output1->Flush(); }); @@ -2793,6 +2802,7 @@ // All outputs have scale factor of 1. window_ prefers the output that // it entered first again. output2->SetScale(1); + output2->SetDeviceScaleFactor(1); output2->Flush(); }); @@ -2905,6 +2915,7 @@ wl::TestOutput* output2 = server->GetObject<wl::TestOutput>(wl_output2_id); // Now, the output2 changes its scale factor to 2. output2->SetScale(2); + output2->SetDeviceScaleFactor(2); output2->Flush(); }); @@ -4500,15 +4511,20 @@ INSTANTIATE_TEST_SUITE_P( XdgVersionStableTestWithAuraShell, WaylandWindowTest, - Values(wl::ServerConfig{ - .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled})); + Values(wl::ServerConfig{.enable_aura_shell = + wl::EnableAuraShellProtocol::kEnabled}, + wl::ServerConfig{ + .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled, + .use_aura_output_manager = true})); INSTANTIATE_TEST_SUITE_P(XdgVersionStableTest, WaylandSubsurfaceTest, Values(wl::ServerConfig{})); INSTANTIATE_TEST_SUITE_P( XdgVersionStableTestWithAuraShell, WaylandSubsurfaceTest, - Values(wl::ServerConfig{ - .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled})); - + Values(wl::ServerConfig{.enable_aura_shell = + wl::EnableAuraShellProtocol::kEnabled}, + wl::ServerConfig{ + .enable_aura_shell = wl::EnableAuraShellProtocol::kEnabled, + .use_aura_output_manager = true})); } // namespace ui
diff --git a/ui/ozone/platform/wayland/test/test_output.cc b/ui/ozone/platform/wayland/test/test_output.cc index b0fb175b..743ee11c 100644 --- a/ui/ozone/platform/wayland/test/test_output.cc +++ b/ui/ozone/platform/wayland/test/test_output.cc
@@ -68,6 +68,10 @@ metrics_.aura_logical_insets = aura_logical_insets; } +void TestOutput::SetDeviceScaleFactor(float aura_device_scale_factor) { + metrics_.aura_device_scale_factor = aura_device_scale_factor; +} + void TestOutput::SetLogicalTransform( wl_output_transform aura_logical_transform) { metrics_.aura_logical_transform = aura_logical_transform;
diff --git a/ui/ozone/platform/wayland/test/test_output.h b/ui/ozone/platform/wayland/test/test_output.h index fee0252..6dd6066d 100644 --- a/ui/ozone/platform/wayland/test/test_output.h +++ b/ui/ozone/platform/wayland/test/test_output.h
@@ -64,6 +64,7 @@ void SetLogicalOrigin(const gfx::Point& xdg_logical_origin); void SetPanelTransform(wl_output_transform wl_panel_transform); void SetLogicalInsets(const gfx::Insets& wl_logical_insets); + void SetDeviceScaleFactor(float aura_device_scale_factor); void SetLogicalTransform(wl_output_transform aura_logical_transform); const gfx::Size& GetPhysicalSize() const;
diff --git a/ui/ozone/platform/wayland/test/test_output_metrics.cc b/ui/ozone/platform/wayland/test/test_output_metrics.cc index b64dade2..5b92238 100644 --- a/ui/ozone/platform/wayland/test/test_output_metrics.cc +++ b/ui/ozone/platform/wayland/test/test_output_metrics.cc
@@ -19,4 +19,10 @@ xdg_logical_origin(bounds.origin()), aura_display_id(display_id_counter++) {} +TestOutputMetrics::TestOutputMetrics(TestOutputMetrics&&) = default; + +TestOutputMetrics& TestOutputMetrics::operator=(TestOutputMetrics&&) = default; + +TestOutputMetrics::~TestOutputMetrics() = default; + } // namespace wl
diff --git a/ui/ozone/platform/wayland/test/test_output_metrics.h b/ui/ozone/platform/wayland/test/test_output_metrics.h index d9f64c1..d85f290 100644 --- a/ui/ozone/platform/wayland/test/test_output_metrics.h +++ b/ui/ozone/platform/wayland/test/test_output_metrics.h
@@ -21,6 +21,11 @@ // Creates a test metrics object with physical and logical bounds set to // `bounds`. explicit TestOutputMetrics(const gfx::Rect& bounds); + TestOutputMetrics(const TestOutputMetrics&) = delete; + TestOutputMetrics& operator=(const TestOutputMetrics&) = delete; + TestOutputMetrics(TestOutputMetrics&&); + TestOutputMetrics& operator=(TestOutputMetrics&&); + virtual ~TestOutputMetrics(); // Output metrics gfx::Size wl_physical_size = gfx::Size(800, 600); @@ -35,6 +40,7 @@ // AuraOutput metrics int64_t aura_display_id; gfx::Insets aura_logical_insets; + float aura_device_scale_factor = 1; wl_output_transform aura_logical_transform = WL_OUTPUT_TRANSFORM_NORMAL; };
diff --git a/ui/ozone/platform/wayland/test/test_zaura_output.cc b/ui/ozone/platform/wayland/test/test_zaura_output.cc index 7299fb6..258d37a 100644 --- a/ui/ozone/platform/wayland/test/test_zaura_output.cc +++ b/ui/ozone/platform/wayland/test/test_zaura_output.cc
@@ -4,6 +4,7 @@ #include "ui/ozone/platform/wayland/test/test_zaura_output.h" +#include "base/bit_cast.h" #include "ui/base/wayland/wayland_display_util.h" #include "ui/ozone/platform/wayland/test/test_output_metrics.h" @@ -29,6 +30,11 @@ const auto insets = metrics.aura_logical_insets; zaura_output_send_insets(resource(), insets.top(), insets.left(), insets.bottom(), insets.right()); + + const int32_t bit_cast_value = + base::bit_cast<uint32_t>(metrics.aura_device_scale_factor); + zaura_output_send_device_scale_factor(resource(), bit_cast_value); + zaura_output_send_logical_transform(resource(), metrics.aura_logical_transform); }
diff --git a/ui/ozone/platform/wayland/test/test_zaura_output_manager.cc b/ui/ozone/platform/wayland/test/test_zaura_output_manager.cc index f95450dc..7bb309f 100644 --- a/ui/ozone/platform/wayland/test/test_zaura_output_manager.cc +++ b/ui/ozone/platform/wayland/test/test_zaura_output_manager.cc
@@ -6,6 +6,7 @@ #include <aura-shell-server-protocol.h> +#include "base/bit_cast.h" #include "ui/base/wayland/wayland_display_util.h" #include "ui/ozone/platform/wayland/test/test_output_metrics.h" @@ -52,6 +53,11 @@ insets.left(), insets.bottom(), insets.right()); + const int32_t bit_cast_value = + base::bit_cast<uint32_t>(metrics.aura_device_scale_factor); + zaura_output_manager_send_device_scale_factor(resource(), output_resource, + bit_cast_value); + zaura_output_manager_send_logical_transform(resource(), output_resource, metrics.aura_logical_transform);
diff --git a/ui/strings/translations/ui_strings_af.xtb b/ui/strings/translations/ui_strings_af.xtb index a7f9a428..ee264adc 100644 --- a/ui/strings/translations/ui_strings_af.xtb +++ b/ui/strings/translations/ui_strings_af.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Kennisgewing toemaak</translation> <translation id="186476001994626254">Webslimplak-inhoud</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Kies almal</translation> <translation id="19085484004813472">Dit is 'n nuwe kenmerk</translation> <translation id="2006524834898217237">Maak seker dat hierdie toestel aan die internet gekoppel is.</translation>
diff --git a/ui/strings/translations/ui_strings_am.xtb b/ui/strings/translations/ui_strings_am.xtb index fa20ca1..59444d5 100644 --- a/ui/strings/translations/ui_strings_am.xtb +++ b/ui/strings/translations/ui_strings_am.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">ማሳወቂያ ዝጋ</translation> <translation id="186476001994626254">የድር ዘመናዊ ለጥፍ ይዘት</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&ሁሉንም ምረጥ</translation> <translation id="19085484004813472">ይህ አዲስ ባህሪ ነው</translation> <translation id="2006524834898217237">ይህ መሣሪያ ወደ በይነ መረብ እንደተገናኘ እርግጠኛ ይሁኑ።</translation>
diff --git a/ui/strings/translations/ui_strings_ar.xtb b/ui/strings/translations/ui_strings_ar.xtb index a47e96f..078fe72 100644 --- a/ui/strings/translations/ui_strings_ar.xtb +++ b/ui/strings/translations/ui_strings_ar.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">إغلاق الإشعار</translation> <translation id="186476001994626254">محتوى Web Smart Paste</translation> <translation id="1871244248791675517">مفتاح Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">تح&ديد الكلّ</translation> <translation id="19085484004813472">هذه ميزة جديدة</translation> <translation id="2006524834898217237">عليك التأكّد من اتصال الجهاز بالإنترنت.</translation>
diff --git a/ui/strings/translations/ui_strings_as.xtb b/ui/strings/translations/ui_strings_as.xtb index 00b1104..72ebe10 100644 --- a/ui/strings/translations/ui_strings_as.xtb +++ b/ui/strings/translations/ui_strings_as.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">জাননী বন্ধ কৰক</translation> <translation id="186476001994626254">ৱেব স্মাৰ্ট পে’ষ্ট সমল</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&সকলো বাছনি কৰক</translation> <translation id="19085484004813472">এইটো এটা নতুন সুবিধা</translation> <translation id="2006524834898217237">নিশ্চিত হৈ লওক যে এই ডিভাইচটো ইণ্টাৰনেটৰ সৈতে সংযুক্ত হৈ আছে।</translation>
diff --git a/ui/strings/translations/ui_strings_az.xtb b/ui/strings/translations/ui_strings_az.xtb index cc66eb2a..c033eeec 100644 --- a/ui/strings/translations/ui_strings_az.xtb +++ b/ui/strings/translations/ui_strings_az.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Bildiriş qapatma</translation> <translation id="186476001994626254">Veb Ağıllı Əlavə Etmə Məzmunu</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Hamısını seçin</translation> <translation id="19085484004813472">Bu, yeni funksiyadır</translation> <translation id="2006524834898217237">Bu cihazın internetə qoşulduğuna əmin olun.</translation>
diff --git a/ui/strings/translations/ui_strings_be.xtb b/ui/strings/translations/ui_strings_be.xtb index 64fef909..344b616 100644 --- a/ui/strings/translations/ui_strings_be.xtb +++ b/ui/strings/translations/ui_strings_be.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Закрыць апавяшчэнне</translation> <translation id="186476001994626254">Змесціва разумнай вэб-устаўкі</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Выбраць &усё</translation> <translation id="19085484004813472">Гэта новая функцыя</translation> <translation id="2006524834898217237">Праверце, ці падключана прылада да інтэрнэту.</translation>
diff --git a/ui/strings/translations/ui_strings_bg.xtb b/ui/strings/translations/ui_strings_bg.xtb index c87bac9..26074170 100644 --- a/ui/strings/translations/ui_strings_bg.xtb +++ b/ui/strings/translations/ui_strings_bg.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Затваряне на известието</translation> <translation id="186476001994626254">Уеб съдържание с възможност за интелигентно поставяне</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">&Избиране на всички</translation> <translation id="19085484004813472">Това е нова функция</translation> <translation id="2006524834898217237">Проверете дали устройството е свързано с интернет.</translation>
diff --git a/ui/strings/translations/ui_strings_bn.xtb b/ui/strings/translations/ui_strings_bn.xtb index 3e4fd72..2406bb8 100644 --- a/ui/strings/translations/ui_strings_bn.xtb +++ b/ui/strings/translations/ui_strings_bn.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">বিজ্ঞপ্তি বন্ধ করা হয়েছে</translation> <translation id="186476001994626254">ওয়েব স্মার্ট পেস্ট কন্টেন্ট</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&সকল বেছে নিন</translation> <translation id="19085484004813472">এটি একটি নতুন ফিচার</translation> <translation id="2006524834898217237">এই ডিভাইস ইন্টারনেটে কানেক্ট করা আছে কিনা দেখে নিন।</translation>
diff --git a/ui/strings/translations/ui_strings_bs.xtb b/ui/strings/translations/ui_strings_bs.xtb index 71b998c..5443e2a 100644 --- a/ui/strings/translations/ui_strings_bs.xtb +++ b/ui/strings/translations/ui_strings_bs.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Zatvaranje obavještenja</translation> <translation id="186476001994626254">Web sadržaj za pametno lijepljenje</translation> <translation id="1871244248791675517">Umet</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Odaberi &sve</translation> <translation id="19085484004813472">Ovo je nova funkcija</translation> <translation id="2006524834898217237">Provjerite je li ovaj uređaj povezan na internet.</translation>
diff --git a/ui/strings/translations/ui_strings_ca.xtb b/ui/strings/translations/ui_strings_ca.xtb index 03bda77..1ee808a 100644 --- a/ui/strings/translations/ui_strings_ca.xtb +++ b/ui/strings/translations/ui_strings_ca.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Tanca la notificació</translation> <translation id="186476001994626254">Contingut d'enganxada intel·ligent des del web</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Selecciona-ho &tot</translation> <translation id="19085484004813472">Aquesta funció és nova</translation> <translation id="2006524834898217237">Comprova que el dispositiu estigui connectat a Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_cs.xtb b/ui/strings/translations/ui_strings_cs.xtb index 29f32c3..b527f5a 100644 --- a/ui/strings/translations/ui_strings_cs.xtb +++ b/ui/strings/translations/ui_strings_cs.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Zavřít oznámení</translation> <translation id="186476001994626254">Obsah Web Smart Paste</translation> <translation id="1871244248791675517">Klávesa Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&Vybrat vše</translation> <translation id="19085484004813472">Toto je nová funkce</translation> <translation id="2006524834898217237">Zkontrolujte, zda je toto zařízení připojeno k internetu.</translation>
diff --git a/ui/strings/translations/ui_strings_cy.xtb b/ui/strings/translations/ui_strings_cy.xtb index 8c20401c53..628abbd 100644 --- a/ui/strings/translations/ui_strings_cy.xtb +++ b/ui/strings/translations/ui_strings_cy.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Cau hysbysiad</translation> <translation id="186476001994626254">Cynnwys Gludo Web Smart</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Dewis &popeth</translation> <translation id="19085484004813472">Mae hon yn nodwedd newydd</translation> <translation id="2006524834898217237">Gwnewch yn siŵr bod y ddyfais hon wedi'i chysylltu â'r rhyngrwyd.</translation>
diff --git a/ui/strings/translations/ui_strings_da.xtb b/ui/strings/translations/ui_strings_da.xtb index ab2686c6..db7bf9c 100644 --- a/ui/strings/translations/ui_strings_da.xtb +++ b/ui/strings/translations/ui_strings_da.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Luk notifikation</translation> <translation id="186476001994626254">Web Smart Paste-indhold</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Vælg &alle</translation> <translation id="19085484004813472">Dette er en ny funktion</translation> <translation id="2006524834898217237">Sørg for, at denne enhed har forbindelse til internettet.</translation>
diff --git a/ui/strings/translations/ui_strings_de.xtb b/ui/strings/translations/ui_strings_de.xtb index 15ca7ac..dbc42f88 100644 --- a/ui/strings/translations/ui_strings_de.xtb +++ b/ui/strings/translations/ui_strings_de.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Benachrichtigung schließen</translation> <translation id="186476001994626254">Web Smart Paste-Inhalt</translation> <translation id="1871244248791675517">Einfg</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&Alles auswählen</translation> <translation id="19085484004813472">Dies ist eine neue Funktion</translation> <translation id="2006524834898217237">Prüfe, ob das Gerät mit dem Internet verbunden ist.</translation>
diff --git a/ui/strings/translations/ui_strings_el.xtb b/ui/strings/translations/ui_strings_el.xtb index c975cf0..6eb672ff 100644 --- a/ui/strings/translations/ui_strings_el.xtb +++ b/ui/strings/translations/ui_strings_el.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Κλείσιμο ειδοποίησης</translation> <translation id="186476001994626254">Περιεχόμενο έξυπνης επικόλλησης ιστού</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Επιλογή όλ&ων</translation> <translation id="19085484004813472">Αυτή είναι μια νέα λειτουργία</translation> <translation id="2006524834898217237">Βεβαιωθείτε ότι αυτή η συσκευή είναι συνδεδεμένη στο διαδίκτυο.</translation>
diff --git a/ui/strings/translations/ui_strings_en-GB.xtb b/ui/strings/translations/ui_strings_en-GB.xtb index a935845..a82fe028f 100644 --- a/ui/strings/translations/ui_strings_en-GB.xtb +++ b/ui/strings/translations/ui_strings_en-GB.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Notification close</translation> <translation id="186476001994626254">Web smart paste content</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Select &all</translation> <translation id="19085484004813472">This is a new feature</translation> <translation id="2006524834898217237">Make sure that this device is connected to the Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_es-419.xtb b/ui/strings/translations/ui_strings_es-419.xtb index 18c9e39..c3b9f6e9 100644 --- a/ui/strings/translations/ui_strings_es-419.xtb +++ b/ui/strings/translations/ui_strings_es-419.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Cerrar notificación</translation> <translation id="186476001994626254">Contenido de Web Smart Paste</translation> <translation id="1871244248791675517">Insert</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Seleccionar &todo</translation> <translation id="19085484004813472">Esta es una función nueva</translation> <translation id="2006524834898217237">Comprueba que este dispositivo tenga conexión a Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_es.xtb b/ui/strings/translations/ui_strings_es.xtb index 4401fdb..612b983 100644 --- a/ui/strings/translations/ui_strings_es.xtb +++ b/ui/strings/translations/ui_strings_es.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Cerrar notificación</translation> <translation id="186476001994626254">Contenido de Web Smart Paste</translation> <translation id="1871244248791675517">Insert</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Seleccionar &todo</translation> <translation id="19085484004813472">Es una nueva función</translation> <translation id="2006524834898217237">Comprueba que este dispositivo esté conectado a Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_et.xtb b/ui/strings/translations/ui_strings_et.xtb index a54f42e6..2784cc8 100644 --- a/ui/strings/translations/ui_strings_et.xtb +++ b/ui/strings/translations/ui_strings_et.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Märguande sulgemine</translation> <translation id="186476001994626254">Web Smart Paste'i sisu</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Vali &kõik</translation> <translation id="19085484004813472">See on uus funktsioon</translation> <translation id="2006524834898217237">Veenduge, et seadmel oleks internetiühendus.</translation>
diff --git a/ui/strings/translations/ui_strings_eu.xtb b/ui/strings/translations/ui_strings_eu.xtb index 81e0bf2..2c552b4 100644 --- a/ui/strings/translations/ui_strings_eu.xtb +++ b/ui/strings/translations/ui_strings_eu.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Itxi jakinarazpena</translation> <translation id="186476001994626254">Sareko itsaste adimendunaren edukia</translation> <translation id="1871244248791675517">Txertatu</translation> -<translation id="1884435127456172652">% <ph name="NUMBER" /></translation> <translation id="1901303067676059328">Hautatu &guztiak</translation> <translation id="19085484004813472">Eginbide berri bat da hau</translation> <translation id="2006524834898217237">Ziurtatu gailua Internetera konektatuta dagoela.</translation>
diff --git a/ui/strings/translations/ui_strings_fa.xtb b/ui/strings/translations/ui_strings_fa.xtb index f73e3dfd..85387b151 100644 --- a/ui/strings/translations/ui_strings_fa.xtb +++ b/ui/strings/translations/ui_strings_fa.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">بستن اعلان</translation> <translation id="186476001994626254">جایگذاری هوشمند محتوا در وب</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />٪</translation> <translation id="1901303067676059328">انتخاب &همه</translation> <translation id="19085484004813472">این ویژگی جدید است</translation> <translation id="2006524834898217237">مطمئن شوید دستگاه به اینترنت متصل باشد.</translation>
diff --git a/ui/strings/translations/ui_strings_fi.xtb b/ui/strings/translations/ui_strings_fi.xtb index dc2b3ef..ba423d7c 100644 --- a/ui/strings/translations/ui_strings_fi.xtb +++ b/ui/strings/translations/ui_strings_fi.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Ilmoitus sulje</translation> <translation id="186476001994626254">Web Smart Paste ‑sisältö</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Valitse &kaikki</translation> <translation id="19085484004813472">Tämä on uusi ominaisuus</translation> <translation id="2006524834898217237">Varmista, että laite on yhteydessä internetiin.</translation>
diff --git a/ui/strings/translations/ui_strings_fil.xtb b/ui/strings/translations/ui_strings_fil.xtb index dbd53d6..1229c5c 100644 --- a/ui/strings/translations/ui_strings_fil.xtb +++ b/ui/strings/translations/ui_strings_fil.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Isara ang notification</translation> <translation id="186476001994626254">Content mula sa Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Piliin ang &lahat</translation> <translation id="19085484004813472">Isa itong bagong feature</translation> <translation id="2006524834898217237">Siguraduhing nakakonekta ang device na ito sa Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_fr-CA.xtb b/ui/strings/translations/ui_strings_fr-CA.xtb index dd435025..d8ec8331 100644 --- a/ui/strings/translations/ui_strings_fr-CA.xtb +++ b/ui/strings/translations/ui_strings_fr-CA.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Fermeture de la notification</translation> <translation id="186476001994626254">Contenu du coller intelligent Web</translation> <translation id="1871244248791675517">Inser</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&Tout sélectionner</translation> <translation id="19085484004813472">Il s'agit d'une nouvelle fonctionnalité</translation> <translation id="2006524834898217237">Assurez-vous que cet appareil est connecté à Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_fr.xtb b/ui/strings/translations/ui_strings_fr.xtb index 630de3ef..6ea9f27 100644 --- a/ui/strings/translations/ui_strings_fr.xtb +++ b/ui/strings/translations/ui_strings_fr.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Fermer la notification</translation> <translation id="186476001994626254">Contenu Web collé depuis le presse-papiers intelligent</translation> <translation id="1871244248791675517">Insér.</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&Tout sélectionner</translation> <translation id="19085484004813472">Il s'agit d'une nouvelle fonctionnalité</translation> <translation id="2006524834898217237">Assurez-vous que cet appareil est bien connecté à Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_gl.xtb b/ui/strings/translations/ui_strings_gl.xtb index 96f8dd43c..e15b799 100644 --- a/ui/strings/translations/ui_strings_gl.xtb +++ b/ui/strings/translations/ui_strings_gl.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Peche da notificación</translation> <translation id="186476001994626254">Contido da función de pegado intelixente da Web</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Seleccion&ar todo</translation> <translation id="19085484004813472">Esta é unha función nova</translation> <translation id="2006524834898217237">Asegúrate de que este dispositivo estea conectado a Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_gu.xtb b/ui/strings/translations/ui_strings_gu.xtb index 3352f3e..4e8353b4 100644 --- a/ui/strings/translations/ui_strings_gu.xtb +++ b/ui/strings/translations/ui_strings_gu.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">સૂચના બંધ છે</translation> <translation id="186476001994626254">વેબ સ્માર્ટ પેસ્ટ કન્ટેન્ટ</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&બધા પસંદ કરો</translation> <translation id="19085484004813472">આ નવી સુવિધા છે</translation> <translation id="2006524834898217237">ખાતરી કરો કે આ ડિવાઇસ ઇન્ટરનેટ સાથે કનેક્ટ કરેલું છે.</translation>
diff --git a/ui/strings/translations/ui_strings_hi.xtb b/ui/strings/translations/ui_strings_hi.xtb index e3ead993..256f988 100644 --- a/ui/strings/translations/ui_strings_hi.xtb +++ b/ui/strings/translations/ui_strings_hi.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">सूचना बंद करें</translation> <translation id="186476001994626254">वेब स्मार्ट पेस्ट कॉन्टेंट</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&सभी को चुनें</translation> <translation id="19085484004813472">यह नई सुविधा है</translation> <translation id="2006524834898217237">पक्का करें कि यह डिवाइस इंटरनेट से कनेक्ट है.</translation>
diff --git a/ui/strings/translations/ui_strings_hr.xtb b/ui/strings/translations/ui_strings_hr.xtb index 5305a5d1..548e247 100644 --- a/ui/strings/translations/ui_strings_hr.xtb +++ b/ui/strings/translations/ui_strings_hr.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Zatvaranje obavijesti</translation> <translation id="186476001994626254">Web-sadržaj za pametno lijepljenje</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Odaberi &sve</translation> <translation id="19085484004813472">Ovo je nova značajka</translation> <translation id="2006524834898217237">Provjerite je li uređaj povezan s internetom.</translation>
diff --git a/ui/strings/translations/ui_strings_hu.xtb b/ui/strings/translations/ui_strings_hu.xtb index 184293df..ecc87ef 100644 --- a/ui/strings/translations/ui_strings_hu.xtb +++ b/ui/strings/translations/ui_strings_hu.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Értesítés bezárása</translation> <translation id="186476001994626254">Web Smart Paste-tartalom</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Össz&es kiválasztása</translation> <translation id="19085484004813472">Ez a funkció új</translation> <translation id="2006524834898217237">Ellenőrizze, hogy az eszköz csatlakozik-e az internethez.</translation>
diff --git a/ui/strings/translations/ui_strings_hy.xtb b/ui/strings/translations/ui_strings_hy.xtb index bf46532..1252401f 100644 --- a/ui/strings/translations/ui_strings_hy.xtb +++ b/ui/strings/translations/ui_strings_hy.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Փակել ծանուցումը</translation> <translation id="186476001994626254">Web Smart Paste ձևաչափով բովանդակություն</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Ընտրել &բոլորը</translation> <translation id="19085484004813472">Սա նոր գործառույթ է</translation> <translation id="2006524834898217237">Համոզվեք, որ սարքը միացված է ինտերնետին։</translation>
diff --git a/ui/strings/translations/ui_strings_id.xtb b/ui/strings/translations/ui_strings_id.xtb index 3daa269..b882099 100644 --- a/ui/strings/translations/ui_strings_id.xtb +++ b/ui/strings/translations/ui_strings_id.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Tutup pemberitahuan</translation> <translation id="186476001994626254">Konten Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Pilih semu&a</translation> <translation id="19085484004813472">Ini adalah fitur baru</translation> <translation id="2006524834898217237">Pastikan perangkat ini terhubung ke internet.</translation>
diff --git a/ui/strings/translations/ui_strings_is.xtb b/ui/strings/translations/ui_strings_is.xtb index 650d697..b310a3f 100644 --- a/ui/strings/translations/ui_strings_is.xtb +++ b/ui/strings/translations/ui_strings_is.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Loka tilkynningu</translation> <translation id="186476001994626254">Snjalllíming efnis fyrir vefinn</translation> <translation id="1871244248791675517">Insert</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Velja &allt</translation> <translation id="19085484004813472">Þetta er nýr eiginleiki</translation> <translation id="2006524834898217237">Gakktu úr skugga um að tækið sé tengt við internetið.</translation>
diff --git a/ui/strings/translations/ui_strings_it.xtb b/ui/strings/translations/ui_strings_it.xtb index 5726d30..8009c25 100644 --- a/ui/strings/translations/ui_strings_it.xtb +++ b/ui/strings/translations/ui_strings_it.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Chiusura notifica</translation> <translation id="186476001994626254">Contenuti di Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Seleziona &tutto</translation> <translation id="19085484004813472">Questa funzionalità è nuova</translation> <translation id="2006524834898217237">Assicurati che questo dispositivo sia connesso a Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_iw.xtb b/ui/strings/translations/ui_strings_iw.xtb index 53ba34e..d231c32e 100644 --- a/ui/strings/translations/ui_strings_iw.xtb +++ b/ui/strings/translations/ui_strings_iw.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">סגירת הודעה</translation> <translation id="186476001994626254">תוכן מ-Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652">%<ph name="NUMBER" /></translation> <translation id="1901303067676059328">בחירת &הכול</translation> <translation id="19085484004813472">זוהי תכונה חדשה</translation> <translation id="2006524834898217237">יש לוודא שהמכשיר הזה מחובר לאינטרנט.</translation>
diff --git a/ui/strings/translations/ui_strings_ja.xtb b/ui/strings/translations/ui_strings_ja.xtb index a353d1cf..1cc1c62a 100644 --- a/ui/strings/translations/ui_strings_ja.xtb +++ b/ui/strings/translations/ui_strings_ja.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">通知を閉じる</translation> <translation id="186476001994626254">ウェブのスマート貼り付けコンテンツ</translation> <translation id="1871244248791675517">Insert</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">すべて選択(&A)</translation> <translation id="19085484004813472">これは新しい機能です</translation> <translation id="2006524834898217237">このデバイスがインターネットに接続されているかご確認ください。</translation>
diff --git a/ui/strings/translations/ui_strings_ka.xtb b/ui/strings/translations/ui_strings_ka.xtb index f5da704..b43b381d 100644 --- a/ui/strings/translations/ui_strings_ka.xtb +++ b/ui/strings/translations/ui_strings_ka.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">შეტყობინების დახურვა</translation> <translation id="186476001994626254">Web Smart Paste კონტენტი</translation> <translation id="1871244248791675517">ჩასმა</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">&ყველას არჩევა</translation> <translation id="19085484004813472">ეს ახალი ფუნქციაა</translation> <translation id="2006524834898217237">დარწმუნდით, რომ ეს მოწყობილობა დაკავშირებულია ინტერნეტთან.</translation>
diff --git a/ui/strings/translations/ui_strings_kk.xtb b/ui/strings/translations/ui_strings_kk.xtb index 6c8affe1..32707bc 100644 --- a/ui/strings/translations/ui_strings_kk.xtb +++ b/ui/strings/translations/ui_strings_kk.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Хабарландыруды жабу</translation> <translation id="186476001994626254">Web Smart Paste контенті</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Барлығын &таңдау</translation> <translation id="19085484004813472">Бұл – жаңа функция.</translation> <translation id="2006524834898217237">Бұл құрылғы интернетке қосулы екеніне көз жеткізіңіз.</translation>
diff --git a/ui/strings/translations/ui_strings_km.xtb b/ui/strings/translations/ui_strings_km.xtb index c299bb2..7f779455 100644 --- a/ui/strings/translations/ui_strings_km.xtb +++ b/ui/strings/translations/ui_strings_km.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">បិទការជូនដំណឹង</translation> <translation id="186476001994626254">ខ្លឹមសារពី Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">ជ្រើសរើសទាំងអស់</translation> <translation id="19085484004813472">នេះគឺជាមុខងារថ្មី</translation> <translation id="2006524834898217237">ត្រូវប្រាកដថា ឧបករណ៍នេះមានការតភ្ជាប់អ៊ីនធឺណិត។</translation>
diff --git a/ui/strings/translations/ui_strings_kn.xtb b/ui/strings/translations/ui_strings_kn.xtb index a68d4f5b..622e1cf 100644 --- a/ui/strings/translations/ui_strings_kn.xtb +++ b/ui/strings/translations/ui_strings_kn.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">ಅಧಿಸೂಚನೆ ಮುಚ್ಚು</translation> <translation id="186476001994626254">ವೆಬ್ ಸ್ಮಾರ್ಟ್ ಅಂಟಿಸುವ ವಿಷಯ</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&ಎಲ್ಲ ಆಯ್ಕೆ ಮಾಡಿ</translation> <translation id="19085484004813472">ಇದೊಂದು ಹೊಸ ವೈಶಿಷ್ಟ್ಯ</translation> <translation id="2006524834898217237">ಈ ಸಾಧನವು ಇಂಟರ್ನೆಟ್ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation>
diff --git a/ui/strings/translations/ui_strings_ko.xtb b/ui/strings/translations/ui_strings_ko.xtb index d1fc26f..024901a 100644 --- a/ui/strings/translations/ui_strings_ko.xtb +++ b/ui/strings/translations/ui_strings_ko.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">알림 닫기</translation> <translation id="186476001994626254">웹 스마트 붙여넣기 콘텐츠</translation> <translation id="1871244248791675517">Insert</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">전체 선택(&A)</translation> <translation id="19085484004813472">새로운 기능입니다.</translation> <translation id="2006524834898217237">기기가 인터넷에 연결되어 있는지 확인하세요.</translation>
diff --git a/ui/strings/translations/ui_strings_ky.xtb b/ui/strings/translations/ui_strings_ky.xtb index 3c335e1..6c0e428 100644 --- a/ui/strings/translations/ui_strings_ky.xtb +++ b/ui/strings/translations/ui_strings_ky.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Эскертмени жабуу</translation> <translation id="186476001994626254">Вебдеги мазмунду акылдуу чаптоо</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&Баарын тандоо</translation> <translation id="19085484004813472">Бул жаңы функция</translation> <translation id="2006524834898217237">Бул түзмөк интернетке туташканын текшериңиз.</translation>
diff --git a/ui/strings/translations/ui_strings_lo.xtb b/ui/strings/translations/ui_strings_lo.xtb index 2f6ab66..ddc66cd 100644 --- a/ui/strings/translations/ui_strings_lo.xtb +++ b/ui/strings/translations/ui_strings_lo.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">ປິດການແຈ້ງເຕືອນ</translation> <translation id="186476001994626254">ການວາງເນື້ອຫາອັດສະລິຍະໃນເວັບ</translation> <translation id="1871244248791675517">ແຊກເຂົ້າ</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">ເລືອກທັງຫມົດ</translation> <translation id="19085484004813472">ນີ້ແມ່ນຄຸນສົມບັດໃໝ່</translation> <translation id="2006524834898217237">ກວດໃຫ້ແນ່ໃຈວ່າອຸປະກອນນີ້ເຊື່ອມຕໍ່ກັບອິນເຕີເນັດ.</translation>
diff --git a/ui/strings/translations/ui_strings_lt.xtb b/ui/strings/translations/ui_strings_lt.xtb index bb83b96..22daf83 100644 --- a/ui/strings/translations/ui_strings_lt.xtb +++ b/ui/strings/translations/ui_strings_lt.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Uždaryti pranešimus</translation> <translation id="186476001994626254">„Web Smart Paste“ turinys</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Pasirinkti &viską</translation> <translation id="19085484004813472">Tai nauja funkcija</translation> <translation id="2006524834898217237">Įsitikinkite, kad šis įrenginys prijungtas prie interneto.</translation>
diff --git a/ui/strings/translations/ui_strings_lv.xtb b/ui/strings/translations/ui_strings_lv.xtb index 719d8632..2728412 100644 --- a/ui/strings/translations/ui_strings_lv.xtb +++ b/ui/strings/translations/ui_strings_lv.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Paziņojuma aizvēršana</translation> <translation id="186476001994626254">Web Smart Paste saturs</translation> <translation id="1871244248791675517">Iespraušana</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Izvēlēties visus</translation> <translation id="19085484004813472">Šī ir jauna funkcija</translation> <translation id="2006524834898217237">Pārbaudiet, vai šajā ierīcē ir izveidots savienojums ar internetu.</translation>
diff --git a/ui/strings/translations/ui_strings_mk.xtb b/ui/strings/translations/ui_strings_mk.xtb index 49f9a68..2cd204b 100644 --- a/ui/strings/translations/ui_strings_mk.xtb +++ b/ui/strings/translations/ui_strings_mk.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Затворање на известување</translation> <translation id="186476001994626254">Содржини од интернет за паметно лепење</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Избери ги &сите</translation> <translation id="19085484004813472">Ова е нова функција</translation> <translation id="2006524834898217237">Проверете дали уредов е поврзан на интернет.</translation>
diff --git a/ui/strings/translations/ui_strings_ml.xtb b/ui/strings/translations/ui_strings_ml.xtb index 5874c96..736af8c 100644 --- a/ui/strings/translations/ui_strings_ml.xtb +++ b/ui/strings/translations/ui_strings_ml.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">അറിയിപ്പ് അടയ്ക്കൽ</translation> <translation id="186476001994626254">വെബ് സ്മാർട്ട് ഒട്ടിക്കൽ ഉള്ളടക്കം</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">എല്ലാം &തിരഞ്ഞെടുക്കൂ</translation> <translation id="19085484004813472">ഇതൊരു പുതിയ ഫീച്ചറാണ്</translation> <translation id="2006524834898217237">ഈ ഉപകരണം ഇന്റർനെറ്റിലേക്ക് കണക്റ്റ് ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക.</translation>
diff --git a/ui/strings/translations/ui_strings_mn.xtb b/ui/strings/translations/ui_strings_mn.xtb index 2e16dbe..8c232f3b 100644 --- a/ui/strings/translations/ui_strings_mn.xtb +++ b/ui/strings/translations/ui_strings_mn.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Мэдэгдлийг хаах</translation> <translation id="186476001994626254">Вебийн ухаалгаар буулгах контент</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Бүгдийг сонго &</translation> <translation id="19085484004813472">Энэ бол шинэ онцлог</translation> <translation id="2006524834898217237">Энэ төхөөрөмж интернэтэд холбогдсон эсэхийг шалгана уу.</translation>
diff --git a/ui/strings/translations/ui_strings_mr.xtb b/ui/strings/translations/ui_strings_mr.xtb index 176657b..e2b39091 100644 --- a/ui/strings/translations/ui_strings_mr.xtb +++ b/ui/strings/translations/ui_strings_mr.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">सूचना बंद</translation> <translation id="186476001994626254">वेब स्मार्ट पेस्ट आशय</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&सर्व निवडा</translation> <translation id="19085484004813472">हे नवीन वैशिष्ट्य आहे</translation> <translation id="2006524834898217237">हे डिव्हाइस इंटरनेटशी कनेक्ट केलेले असल्याची खात्री करा.</translation>
diff --git a/ui/strings/translations/ui_strings_ms.xtb b/ui/strings/translations/ui_strings_ms.xtb index 9360e02..fcbad09 100644 --- a/ui/strings/translations/ui_strings_ms.xtb +++ b/ui/strings/translations/ui_strings_ms.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Tutup Pemberitahuan</translation> <translation id="186476001994626254">Kandungan Tampal Pintar Web</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Pilih &semua</translation> <translation id="19085484004813472">Ini ciri baharu</translation> <translation id="2006524834898217237">Pastikan peranti ini disambungkan ke Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_my.xtb b/ui/strings/translations/ui_strings_my.xtb index a5b4073..be550710 100644 --- a/ui/strings/translations/ui_strings_my.xtb +++ b/ui/strings/translations/ui_strings_my.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">အကြောင်းကြားစာ ပိတ်ရန်</translation> <translation id="186476001994626254">ဝဘ် စမတ် ကူးထည့်ရန် အကြောင်းအရာ</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">အားလုံးကို &ရွေးရန်</translation> <translation id="19085484004813472">၎င်းသည် ဝန်ဆောင်မှုအသစ်ဖြစ်သည်</translation> <translation id="2006524834898217237">ဤစက်သည် အင်တာနက်ချိတ်ထားမှု ရှိမရှိ စစ်ဆေးပါ။</translation>
diff --git a/ui/strings/translations/ui_strings_ne.xtb b/ui/strings/translations/ui_strings_ne.xtb index 3f7b7c4..67db26f 100644 --- a/ui/strings/translations/ui_strings_ne.xtb +++ b/ui/strings/translations/ui_strings_ne.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">सूचना बन्द भयो</translation> <translation id="186476001994626254">वेब स्मार्ट पेस्टको सामग्री</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&सबै चयन गर्नुहोस्</translation> <translation id="19085484004813472">यो नयाँ सुविधा हो</translation> <translation id="2006524834898217237">यो डिभाइस इन्टरनेटमा जोडिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस्।</translation>
diff --git a/ui/strings/translations/ui_strings_nl.xtb b/ui/strings/translations/ui_strings_nl.xtb index de78e00..e5c2547 100644 --- a/ui/strings/translations/ui_strings_nl.xtb +++ b/ui/strings/translations/ui_strings_nl.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Melding sluiten</translation> <translation id="186476001994626254">Content voor slim plakken op het web</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">&Alles selecteren</translation> <translation id="19085484004813472">Dit is een nieuwe functie</translation> <translation id="2006524834898217237">Zorg dat dit apparaat is verbonden met internet.</translation>
diff --git a/ui/strings/translations/ui_strings_no.xtb b/ui/strings/translations/ui_strings_no.xtb index 38bfc3b..ae91ee6 100644 --- a/ui/strings/translations/ui_strings_no.xtb +++ b/ui/strings/translations/ui_strings_no.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Lukk varsel</translation> <translation id="186476001994626254">Web Smart Paste-innhold</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Marker &alt</translation> <translation id="19085484004813472">Dette er en ny funksjon</translation> <translation id="2006524834898217237">Kontroller at enheten er koblet til internett.</translation>
diff --git a/ui/strings/translations/ui_strings_or.xtb b/ui/strings/translations/ui_strings_or.xtb index f1431c53..5b79b77 100644 --- a/ui/strings/translations/ui_strings_or.xtb +++ b/ui/strings/translations/ui_strings_or.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">ବିଜ୍ଞପ୍ତି ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="186476001994626254">ୱେବ୍ ସ୍ମାର୍ଟ ପେଷ୍ଟ ବିଷୟବସ୍ତୁ</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&ସମସ୍ତ ଚୟନ କରନ୍ତୁ</translation> <translation id="19085484004813472">ଏହା ଏକ ନୂଆ ଫିଚର୍ ଅଟେ</translation> <translation id="2006524834898217237">ଏହି ଡିଭାଇସ୍ଟି ଇଣ୍ଟର୍ନେଟ୍ ସହ ସଂଯୁକ୍ତ ହୋଇଥିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ।</translation>
diff --git a/ui/strings/translations/ui_strings_pa.xtb b/ui/strings/translations/ui_strings_pa.xtb index 9792bf8..dee0b14 100644 --- a/ui/strings/translations/ui_strings_pa.xtb +++ b/ui/strings/translations/ui_strings_pa.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">ਸੂਚਨਾ ਬੰਦ</translation> <translation id="186476001994626254">ਵੈੱਬ ਸਮਾਰਟ ਪੇਸਟ ਸਮੱਗਰੀ</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&ਸਾਰੇ ਚੁਣੋ</translation> <translation id="19085484004813472">ਇਹ ਇੱਕ ਨਵੀਂ ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ</translation> <translation id="2006524834898217237">ਪੱਕਾ ਕਰੋ ਕਿ ਇਹ ਡੀਵਾਈਸ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੋਵੇ।</translation>
diff --git a/ui/strings/translations/ui_strings_pl.xtb b/ui/strings/translations/ui_strings_pl.xtb index b4d8df7..c7e3774 100644 --- a/ui/strings/translations/ui_strings_pl.xtb +++ b/ui/strings/translations/ui_strings_pl.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Zamknięcie powiadomienia</translation> <translation id="186476001994626254">Treść typu Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Zaznacz &wszystko</translation> <translation id="19085484004813472">To jest nowa funkcja</translation> <translation id="2006524834898217237">Upewnij się, że to urządzenie jest połączone z internetem.</translation>
diff --git a/ui/strings/translations/ui_strings_pt-BR.xtb b/ui/strings/translations/ui_strings_pt-BR.xtb index b17fddc..322331c 100644 --- a/ui/strings/translations/ui_strings_pt-BR.xtb +++ b/ui/strings/translations/ui_strings_pt-BR.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Fechar notificação</translation> <translation id="186476001994626254">Conteúdo Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Selecionar &tudo</translation> <translation id="19085484004813472">Este é um recurso novo</translation> <translation id="2006524834898217237">Verifique se o dispositivo está conectado à Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_pt-PT.xtb b/ui/strings/translations/ui_strings_pt-PT.xtb index 98fb54c..3101a78 100644 --- a/ui/strings/translations/ui_strings_pt-PT.xtb +++ b/ui/strings/translations/ui_strings_pt-PT.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Fechar notificação</translation> <translation id="186476001994626254">Conteúdo Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Seleccion&ar tudo</translation> <translation id="19085484004813472">Esta é uma nova funcionalidade</translation> <translation id="2006524834898217237">Certifique-se de que este dispositivo está ligado à Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_ro.xtb b/ui/strings/translations/ui_strings_ro.xtb index f993975..4fa58ba 100644 --- a/ui/strings/translations/ui_strings_ro.xtb +++ b/ui/strings/translations/ui_strings_ro.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Buton de închidere a notificării</translation> <translation id="186476001994626254">Conținut cu inserare inteligentă de pe web</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Select&ează tot</translation> <translation id="19085484004813472">Aceasta este o funcție nouă</translation> <translation id="2006524834898217237">Verifică dacă dispozitivul este conectat la internet.</translation>
diff --git a/ui/strings/translations/ui_strings_ru.xtb b/ui/strings/translations/ui_strings_ru.xtb index f9323e7..5579ce7 100644 --- a/ui/strings/translations/ui_strings_ru.xtb +++ b/ui/strings/translations/ui_strings_ru.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Закрыть уведомление</translation> <translation id="186476001994626254">Контент в формате Web Smart Paste</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Выделить &все</translation> <translation id="19085484004813472">Это новая функция</translation> <translation id="2006524834898217237">Убедитесь, что устройство подключено к Интернету.</translation>
diff --git a/ui/strings/translations/ui_strings_si.xtb b/ui/strings/translations/ui_strings_si.xtb index fc2127e9..de7aa7f 100644 --- a/ui/strings/translations/ui_strings_si.xtb +++ b/ui/strings/translations/ui_strings_si.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">දැන්වීම වසන්න</translation> <translation id="186476001994626254">වෙබ් ස්මාර්ට් ඇලවීම් අන්තර්ගතය</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">සියල්ල තෝරන්න</translation> <translation id="19085484004813472">මෙය නව විශේෂාංගයකි</translation> <translation id="2006524834898217237">මෙම උපාංගය අන්තර්ජාලයට සම්බන්ධ වී තිබෙන බව තහවුරු කර ගන්න.</translation>
diff --git a/ui/strings/translations/ui_strings_sk.xtb b/ui/strings/translations/ui_strings_sk.xtb index c4254d1..a46889d 100644 --- a/ui/strings/translations/ui_strings_sk.xtb +++ b/ui/strings/translations/ui_strings_sk.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Zavrieť upozornenie</translation> <translation id="186476001994626254">Obsah pridaný inteligentným prilepením z webov</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Vybrať &všetko</translation> <translation id="19085484004813472">Toto je nová funkcia</translation> <translation id="2006524834898217237">Skontrolujte, či je toto zariadenie pripojené k internetu.</translation>
diff --git a/ui/strings/translations/ui_strings_sl.xtb b/ui/strings/translations/ui_strings_sl.xtb index d39e3ff1..d0c65fc 100644 --- a/ui/strings/translations/ui_strings_sl.xtb +++ b/ui/strings/translations/ui_strings_sl.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Zapri obvestilo</translation> <translation id="186476001994626254">Spletna vsebina za pametno lepljenje</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Izberi &vse</translation> <translation id="19085484004813472">To je nova funkcija</translation> <translation id="2006524834898217237">Naprava mora biti povezana z internetom.</translation>
diff --git a/ui/strings/translations/ui_strings_sq.xtb b/ui/strings/translations/ui_strings_sq.xtb index 8f850f3..420d3f5 100644 --- a/ui/strings/translations/ui_strings_sq.xtb +++ b/ui/strings/translations/ui_strings_sq.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Mbyllja e njoftimit</translation> <translation id="186476001994626254">Përmbajtja e ngjitjes inteligjente për ueb</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Zgjidhi &të gjitha</translation> <translation id="19085484004813472">Kjo është një veçori e re</translation> <translation id="2006524834898217237">Sigurohu që kjo pajisje të jetë e lidhur me internetin.</translation>
diff --git a/ui/strings/translations/ui_strings_sr-Latn.xtb b/ui/strings/translations/ui_strings_sr-Latn.xtb index e21e35eb..9d258291 100644 --- a/ui/strings/translations/ui_strings_sr-Latn.xtb +++ b/ui/strings/translations/ui_strings_sr-Latn.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Zatvori obaveštenje</translation> <translation id="186476001994626254">Veb-sadržaj za pametno nalepljivanje</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Izaberi &sve</translation> <translation id="19085484004813472">Ovo je nova funkcija</translation> <translation id="2006524834898217237">Uverite se da je ovaj uređaj povezan na internet.</translation>
diff --git a/ui/strings/translations/ui_strings_sr.xtb b/ui/strings/translations/ui_strings_sr.xtb index d81c1c9..a2f781f 100644 --- a/ui/strings/translations/ui_strings_sr.xtb +++ b/ui/strings/translations/ui_strings_sr.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Затвори обавештење</translation> <translation id="186476001994626254">Веб-садржај за паметно налепљивање</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Изабери &све</translation> <translation id="19085484004813472">Ово је нова функција</translation> <translation id="2006524834898217237">Уверите се да је овај уређај повезан на интернет.</translation>
diff --git a/ui/strings/translations/ui_strings_sv.xtb b/ui/strings/translations/ui_strings_sv.xtb index 8da8357e..594a482 100644 --- a/ui/strings/translations/ui_strings_sv.xtb +++ b/ui/strings/translations/ui_strings_sv.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Meddelande om stängning</translation> <translation id="186476001994626254">Web Smart Paste-innehåll</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Välj &alla</translation> <translation id="19085484004813472">Det här är en ny funktion</translation> <translation id="2006524834898217237">Kontrollera att enheten är ansluten till internet.</translation>
diff --git a/ui/strings/translations/ui_strings_sw.xtb b/ui/strings/translations/ui_strings_sw.xtb index df09cef..4568416 100644 --- a/ui/strings/translations/ui_strings_sw.xtb +++ b/ui/strings/translations/ui_strings_sw.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Funga arifa</translation> <translation id="186476001994626254">Maudhui ya Ubandikaji Mahiri wa Wavuti</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Chagua &yote</translation> <translation id="19085484004813472">Hiki ni kipengele kipya</translation> <translation id="2006524834898217237">Hakikisha kwamba kifaa hiki kimeunganishwa kwenye intaneti.</translation>
diff --git a/ui/strings/translations/ui_strings_ta.xtb b/ui/strings/translations/ui_strings_ta.xtb index 04d136f..d971dce0 100644 --- a/ui/strings/translations/ui_strings_ta.xtb +++ b/ui/strings/translations/ui_strings_ta.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">அறிவிப்பை மூடு</translation> <translation id="186476001994626254">இணைய ஸ்மார்ட் ஒட்டுதல் உள்ளடக்கம்</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">அ&னைத்தையும் தேர்ந்தெடு</translation> <translation id="19085484004813472">இது ஒரு புதிய அம்சம்</translation> <translation id="2006524834898217237">இந்த சாதனம் இணையத்துடன் இணைக்கப்பட்டுள்ளதை உறுதி செய்யவும்.</translation>
diff --git a/ui/strings/translations/ui_strings_te.xtb b/ui/strings/translations/ui_strings_te.xtb index 9a228000..ba1381c 100644 --- a/ui/strings/translations/ui_strings_te.xtb +++ b/ui/strings/translations/ui_strings_te.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">నోటిఫికేషన్ను మూసివేయి</translation> <translation id="186476001994626254">వెబ్ స్మార్ట్ పేస్ట్ కంటెంట్</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&అన్నీ ఎంచుకోండి</translation> <translation id="19085484004813472">ఇది కొత్త ఫీచర్</translation> <translation id="2006524834898217237">ఈ పరికరం ఇంటర్నెట్కు కనెక్ట్ చేయబడి ఉందని నిర్ధారించుకోండి.</translation>
diff --git a/ui/strings/translations/ui_strings_th.xtb b/ui/strings/translations/ui_strings_th.xtb index 614370e..58ae9a1 100644 --- a/ui/strings/translations/ui_strings_th.xtb +++ b/ui/strings/translations/ui_strings_th.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">ปิดการแจ้งเตือน</translation> <translation id="186476001994626254">Web Smart Paste Content</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">เลือก&ทั้งหมด</translation> <translation id="19085484004813472">นี่เป็นฟีเจอร์ใหม่</translation> <translation id="2006524834898217237">ตรวจสอบว่าอุปกรณ์นี้เชื่อมต่ออินเทอร์เน็ตแล้ว</translation>
diff --git a/ui/strings/translations/ui_strings_tr.xtb b/ui/strings/translations/ui_strings_tr.xtb index d02f1a0..8a78c5b49 100644 --- a/ui/strings/translations/ui_strings_tr.xtb +++ b/ui/strings/translations/ui_strings_tr.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Bildirimi kapat</translation> <translation id="186476001994626254">Web Smart Paste İçeriği</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652">%<ph name="NUMBER" /></translation> <translation id="1901303067676059328">Tümünü &seç</translation> <translation id="19085484004813472">Bu yeni bir özelliktir</translation> <translation id="2006524834898217237">Bu cihazın internete bağlı olduğundan emin olun.</translation>
diff --git a/ui/strings/translations/ui_strings_uk.xtb b/ui/strings/translations/ui_strings_uk.xtb index 58be3eb0..214cdca 100644 --- a/ui/strings/translations/ui_strings_uk.xtb +++ b/ui/strings/translations/ui_strings_uk.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Закрити сповіщення</translation> <translation id="186476001994626254">Веб-контент для розумного вставлення</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" />%</translation> <translation id="1901303067676059328">Вибрати &всі</translation> <translation id="19085484004813472">Це нова функція</translation> <translation id="2006524834898217237">Перевірте, чи пристрій підключено до Інтернету.</translation>
diff --git a/ui/strings/translations/ui_strings_ur.xtb b/ui/strings/translations/ui_strings_ur.xtb index 98eabfe..a9aca7a 100644 --- a/ui/strings/translations/ui_strings_ur.xtb +++ b/ui/strings/translations/ui_strings_ur.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">اطلاع بند</translation> <translation id="186476001994626254">ویب اسمارٹ پیسٹ مواد</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">&سبھی کو منتخب کریں</translation> <translation id="19085484004813472">یہ نئی خصوصیت ہے</translation> <translation id="2006524834898217237">یہ یقینی بنائیں کہ آپ کا آلہ انٹرنیٹ سے منسلک ہے۔</translation>
diff --git a/ui/strings/translations/ui_strings_uz.xtb b/ui/strings/translations/ui_strings_uz.xtb index 36d3aca..bf333ed 100644 --- a/ui/strings/translations/ui_strings_uz.xtb +++ b/ui/strings/translations/ui_strings_uz.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Bildirishnomani yopish</translation> <translation id="186476001994626254">Internetdan smart joylangan kontent</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Hammasini belgilash</translation> <translation id="19085484004813472">Bu yangi funksiya</translation> <translation id="2006524834898217237">Bu qurilma internetga ulanganini tekshiring.</translation>
diff --git a/ui/strings/translations/ui_strings_vi.xtb b/ui/strings/translations/ui_strings_vi.xtb index f04fcf6..2bb1689 100644 --- a/ui/strings/translations/ui_strings_vi.xtb +++ b/ui/strings/translations/ui_strings_vi.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Đóng thông báo</translation> <translation id="186476001994626254">Nội dung dán thông minh trên web</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Chọn &tất cả</translation> <translation id="19085484004813472">Đây là tính năng mới</translation> <translation id="2006524834898217237">Hãy đảm bảo thiết bị này có kết nối Internet.</translation>
diff --git a/ui/strings/translations/ui_strings_zh-CN.xtb b/ui/strings/translations/ui_strings_zh-CN.xtb index 11606f0..5e90c7c 100644 --- a/ui/strings/translations/ui_strings_zh-CN.xtb +++ b/ui/strings/translations/ui_strings_zh-CN.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">关闭通知</translation> <translation id="186476001994626254">Web Smart Paste 内容</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">全选(&A)</translation> <translation id="19085484004813472">这是一项新功能</translation> <translation id="2006524834898217237">请确保此设备已连接到互联网。</translation>
diff --git a/ui/strings/translations/ui_strings_zh-HK.xtb b/ui/strings/translations/ui_strings_zh-HK.xtb index 78e8bc7..5e9fca14 100644 --- a/ui/strings/translations/ui_strings_zh-HK.xtb +++ b/ui/strings/translations/ui_strings_zh-HK.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">通知關閉</translation> <translation id="186476001994626254">網絡智能貼上內容</translation> <translation id="1871244248791675517">插入鍵</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">全部選取(&A)</translation> <translation id="19085484004813472">呢個係新功能</translation> <translation id="2006524834898217237">請確保此裝置已連接互聯網。</translation>
diff --git a/ui/strings/translations/ui_strings_zh-TW.xtb b/ui/strings/translations/ui_strings_zh-TW.xtb index f6409c4..7f87646 100644 --- a/ui/strings/translations/ui_strings_zh-TW.xtb +++ b/ui/strings/translations/ui_strings_zh-TW.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">通知關閉</translation> <translation id="186476001994626254">Web Smart Paste 內容</translation> <translation id="1871244248791675517">Ins</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">選取全部(&A)</translation> <translation id="19085484004813472">這是新功能</translation> <translation id="2006524834898217237">請確認此裝置已連上網際網路。</translation>
diff --git a/ui/strings/translations/ui_strings_zu.xtb b/ui/strings/translations/ui_strings_zu.xtb index db8ffac..a544a887 100644 --- a/ui/strings/translations/ui_strings_zu.xtb +++ b/ui/strings/translations/ui_strings_zu.xtb
@@ -31,7 +31,6 @@ <translation id="1860796786778352021">Ukuvala isaziso</translation> <translation id="186476001994626254">Okuqukethwe kokunamathisela kwe-Web Smart</translation> <translation id="1871244248791675517">Okumaphakathi</translation> -<translation id="1884435127456172652"><ph name="NUMBER" /> %</translation> <translation id="1901303067676059328">Khetha &konke</translation> <translation id="19085484004813472">Lesi yisici esisha</translation> <translation id="2006524834898217237">Yenza isiqinisekiso sokuthi le divayisi ixhunywe ku-inthanethi.</translation>
diff --git a/ui/strings/ui_strings.grd b/ui/strings/ui_strings.grd index 4d1309a..c3651cd 100644 --- a/ui/strings/ui_strings.grd +++ b/ui/strings/ui_strings.grd
@@ -357,6 +357,36 @@ {YEARS, plural, =1 {1 year ago} other {# years ago}} </message> + <message name="IDS_TIME_TITLE_CASE_ELAPSED_LONG_SECS" + desc="Relative time in browsing history or file list, in title case. [ICU Syntax]"> + {SECONDS, plural, =1 {1 Second Ago} other {# Seconds Ago}} + </message> + + <message name="IDS_TIME_TITLE_CASE_ELAPSED_LONG_MINS" + desc="Relative time in browsing history or file list, in title case. [ICU Syntax]"> + {SECONDS, plural, =1 {1 Minute Ago} other {# Minutes Ago}} + </message> + + <message name="IDS_TIME_TITLE_CASE_ELAPSED_HOURS" + desc="Relative time in browsing history or file list, in title case. [ICU Syntax]"> + {HOURS, plural, =1 {1 Hour Ago} other {# Hours Ago}} + </message> + + <message name="IDS_TIME_TITLE_CASE_ELAPSED_DAYS" + desc="Relative time in browsing history or file list, in title case. [ICU Syntax]"> + {DAYS, plural, =1 {1 Day Ago} other {# Days Ago}} + </message> + + <message name="IDS_TIME_TITLE_CASE_ELAPSED_MONTHS" + desc="Relative time in browsing history or file list, in title case. [ICU Syntax]"> + {MONTHS, plural, =1 {1 Month Ago} other {# Months Ago}} + </message> + + <message name="IDS_TIME_TITLE_CASE_ELAPSED_YEARS" + desc="Relative time in browsing history or file list, in title case. [ICU Syntax]"> + {YEARS, plural, =1 {1 Year Ago} other {# Years Ago}} + </message> + <message name="IDS_PAST_TIME_TODAY" desc="Relative day today"> Today </message>
diff --git a/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_DAYS.png.sha1 b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_DAYS.png.sha1 new file mode 100644 index 0000000..f6796508c --- /dev/null +++ b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_DAYS.png.sha1
@@ -0,0 +1 @@ +d20bb9bc7bdd3509b50ab84ecf9a9f5216bbaf4f \ No newline at end of file
diff --git a/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_HOURS.png.sha1 b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_HOURS.png.sha1 new file mode 100644 index 0000000..6ed9dc8 --- /dev/null +++ b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_HOURS.png.sha1
@@ -0,0 +1 @@ +763be7ecfcd1513c4917dd7654dd15d5635cee00 \ No newline at end of file
diff --git a/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_LONG_MINS.png.sha1 b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_LONG_MINS.png.sha1 new file mode 100644 index 0000000..ede696369 --- /dev/null +++ b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_LONG_MINS.png.sha1
@@ -0,0 +1 @@ +9d7ff4d37cc224d8770de6335f71aa32b796de89 \ No newline at end of file
diff --git a/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_LONG_SECS.png.sha1 b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_LONG_SECS.png.sha1 new file mode 100644 index 0000000..2dc7f5ae --- /dev/null +++ b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_LONG_SECS.png.sha1
@@ -0,0 +1 @@ +ab37f0fdebed05f7e8e86115bc42523fc6f1e464 \ No newline at end of file
diff --git a/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_MONTHS.png.sha1 b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_MONTHS.png.sha1 new file mode 100644 index 0000000..e8fac26 --- /dev/null +++ b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_MONTHS.png.sha1
@@ -0,0 +1 @@ +16f9f525b85802645860d90b52602ceb9900214f \ No newline at end of file
diff --git a/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_YEARS.png.sha1 b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_YEARS.png.sha1 new file mode 100644 index 0000000..156fde30 --- /dev/null +++ b/ui/strings/ui_strings_grd/IDS_TIME_TITLE_CASE_ELAPSED_YEARS.png.sha1
@@ -0,0 +1 @@ +024b3786818e97bc7c2cf4cb9d698f3b3b70fab8 \ No newline at end of file
diff --git a/ui/views/controls/menu/menu_config.cc b/ui/views/controls/menu/menu_config.cc index e08b8e9..69376367 100644 --- a/ui/views/controls/menu/menu_config.cc +++ b/ui/views/controls/menu/menu_config.cc
@@ -5,6 +5,7 @@ #include "ui/views/controls/menu/menu_config.h" #include "base/no_destructor.h" +#include "ui/base/ui_base_features.h" #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/controls/menu/menu_item_view.h" @@ -12,6 +13,7 @@ MenuConfig::MenuConfig() { Init(); + InitCR2023(); } MenuConfig::~MenuConfig() = default; @@ -44,6 +46,18 @@ return true; } +void MenuConfig::InitCR2023() { + if (!features::IsChromeRefresh2023()) { + return; + } + // CR2023 menu metrics + separator_height = 17; + separator_left_margin = 12; + separator_right_margin = 12; + item_top_margin = 6; + item_bottom_margin = 6; +} + // static const MenuConfig& MenuConfig::instance() { static base::NoDestructor<MenuConfig> instance;
diff --git a/ui/views/controls/menu/menu_config.h b/ui/views/controls/menu/menu_config.h index 78ad0fb0..1820cc5 100644 --- a/ui/views/controls/menu/menu_config.h +++ b/ui/views/controls/menu/menu_config.h
@@ -40,6 +40,9 @@ bool ShouldShowAcceleratorText(const MenuItemView* item_view, std::u16string* text) const; + // Initialize menu config for CR2023 + void InitCR2023(); + // Font list used by menus. gfx::FontList font_list; @@ -116,6 +119,10 @@ // Thickness of the drawn separator line in pixels for double separator. int double_separator_thickness = 2; + // Left & right separator padding + int separator_left_margin = 0; + int separator_right_margin = 0; + // Are mnemonics shown? bool show_mnemonics = false; @@ -199,8 +206,9 @@ // Vertical padding for touchable menus. int vertical_touchable_menu_item_padding = 8; - // Left margin of padded separator (ui::PADDED_SEPARATOR). + // Left & right margin of padded separator (ui::PADDED_SEPARATOR). int padded_separator_left_margin = 64; + int padded_separator_right_margin = 0; // Whether arrow keys should wrap around the end of the menu when selecting. bool arrow_key_selection_wraps = true;
diff --git a/ui/views/controls/menu/menu_separator.cc b/ui/views/controls/menu/menu_separator.cc index 8d73681..6a895c94 100644 --- a/ui/views/controls/menu/menu_separator.cc +++ b/ui/views/controls/menu/menu_separator.cc
@@ -43,11 +43,18 @@ } gfx::Rect paint_rect(0, pos, width(), separator_thickness); - if (type_ == ui::PADDED_SEPARATOR) + if (type_ == ui::PADDED_SEPARATOR) { paint_rect.Inset( - gfx::Insets::TLBR(0, menu_config.padded_separator_left_margin, 0, 0)); - else if (menu_config.use_outer_border) + gfx::Insets::TLBR(0, menu_config.padded_separator_left_margin, 0, + menu_config.padded_separator_right_margin)); + } else { + paint_rect.Inset(gfx::Insets::TLBR(0, menu_config.separator_left_margin, 0, + menu_config.separator_right_margin)); + } + + if (menu_config.use_outer_border && type_ != ui::PADDED_SEPARATOR) { paint_rect.Inset(gfx::Insets::VH(0, 1)); + } #if BUILDFLAG(IS_WIN) // Hack to get the separator to display correctly on Windows where we may
diff --git a/weblayer/browser/android/javatests/BUILD.gn b/weblayer/browser/android/javatests/BUILD.gn index 0f30b73..d857addd 100644 --- a/weblayer/browser/android/javatests/BUILD.gn +++ b/weblayer/browser/android/javatests/BUILD.gn
@@ -12,6 +12,7 @@ "src/org/chromium/webengine/test/CookieManagerTest.java", "src/org/chromium/webengine/test/ExecuteScriptTest.java", "src/org/chromium/webengine/test/ExternalIntentsTest.java", + "src/org/chromium/webengine/test/FaviconTest.java", "src/org/chromium/webengine/test/FullscreenCallbackTest.java", "src/org/chromium/webengine/test/PostMessageTest.java", "src/org/chromium/webengine/test/StatePersistenceTest.java",
diff --git a/weblayer/browser/android/javatests/src/org/chromium/webengine/test/FaviconTest.java b/weblayer/browser/android/javatests/src/org/chromium/webengine/test/FaviconTest.java new file mode 100644 index 0000000..dd65becd9 --- /dev/null +++ b/weblayer/browser/android/javatests/src/org/chromium/webengine/test/FaviconTest.java
@@ -0,0 +1,163 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.webengine.test; + +import static org.chromium.content_public.browser.test.util.TestThreadUtils.runOnUiThreadBlocking; + +import android.graphics.Bitmap; +import android.graphics.Color; + +import androidx.test.filters.MediumTest; +import androidx.test.filters.SmallTest; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.base.test.util.DoNotBatch; +import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.net.test.EmbeddedTestServerRule; +import org.chromium.webengine.Tab; +import org.chromium.webengine.TabObserver; +import org.chromium.webengine.WebEngine; +import org.chromium.webengine.WebSandbox; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/** + * Tests that a tab's favicon is returned. + */ +@DoNotBatch(reason = "Tests need separate Activities and WebFragments") +@RunWith(WebEngineJUnit4ClassRunner.class) +public class FaviconTest { + @Rule + public EmbeddedTestServerRule mTestServerRule = new EmbeddedTestServerRule(); + + @Rule + public InstrumentationActivityTestRule mActivityTestRule = + new InstrumentationActivityTestRule(); + + private EmbeddedTestServer mServer; + private Tab mTab; + + private String getTestDataURL(String path) { + return mServer.getURL("/weblayer/test/data/" + path); + } + + @Before + public void setUp() throws Exception { + mActivityTestRule.launchShell(); + mServer = mTestServerRule.getServer(); + WebSandbox sandbox = mActivityTestRule.getWebSandbox(); + WebEngine webEngine = runOnUiThreadBlocking(() -> sandbox.createWebEngine()).get(); + + mTab = webEngine.getTabManager().getActiveTab(); + } + + @After + public void tearDown() { + mActivityTestRule.finish(); + } + + private static final class ResultHolder { + public Bitmap mResult; + } + + private Bitmap waitForFaviconChange() throws Exception { + final ResultHolder holder = new ResultHolder(); + CountDownLatch faviconLatch = new CountDownLatch(1); + TabObserver observer = new TabObserver() { + @Override + public void onFaviconChanged(Tab tab, Bitmap favicon) { + holder.mResult = favicon; + faviconLatch.countDown(); + } + }; + runOnUiThreadBlocking(() -> mTab.registerTabObserver(observer)); + + faviconLatch.await(10, TimeUnit.SECONDS); + + runOnUiThreadBlocking(() -> mTab.unregisterTabObserver(observer)); + return holder.mResult; + } + + private void verifyFavicon(Bitmap favicon) { + Assert.assertNotNull(favicon); + Assert.assertEquals(favicon.getHeight(), 16); + Assert.assertEquals(favicon.getWidth(), 16); + Assert.assertEquals(favicon.getPixel(0, 0), Color.rgb(0, 72, 255)); + } + + @Test + @SmallTest + public void checkFaviconIsExposed() throws Exception { + runOnUiThreadBlocking(() + -> mTab.getNavigationController().navigate( + getTestDataURL("simple_page_with_favicon.html"))); + Bitmap favicon = waitForFaviconChange(); + verifyFavicon(favicon); + } + + @Test + @SmallTest + public void checkDelayedFaviconsAreDelivered() throws Exception { + runOnUiThreadBlocking(() + -> mTab.getNavigationController().navigate(getTestDataURL( + "simple_page_with_delayed_favicon.html"))); + + Bitmap favicon = waitForFaviconChange(); + Assert.assertNull(favicon); + + // The page dynamically creates a favicon after receiving a post message. + runOnUiThreadBlocking(() -> mTab.postMessage("message", "*")); + favicon = waitForFaviconChange(); + verifyFavicon(favicon); + } + + @Test + @MediumTest + public void checkFaviconsCanBeDeleted() throws Exception { + runOnUiThreadBlocking(() + -> mTab.getNavigationController().navigate(getTestDataURL( + "simple_page_with_deleted_favicon.html"))); + + Bitmap favicon = waitForFaviconChange(); + verifyFavicon(favicon); + + // Favicon eventually gets deleted. + favicon = waitForFaviconChange(); + Assert.assertNull(favicon); + } + + @Test + @SmallTest + public void pageWithNoFaviconDeliversEvent() throws Exception { + runOnUiThreadBlocking( + () -> mTab.getNavigationController().navigate(getTestDataURL("simple_page.html"))); + + Bitmap favicon = waitForFaviconChange(); + Assert.assertNull(favicon); + } + + @Test + @SmallTest + public void multipleNavigationsDelieverEvents() throws Exception { + runOnUiThreadBlocking(() + -> mTab.getNavigationController().navigate( + getTestDataURL("simple_page_with_favicon.html"))); + + Bitmap favicon = waitForFaviconChange(); + verifyFavicon(favicon); + + runOnUiThreadBlocking( + () -> mTab.getNavigationController().navigate(getTestDataURL("simple_page.html"))); + favicon = waitForFaviconChange(); + Assert.assertNull(favicon); + } +}
diff --git a/weblayer/browser/favicon/favicon_fetcher_browsertest.cc b/weblayer/browser/favicon/favicon_fetcher_browsertest.cc index 3e60674..5f4919f 100644 --- a/weblayer/browser/favicon/favicon_fetcher_browsertest.cc +++ b/weblayer/browser/favicon/favicon_fetcher_browsertest.cc
@@ -114,24 +114,18 @@ content::WebContents* web_contents = static_cast<TabImpl*>(shell()->tab())->web_contents(); - // Initially there should be no driver (because favicons haven't been - // requested). - EXPECT_EQ(nullptr, - favicon::ContentFaviconDriver::FromWebContents(web_contents)); + // Drivers are immediately created for every tab. + auto* favicon_driver = + favicon::ContentFaviconDriver::FromWebContents(web_contents); + EXPECT_NE(nullptr, favicon_driver); // Request a fetcher, which should trigger creating ContentFaviconDriver. TestFaviconFetcherDelegate fetcher_delegate; auto fetcher = shell()->tab()->CreateFaviconFetcher(&fetcher_delegate); - EXPECT_NE(nullptr, + // Check that the driver has not changed. + EXPECT_EQ(favicon_driver, favicon::ContentFaviconDriver::FromWebContents(web_contents)); - // Destroy the fetcher, which should destroy ContentFaviconDriver. - fetcher.reset(); - EXPECT_EQ(nullptr, - favicon::ContentFaviconDriver::FromWebContents(web_contents)); - - // One more time, and this time navigate. - fetcher = shell()->tab()->CreateFaviconFetcher(&fetcher_delegate); NavigateAndWaitForCompletion( embedded_test_server()->GetURL("/simple_page_with_favicon.html"), shell());
diff --git a/weblayer/browser/safe_browsing/weblayer_ping_manager_factory.cc b/weblayer/browser/safe_browsing/weblayer_ping_manager_factory.cc index 7662589..094ee510af 100644 --- a/weblayer/browser/safe_browsing/weblayer_ping_manager_factory.cc +++ b/weblayer/browser/safe_browsing/weblayer_ping_manager_factory.cc
@@ -9,7 +9,7 @@ #include "components/safe_browsing/content/browser/web_ui/safe_browsing_ui.h" #include "components/safe_browsing/core/browser/ping_manager.h" #include "components/safe_browsing/core/common/features.h" -#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" #include "weblayer/browser/browser_context_impl.h" #include "weblayer/browser/browser_process.h" #include "weblayer/browser/profile_impl.h"
diff --git a/weblayer/public/java/org/chromium/webengine/TabObserver.java b/weblayer/public/java/org/chromium/webengine/TabObserver.java index 430d4cf0..9d4aaaa2 100644 --- a/weblayer/public/java/org/chromium/webengine/TabObserver.java +++ b/weblayer/public/java/org/chromium/webengine/TabObserver.java
@@ -4,7 +4,10 @@ package org.chromium.webengine; +import android.graphics.Bitmap; + import androidx.annotation.NonNull; +import androidx.annotation.Nullable; /** * An interface for observing changes to a Tab. @@ -28,6 +31,13 @@ public default void onTitleUpdated(Tab tab, @NonNull String title) {} /** + * + * @param tab the tab associated with this event. + * @param favicon The favicon associated with the Tab. null if there is no favicon. + */ + public default void onFaviconChanged(Tab tab, @Nullable Bitmap favicon) {} + + /** * Triggered when the render process dies, either due to crash or killed by the system to * reclaim memory. *
diff --git a/weblayer/public/java/org/chromium/webengine/TabObserverDelegate.java b/weblayer/public/java/org/chromium/webengine/TabObserverDelegate.java index 97081bc..9430ffa7 100644 --- a/weblayer/public/java/org/chromium/webengine/TabObserverDelegate.java +++ b/weblayer/public/java/org/chromium/webengine/TabObserverDelegate.java
@@ -4,6 +4,7 @@ package org.chromium.webengine; +import android.graphics.Bitmap; import android.net.Uri; import android.os.Handler; import android.os.Looper; @@ -75,4 +76,13 @@ } }); } + + @Override + public void notifyFaviconChanged(Bitmap favicon) { + mHandler.post(() -> { + for (TabObserver observer : mTabObservers) { + observer.onFaviconChanged(mTab, favicon); + } + }); + } } \ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/webengine/interfaces/ITabObserverDelegate.aidl b/weblayer/public/java/org/chromium/webengine/interfaces/ITabObserverDelegate.aidl index 1a32804b..2aeeebf 100644 --- a/weblayer/public/java/org/chromium/webengine/interfaces/ITabObserverDelegate.aidl +++ b/weblayer/public/java/org/chromium/webengine/interfaces/ITabObserverDelegate.aidl
@@ -4,10 +4,13 @@ package org.chromium.webengine.interfaces; +import android.graphics.Bitmap; + import org.chromium.webengine.interfaces.ITabParams; oneway interface ITabObserverDelegate { - void notifyTitleUpdated(String title) = 1; - void notifyVisibleUriChanged(String uri) = 2; + void notifyTitleUpdated(in String title) = 1; + void notifyVisibleUriChanged(in String uri) = 2; void notifyRenderProcessGone() = 3; + void notifyFaviconChanged(in Bitmap favicon) = 4; } \ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/weblayer/TabProxy.java b/weblayer/public/java/org/chromium/weblayer/TabProxy.java index 99188754..4a337d2c4 100644 --- a/weblayer/public/java/org/chromium/weblayer/TabProxy.java +++ b/weblayer/public/java/org/chromium/weblayer/TabProxy.java
@@ -4,6 +4,7 @@ package org.chromium.weblayer; +import android.graphics.Bitmap; import android.os.Handler; import android.os.Looper; import android.os.RemoteException; @@ -34,6 +35,7 @@ new WebFragmentNavigationDelegate(); private FullscreenCallbackDelegate mFullscreenCallbackDelegate = new FullscreenCallbackDelegate(); + private FaviconFetcher mFaviconFetcher; // Only use one callback for all the message event listeners. This is to avoid sending the same // message over multiple times. The message can then be proxied to all valid listeners. @@ -48,6 +50,12 @@ tab.registerTabCallback(mTabObserverDelegate); tab.setFullscreenCallback(mFullscreenCallbackDelegate); + mFaviconFetcher = tab.createFaviconFetcher(new FaviconCallback() { + @Override + public void onFaviconChanged(Bitmap favicon) { + mTabObserverDelegate.notifyFaviconChanged(favicon); + } + }); } void invalidate() { @@ -56,6 +64,8 @@ mTabObserverDelegate = null; mNavigationObserverDelegate = null; + mFaviconFetcher.destroy(); + mFaviconFetcher = null; } boolean isValid() {
diff --git a/weblayer/public/java/org/chromium/weblayer/WebFragmentTabDelegate.java b/weblayer/public/java/org/chromium/weblayer/WebFragmentTabDelegate.java index 944e14616..9e69cdd 100644 --- a/weblayer/public/java/org/chromium/weblayer/WebFragmentTabDelegate.java +++ b/weblayer/public/java/org/chromium/weblayer/WebFragmentTabDelegate.java
@@ -4,10 +4,12 @@ package org.chromium.weblayer; +import android.graphics.Bitmap; import android.net.Uri; import android.os.RemoteException; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.chromium.webengine.interfaces.ITabObserverDelegate; @@ -37,6 +39,10 @@ maybeRunOnTabObserver(observer -> { observer.notifyTitleUpdated(title); }); } + void notifyFaviconChanged(@Nullable Bitmap favicon) { + maybeRunOnTabObserver(observer -> { observer.notifyFaviconChanged(favicon); }); + } + private interface OnTabObserverCallback { void run(ITabObserverDelegate tabObserver) throws RemoteException; }
diff --git a/weblayer/shell/android/webengine_shell_apk/src/org/chromium/webengine/shell/DefaultObservers.java b/weblayer/shell/android/webengine_shell_apk/src/org/chromium/webengine/shell/DefaultObservers.java index c9683728..10c1d97 100644 --- a/weblayer/shell/android/webengine_shell_apk/src/org/chromium/webengine/shell/DefaultObservers.java +++ b/weblayer/shell/android/webengine_shell_apk/src/org/chromium/webengine/shell/DefaultObservers.java
@@ -4,6 +4,8 @@ package org.chromium.webengine.shell; +import android.graphics.Bitmap; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -38,6 +40,13 @@ Log.i(TAG, this + "received Tab Event: 'onRenderProcessGone()'"); } + @Override + public void onFaviconChanged(@NonNull Tab tab, @Nullable Bitmap favicon) { + Log.i(TAG, + this + "received Tab Event: 'onFaviconChanged(" + + (favicon == null ? "null" : favicon.toString()) + ")'"); + } + // NavigationObserver implementation. @Override
diff --git a/weblayer/test/data/simple_page_with_delayed_favicon.html b/weblayer/test/data/simple_page_with_delayed_favicon.html new file mode 100644 index 0000000..ef04aae --- /dev/null +++ b/weblayer/test/data/simple_page_with_delayed_favicon.html
@@ -0,0 +1,19 @@ +<html> + <head> + <title>OK</title> + </head> +<body> +Basic html test. +</body> +<script> +function createFavicon() { + const link = document.createElement('link'); + link.rel = 'icon'; + link.href = 'favicon.png'; + document.head.appendChild(link); +} +window.addEventListener('message', () => { + createFavicon(); +}); +</script> +</html>
diff --git a/weblayer/test/data/simple_page_with_deleted_favicon.html b/weblayer/test/data/simple_page_with_deleted_favicon.html new file mode 100644 index 0000000..542daacd --- /dev/null +++ b/weblayer/test/data/simple_page_with_deleted_favicon.html
@@ -0,0 +1,15 @@ +<html> + <head> + <title>OK</title> + <link rel="icon" id="fi" type="image/png" href="favicon.png"/> + </head> +<body> +Basic html test. +</body> +<script> +setTimeout(() => { + const link = document.getElementById('fi'); + document.head.removeChild(link); +}, 5000); +</script> +</html>